def func(pos, idx, verts): pos = pos[-1] for irot in irots: to_pos = rots[irot] @ pos xtgt = (np.linalg.inv(pos) @ to_pos).astype(np.float64) key = binner(xtgt) val = _khash_get(hash_vp, key, -9223372036854775808) # if missing, no hit if val == -9223372036854775808: continue # must use same bblock ibody = verts[-1].ibblock[idx[-1]] ibody0 = np.right_shift(val, 16) % 2**16 if ibody != ibody0: continue # must use different site isite0 = np.right_shift(val, 8) % 2**8 isite1 = val % 2**8 isite = verts[-1].isite[idx[-1], 0] if isite == isite0 or isite == isite1: continue return 0 return 9e9
def func(pos, idx, verts): xhat = pos[to_seg] @ np.linalg.inv(pos[from_seg]) xhat = xhat.astype(np.float64) filter_key = filter_binner(xhat) val = _khash_get(filter_hash_vp, filter_key, -1) if val < 0: return 9e9 prev_ivert = decode_indices(prev_vsize, val)[0] prev_site = prev_isite[prev_ivert, 1] site = verts[-1].isite[idx[-1], 0] if prev_site == site: return 9e9 return 0
def func(pos, idx, verts): xhat = pos[to_seg] @ np.linalg.inv(pos[from_seg]) xhat = xhat.astype(np.float64) filter_key = filter_binner(xhat) if _khash_get(filter_hash_vp, filter_key, -1) < 0: return 9e9 key = binner(xhat.astype(np.float64)) nverts = np.zeros((len(verts), ), dtype=np.int64) for i in range(len(nverts)): nverts[i] = len(verts[i].ibblock) index = encode_indices(nverts, idx) _khash_set(hash_vp, key, index) return 9e9
def with_khash(fid, values, fetch_ids): d = _khash_init() fix = 0 for i in range(fid.shape[0]): _khash_set(d, fid[i], fix) fix += 1 s = np.empty_like(fetch_ids, dtype=np.float64) for j in range(fetch_ids.shape[0]): ii = _khash_get(d, fetch_ids[j], -99) s[j] = values[ii] _khash_destroy(d) return s