<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def geom_iter(self, g_nums):
 """Iterator over a subset of geometries. The indices of the geometries to be returned are indicated by an iterable of |int|\\ s passed as `g_nums`. As with :meth:`geom_single`, each geometry is returned as a length-3N |npfloat_| with each atom's x/y/z coordinates grouped together:: In order to use NumPy `slicing or advanced indexing <http://docs.scipy.org/doc/numpy-1.10.0/reference/ arrays.indexing.html>`__, :data:`geoms` must first be explicitly converted to |nparray|, e.g.:: Parameters g_nums length-R iterable of |int| -- Indices of the desired geometries Yields ------ geom length-3N |npfloat_| -- Vectors of the atomic coordinates for each geometry indicated in `g_nums` Raises ------ ~exceptions.IndexError If an item in `g_nums` is invalid (out of range) """

        # Using the custom coded pack_tups to not have to care whether the
        #  input is iterable
        from .utils import pack_tups

        vals = pack_tups(g_nums)
        for val in vals:
            yield self.geom_single(val[0])