On Sat, Apr 30, 2011 at 12:51 AM, Dag Sverre Seljebotn <d.s.seljeb...@astro.uio.no> wrote: > On 04/30/2011 08:39 AM, Robert Bradshaw wrote: >> >> On Fri, Apr 29, 2011 at 3:53 AM, mark florisson >> <markflorisso...@gmail.com> wrote: >>> >>> On 29 April 2011 12:28, Pauli Virtanen<p...@iki.fi> wrote: >>>> >>>> No, just that real_t is specialized to float whenever struct_t is >>>> specialized >>>> to A and to double when B. Or a more realistic example, >>>> >>>> ctypedef cython.fused_type(float, double) real_t >>>> ctypedef cython.fused_type(float complex, double complex) >>>> complex_t >>>> >>>> cdef real_plus_one(complex_t a): >>>> real_t b = a.real >>>> return b + 1 >>>> >>>> which I suppose would not be a very unusual thing in numerical codes. >>>> This would also allow writing the case you had earlier as >>>> >>>> cdef cython.fused_type(string_t, int, paired=struct_t) attr_t >>>> >>>> cdef func(struct_t mystruct, int i): >>>> cdef attr_t var >>>> >>>> if typeof(mystruct) is typeof(int): >>>> var = mystruct.attrib + i >>>> ... >>>> else: >>>> var = mystruct.attrib + i >>>> ... >>>> >>>> Things would need to be done explicitly instead of implicitly, though, >>>> but it would remove the need for any special handling of >>>> the "complex" keyword. >> >> If we're going to introduce pairing, another option would be >> >> ctypedef fused_type((double complex, double), (float complex, >> float)) (complex_t, real_t) >> >> though I'm not sure I like that either. We're not trying to create the >> all-powerful templating system here, and anything that can be done >> with pairing can be done (though less elegantly) via branching on the >> types, or, as Pauli mentions, using a wider type is often (but not >> always) a viable option. > > Keeping the right balance is difficult. But, at least there's some cases of > needing this in various codebases when interfacing with LAPACK. > > Most uses of templating with Cython code I've seen so far does a similar > kind of "zip" as what you have above (as we discussed on the workshop). So > at least the usage pattern you write above is very common. > > float32 is not about to disappear, it really is twice as fast when you're > memory IO bound. > > Using a wider type is actually quite often not possible; any time the type > is involved as the base type of an array it is not possible, and that's a > pretty common case. (With LAPACK you take the address of the variable and > pass it to Fortran, so using a wider type is not possible there either, > although I'll agree that's a more remote case.) > > My proposal: Don't support either "real_t complex" or paired fused types for > the time being. Then see.
+1, then we can address real need. > But my vote is for paired fused types instead of "real_t complex". > > Dag Sverre > _______________________________________________ > cython-devel mailing list > cython-devel@python.org > http://mail.python.org/mailman/listinfo/cython-devel > _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel