Robert Bradshaw wrote: > > On Aug 4, 2008, at 11:36 PM, Dag Sverre Seljebotn wrote: > >> Robert Bradshaw wrote: >>> On Aug 3, 2008, at 12:44 PM, Dag Sverre Seljebotn wrote: >>> >>>> In numpy.pxd I want to have this: >>>> >>>> ctypedef npy_int64 int64 >>>> >>>> and be able to use it like this (this is what a NumPy user would >>>> expect >>>> to do): >>>> >>>> cimport numpy >>>> cdef numpy.ndarray[numpy.int64, 2] = numpy.zeros([10, 10], >>>> numpy.int64) >>> >>> Yes. >>> >>>> This however creates an error: >>>> 'int64' is not a constant, variable or function identifier >>>> >>>> since int64 is declared as a type in the scope. >>> >>> Where is this error being thrown from? Perhaps it could/should be >>> checked after the buffer transforms? >> >> The problem is that once numpy.int64 is declared as a ctypedef, it >> is not >> longer available to be called at runtime as a python object, so you >> cannot >> get the reference to pass to numpy.zeros. >> >> To be clear, in numpy.pxd it says >> >> cdef extern ... : ctypedef int npy_int64 >> ctypedef npy_int64 int64 >> >> while some consequence of numpy/__init__.py deep down somewhere is >> assigning something to the int64 attribute of the numpy module. >> >> (This has nothing to do with buffers.) >> >> One solution is requiring people to do "cimport c_numpy", but I'd >> like to >> avoid that as well. Unless this is resolved (on a language design >> level, >> technically it as too many solutions...), I need to figure out a >> way to >> mangle the names without loosing usability too much... > > OK, I completely missed the point of what you were trying to do last > time (I blame bad linewrapping in the numpy.zeros function ;-). > > What if, when you wrote > > ctypedef npy_int64 int64 > > it would do a check to see if int64 was already defined (as a normal > variable) and if so would attach that information to the type (same > as with extension types that have a dual nature). When used in a > variable context it would extract this information
1) But you do not know if int64 is already defined until run-time? 2) How would this act differently from what I proposed? (Well, it only acts on typedefs...) What I am asking here is not how to implement it (I'll have a look at the source before asking that), but how the language should behave. Is this wanted behaviour, or is ctypedef int x x = 3 cdef x v = x too scary? (Which seems to be a consequence of your proposal as well, if it is not the same as mine.) Dag Sverre _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
