def address(self, data, n_jobs=-<NUM_LIT:1>):
<EOL>if isinstance(data, Mesh): return self.address(data.coordinates)<EOL>data = np.asarray(data)<EOL>idxfs = self.tess.indexed_faces<EOL>coords = self.coordinates<EOL>dims = coords.shape[<NUM_LIT:0>]<EOL>if len(data.shape) == <NUM_LIT:1>:<EOL><INDENT>try:              face_id = self.container(data, n_jobs=n_jobs)<EOL>except Exception: face_id = self.container(data)<EOL>if face_id is None:<EOL><INDENT>return {'<STR_LIT>':np.array([<NUM_LIT:0>,<NUM_LIT:0>,<NUM_LIT:0>]), '<STR_LIT>':np.full(<NUM_LIT:2>,np.nan)}<EOL><DEDENT>tx = coords[:, idxfs[:,face_id]].T<EOL>faces = self.tess.faces[:,face_id]<EOL><DEDENT>else:<EOL><INDENT>data = data if data.shape[<NUM_LIT:1>] == <NUM_LIT:3> or data.shape[<NUM_LIT:1>] == <NUM_LIT:2> else data.T<EOL>n = data.shape[<NUM_LIT:0>]<EOL>try:              face_id = np.asarray(self.container(data), n_jobs=n_jobs)<EOL>except Exception: face_id = np.asarray(self.container(data))<EOL>tx = np.full((<NUM_LIT:3>, dims, n), np.nan)<EOL>oks = np.where(np.logical_not(np.equal(face_id, None)))[<NUM_LIT:0>]<EOL>okfids = face_id[oks].astype('<STR_LIT:int>')<EOL>tx[:,:,oks] = np.transpose(<EOL>np.reshape(coords[:,idxfs[:,okfids].flatten()], (dims, <NUM_LIT:3>, oks.shape[<NUM_LIT:0>])),<EOL>(<NUM_LIT:1>,<NUM_LIT:0>,<NUM_LIT:2>))<EOL>faces = np.full((<NUM_LIT:3>, n), <NUM_LIT:0>, dtype=np.int)<EOL>faces[:,oks] = self.tess.faces[:,okfids]<EOL><DEDENT>bc = cartesian_to_barycentric_3D(tx, data) if dims == <NUM_LIT:3> elsecartesian_to_barycentric_2D(tx, data)<EOL>return {'<STR_LIT>': faces, '<STR_LIT>': bc}<EOL>
mesh.address(X) yields a dictionary containing the address or addresses of the point or
  points given in the vector or coordinate matrix X. Addresses specify a single unique 
  topological location on the mesh such that deformations of the mesh will address the same
  points differently. To convert a point from one mesh to another isomorphic mesh, you can
  address the point in the first mesh then unaddress it in the second mesh.