def unaddress(self, data, surface=<NUM_LIT:0.5>):
(faces, coords) = address_data(data, <NUM_LIT:3>, surface=surface)<EOL>(bc, ds) = (coords[:<NUM_LIT:2>], coords[<NUM_LIT:2>])<EOL>faces = self.tess.index(faces)<EOL>(wx, px) = (self.white_surface.coordinates, self.pial_surface.coordinates)<EOL>if all(len(np.shape(x)) > <NUM_LIT:1> for x in (faces, coords)):<EOL><INDENT>(wtx, ptx) = [<EOL>np.transpose([sx[:,ff] if ff[<NUM_LIT:0>] >= <NUM_LIT:0> else null for ff in faces.T], (<NUM_LIT:2>,<NUM_LIT:1>,<NUM_LIT:0>))<EOL>for null in [np.full((<NUM_LIT:3>, wx.shape[<NUM_LIT:0>]), np.nan)]<EOL>for sx   in (wx, px)]<EOL><DEDENT>elif faces == -<NUM_LIT:1>:<EOL><INDENT>return np.full(selfx.shape[<NUM_LIT:0>], np.nan)<EOL><DEDENT>else:<EOL><INDENT>(wtx, ptx) = [sx[:,faces].T for sx in (wx, px)]<EOL><DEDENT>(wu, pu) = [geo.barycentric_to_cartesian(tx, bc) for tx in (wtx, ptx)]<EOL>return wu*ds + pu*(<NUM_LIT:1> - ds)<EOL>
cortex.unaddress(address) yields the (3 x n) coordinate matrix of the given addresses (or,
  if address is singular, the 3D vector) in the given cortex. If the address is a 2D instead
  of a 3D address, then the mid-gray position is returned by default.

The following options may be given:
  * surface (default: 0.5) specifies the surface to use for 2D addresses; this should be
    either 'white', 'pial', 'midgray', or a real number in the range [0,1] where 0 is the
    white surface and 1 is the pial surface.