def test_tag_shallow_copy(): """ Tests that PyMOAB will handle the passing of a shallow-copy numpy expression appropriately """ mb = core.Core() vh = vertex_handle(mb) test_tag = mb.tag_get_handle("Test", 5, types.MB_TYPE_DOUBLE, True, types.MB_TAG_SPARSE) test_val = np.array([1., 2., 3., 4., 5.]) mb.tag_set_data(test_tag, vh, test_val) # some other large numpy array external_data = np.ones((5, 10)) external_data[0, :] = np.linspace(1, 10, 10) external_data[1, :] = np.linspace(1, 10, 10) external_data[2, :] = np.linspace(1, 10, 10) external_data[3, :] = np.linspace(1, 10, 10) external_data[4, :] = np.linspace(1, 10, 10) # slice data (shallow copy, unevaluated) data_slice = external_data[:, 0] # update data mb.tag_set_data(test_tag, vh, data_slice) expected_data = np.array([1., 1., 1., 1., 1.]) actual_data = mb.tag_get_data(test_tag, vh, flat=True) CHECK_ITER_EQ(actual_data, expected_data)
def test_set_coords(): mb = core.Core() coords = np.array((0, 0, 0, 1, 0, 0, 1, 1, 1), dtype='float64') verts = mb.create_vertices(coords) ret_coords = mb.get_coords(verts) coords += 1.0 # Shift x/y/z coordinates by 1.0 mb.set_coords(verts, coords) ret_coords2 = mb.get_coords(verts) for i in range(len(coords)): CHECK_EQ(ret_coords[i], ret_coords2[i] - 1.0) # check that setting with a single eh is ok coord = np.array((5, 5, 5), dtype='float64') mb.set_coords(verts[0], coord) ret_coords3 = mb.get_coords(verts[0]) CHECK_ITER_EQ(ret_coords3, coord)
def test_vec_tags(): mb = core.Core() coords = np.array((0, 0, 0, 1, 0, 0, 1, 1, 1), dtype='float64') verts = mb.create_vertices(coords) int_vec_test_tag = mb.tag_get_handle("IntegerVecTestTag", 3, types.MB_TYPE_INTEGER, types.MB_TAG_DENSE, True) dbl_vec_test_tag = mb.tag_get_handle("DoubleVecTestTag", 3, types.MB_TYPE_DOUBLE, types.MB_TAG_DENSE, True) opaque_vec_test_tag = mb.tag_get_handle("OPTag", 10, types.MB_TYPE_OPAQUE, types.MB_TAG_DENSE, True) #should be able to successfully tag using a 2-D array int_vec_test_tag_values = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) dbl_vec_test_tag_values = np.array([[9.0, 10.0, 11.0], [12.0, 13.0, 14.0], [15.0, 16.0, 17.0]]) opaque_vec_test_tag_values = np.array([["One"], ["Two"], ["Three"]]) mb.tag_set_data(int_vec_test_tag, verts, int_vec_test_tag_values) mb.tag_set_data(dbl_vec_test_tag, verts, dbl_vec_test_tag_values) mb.tag_set_data(opaque_vec_test_tag, verts, opaque_vec_test_tag_values) #or a 1-D array int_vec_test_tag_values_flat = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8]) dbl_vec_test_tag_values_flat = np.array( [9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0]) opaque_vec_test_tag_values_flat = np.array(["One", "Two", "Three"]) mb.tag_set_data(int_vec_test_tag, verts, int_vec_test_tag_values) mb.tag_set_data(dbl_vec_test_tag, verts, dbl_vec_test_tag_values) mb.tag_set_data(opaque_vec_test_tag, verts, opaque_vec_test_tag_values_flat) #these values should then be able to be retrieved as a 2-D array returned_int_test_tag_values = mb.tag_get_data(int_vec_test_tag, verts) CHECK_ITER_EQ(returned_int_test_tag_values, int_vec_test_tag_values) returned_dbl_test_tag_values = mb.tag_get_data(dbl_vec_test_tag, verts) CHECK_ITER_EQ(returned_dbl_test_tag_values, dbl_vec_test_tag_values) returned_opaque_test_tag_values = mb.tag_get_data(opaque_vec_test_tag, verts) CHECK_ITER_EQ(returned_opaque_test_tag_values, opaque_vec_test_tag_values) #or as a 1-D array returned_int_test_tag_values = mb.tag_get_data(int_vec_test_tag, verts, flat=True) CHECK_ITER_EQ(returned_int_test_tag_values, int_vec_test_tag_values_flat) returned_dbl_test_tag_values = mb.tag_get_data(dbl_vec_test_tag, verts, flat=True) CHECK_ITER_EQ(returned_dbl_test_tag_values, dbl_vec_test_tag_values_flat) returned_opaque_test_tag_values = mb.tag_get_data(opaque_vec_test_tag, verts, flat=True) CHECK_ITER_EQ(returned_opaque_test_tag_values, opaque_vec_test_tag_values_flat)
def test_w_coordinates(): mb = core.Core() scd = ScdInterface(mb) xs = [-1, 3, 5] ys = [-1, 1] zs = [-1, 1] coords = [] for k in zs: for j in ys: for i in xs: coords += [i, j, k] low = HomCoord([0, 0, 0, 0]) high = HomCoord([2, 1, 1, 0]) scdbox = scd.construct_box(low, high, coords) verts = mb.get_entities_by_type(0, types.MBVERTEX) assert len(verts) == 12 # check verts for k in range(high[2] + 1): for j in range(high[1] + 1): for i in range(high[0] + 1): vert = scdbox.get_vertex([i, j, k]) CHECK_TYPE(vert, _eh_py_type) vert_coords = mb.get_coords(vert) assert (all(vert_coords == [xs[i], ys[j], zs[k]])) hexes = mb.get_entities_by_type(0, types.MBHEX) hex_con_str = "Hex {} connectivity is: {}" vert_str = "Vert: {}" assert len(hexes) == 2 # expected vertex connectivity hex1_conn = [1, 2, 5, 4, 7, 8, 11, 10] hex2_conn = [2, 3, 6, 5, 8, 9, 12, 11] hex_connectivity = [hex1_conn, hex2_conn] for i, h in enumerate(hexes): CHECK_ITER_EQ(mb.get_connectivity(h), hex_connectivity[i])
def test_get_bridge_adjacencies(): mb = core.Core() coords = np.array((0,0,0,1,0,0,1,1,1),dtype='float64') verts = mb.create_vertices(coords) CHECK_EQ(len(verts), 3) conn = np.array(((verts[0],verts[1],verts[2]),),dtype='uint64') tris = mb.create_elements(types.MBTRI, conn) mtu = topo_util.MeshTopoUtil(mb) rs = mb.get_root_set() tris = mb.get_entities_by_dimension(rs, 2) CHECK_EQ(len(tris), 1) adj_verts = mtu.get_bridge_adjacencies(tris, 0, 0, 1) CHECK_ITER_EQ(adj_verts,verts)