def forward(self, x):
if   pimms.is_vector(x, '<STR_LIT>'):     return self.forward([x])[<NUM_LIT:0>]<EOL>elif isinstance(x, Mesh):            return x.copy(coordinates=self.forward(x.coordinates))<EOL>elif not pimms.is_matrix(x, '<STR_LIT>'): raise ValueError('<STR_LIT>')<EOL>x = np.asarray(x)<EOL>if x.shape[<NUM_LIT:0>] != <NUM_LIT:3>:<EOL><INDENT>if x.shape[<NUM_LIT:1>] != <NUM_LIT:3>: raise ValueError('<STR_LIT>')<EOL>else: return self.forward(x.T).T<EOL><DEDENT>ones = np.ones((<NUM_LIT:1>, x.shape[<NUM_LIT:1>]))<EOL>aff0 = self.alignment_matrix<EOL>x = aff0.dot(np.concatenate((x, ones)))[<NUM_LIT:0>:<NUM_LIT:3>]<EOL>fwd = MapProjection.projection_forward_methods[self.method]<EOL>x = fwd(x, sphere_radius=self._sphere_radius)<EOL>ptx = self.post_affine<EOL>if ptx is not None:<EOL><INDENT>x = ptx.dot(np.concatenate((x, ones)))[<NUM_LIT:0>:<NUM_LIT:2>]<EOL><DEDENT>return x<EOL>
proj.forward(x) yields the result of projecting the given 3D coordinate or coordinates in x
  through the map projection proj; the result will be a 2D vector or matrix with the same
  shape as x (up to conversion of 3D to 2D).
proj.forward(mesh) yeilds the 2D mesh that results from the projection.

Note that proj.forward does not perform any trimming w.r.t. the radius parameter; this is
intentional. For a full-featured projection with trimming use proj(x) or proj(mesh); this
is equivalent to proj.forward(proj.select_domain(x)).