def _advance_pattern_generators(self,p):
        """
        Advance the parameters for each generator for this
        presentation.

        Picks a position for each generator that is accepted by
        __distance_valid for all combinations.  Returns a new list of
        the generators, with some potentially omitted due to failure
        to meet the constraints.
        """

        valid_generators = []
        for g in p.generators:

            for trial in range(self.max_trials):
                # Generate a new position and add generator if it's ok

                if np.alltrue([self.__distance_valid(g,v,p) for v in valid_generators]):
                    valid_generators.append(g)
                    break

                g.force_new_dynamic_value('x')
                g.force_new_dynamic_value('y')

            else:
                self.warning("Unable to place pattern %s subject to given constraints" %
                             g.name)

        return valid_generators
Advance the parameters for each generator for this
        presentation.

        Picks a position for each generator that is accepted by
        __distance_valid for all combinations.  Returns a new list of
        the generators, with some potentially omitted due to failure
        to meet the constraints.