1cdef class OctreeSubsetSelector(SelectorObject): 2 3 def __init__(self, dobj): 4 self.base_selector = dobj.base_selector 5 self.min_level = self.base_selector.min_level 6 self.max_level = self.base_selector.max_level 7 self.domain_id = dobj.domain_id 8 self.overlap_cells = getattr(dobj.oct_handler, 'overlap_cells', 1) 9 10 @cython.boundscheck(False) 11 @cython.wraparound(False) 12 @cython.cdivision(True) 13 def select_grids(self, 14 np.ndarray[np.float64_t, ndim=2] left_edges, 15 np.ndarray[np.float64_t, ndim=2] right_edges, 16 np.ndarray[np.int32_t, ndim=2] levels): 17 raise RuntimeError 18 19 @cython.boundscheck(False) 20 @cython.wraparound(False) 21 @cython.cdivision(True) 22 cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil: 23 return 1 24 25 @cython.boundscheck(False) 26 @cython.wraparound(False) 27 @cython.cdivision(True) 28 cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil: 29 return 1 30 31 @cython.boundscheck(False) 32 @cython.wraparound(False) 33 @cython.cdivision(True) 34 cdef int select_point(self, np.float64_t pos[3]) nogil: 35 return self.base_selector.select_point(pos) 36 37 @cython.boundscheck(False) 38 @cython.wraparound(False) 39 @cython.cdivision(True) 40 cdef int select_bbox(self, np.float64_t left_edge[3], 41 np.float64_t right_edge[3]) nogil: 42 # return 1 43 return self.base_selector.select_bbox(left_edge, right_edge) 44 45 @cython.boundscheck(False) 46 @cython.wraparound(False) 47 @cython.cdivision(True) 48 cdef int select_grid(self, np.float64_t left_edge[3], 49 np.float64_t right_edge[3], np.int32_t level, 50 Oct *o = NULL) nogil: 51 # Because visitors now use select_grid, we should be explicitly 52 # checking this. 53 cdef int res 54 res = self.base_selector.select_grid(left_edge, right_edge, level, o) 55 if self.domain_id == -1: 56 return res 57 elif res == 1 and o != NULL and o.domain != self.domain_id: 58 return -1 59 return res 60 61 def _hash_vals(self): 62 return (hash(self.base_selector), self.domain_id) 63 64octree_subset_selector = OctreeSubsetSelector 65