Creates an iterator over one of the index dimensions of the object.

        Example for a discrete variable::

            for l in s.generate('layer',remove_dimensions=False,resolution=2):
                # taking two layers at a time
                print l

        Example for two continuous variables::

            for l in s.generate('x','y',remove_dimensions=False,bins=3,reversed=True):
                # will generate x0,y0 | x1,y0 | x2,y0 | x0,y1 | x1,y1 | ...
                # (default is reversed=True)
                print l
            for l in s.generate('x','y',remove_dimensions=False,bins=3,reversed=False):
                # will generate x0,y0 | x0,y1 | x0,y2 | x1,y0 | x1,y1 | ...
                print l

        remove_dimensions: False
            Whether the labels that are used for generation should be removed in the generated objects.
        resolution:     None
            If set to an integer, the dimension used for generation will be split into parts of size `resolution`.
        bins:           None
            If set to an integer, the dimension used for generation will be split into `bins` many, equal parts.
        reversed:       True
            Whether argument list should be reversed, such that the first argument is rotated first.

        .. note::

            Discrete Labels (units='1') will behave differently than continuous Labels (units='1.0' or 's' etc.)
            To emulate the discrete behaviour, you can pass `end_at_end=False` to the function.
            The default behaviour is continuous if `units != '1'` (that is the output units if specified).

            Generating discretely from 0...5 will yield 6 times: 0, 1, 2, 3, 4, 5 while generating continuously
            will generate only 5 iterations: 0.0-1.0,1.0-2.0,2.0-3.0,3.0-4.0,4.0-5.0 (at a resolution of 1.0).

def generate(self,*args,**kwargs):
        """
        Creates an iterator over one of the index dimensions of the object.

        Example for a discrete variable::

            for l in s.generate('layer',remove_dimensions=False,resolution=2):
                # taking two layers at a time
                print l

        Example for two continuous variables::

            for l in s.generate('x','y',remove_dimensions=False,bins=3,reversed=True):
                # will generate x0,y0 | x1,y0 | x2,y0 | x0,y1 | x1,y1 | ...
                # (default is reversed=True)
                print l
            for l in s.generate('x','y',remove_dimensions=False,bins=3,reversed=False):
                # will generate x0,y0 | x0,y1 | x0,y2 | x1,y0 | x1,y1 | ...
                print l

        remove_dimensions: False
            Whether the labels that are used for generation should be removed in the generated objects.
        resolution:     None
            If set to an integer, the dimension used for generation will be split into parts of size `resolution`.
        bins:           None
            If set to an integer, the dimension used for generation will be split into `bins` many, equal parts.
        reversed:       True
            Whether argument list should be reversed, such that the first argument is rotated first.

        .. note::

            Discrete Labels (units='1') will behave differently than continuous Labels (units='1.0' or 's' etc.)
            To emulate the discrete behaviour, you can pass `end_at_end=False` to the function.
            The default behaviour is continuous if `units != '1'` (that is the output units if specified).

            Generating discretely from 0...5 will yield 6 times: 0, 1, 2, 3, 4, 5 while generating continuously
            will generate only 5 iterations: 0.0-1.0,1.0-2.0,2.0-3.0,3.0-4.0,4.0-5.0 (at a resolution of 1.0).

        """
        for st in self.spike_times.generate(*args,**kwargs):
            yield SpikeContainer(st, copy_from=self)