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

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Tue Dec 2 12:57:24 PST 2014


3 new commits in yt:

https://bitbucket.org/yt_analysis/yt/commits/8aa0e325de08/
Changeset:   8aa0e325de08
Branch:      yt
User:        MatthewTurk
Date:        2014-12-01 19:24:15+00:00
Summary:     Cache more unit-free attributes for level_state
Affected #:  1 file

diff -r dc2ade03350286b7e54436ac100da00d086c24ae -r 8aa0e325de08b6e85d0b359d6e49583479aae4ea yt/data_objects/construction_data_containers.py
--- a/yt/data_objects/construction_data_containers.py
+++ b/yt/data_objects/construction_data_containers.py
@@ -720,6 +720,16 @@
     fields = None
     data_source = None
 
+    # These are all cached here as numpy arrays, without units, in
+    # code_lengths.
+    domain_width = None
+    domain_left_edge = None
+    domain_right_edge = None
+    left_edge = None
+    right_edge = None
+    base_dx = None
+    dds = None
+
 class YTSmoothedCoveringGridBase(YTCoveringGridBase):
     """A 3D region with all data extracted and interpolated to a
     single, specified resolution. (Identical to covering_grid,
@@ -763,14 +773,14 @@
         # interpolation but are not directly inside our bounds
         level_state.data_source = self.ds.region(
             self.center,
-            self.left_edge - level_state.current_dx,
-            self.right_edge + level_state.current_dx)
+            level_state.left_edge - level_state.current_dx,
+            level_state.right_edge + level_state.current_dx)
         level_state.data_source.min_level = level_state.current_level
         level_state.data_source.max_level = level_state.current_level
         self._pdata_source = self.ds.region(
             self.center,
-            self.left_edge - level_state.current_dx,
-            self.right_edge + level_state.current_dx)
+            level_state.left_edge - level_state.current_dx,
+            level_state.right_edge + level_state.current_dx)
         self._pdata_source.min_level = level_state.current_level
         self._pdata_source.max_level = level_state.current_level
 
@@ -796,7 +806,17 @@
 
     def _initialize_level_state(self, fields):
         ls = LevelState()
-        ls.current_dx = self._base_dx
+        ls.domain_width = self.ds.domain_width
+        ls.domain_left_edge = self.ds.domain_left_edge
+        ls.domain_right_edge = self.ds.domain_right_edge
+        ls.left_edge = self.left_edge
+        ls.right_edge = self.right_edge
+        ls.base_dx = self._base_dx
+        ls.dds = self.dds
+        for att in ("domain_width", "domain_left_edge", "domain_right_edge",
+                    "left_edge", "right_edge", "base_dx", "dds"):
+            setattr(ls, att, getattr(ls, att).in_units("code_length").d)
+        ls.current_dx = ls.base_dx
         ls.current_level = 0
         LL = self.left_edge - self.ds.domain_left_edge
         ls.global_startindex = np.rint(LL / ls.current_dx).astype('int64') - 1
@@ -820,15 +840,15 @@
         rf = float(self.ds.relative_refinement(
                     ls.current_level, ls.current_level + 1))
         ls.current_level += 1
-        ls.current_dx = self._base_dx / \
+        ls.current_dx = ls.base_dx / \
             self.ds.relative_refinement(0, ls.current_level)
         self._setup_data_source(ls)
-        LL = self.left_edge - self.ds.domain_left_edge
+        LL = ls.left_edge - ls.domain_left_edge
         ls.old_global_startindex = ls.global_startindex
         ls.global_startindex = np.rint(LL / ls.current_dx).astype('int64') - 1
-        ls.domain_iwidth = np.rint(self.ds.domain_width/ls.current_dx).astype('int64') 
+        ls.domain_iwidth = np.rint(ls.domain_width/ls.current_dx).astype('int64') 
         input_left = (level_state.old_global_startindex + 0.5) * rf 
-        width = (self.ActiveDimensions*self.dds)
+        width = (self.ActiveDimensions*ls.dds)
         output_dims = np.rint(width/level_state.current_dx+0.5).astype("int32") + 2
         level_state.current_dims = output_dims
         new_fields = []


https://bitbucket.org/yt_analysis/yt/commits/9ee14df5caa3/
Changeset:   9ee14df5caa3
Branch:      yt
User:        MatthewTurk
Date:        2014-12-01 19:25:32+00:00
Summary:     Early terminate on array units, cache some other attributes.
Affected #:  1 file

diff -r 8aa0e325de08b6e85d0b359d6e49583479aae4ea -r 9ee14df5caa348fed77c9e9f1247418f8423efe9 yt/geometry/selection_routines.pyx
--- a/yt/geometry/selection_routines.pyx
+++ b/yt/geometry/selection_routines.pyx
@@ -53,7 +53,9 @@
 # sometimes also accepting level and mask information.
 
 def _ensure_code(arr):
-    if hasattr(arr, "convert_to_units"):
+    if hasattr(arr, "units"):
+        if "code_length" == str(arr.units):
+            return arr
         arr.convert_to_units("code_length")
     return arr
 
@@ -417,14 +419,16 @@
         _ensure_code(gobj.dds)
         _ensure_code(gobj.LeftEdge)
         _ensure_code(gobj.RightEdge)
-        cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds
-        cdef np.ndarray[np.float64_t, ndim=1] left_edge = gobj.LeftEdge
-        cdef np.ndarray[np.float64_t, ndim=1] right_edge = gobj.RightEdge
+        cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds.d
+        cdef np.ndarray[np.float64_t, ndim=1] oleft_edge = gobj.LeftEdge.d
+        cdef np.ndarray[np.float64_t, ndim=1] oright_edge = gobj.RightEdge.d
         cdef int i, j, k
-        cdef np.float64_t dds[3], pos[3]
+        cdef np.float64_t dds[3], pos[3], left_edge[3], right_edge[3]
         for i in range(3):
             dds[i] = odds[i]
             dim[i] = gobj.ActiveDimensions[i]
+            left_edge[i] = oleft_edge[i]
+            right_edge[i] = oright_edge[i]
         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')
         cdef int total = 0
         cdef int temp
@@ -698,34 +702,41 @@
     cdef np.float64_t right_edge[3]
     cdef np.float64_t right_edge_shift[3]
 
+    @cython.boundscheck(False)
+    @cython.wraparound(False)
     def __init__(self, dobj):
         cdef int i
         # We are modifying dobj.left_edge and dobj.right_edge , so here we will
         # do an in-place conversion of those arrays.
-        _ensure_code(dobj.right_edge)
-        _ensure_code(dobj.left_edge)
-        DW = _ensure_code(dobj.ds.domain_width.copy())
+        cdef np.ndarray[np.float64_t, ndim=1] RE = _ensure_code(dobj.right_edge)
+        cdef np.ndarray[np.float64_t, ndim=1] LE = _ensure_code(dobj.left_edge)
+        cdef np.ndarray[np.float64_t, ndim=1] DW = _ensure_code(dobj.ds.domain_width)
+        cdef np.ndarray[np.float64_t, ndim=1] DLE = _ensure_code(dobj.ds.domain_left_edge)
+        cdef np.ndarray[np.float64_t, ndim=1] DRE = _ensure_code(dobj.ds.domain_right_edge)
+        cdef np.float64_t region_width[3]
+        cdef bint p[3]
 
         for i in range(3):
-            region_width = dobj.right_edge[i] - dobj.left_edge[i]
-            domain_width = DW[i]
+            region_width[i] = RE[i] - LE[i]
+            p[i] = dobj.ds.periodicity[i]
+            DW[i] = DW[i]
+            if region_width[i] <= 0:
+                raise RuntimeError(
+                    "Region right edge[%s] < left edge: width = %s" % (
+                        i, region_width[i]))
 
-            if region_width <= 0:
-                raise RuntimeError(
-                    "Region right edge < left edge: width = %s" % region_width
-                    )
+        for i in range(3):
 
-            if dobj.ds.periodicity[i]:
+            if p[i]:
                 # shift so left_edge guaranteed in domain
-                if dobj.left_edge[i] < dobj.ds.domain_left_edge[i]:
-                    dobj.left_edge[i] += domain_width
-                    dobj.right_edge[i] += domain_width
-                elif dobj.left_edge[i] > dobj.ds.domain_right_edge[i]:
-                    dobj.left_edge[i] += domain_width
-                    dobj.right_edge[i] += domain_width
+                if LE[i] < DLE[i]:
+                    LE[i] += DW[i]
+                    RE[i] += DW[i]
+                elif LE[i] > DRE[i]:
+                    LE[i] -= DW[i]
+                    RE[i] -= DW[i]
             else:
-                if dobj.left_edge[i] < dobj.ds.domain_left_edge[i] or \
-                   dobj.right_edge[i] > dobj.ds.domain_right_edge[i]:
+                if LE[i] < DLE[i] or RE[i] > DRE[i]:
                     raise RuntimeError(
                         "Error: yt attempted to read outside the boundaries of "
                         "a non-periodic domain along dimension %s.\n"
@@ -739,10 +750,9 @@
                          dobj.ds.domain_left_edge[i], dobj.ds.domain_right_edge[i])
                     )
             # Already ensured in code
-            self.left_edge[i] = dobj.left_edge[i]
-            self.right_edge[i] = dobj.right_edge[i]
-            self.right_edge_shift[i] = \
-                (dobj.right_edge).to_ndarray()[i] - domain_width.to_ndarray()
+            self.left_edge[i] = LE[i]
+            self.right_edge[i] = RE[i]
+            self.right_edge_shift[i] = RE[i] - DW[i]
             if not self.periodicity[i]:
                 self.right_edge_shift[i] = -np.inf
 


https://bitbucket.org/yt_analysis/yt/commits/ccf290984c00/
Changeset:   ccf290984c00
Branch:      yt
User:        xarthisius
Date:        2014-12-02 20:57:16+00:00
Summary:     Merged in MatthewTurk/yt (pull request #1322)

First attempt at speeding up ghost zone fields
Affected #:  2 files

diff -r 46d4d84d797dae33eca0e966c3cc1fbb1a20443c -r ccf290984c0005a576303fc850737b629b307fe3 yt/data_objects/construction_data_containers.py
--- a/yt/data_objects/construction_data_containers.py
+++ b/yt/data_objects/construction_data_containers.py
@@ -720,6 +720,16 @@
     fields = None
     data_source = None
 
+    # These are all cached here as numpy arrays, without units, in
+    # code_lengths.
+    domain_width = None
+    domain_left_edge = None
+    domain_right_edge = None
+    left_edge = None
+    right_edge = None
+    base_dx = None
+    dds = None
+
 class YTSmoothedCoveringGridBase(YTCoveringGridBase):
     """A 3D region with all data extracted and interpolated to a
     single, specified resolution. (Identical to covering_grid,
@@ -763,14 +773,14 @@
         # interpolation but are not directly inside our bounds
         level_state.data_source = self.ds.region(
             self.center,
-            self.left_edge - level_state.current_dx,
-            self.right_edge + level_state.current_dx)
+            level_state.left_edge - level_state.current_dx,
+            level_state.right_edge + level_state.current_dx)
         level_state.data_source.min_level = level_state.current_level
         level_state.data_source.max_level = level_state.current_level
         self._pdata_source = self.ds.region(
             self.center,
-            self.left_edge - level_state.current_dx,
-            self.right_edge + level_state.current_dx)
+            level_state.left_edge - level_state.current_dx,
+            level_state.right_edge + level_state.current_dx)
         self._pdata_source.min_level = level_state.current_level
         self._pdata_source.max_level = level_state.current_level
 
@@ -796,7 +806,17 @@
 
     def _initialize_level_state(self, fields):
         ls = LevelState()
-        ls.current_dx = self._base_dx
+        ls.domain_width = self.ds.domain_width
+        ls.domain_left_edge = self.ds.domain_left_edge
+        ls.domain_right_edge = self.ds.domain_right_edge
+        ls.left_edge = self.left_edge
+        ls.right_edge = self.right_edge
+        ls.base_dx = self._base_dx
+        ls.dds = self.dds
+        for att in ("domain_width", "domain_left_edge", "domain_right_edge",
+                    "left_edge", "right_edge", "base_dx", "dds"):
+            setattr(ls, att, getattr(ls, att).in_units("code_length").d)
+        ls.current_dx = ls.base_dx
         ls.current_level = 0
         LL = self.left_edge - self.ds.domain_left_edge
         ls.global_startindex = np.rint(LL / ls.current_dx).astype('int64') - 1
@@ -820,15 +840,15 @@
         rf = float(self.ds.relative_refinement(
                     ls.current_level, ls.current_level + 1))
         ls.current_level += 1
-        ls.current_dx = self._base_dx / \
+        ls.current_dx = ls.base_dx / \
             self.ds.relative_refinement(0, ls.current_level)
         self._setup_data_source(ls)
-        LL = self.left_edge - self.ds.domain_left_edge
+        LL = ls.left_edge - ls.domain_left_edge
         ls.old_global_startindex = ls.global_startindex
         ls.global_startindex = np.rint(LL / ls.current_dx).astype('int64') - 1
-        ls.domain_iwidth = np.rint(self.ds.domain_width/ls.current_dx).astype('int64') 
+        ls.domain_iwidth = np.rint(ls.domain_width/ls.current_dx).astype('int64') 
         input_left = (level_state.old_global_startindex + 0.5) * rf 
-        width = (self.ActiveDimensions*self.dds)
+        width = (self.ActiveDimensions*ls.dds)
         output_dims = np.rint(width/level_state.current_dx+0.5).astype("int32") + 2
         level_state.current_dims = output_dims
         new_fields = []

diff -r 46d4d84d797dae33eca0e966c3cc1fbb1a20443c -r ccf290984c0005a576303fc850737b629b307fe3 yt/geometry/selection_routines.pyx
--- a/yt/geometry/selection_routines.pyx
+++ b/yt/geometry/selection_routines.pyx
@@ -53,7 +53,9 @@
 # sometimes also accepting level and mask information.
 
 def _ensure_code(arr):
-    if hasattr(arr, "convert_to_units"):
+    if hasattr(arr, "units"):
+        if "code_length" == str(arr.units):
+            return arr
         arr.convert_to_units("code_length")
     return arr
 
@@ -417,14 +419,16 @@
         _ensure_code(gobj.dds)
         _ensure_code(gobj.LeftEdge)
         _ensure_code(gobj.RightEdge)
-        cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds
-        cdef np.ndarray[np.float64_t, ndim=1] left_edge = gobj.LeftEdge
-        cdef np.ndarray[np.float64_t, ndim=1] right_edge = gobj.RightEdge
+        cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds.d
+        cdef np.ndarray[np.float64_t, ndim=1] oleft_edge = gobj.LeftEdge.d
+        cdef np.ndarray[np.float64_t, ndim=1] oright_edge = gobj.RightEdge.d
         cdef int i, j, k
-        cdef np.float64_t dds[3], pos[3]
+        cdef np.float64_t dds[3], pos[3], left_edge[3], right_edge[3]
         for i in range(3):
             dds[i] = odds[i]
             dim[i] = gobj.ActiveDimensions[i]
+            left_edge[i] = oleft_edge[i]
+            right_edge[i] = oright_edge[i]
         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')
         cdef int total = 0
         cdef int temp
@@ -698,34 +702,41 @@
     cdef np.float64_t right_edge[3]
     cdef np.float64_t right_edge_shift[3]
 
+    @cython.boundscheck(False)
+    @cython.wraparound(False)
     def __init__(self, dobj):
         cdef int i
         # We are modifying dobj.left_edge and dobj.right_edge , so here we will
         # do an in-place conversion of those arrays.
-        _ensure_code(dobj.right_edge)
-        _ensure_code(dobj.left_edge)
-        DW = _ensure_code(dobj.ds.domain_width.copy())
+        cdef np.ndarray[np.float64_t, ndim=1] RE = _ensure_code(dobj.right_edge)
+        cdef np.ndarray[np.float64_t, ndim=1] LE = _ensure_code(dobj.left_edge)
+        cdef np.ndarray[np.float64_t, ndim=1] DW = _ensure_code(dobj.ds.domain_width)
+        cdef np.ndarray[np.float64_t, ndim=1] DLE = _ensure_code(dobj.ds.domain_left_edge)
+        cdef np.ndarray[np.float64_t, ndim=1] DRE = _ensure_code(dobj.ds.domain_right_edge)
+        cdef np.float64_t region_width[3]
+        cdef bint p[3]
 
         for i in range(3):
-            region_width = dobj.right_edge[i] - dobj.left_edge[i]
-            domain_width = DW[i]
+            region_width[i] = RE[i] - LE[i]
+            p[i] = dobj.ds.periodicity[i]
+            DW[i] = DW[i]
+            if region_width[i] <= 0:
+                raise RuntimeError(
+                    "Region right edge[%s] < left edge: width = %s" % (
+                        i, region_width[i]))
 
-            if region_width <= 0:
-                raise RuntimeError(
-                    "Region right edge < left edge: width = %s" % region_width
-                    )
+        for i in range(3):
 
-            if dobj.ds.periodicity[i]:
+            if p[i]:
                 # shift so left_edge guaranteed in domain
-                if dobj.left_edge[i] < dobj.ds.domain_left_edge[i]:
-                    dobj.left_edge[i] += domain_width
-                    dobj.right_edge[i] += domain_width
-                elif dobj.left_edge[i] > dobj.ds.domain_right_edge[i]:
-                    dobj.left_edge[i] += domain_width
-                    dobj.right_edge[i] += domain_width
+                if LE[i] < DLE[i]:
+                    LE[i] += DW[i]
+                    RE[i] += DW[i]
+                elif LE[i] > DRE[i]:
+                    LE[i] -= DW[i]
+                    RE[i] -= DW[i]
             else:
-                if dobj.left_edge[i] < dobj.ds.domain_left_edge[i] or \
-                   dobj.right_edge[i] > dobj.ds.domain_right_edge[i]:
+                if LE[i] < DLE[i] or RE[i] > DRE[i]:
                     raise RuntimeError(
                         "Error: yt attempted to read outside the boundaries of "
                         "a non-periodic domain along dimension %s.\n"
@@ -739,10 +750,9 @@
                          dobj.ds.domain_left_edge[i], dobj.ds.domain_right_edge[i])
                     )
             # Already ensured in code
-            self.left_edge[i] = dobj.left_edge[i]
-            self.right_edge[i] = dobj.right_edge[i]
-            self.right_edge_shift[i] = \
-                (dobj.right_edge).to_ndarray()[i] - domain_width.to_ndarray()
+            self.left_edge[i] = LE[i]
+            self.right_edge[i] = RE[i]
+            self.right_edge_shift[i] = RE[i] - DW[i]
             if not self.periodicity[i]:
                 self.right_edge_shift[i] = -np.inf

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