def linear_interpolation(self, coords, n_jobs=-<NUM_LIT:1>):
if is_address(coords):<EOL><INDENT>(fs, xs) = address_data(coords, dims=<NUM_LIT:2>, strict=False)<EOL>xs = np.vstack([xs, [<NUM_LIT:1> - np.sum(xs, axis=<NUM_LIT:0>)]])<EOL>(n, m) = (xs.shape[<NUM_LIT:1>], self.vertex_count)<EOL>ii = np.where(np.isfinite(np.sum(xs, axis=<NUM_LIT:0>)))[<NUM_LIT:0>]<EOL>fsi = self.tess.index(fs[:,ii])<EOL>return sps.csr_matrix(<EOL>(xs[:,ii].flatten(), (np.tile(np.arange(n)[ii], <NUM_LIT:3>), fsi.flatten())),<EOL>shape=(n, m))<EOL><DEDENT>else: return self.linear_interpolation(self.address(coords, n_jobs=n_jobs))<EOL>
mesh.linear_interpolation(x) yields an interpolation matrix for the given coordinate or 
  coordinate matrix x. An interpolation matrix is just a sparce array M such that for a
  column vector u with the same number of rows as there are vertices in mesh, M * u is the
  interpolated values of u at the coordinates in x.

The coordinate matrix x may alternately be an address-data map, in which case interpolation
is considerably faster.