Commit 6f2271d2 authored by Dag Sverre Seljebotn's avatar Dag Sverre Seljebotn

More hacks for numpy 1.7: Check for Includes/numpy.pxd

parent d96dfdbb
...@@ -34,6 +34,8 @@ import Symtab ...@@ -34,6 +34,8 @@ import Symtab
import Options import Options
from Cython import Utils from Cython import Utils
from Annotate import AnnotationItem from Annotate import AnnotationItem
from NumpySupport import numpy_transform_attribute_node, \
should_apply_numpy_hack
from Cython.Debugging import print_call_chain from Cython.Debugging import print_call_chain
from DebugFlags import debug_disposal_code, debug_temp_alloc, \ from DebugFlags import debug_disposal_code, debug_temp_alloc, \
...@@ -4455,10 +4457,8 @@ class AttributeNode(ExprNode): ...@@ -4455,10 +4457,8 @@ class AttributeNode(ExprNode):
# attribute. # attribute.
pass pass
# NumPy hack # NumPy hack
if (getattr(self.obj, 'type', None) and if (getattr(self.obj, 'type', None) and obj_type.is_extension_type
obj_type.is_extension_type and and should_apply_numpy_hack(obj_type)):
obj_type.objstruct_cname == 'PyArrayObject'):
from NumpySupport import numpy_transform_attribute_node
replacement_node = numpy_transform_attribute_node(self) replacement_node = numpy_transform_attribute_node(self)
# Since we can't actually replace our node yet, we only grasp its # Since we can't actually replace our node yet, we only grasp its
# type, and then the replacement happens in # type, and then the replacement happens in
...@@ -4466,7 +4466,6 @@ class AttributeNode(ExprNode): ...@@ -4466,7 +4466,6 @@ class AttributeNode(ExprNode):
self.type = replacement_node.type self.type = replacement_node.type
if replacement_node is not self: if replacement_node is not self:
return return
# If we get here, the base object is not a struct/union/extension # If we get here, the base object is not a struct/union/extension
# type, or it is an extension type and the attribute is either not # type, or it is an extension type and the attribute is either not
# declared or is declared as a Python method. Treat it as a Python # declared or is declared as a Python method. Treat it as a Python
......
...@@ -24,6 +24,10 @@ module_name_pattern = re.compile(r"[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_ ...@@ -24,6 +24,10 @@ module_name_pattern = re.compile(r"[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_
verbose = 0 verbose = 0
standard_include_path = os.path.abspath(os.path.normpath(
os.path.join(os.path.dirname(__file__), os.path.pardir, 'Includes')))
class CompilationData(object): class CompilationData(object):
# Bundles the information that is passed from transform to transform. # Bundles the information that is passed from transform to transform.
# (For now, this is only) # (For now, this is only)
...@@ -70,8 +74,6 @@ class Context(object): ...@@ -70,8 +74,6 @@ class Context(object):
self.pxds = {} # full name -> node tree self.pxds = {} # full name -> node tree
standard_include_path = os.path.abspath(os.path.normpath(
os.path.join(os.path.dirname(__file__), os.path.pardir, 'Includes')))
self.include_directories = include_directories + [standard_include_path] self.include_directories = include_directories + [standard_include_path]
self.set_language_level(language_level) self.set_language_level(language_level)
......
...@@ -2,13 +2,24 @@ ...@@ -2,13 +2,24 @@
# the NumPy ABI changed so that the shape, ndim, strides, etc. fields were # the NumPy ABI changed so that the shape, ndim, strides, etc. fields were
# no longer available, however the use of these were so entrenched in # no longer available, however the use of these were so entrenched in
# Cython codes # Cython codes
import os
import PyrexTypes
import ExprNodes
from StringEncoding import EncodedString from StringEncoding import EncodedString
def should_apply_numpy_hack(obj_type):
if not obj_type.is_extension_type or obj_type.objstruct_cname != 'PyArrayObject':
return False
from Scanning import FileSourceDescriptor
from Main import standard_include_path
type_source = obj_type.pos[0]
if isinstance(type_source, FileSourceDescriptor):
type_source_path = os.path.abspath(os.path.normpath(type_source.filename))
return type_source_path == os.path.join(standard_include_path, 'numpy.pxd')
else:
return False
def numpy_transform_attribute_node(node): def numpy_transform_attribute_node(node):
import PyrexTypes
import ExprNodes
assert isinstance(node, ExprNodes.AttributeNode) assert isinstance(node, ExprNodes.AttributeNode)
if node.obj.type.objstruct_cname != 'PyArrayObject': if node.obj.type.objstruct_cname != 'PyArrayObject':
......
...@@ -18,7 +18,8 @@ from Cython.Compiler.TreeFragment import TreeFragment ...@@ -18,7 +18,8 @@ from Cython.Compiler.TreeFragment import TreeFragment
from Cython.Compiler.StringEncoding import EncodedString from Cython.Compiler.StringEncoding import EncodedString
from Cython.Compiler.Errors import error, warning, CompileError, InternalError from Cython.Compiler.Errors import error, warning, CompileError, InternalError
from Cython.Compiler.Code import UtilityCode from Cython.Compiler.Code import UtilityCode
from Cython.Compiler.NumpySupport import (should_apply_numpy_hack,
numpy_transform_attribute_node)
import copy import copy
...@@ -1797,8 +1798,7 @@ class AnalyseExpressionsTransform(CythonTransform): ...@@ -1797,8 +1798,7 @@ class AnalyseExpressionsTransform(CythonTransform):
#print node.dump() #print node.dump()
#return node #return node
type = node.obj.type type = node.obj.type
if type.is_extension_type and type.objstruct_cname == 'PyArrayObject': if type.is_extension_type and should_apply_numpy_hack(type):
from NumpySupport import numpy_transform_attribute_node
node = numpy_transform_attribute_node(node) node = numpy_transform_attribute_node(node)
self.visitchildren(node) self.visitchildren(node)
......
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