<html><body>
<p>1 new commit in yt:</p>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/47bf935396cb/">https://bitbucket.org/yt_analysis/yt/commits/47bf935396cb/</a> Changeset:   47bf935396cb Branch:      yt User:        ngoldbaum Date:        2016-04-06 18:25:44+00:00 Summary:     Merged in atmyers/yt (pull request #2091)</p>
<p>Use Cython fused types to avoid duplicating functions for float and double. Affected #:  3 files</p>
<p>diff -r 0157f4cbca3c05129132f83fb1a8ad9d61084b8d -r 47bf935396cbd394791ae4c838d48f3e3a453c92 yt/utilities/lib/mesh_intersection.pyx --- a/yt/utilities/lib/mesh_intersection.pyx +++ b/yt/utilities/lib/mesh_intersection.pyx @@ -21,6 +21,7 @@</p>
<pre>cimport cython
from libc.math cimport fabs, fmin, fmax, sqrt
from yt.utilities.lib.mesh_samplers cimport sample_hex20</pre>
<p>+from vec3_ops cimport dot, subtract, cross, distance</p>
<pre>@cython.boundscheck(False)</pre>
<p>@@ -80,30 +81,6 @@</p>
<pre>@cython.boundscheck(False)
@cython.wraparound(False)
@cython.cdivision(True)</pre>
<p>-cdef float dot(const float* a,</p>
<ul><li><p>const float* b,</p></li>
<li><p>size_t N) nogil:</p></li>
<li><p>cdef int i</p></li>
<li><p>cdef float rv = 0.0</p></li>
<li><p>for i in range(N):</p></li>
<li><p>rv += a[i]*b[i]</p></li>
<li><p>return rv</p></li></ul>
<p>– – -@cython.boundscheck(False) -@cython.wraparound(False) -@cython.cdivision(True) -cdef void cross(const float* a,</p>
<ul><li><p>const float* b,</p></li>
<li><p>float* c) nogil:</p></li>
<li><p>c[0] = a[1]*b[2] – a[2]*b[1]</p></li>
<li><p>c[1] = a[2]*b[0] – a[0]*b[2]</p></li>
<li><p>c[2] = a[0]*b[1] – a[1]*b[0]</p></li></ul>
<p>– – -@cython.boundscheck(False) -@cython.wraparound(False) -@cython.cdivision(True)</p>
<pre>cdef void patchBoundsFunc(Patch* patches,
                          size_t item,
                          rtcg.RTCBounds* bounds_o) nogil:</pre>
<p>@@ -146,7 +123,7 @@</p>
<pre># first we compute the two planes that define the ray.
cdef float[3] n, N1, N2</pre>
<ul><li><p>cdef float A = dot(ray.dir, ray.dir, 3)</p></li></ul>
<p>+    cdef float A = dot(ray.dir, ray.dir)</p>
<pre>    for i in range(3):
        n[i] = ray.dir[i] / A
</pre>
<p>@@ -160,16 +137,16 @@</p>
<pre>        N1[2] =-n[1]
    cross(N1, n, N2)
</pre>
<ul><li><p>cdef float d1 = -dot(N1, ray.org, 3)</p></li>
<li><p>cdef float d2 = -dot(N2, ray.org, 3)</p></li></ul>
<p>+    cdef float d1 = -dot(N1, ray.org) +    cdef float d2 = -dot(N2, ray.org)</p>
<pre># the initial guess is set to zero
cdef float u = 0.0
cdef float v = 0.0
cdef float[3] S
patchSurfaceFunc(patch, u, v, S)</pre>
<ul><li><p>cdef float fu = dot(N1, S, 3) + d1</p></li>
<li><p>cdef float fv = dot(N2, S, 3) + d2</p></li></ul>
<p>+    cdef float fu = dot(N1, S) + d1 +    cdef float fv = dot(N2, S) + d2</p>
<pre>cdef float err = fmax(fabs(fu), fabs(fv))

# begin Newton interation</pre>
<p>@@ -183,10 +160,10 @@</p>
<pre># compute the Jacobian
patchSurfaceDerivU(patch, u, v, Su)
patchSurfaceDerivV(patch, u, v, Sv)</pre>
<ul><li><p>J11 = dot(N1, Su, 3)</p></li>
<li><p>J12 = dot(N1, Sv, 3)</p></li>
<li><p>J21 = dot(N2, Su, 3)</p></li>
<li><p>J22 = dot(N2, Sv, 3)</p></li></ul>
<p>+        J11 = dot(N1, Su) +        J12 = dot(N1, Sv) +        J21 = dot(N2, Su) +        J22 = dot(N2, Sv)</p>
<pre>det = (J11*J22 - J12*J21)

# update the u, v values</pre>
<p>@@ -194,17 +171,14 @@</p>
<pre>v -= (-J21*fu + J11*fv) / det

patchSurfaceFunc(patch, u, v, S)</pre>
<ul><li><p>fu = dot(N1, S, 3) + d1</p></li>
<li><p>fv = dot(N2, S, 3) + d2</p></li></ul>
<p>+        fu = dot(N1, S) + d1 +        fv = dot(N2, S) + d2</p>
<pre>        err = fmax(fabs(fu), fabs(fv))
        iterations += 1

    # t is the distance along the ray to this hit</pre>
<ul><li><p>cdef float t = 0.0</p></li>
<li><p>for i in range(3):</p></li>
<li><p>t += (S[i] – ray.org[i])**2</p></li>
<li><p>t = sqrt(t)</p></li></ul>
<p>+    cdef float t = distance(S, ray.org)</p>
<pre># only count this is it's the closest hit
if (t < ray.tnear or t > ray.Ng[0]):</pre>
<p>diff -r 0157f4cbca3c05129132f83fb1a8ad9d61084b8d -r 47bf935396cbd394791ae4c838d48f3e3a453c92 yt/utilities/lib/pixelization_routines.pyx --- a/yt/utilities/lib/pixelization_routines.pyx +++ b/yt/utilities/lib/pixelization_routines.pyx @@ -20,6 +20,7 @@</p>
<pre>from yt.utilities.lib.fp_utils cimport fmin, fmax, i64min, i64max, imin, imax, fabs
from yt.utilities.exceptions import YTPixelizeError, \
    YTElementTypeNotRecognized</pre>
<p>+from vec3_ops cimport dot, cross, subtract</p>
<pre>from yt.utilities.lib.element_mappings cimport \
    ElementSampler, \
    P1Sampler3D, \</pre>
<p>@@ -520,17 +521,11 @@</p>
<pre>vi2a = faces[n][1][0]
vi2b = faces[n][1][1]
# Shared vertex is vi1a and vi2a</pre>
<ul><li><p>for i in range(3):</p></li>
<li><p>vec1[i] = vertices[vi1b][i] – vertices[vi1a][i]</p></li>
<li><p>vec2[i] = vertices[vi2b][i] – vertices[vi2a][i]</p></li>
<li><p>npoint[i] = point[i] – vertices[vi1b][i]</p></li>
<li><p># Now the cross product of vec1 x vec2</p></li>
<li><p>cp_vec[0] = vec1[1] * vec2[2] – vec1[2] * vec2[1]</p></li>
<li><p>cp_vec[1] = vec1[2] * vec2[0] – vec1[0] * vec2[2]</p></li>
<li><p>cp_vec[2] = vec1[0] * vec2[1] – vec1[1] * vec2[0]</p></li>
<li><p>dp = 0.0</p></li>
<li><p>for j in range(3):</p></li>
<li><p>dp += cp_vec[j] * npoint[j]</p></li></ul>
<p>+        subtract(vertices[vi1b], vertices[vi1a], vec1) +        subtract(vertices[vi2b], vertices[vi2a], vec2) +        subtract(point, vertices[vi1b], npoint) +        cross(vec1, vec2, cp_vec) +        dp = dot(cp_vec, npoint)</p>
<pre>         if match == 0:
if dp < 0:
    signs[n] = -1</pre>
<p>diff -r 0157f4cbca3c05129132f83fb1a8ad9d61084b8d -r 47bf935396cbd394791ae4c838d48f3e3a453c92 yt/utilities/lib/vec3_ops.pxd --- a/yt/utilities/lib/vec3_ops.pxd +++ b/yt/utilities/lib/vec3_ops.pxd @@ -1,22 +1,22 @@</p>
<pre>cimport cython</pre>
<p>-import numpy as np -cimport numpy as np +cimport cython.floating</p>
<pre>from libc.math cimport sqrt
</pre>
<p>+</p>
<pre>@cython.boundscheck(False)
@cython.wraparound(False)
@cython.cdivision(True)</pre>
<p>-cdef inline np.float64_t dot(const np.float64_t a[3],</p>
<ul><li><p>const np.float64_t b[3]) nogil:</p></li></ul>
<p>+cdef inline cython.floating dot(const cython.floating[3] a, +                                const cython.floating[3] b) nogil:</p>
<pre>    return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]


@cython.boundscheck(False)
@cython.wraparound(False)
@cython.cdivision(True)</pre>
<p>-cdef inline void cross(const np.float64_t a[3],</p>
<ul><li><p>const np.float64_t b[3],</p></li>
<li><p>np.float64_t c[3]) nogil:</p></li></ul>
<p>+cdef inline void cross(const cython.floating[3] a, +                       const cython.floating[3] b, +                       cython.floating c[3]) nogil:</p>
<pre>c[0] = a[1]*b[2] - a[2]*b[1]
c[1] = a[2]*b[0] - a[0]*b[2]
c[2] = a[0]*b[1] - a[1]*b[0]</pre>
<p>@@ -25,26 +25,36 @@</p>
<pre>@cython.boundscheck(False)
@cython.wraparound(False)
@cython.cdivision(True)</pre>
<p>-cdef inline void subtract(const np.float64_t a[3],</p>
<ul><li><p>const np.float64_t b[3],</p></li>
<li><p>np.float64_t c[3]) nogil:</p></li></ul>
<p>+cdef inline void subtract(const cython.floating[3] a, +                          const cython.floating[3] b, +                          cython.floating c[3]) nogil:</p>
<pre>    c[0] = a[0] - b[0]
    c[1] = a[1] - b[1]
    c[2] = a[2] - b[2]
</pre>
<p>+</p>
<pre>@cython.boundscheck(False)
@cython.wraparound(False)
@cython.cdivision(True)</pre>
<p>-cdef inline void fma(const np.float64_t f,</p>
<ul><li><p>const np.float64_t a[3],</p></li>
<li><p>const np.float64_t b[3],</p></li>
<li><p>np.float64_t c[3]) nogil:</p></li></ul>
<p>+cdef inline cython.floating distance(const cython.floating[3] a, +                                     const cython.floating[3] b) nogil: +    return sqrt((a[0] – b[0])**2 + (a[1] – b[1])**2 +(a[2] – b[2])**2) + + +@cython.boundscheck(False) +@cython.wraparound(False) +@cython.cdivision(True) +cdef inline void fma(const cython.floating f, +                     const cython.floating[3] a, +                     const cython.floating[3] b, +                     cython.floating[3] c) nogil:</p>
<pre>    c[0] = f * a[0] + b[0]
    c[1] = f * a[1] + b[1]
    c[2] = f * a[2] + b[2]
</pre>
<p>+</p>
<pre>@cython.boundscheck(False)
@cython.wraparound(False)
@cython.cdivision(True)</pre>
<p>-cdef inline np.float64_t L2_norm(const np.float64_t a[3]) nogil: +cdef inline cython.floating L2_norm(const cython.floating[3] a) nogil:</p>
<pre>return sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2])</pre>
<p>Repository URL: <a href="https://bitbucket.org/yt_analysis/yt/">https://bitbucket.org/yt_analysis/yt/</a></p>
<p>—</p>
<p>This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email.</p>

<img src="http://link.bitbucket.org/wf/open?upn=ll4ctv0L-2ByeRZFC1LslHcg6aJmnQ70VruLbmeLQr27CawVQqWJTj3Vs2z9Pf0OMGz-2F7grCr9-2F6u7uPKZ5Jg2Tj7MOLLy146oBxPqwBcy1kO5AH9LmeUNMhPPNeuqClJxGS1DhbSd35UOi7-2BTRnjCJ-2FBy1AHmDkkS8bduXN7L7tz4Ep5-2FLVicRrFwvIZJ-2BznoOrjrquC9xyU-2FQhL-2BUO4Sorbx-2FtgO-2FBAws3jDaOijCQI-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;"/>
</body></html>