[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