[yt-svn] commit/yt: 3 new changesets

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Wed Jun 14 09:22:41 PDT 2017


3 new commits in yt:

https://bitbucket.org/yt_analysis/yt/commits/c089456cf0ce/
Changeset:   c089456cf0ce
User:        ngoldbaum
Date:        2017-05-31 18:55:02+00:00
Summary:     Refactor volume rendering to eliminate need for ImageContainer struct. Closes #1374
Affected #:  8 files

diff -r 4b22085ba0b75e00f4176024e555d459c8f0451d -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc yt/utilities/lib/bounding_volume_hierarchy.pyx
--- a/yt/utilities/lib/bounding_volume_hierarchy.pyx
+++ b/yt/utilities/lib/bounding_volume_hierarchy.pyx
@@ -4,8 +4,8 @@
 from libc.math cimport fabs
 from libc.stdlib cimport malloc, free
 from cython.parallel import parallel, prange
-from grid_traversal cimport ImageSampler, \
-    ImageContainer
+from .image_samplers cimport ImageSampler
+
 
 from yt.utilities.lib.primitives cimport \
     BBox, \
@@ -449,15 +449,14 @@
         '''
 
         cdef int vi, vj, i, j
-        cdef ImageContainer *im = self.image
         cdef np.float64_t *v_pos
         cdef np.float64_t *v_dir
         cdef np.int64_t nx, ny, size
         cdef np.float64_t width[3]
         for i in range(3):
             width[i] = self.width[i]
-        nx = im.nv[0]
-        ny = im.nv[1]
+        nx = self.nv[0]
+        ny = self.nv[1]
         size = nx * ny
         cdef Ray* ray
         with nogil, parallel():
@@ -468,7 +467,7 @@
                 vj = j % ny
                 vi = (j - vj) / ny
                 vj = vj
-                self.vector_function(im, vi, vj, width, v_dir, v_pos)
+                self.vector_function(self, vi, vj, width, v_dir, v_pos)
                 for i in range(3):
                     ray.origin[i] = v_pos[i]
                     ray.direction[i] = v_dir[i]
@@ -478,10 +477,10 @@
                 ray.data_val = 0
                 ray.elem_id = -1
                 bvh.intersect(ray)
-                im.image[vi, vj, 0] = ray.data_val
-                im.image_used[vi, vj] = ray.elem_id
-                im.mesh_lines[vi, vj] = ray.near_boundary
-                im.zbuffer[vi, vj] = ray.t_far
+                self.image[vi, vj, 0] = ray.data_val
+                self.image_used[vi, vj] = ray.elem_id
+                self.mesh_lines[vi, vj] = ray.near_boundary
+                self.zbuffer[vi, vj] = ray.t_far
             free(v_pos)
             free(v_dir)
             free(ray)

diff -r 4b22085ba0b75e00f4176024e555d459c8f0451d -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc yt/utilities/lib/grid_traversal.pxd
--- a/yt/utilities/lib/grid_traversal.pxd
+++ b/yt/utilities/lib/grid_traversal.pxd
@@ -17,7 +17,7 @@
 import numpy as np
 cimport numpy as np
 cimport cython
-from .image_samplers cimport ImageContainer, ImageSampler
+from .image_samplers cimport ImageSampler
 from .volume_container cimport VolumeContainer, vc_index, vc_pos_index
 
 ctypedef void sampler_function(

diff -r 4b22085ba0b75e00f4176024e555d459c8f0451d -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc yt/utilities/lib/grid_traversal.pyx
--- a/yt/utilities/lib/grid_traversal.pyx
+++ b/yt/utilities/lib/grid_traversal.pyx
@@ -28,11 +28,6 @@
 
 from cython.parallel import prange, parallel, threadid
 
-from .image_samplers cimport \
-    ImageSampler, \
-    ImageContainer, \
-    VolumeRenderAccumulator
-
 DEF Nch = 4
 
 @cython.boundscheck(False)

diff -r 4b22085ba0b75e00f4176024e555d459c8f0451d -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc yt/utilities/lib/image_samplers.pxd
--- a/yt/utilities/lib/image_samplers.pxd
+++ b/yt/utilities/lib/image_samplers.pxd
@@ -19,10 +19,6 @@
 cimport cython
 cimport kdtree_utils
 from .volume_container cimport VolumeContainer
-from .lenses cimport \
-    calculate_extent_function, \
-    generate_vector_info_function, \
-    ImageContainer
 from .partitioned_grid cimport PartitionedGrid
 
 DEF Nch = 4
@@ -32,12 +28,32 @@
 # declare.
 cdef struct VolumeRenderAccumulator
 
+ctypedef int calculate_extent_function(ImageSampler image,
+            VolumeContainer *vc, np.int64_t rv[4]) nogil except -1
+
+ctypedef void generate_vector_info_function(ImageSampler im,
+            np.int64_t vi, np.int64_t vj,
+            np.float64_t width[2],
+            np.float64_t v_dir[3], np.float64_t v_pos[3]) nogil
+
 cdef struct ImageAccumulator:
     np.float64_t rgba[Nch]
     void *supp_data
 
 cdef class ImageSampler:
-    cdef ImageContainer *image
+    cdef np.float64_t[:,:,:] vp_pos
+    cdef np.float64_t[:,:,:] vp_dir
+    cdef np.float64_t *center
+    cdef np.float64_t[:,:,:] image
+    cdef np.float64_t[:,:] zbuffer
+    cdef np.int64_t[:,:] image_used
+    cdef np.int64_t[:,:] mesh_lines
+    cdef np.float64_t pdx, pdy
+    cdef np.float64_t bounds[4]
+    cdef np.float64_t[:,:] camera_data   # position, width, unit_vec[0,2]
+    cdef int nv[2]
+    cdef np.float64_t *x_vec
+    cdef np.float64_t *y_vec
     cdef public object acenter, aimage, ax_vec, ay_vec
     cdef public object azbuffer
     cdef public object aimage_used

diff -r 4b22085ba0b75e00f4176024e555d459c8f0451d -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc yt/utilities/lib/image_samplers.pyx
--- a/yt/utilities/lib/image_samplers.pyx
+++ b/yt/utilities/lib/image_samplers.pyx
@@ -68,16 +68,11 @@
                   np.ndarray[np.float64_t, ndim=1] y_vec,
                   np.ndarray[np.float64_t, ndim=1] width,
                   *args, **kwargs):
-        self.image = <ImageContainer *> calloc(sizeof(ImageContainer), 1)
-        cdef np.float64_t[:,:] zbuffer
-        cdef np.int64_t[:,:] image_used
-        cdef np.int64_t[:,:] mesh_lines
-        cdef np.float64_t[:,:] camera_data
         cdef int i
 
         camera_data = kwargs.pop("camera_data", None)
         if camera_data is not None:
-            self.image.camera_data = camera_data
+            self.camera_data = camera_data
 
         zbuffer = kwargs.pop("zbuffer", None)
         if zbuffer is None:
@@ -110,26 +105,26 @@
         # de-allocation from reference counts.  Note that we do this to the
         # "atleast_3d" versions.  Also, note that we re-assign the input
         # arguments.
-        self.image.vp_pos = vp_pos
-        self.image.vp_dir = vp_dir
-        self.image.image = self.aimage = image
+        self.vp_pos = vp_pos
+        self.vp_dir = vp_dir
+        self.image = self.aimage = image
         self.acenter = center
-        self.image.center = <np.float64_t *> center.data
+        self.center = <np.float64_t *> center.data
         self.ax_vec = x_vec
-        self.image.x_vec = <np.float64_t *> x_vec.data
+        self.x_vec = <np.float64_t *> x_vec.data
         self.ay_vec = y_vec
-        self.image.y_vec = <np.float64_t *> y_vec.data
-        self.image.zbuffer = zbuffer
+        self.y_vec = <np.float64_t *> y_vec.data
+        self.zbuffer = zbuffer
         self.azbuffer = np.asarray(zbuffer)
-        self.image.image_used = image_used
+        self.image_used = image_used
         self.aimage_used = np.asarray(image_used)
-        self.image.mesh_lines = mesh_lines
+        self.mesh_lines = mesh_lines
         self.amesh_lines = np.asarray(mesh_lines)
-        self.image.nv[0] = image.shape[0]
-        self.image.nv[1] = image.shape[1]
-        for i in range(4): self.image.bounds[i] = bounds[i]
-        self.image.pdx = (bounds[1] - bounds[0])/self.image.nv[0]
-        self.image.pdy = (bounds[3] - bounds[2])/self.image.nv[1]
+        self.nv[0] = image.shape[0]
+        self.nv[1] = image.shape[1]
+        for i in range(4): self.bounds[i] = bounds[i]
+        self.pdx = (bounds[1] - bounds[0])/self.nv[0]
+        self.pdy = (bounds[3] - bounds[2])/self.nv[1]
         for i in range(3):
             self.width[i] = width[i]
 
@@ -143,18 +138,17 @@
         cdef int vi, vj, hit, i, j
         cdef np.int64_t iter[4]
         cdef VolumeContainer *vc = pg.container
-        cdef ImageContainer *im = self.image
         self.setup(pg)
         cdef np.float64_t *v_pos
         cdef np.float64_t *v_dir
         cdef np.float64_t max_t
         hit = 0
         cdef np.int64_t nx, ny, size
-        self.extent_function(self.image, vc, iter)
-        iter[0] = i64clip(iter[0]-1, 0, im.nv[0])
-        iter[1] = i64clip(iter[1]+1, 0, im.nv[0])
-        iter[2] = i64clip(iter[2]-1, 0, im.nv[1])
-        iter[3] = i64clip(iter[3]+1, 0, im.nv[1])
+        self.extent_function(self, vc, iter)
+        iter[0] = i64clip(iter[0]-1, 0, self.nv[0])
+        iter[1] = i64clip(iter[1]+1, 0, self.nv[0])
+        iter[2] = i64clip(iter[2]-1, 0, self.nv[1])
+        iter[3] = i64clip(iter[3]+1, 0, self.nv[1])
         nx = (iter[1] - iter[0])
         ny = (iter[3] - iter[2])
         size = nx * ny
@@ -173,17 +167,18 @@
                 vi = (j - vj) / ny + iter[0]
                 vj = vj + iter[2]
                 # Dynamically calculate the position
-                self.vector_function(im, vi, vj, width, v_dir, v_pos)
+                self.vector_function(self, vi, vj, width, v_dir, v_pos)
                 for i in range(Nch):
-                    idata.rgba[i] = im.image[vi, vj, i]
-                max_t = fclip(im.zbuffer[vi, vj], 0.0, 1.0)
+                    idata.rgba[i] = self.image[vi, vj, i]
+                max_t = fclip(self.zbuffer[vi, vj], 0.0, 1.0)
                 walk_volume(vc, v_pos, v_dir, self.sample,
                             (<void *> idata), NULL, max_t)
                 if (j % (10*chunksize)) == 0:
                     with gil:
                         PyErr_CheckSignals()
                 for i in range(Nch):
-                    im.image[vi, vj, i] = idata.rgba[i]
+                    self.image[vi, vj, i] = idata.rgba[i]
+            idata.supp_data = NULL
             free(idata)
             free(v_pos)
             free(v_dir)
@@ -214,23 +209,6 @@
 
         return params
 
-    def __dealloc__(self):
-        self.image.image = None
-        self.image.vp_pos = None
-        self.image.vp_dir = None
-        self.image.zbuffer = None
-        self.image.image_used = None
-        self.image.mesh_lines = None
-        self.image.camera_data = None
-        self.aimage = None
-        self.acenter = None
-        self.ax_vec = None
-        self.ay_vec = None
-        self.azbuffer = None
-        self.aimage_used = None
-        self.amesh_lines = None
-        free(self.image)
-
 cdef class ProjectionSampler(ImageSampler):
 
     @staticmethod

diff -r 4b22085ba0b75e00f4176024e555d459c8f0451d -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc yt/utilities/lib/lenses.pxd
--- a/yt/utilities/lib/lenses.pxd
+++ b/yt/utilities/lib/lenses.pxd
@@ -22,6 +22,10 @@
 from libc.math cimport exp, floor, log2, \
     fabs, atan, atan2, asin, cos, sin, sqrt, acos, M_PI
 from yt.utilities.lib.fp_utils cimport imax, fmax, imin, fmin, iclip, fclip, i64clip
+from .image_samplers cimport \
+    ImageSampler, \
+    calculate_extent_function, \
+    generate_vector_info_function
 
 cdef extern from "platform_dep.h":
     long int lrint(double x) nogil
@@ -29,30 +33,6 @@
 cdef extern from "limits.h":
     cdef int SHRT_MAX
 
-cdef struct ImageContainer:
-    np.float64_t[:,:,:] vp_pos
-    np.float64_t[:,:,:] vp_dir
-    np.float64_t *center
-    np.float64_t[:,:,:] image
-    np.float64_t[:,:] zbuffer
-    np.int64_t[:,:] image_used
-    np.int64_t[:,:] mesh_lines
-    np.float64_t pdx, pdy
-    np.float64_t bounds[4]
-    np.float64_t[:,:] camera_data   # position, width, unit_vec[0,2]
-    int nv[2]
-    np.float64_t *x_vec
-    np.float64_t *y_vec
-
-
-ctypedef int calculate_extent_function(ImageContainer *image,
-            VolumeContainer *vc, np.int64_t rv[4]) nogil except -1
-
-ctypedef void generate_vector_info_function(ImageContainer *im,
-            np.int64_t vi, np.int64_t vj,
-            np.float64_t width[2],
-            np.float64_t v_dir[3], np.float64_t v_pos[3]) nogil
-
 cdef generate_vector_info_function generate_vector_info_plane_parallel
 cdef generate_vector_info_function generate_vector_info_null
 cdef calculate_extent_function calculate_extent_plane_parallel

diff -r 4b22085ba0b75e00f4176024e555d459c8f0451d -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc yt/utilities/lib/lenses.pyx
--- a/yt/utilities/lib/lenses.pyx
+++ b/yt/utilities/lib/lenses.pyx
@@ -16,12 +16,12 @@
 import numpy as np
 cimport numpy as np
 cimport cython
-from .image_samplers cimport ImageContainer
+from .image_samplers cimport ImageSampler
 
 @cython.boundscheck(False)
 @cython.wraparound(False)
 @cython.cdivision(True)
-cdef int calculate_extent_plane_parallel(ImageContainer *image,
+cdef int calculate_extent_plane_parallel(ImageSampler image,
             VolumeContainer *vc, np.int64_t rv[4]) nogil except -1:
     # We do this for all eight corners
     cdef np.float64_t temp
@@ -59,7 +59,7 @@
 @cython.boundscheck(False)
 @cython.wraparound(False)
 @cython.cdivision(True)
-cdef int calculate_extent_perspective(ImageContainer *image,
+cdef int calculate_extent_perspective(ImageSampler image,
             VolumeContainer *vc, np.int64_t rv[4]) nogil except -1:
 
     cdef np.float64_t cam_pos[3]
@@ -168,7 +168,7 @@
 @cython.boundscheck(False)
 @cython.wraparound(False)
 @cython.cdivision(True)
-cdef int calculate_extent_null(ImageContainer *image,
+cdef int calculate_extent_null(ImageSampler image,
             VolumeContainer *vc, np.int64_t rv[4]) nogil except -1:
     rv[0] = 0
     rv[1] = image.nv[0]
@@ -178,7 +178,7 @@
 
 @cython.boundscheck(False)
 @cython.wraparound(False)
-cdef void generate_vector_info_plane_parallel(ImageContainer *im,
+cdef void generate_vector_info_plane_parallel(ImageSampler im,
             np.int64_t vi, np.int64_t vj,
             np.float64_t width[2],
             # Now outbound
@@ -195,7 +195,7 @@
 
 @cython.boundscheck(False)
 @cython.wraparound(False)
-cdef void generate_vector_info_null(ImageContainer *im,
+cdef void generate_vector_info_null(ImageSampler im,
             np.int64_t vi, np.int64_t vj,
             np.float64_t width[2],
             # Now outbound

diff -r 4b22085ba0b75e00f4176024e555d459c8f0451d -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc yt/utilities/lib/mesh_traversal.pyx
--- a/yt/utilities/lib/mesh_traversal.pyx
+++ b/yt/utilities/lib/mesh_traversal.pyx
@@ -23,8 +23,6 @@
 cimport pyembree.rtcore_scene as rtcs
 from .image_samplers cimport \
     ImageSampler
-from .lenses cimport \
-    ImageContainer
 from cython.parallel import prange, parallel, threadid
 from yt.visualization.image_writer import apply_colormap
 from yt.utilities.lib.bounding_volume_hierarchy cimport BVH, Ray
@@ -63,15 +61,14 @@
 
         rtcs.rtcCommit(scene.scene_i)
         cdef int vi, vj, i, j
-        cdef ImageContainer *im = self.image
         cdef np.float64_t *v_pos
         cdef np.float64_t *v_dir
         cdef np.int64_t nx, ny, size
         cdef np.float64_t width[3]
         for i in range(3):
             width[i] = self.width[i]
-        nx = im.nv[0]
-        ny = im.nv[1]
+        nx = self.nv[0]
+        ny = self.nv[1]
         size = nx * ny
         cdef rtcr.RTCRay ray
         v_pos = <np.float64_t *> malloc(3 * sizeof(np.float64_t))
@@ -93,9 +90,9 @@
             ray.time = 0
             ray.Ng[0] = 1e37  # we use this to track the hit distance
             rtcs.rtcIntersect(scene.scene_i, ray)
-            im.image[vi, vj, 0] = ray.time
-            im.image_used[vi, vj] = ray.primID
-            im.mesh_lines[vi, vj] = ray.instID
-            im.zbuffer[vi, vj] = ray.tfar
+            self.image[vi, vj, 0] = ray.time
+            self.image_used[vi, vj] = ray.primID
+            self.mesh_lines[vi, vj] = ray.instID
+            self.zbuffer[vi, vj] = ray.tfar
         free(v_pos)
         free(v_dir)


https://bitbucket.org/yt_analysis/yt/commits/7b68f12b9c5d/
Changeset:   7b68f12b9c5d
User:        ngoldbaum
Date:        2017-05-31 19:04:22+00:00
Summary:     fix compilation error in
Affected #:  1 file

diff -r c089456cf0ce4ac3eacca710e4b6fc423edc1dcc -r 7b68f12b9c5df360938a700917f2618c1fbb4e25 yt/utilities/lib/mesh_traversal.pyx
--- a/yt/utilities/lib/mesh_traversal.pyx
+++ b/yt/utilities/lib/mesh_traversal.pyx
@@ -77,7 +77,7 @@
             vj = j % ny
             vi = (j - vj) / ny
             vj = vj
-            self.vector_function(im, vi, vj, width, v_dir, v_pos)
+            self.vector_function(self, vi, vj, width, v_dir, v_pos)
             for i in range(3):
                 ray.org[i] = v_pos[i]
                 ray.dir[i] = v_dir[i]


https://bitbucket.org/yt_analysis/yt/commits/3534461f76f1/
Changeset:   3534461f76f1
User:        jzuhone
Date:        2017-06-14 16:22:26+00:00
Summary:     Merge pull request #1435 from ngoldbaum/vr-memleak

Refactor volume rendering to eliminate need for ImageContainer struct
Affected #:  8 files

diff -r 08aa2c014d88854ea385b0a14166170220017619 -r 3534461f76f1c27948ee3ae5690925e7e6167974 yt/utilities/lib/bounding_volume_hierarchy.pyx
--- a/yt/utilities/lib/bounding_volume_hierarchy.pyx
+++ b/yt/utilities/lib/bounding_volume_hierarchy.pyx
@@ -4,8 +4,8 @@
 from libc.math cimport fabs
 from libc.stdlib cimport malloc, free
 from cython.parallel import parallel, prange
-from grid_traversal cimport ImageSampler, \
-    ImageContainer
+from .image_samplers cimport ImageSampler
+
 
 from yt.utilities.lib.primitives cimport \
     BBox, \
@@ -449,15 +449,14 @@
         '''
 
         cdef int vi, vj, i, j
-        cdef ImageContainer *im = self.image
         cdef np.float64_t *v_pos
         cdef np.float64_t *v_dir
         cdef np.int64_t nx, ny, size
         cdef np.float64_t width[3]
         for i in range(3):
             width[i] = self.width[i]
-        nx = im.nv[0]
-        ny = im.nv[1]
+        nx = self.nv[0]
+        ny = self.nv[1]
         size = nx * ny
         cdef Ray* ray
         with nogil, parallel():
@@ -468,7 +467,7 @@
                 vj = j % ny
                 vi = (j - vj) / ny
                 vj = vj
-                self.vector_function(im, vi, vj, width, v_dir, v_pos)
+                self.vector_function(self, vi, vj, width, v_dir, v_pos)
                 for i in range(3):
                     ray.origin[i] = v_pos[i]
                     ray.direction[i] = v_dir[i]
@@ -478,10 +477,10 @@
                 ray.data_val = 0
                 ray.elem_id = -1
                 bvh.intersect(ray)
-                im.image[vi, vj, 0] = ray.data_val
-                im.image_used[vi, vj] = ray.elem_id
-                im.mesh_lines[vi, vj] = ray.near_boundary
-                im.zbuffer[vi, vj] = ray.t_far
+                self.image[vi, vj, 0] = ray.data_val
+                self.image_used[vi, vj] = ray.elem_id
+                self.mesh_lines[vi, vj] = ray.near_boundary
+                self.zbuffer[vi, vj] = ray.t_far
             free(v_pos)
             free(v_dir)
             free(ray)

diff -r 08aa2c014d88854ea385b0a14166170220017619 -r 3534461f76f1c27948ee3ae5690925e7e6167974 yt/utilities/lib/grid_traversal.pxd
--- a/yt/utilities/lib/grid_traversal.pxd
+++ b/yt/utilities/lib/grid_traversal.pxd
@@ -17,7 +17,7 @@
 import numpy as np
 cimport numpy as np
 cimport cython
-from .image_samplers cimport ImageContainer, ImageSampler
+from .image_samplers cimport ImageSampler
 from .volume_container cimport VolumeContainer, vc_index, vc_pos_index
 
 ctypedef void sampler_function(

diff -r 08aa2c014d88854ea385b0a14166170220017619 -r 3534461f76f1c27948ee3ae5690925e7e6167974 yt/utilities/lib/grid_traversal.pyx
--- a/yt/utilities/lib/grid_traversal.pyx
+++ b/yt/utilities/lib/grid_traversal.pyx
@@ -28,11 +28,6 @@
 
 from cython.parallel import prange, parallel, threadid
 
-from .image_samplers cimport \
-    ImageSampler, \
-    ImageContainer, \
-    VolumeRenderAccumulator
-
 DEF Nch = 4
 
 @cython.boundscheck(False)

diff -r 08aa2c014d88854ea385b0a14166170220017619 -r 3534461f76f1c27948ee3ae5690925e7e6167974 yt/utilities/lib/image_samplers.pxd
--- a/yt/utilities/lib/image_samplers.pxd
+++ b/yt/utilities/lib/image_samplers.pxd
@@ -19,10 +19,6 @@
 cimport cython
 cimport kdtree_utils
 from .volume_container cimport VolumeContainer
-from .lenses cimport \
-    calculate_extent_function, \
-    generate_vector_info_function, \
-    ImageContainer
 from .partitioned_grid cimport PartitionedGrid
 
 DEF Nch = 4
@@ -32,12 +28,32 @@
 # declare.
 cdef struct VolumeRenderAccumulator
 
+ctypedef int calculate_extent_function(ImageSampler image,
+            VolumeContainer *vc, np.int64_t rv[4]) nogil except -1
+
+ctypedef void generate_vector_info_function(ImageSampler im,
+            np.int64_t vi, np.int64_t vj,
+            np.float64_t width[2],
+            np.float64_t v_dir[3], np.float64_t v_pos[3]) nogil
+
 cdef struct ImageAccumulator:
     np.float64_t rgba[Nch]
     void *supp_data
 
 cdef class ImageSampler:
-    cdef ImageContainer *image
+    cdef np.float64_t[:,:,:] vp_pos
+    cdef np.float64_t[:,:,:] vp_dir
+    cdef np.float64_t *center
+    cdef np.float64_t[:,:,:] image
+    cdef np.float64_t[:,:] zbuffer
+    cdef np.int64_t[:,:] image_used
+    cdef np.int64_t[:,:] mesh_lines
+    cdef np.float64_t pdx, pdy
+    cdef np.float64_t bounds[4]
+    cdef np.float64_t[:,:] camera_data   # position, width, unit_vec[0,2]
+    cdef int nv[2]
+    cdef np.float64_t *x_vec
+    cdef np.float64_t *y_vec
     cdef public object acenter, aimage, ax_vec, ay_vec
     cdef public object azbuffer
     cdef public object aimage_used

diff -r 08aa2c014d88854ea385b0a14166170220017619 -r 3534461f76f1c27948ee3ae5690925e7e6167974 yt/utilities/lib/image_samplers.pyx
--- a/yt/utilities/lib/image_samplers.pyx
+++ b/yt/utilities/lib/image_samplers.pyx
@@ -68,16 +68,11 @@
                   np.ndarray[np.float64_t, ndim=1] y_vec,
                   np.ndarray[np.float64_t, ndim=1] width,
                   *args, **kwargs):
-        self.image = <ImageContainer *> calloc(sizeof(ImageContainer), 1)
-        cdef np.float64_t[:,:] zbuffer
-        cdef np.int64_t[:,:] image_used
-        cdef np.int64_t[:,:] mesh_lines
-        cdef np.float64_t[:,:] camera_data
         cdef int i
 
         camera_data = kwargs.pop("camera_data", None)
         if camera_data is not None:
-            self.image.camera_data = camera_data
+            self.camera_data = camera_data
 
         zbuffer = kwargs.pop("zbuffer", None)
         if zbuffer is None:
@@ -110,26 +105,26 @@
         # de-allocation from reference counts.  Note that we do this to the
         # "atleast_3d" versions.  Also, note that we re-assign the input
         # arguments.
-        self.image.vp_pos = vp_pos
-        self.image.vp_dir = vp_dir
-        self.image.image = self.aimage = image
+        self.vp_pos = vp_pos
+        self.vp_dir = vp_dir
+        self.image = self.aimage = image
         self.acenter = center
-        self.image.center = <np.float64_t *> center.data
+        self.center = <np.float64_t *> center.data
         self.ax_vec = x_vec
-        self.image.x_vec = <np.float64_t *> x_vec.data
+        self.x_vec = <np.float64_t *> x_vec.data
         self.ay_vec = y_vec
-        self.image.y_vec = <np.float64_t *> y_vec.data
-        self.image.zbuffer = zbuffer
+        self.y_vec = <np.float64_t *> y_vec.data
+        self.zbuffer = zbuffer
         self.azbuffer = np.asarray(zbuffer)
-        self.image.image_used = image_used
+        self.image_used = image_used
         self.aimage_used = np.asarray(image_used)
-        self.image.mesh_lines = mesh_lines
+        self.mesh_lines = mesh_lines
         self.amesh_lines = np.asarray(mesh_lines)
-        self.image.nv[0] = image.shape[0]
-        self.image.nv[1] = image.shape[1]
-        for i in range(4): self.image.bounds[i] = bounds[i]
-        self.image.pdx = (bounds[1] - bounds[0])/self.image.nv[0]
-        self.image.pdy = (bounds[3] - bounds[2])/self.image.nv[1]
+        self.nv[0] = image.shape[0]
+        self.nv[1] = image.shape[1]
+        for i in range(4): self.bounds[i] = bounds[i]
+        self.pdx = (bounds[1] - bounds[0])/self.nv[0]
+        self.pdy = (bounds[3] - bounds[2])/self.nv[1]
         for i in range(3):
             self.width[i] = width[i]
 
@@ -143,18 +138,17 @@
         cdef int vi, vj, hit, i, j
         cdef np.int64_t iter[4]
         cdef VolumeContainer *vc = pg.container
-        cdef ImageContainer *im = self.image
         self.setup(pg)
         cdef np.float64_t *v_pos
         cdef np.float64_t *v_dir
         cdef np.float64_t max_t
         hit = 0
         cdef np.int64_t nx, ny, size
-        self.extent_function(self.image, vc, iter)
-        iter[0] = i64clip(iter[0]-1, 0, im.nv[0])
-        iter[1] = i64clip(iter[1]+1, 0, im.nv[0])
-        iter[2] = i64clip(iter[2]-1, 0, im.nv[1])
-        iter[3] = i64clip(iter[3]+1, 0, im.nv[1])
+        self.extent_function(self, vc, iter)
+        iter[0] = i64clip(iter[0]-1, 0, self.nv[0])
+        iter[1] = i64clip(iter[1]+1, 0, self.nv[0])
+        iter[2] = i64clip(iter[2]-1, 0, self.nv[1])
+        iter[3] = i64clip(iter[3]+1, 0, self.nv[1])
         nx = (iter[1] - iter[0])
         ny = (iter[3] - iter[2])
         size = nx * ny
@@ -173,17 +167,18 @@
                 vi = (j - vj) / ny + iter[0]
                 vj = vj + iter[2]
                 # Dynamically calculate the position
-                self.vector_function(im, vi, vj, width, v_dir, v_pos)
+                self.vector_function(self, vi, vj, width, v_dir, v_pos)
                 for i in range(Nch):
-                    idata.rgba[i] = im.image[vi, vj, i]
-                max_t = fclip(im.zbuffer[vi, vj], 0.0, 1.0)
+                    idata.rgba[i] = self.image[vi, vj, i]
+                max_t = fclip(self.zbuffer[vi, vj], 0.0, 1.0)
                 walk_volume(vc, v_pos, v_dir, self.sample,
                             (<void *> idata), NULL, max_t)
                 if (j % (10*chunksize)) == 0:
                     with gil:
                         PyErr_CheckSignals()
                 for i in range(Nch):
-                    im.image[vi, vj, i] = idata.rgba[i]
+                    self.image[vi, vj, i] = idata.rgba[i]
+            idata.supp_data = NULL
             free(idata)
             free(v_pos)
             free(v_dir)
@@ -214,23 +209,6 @@
 
         return params
 
-    def __dealloc__(self):
-        self.image.image = None
-        self.image.vp_pos = None
-        self.image.vp_dir = None
-        self.image.zbuffer = None
-        self.image.image_used = None
-        self.image.mesh_lines = None
-        self.image.camera_data = None
-        self.aimage = None
-        self.acenter = None
-        self.ax_vec = None
-        self.ay_vec = None
-        self.azbuffer = None
-        self.aimage_used = None
-        self.amesh_lines = None
-        free(self.image)
-
 cdef class ProjectionSampler(ImageSampler):
 
     @staticmethod

diff -r 08aa2c014d88854ea385b0a14166170220017619 -r 3534461f76f1c27948ee3ae5690925e7e6167974 yt/utilities/lib/lenses.pxd
--- a/yt/utilities/lib/lenses.pxd
+++ b/yt/utilities/lib/lenses.pxd
@@ -22,6 +22,10 @@
 from libc.math cimport exp, floor, log2, \
     fabs, atan, atan2, asin, cos, sin, sqrt, acos, M_PI
 from yt.utilities.lib.fp_utils cimport imax, fmax, imin, fmin, iclip, fclip, i64clip
+from .image_samplers cimport \
+    ImageSampler, \
+    calculate_extent_function, \
+    generate_vector_info_function
 
 cdef extern from "platform_dep.h":
     long int lrint(double x) nogil
@@ -29,30 +33,6 @@
 cdef extern from "limits.h":
     cdef int SHRT_MAX
 
-cdef struct ImageContainer:
-    np.float64_t[:,:,:] vp_pos
-    np.float64_t[:,:,:] vp_dir
-    np.float64_t *center
-    np.float64_t[:,:,:] image
-    np.float64_t[:,:] zbuffer
-    np.int64_t[:,:] image_used
-    np.int64_t[:,:] mesh_lines
-    np.float64_t pdx, pdy
-    np.float64_t bounds[4]
-    np.float64_t[:,:] camera_data   # position, width, unit_vec[0,2]
-    int nv[2]
-    np.float64_t *x_vec
-    np.float64_t *y_vec
-
-
-ctypedef int calculate_extent_function(ImageContainer *image,
-            VolumeContainer *vc, np.int64_t rv[4]) nogil except -1
-
-ctypedef void generate_vector_info_function(ImageContainer *im,
-            np.int64_t vi, np.int64_t vj,
-            np.float64_t width[2],
-            np.float64_t v_dir[3], np.float64_t v_pos[3]) nogil
-
 cdef generate_vector_info_function generate_vector_info_plane_parallel
 cdef generate_vector_info_function generate_vector_info_null
 cdef calculate_extent_function calculate_extent_plane_parallel

diff -r 08aa2c014d88854ea385b0a14166170220017619 -r 3534461f76f1c27948ee3ae5690925e7e6167974 yt/utilities/lib/lenses.pyx
--- a/yt/utilities/lib/lenses.pyx
+++ b/yt/utilities/lib/lenses.pyx
@@ -16,12 +16,12 @@
 import numpy as np
 cimport numpy as np
 cimport cython
-from .image_samplers cimport ImageContainer
+from .image_samplers cimport ImageSampler
 
 @cython.boundscheck(False)
 @cython.wraparound(False)
 @cython.cdivision(True)
-cdef int calculate_extent_plane_parallel(ImageContainer *image,
+cdef int calculate_extent_plane_parallel(ImageSampler image,
             VolumeContainer *vc, np.int64_t rv[4]) nogil except -1:
     # We do this for all eight corners
     cdef np.float64_t temp
@@ -59,7 +59,7 @@
 @cython.boundscheck(False)
 @cython.wraparound(False)
 @cython.cdivision(True)
-cdef int calculate_extent_perspective(ImageContainer *image,
+cdef int calculate_extent_perspective(ImageSampler image,
             VolumeContainer *vc, np.int64_t rv[4]) nogil except -1:
 
     cdef np.float64_t cam_pos[3]
@@ -168,7 +168,7 @@
 @cython.boundscheck(False)
 @cython.wraparound(False)
 @cython.cdivision(True)
-cdef int calculate_extent_null(ImageContainer *image,
+cdef int calculate_extent_null(ImageSampler image,
             VolumeContainer *vc, np.int64_t rv[4]) nogil except -1:
     rv[0] = 0
     rv[1] = image.nv[0]
@@ -178,7 +178,7 @@
 
 @cython.boundscheck(False)
 @cython.wraparound(False)
-cdef void generate_vector_info_plane_parallel(ImageContainer *im,
+cdef void generate_vector_info_plane_parallel(ImageSampler im,
             np.int64_t vi, np.int64_t vj,
             np.float64_t width[2],
             # Now outbound
@@ -195,7 +195,7 @@
 
 @cython.boundscheck(False)
 @cython.wraparound(False)
-cdef void generate_vector_info_null(ImageContainer *im,
+cdef void generate_vector_info_null(ImageSampler im,
             np.int64_t vi, np.int64_t vj,
             np.float64_t width[2],
             # Now outbound

diff -r 08aa2c014d88854ea385b0a14166170220017619 -r 3534461f76f1c27948ee3ae5690925e7e6167974 yt/utilities/lib/mesh_traversal.pyx
--- a/yt/utilities/lib/mesh_traversal.pyx
+++ b/yt/utilities/lib/mesh_traversal.pyx
@@ -23,8 +23,6 @@
 cimport pyembree.rtcore_scene as rtcs
 from .image_samplers cimport \
     ImageSampler
-from .lenses cimport \
-    ImageContainer
 from cython.parallel import prange, parallel, threadid
 from yt.visualization.image_writer import apply_colormap
 from yt.utilities.lib.bounding_volume_hierarchy cimport BVH, Ray
@@ -63,15 +61,14 @@
 
         rtcs.rtcCommit(scene.scene_i)
         cdef int vi, vj, i, j
-        cdef ImageContainer *im = self.image
         cdef np.float64_t *v_pos
         cdef np.float64_t *v_dir
         cdef np.int64_t nx, ny, size
         cdef np.float64_t width[3]
         for i in range(3):
             width[i] = self.width[i]
-        nx = im.nv[0]
-        ny = im.nv[1]
+        nx = self.nv[0]
+        ny = self.nv[1]
         size = nx * ny
         cdef rtcr.RTCRay ray
         v_pos = <np.float64_t *> malloc(3 * sizeof(np.float64_t))
@@ -80,7 +77,7 @@
             vj = j % ny
             vi = (j - vj) / ny
             vj = vj
-            self.vector_function(im, vi, vj, width, v_dir, v_pos)
+            self.vector_function(self, vi, vj, width, v_dir, v_pos)
             for i in range(3):
                 ray.org[i] = v_pos[i]
                 ray.dir[i] = v_dir[i]
@@ -93,9 +90,9 @@
             ray.time = 0
             ray.Ng[0] = 1e37  # we use this to track the hit distance
             rtcs.rtcIntersect(scene.scene_i, ray)
-            im.image[vi, vj, 0] = ray.time
-            im.image_used[vi, vj] = ray.primID
-            im.mesh_lines[vi, vj] = ray.instID
-            im.zbuffer[vi, vj] = ray.tfar
+            self.image[vi, vj, 0] = ray.time
+            self.image_used[vi, vj] = ray.primID
+            self.mesh_lines[vi, vj] = ray.instID
+            self.zbuffer[vi, vj] = ray.tfar
         free(v_pos)
         free(v_dir)

Repository URL: https://bitbucket.org/yt_analysis/yt/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.



More information about the yt-svn mailing list