Commit 8c77b8e4 authored by Dr.李's avatar Dr.李

sorry... I have to revert back some code to depend on cython

parent e9d233d4
# -*- coding: utf-8 -*-
# distutils: language = c++
"""
Created on 2017-4-25
@author: cheng.li
"""
import numpy as np
cimport numpy as np
cimport cython
from libcpp.vector cimport vector as cpp_vector
from libcpp.unordered_map cimport unordered_map as cpp_map
from cython.operator cimport dereference as deref
ctypedef long long int64_t
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.initializedcheck(False)
cpdef groupby(long[:] groups):
cdef long long length = groups.shape[0]
cdef cpp_map[long, cpp_vector[int64_t]] group_ids
cdef long long i
cdef long curr_tag
cdef cpp_map[long, cpp_vector[int64_t]].iterator it
cdef np.ndarray[long long, ndim=1] npy_array
for i in range(length):
curr_tag = groups[i]
it = group_ids.find(curr_tag)
if it == group_ids.end():
group_ids[curr_tag] = [i]
else:
deref(it).second.push_back(i)
return [np.array(v) for v in group_ids.values()]
\ No newline at end of file
...@@ -12,7 +12,7 @@ from numpy.linalg import solve ...@@ -12,7 +12,7 @@ from numpy.linalg import solve
from typing import Tuple from typing import Tuple
from typing import Union from typing import Union
from typing import Dict from typing import Dict
from alphamind.utilities import groupby from alphamind.cyimpl import groupby
def neutralize(x: np.ndarray, y: np.ndarray, groups: np.ndarray=None, output_explained=False, output_exposure=False) \ def neutralize(x: np.ndarray, y: np.ndarray, groups: np.ndarray=None, output_explained=False, output_exposure=False) \
......
...@@ -9,7 +9,7 @@ import numpy as np ...@@ -9,7 +9,7 @@ import numpy as np
import numba as nb import numba as nb
from numpy import zeros from numpy import zeros
from numpy import zeros_like from numpy import zeros_like
from alphamind.utilities import groupby from alphamind.cyimpl import groupby
@nb.njit(nogil=True, cache=True) @nb.njit(nogil=True, cache=True)
......
...@@ -52,21 +52,6 @@ class TestRunner(object): ...@@ -52,21 +52,6 @@ class TestRunner(object):
sys.exit(0) sys.exit(0)
def groupby(groups: np.ndarray) -> List[np.ndarray]:
order_group_idx = groups.argsort()
counts = np.bincount(groups)
nonzero_idx = counts.nonzero()[0]
start = 0
res = []
for i in nonzero_idx:
num_g = counts[i]
res.append(order_group_idx[start:start+num_g])
start += num_g
return res
@nb.njit(nogil=True, cache=True) @nb.njit(nogil=True, cache=True)
def group_mapping(groups: np.ndarray) -> np.ndarray: def group_mapping(groups: np.ndarray) -> np.ndarray:
length = groups.shape[0] length = groups.shape[0]
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Created on 2017-4-25 Created on 2017-4-25
@author: cheng.li @author: cheng.li
""" """
import platform
import sys
from setuptools import setup from setuptools import setup
from setuptools import find_packages from setuptools import find_packages
from distutils.extension import Extension
import numpy as np
import Cython
from Cython.Build import cythonize
Cython.Compiler.Options.annotate = True
VERSION = "0.1.0" VERSION = "0.1.0"
if "--line_trace" in sys.argv:
line_trace = True
print("Build with line trace enabled ...")
sys.argv.remove("--line_trace")
else:
line_trace = False
ext_modules = ['alphamind/cyimpl.pyx']
def generate_extensions(ext_modules, line_trace=False):
extensions = []
if line_trace:
print("define cython trace to True ...")
define_macros = [('CYTHON_TRACE', 1), ('CYTHON_TRACE_NOGIL', 1)]
else:
define_macros = []
if platform.system() != "Windows":
extra_compile_args = ['-O3', '-std=c++11']
else:
extra_compile_args = ['/Ox']
for pyxfile in ext_modules:
ext = Extension(name='.'.join(pyxfile.split('/'))[:-4],
sources=[pyxfile],
define_macros=define_macros,
extra_compile_args=extra_compile_args)
extensions.append(ext)
return extensions
if platform.system() != "Windows":
import multiprocessing
n_cpu = multiprocessing.cpu_count()
else:
n_cpu = 0
ext_modules_settings = cythonize(generate_extensions(ext_modules, line_trace),
compiler_directives={'embedsignature': True, 'linetrace': line_trace},
nthreads=n_cpu)
setup( setup(
name='Alpha-Mind', name='Alpha-Mind',
version=VERSION, version=VERSION,
...@@ -19,5 +60,7 @@ setup( ...@@ -19,5 +60,7 @@ setup(
license='', license='',
author='wegamekinglc', author='wegamekinglc',
author_email='', author_email='',
ext_modules=ext_modules_settings,
include_dirs=[np.get_include()],
description='' description=''
) )
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment