def weighted_choice(self, probabilities, key):
        """Makes a weighted choice between several options.

        Probabilities is a list of 2-tuples, (probability, option). The
        probabilties don't need to add up to anything, they are automatically
        scaled."""

        try:
            choice = self.values[key].lower()
        except KeyError:
            # override not set.
            return super(RecordingParameters, self)\
                .weighted_choice(probabilities, key)

        # Find the matching key (case insensitive)
        for probability, option in probabilities:
            if str(option).lower() == choice:
                return option

        # for function or class-type choices, also check __name__
        for probability, option in probabilities:
            if option.__name__.lower() == choice:
                return option

        assert False, "Invalid value provided"
def weighted_choice ( self , probabilities , key ) : try : choice = self . values [ key ] . lower ( ) except KeyError : return super ( RecordingParameters , self ) . weighted_choice ( probabilities , key ) for probability , option in probabilities : if str ( option ) . lower ( ) == choice : return option for probability , option in probabilities : if option . __name__ . lower ( ) == choice : return option assert False , "Invalid value provided"
Makes a weighted choice between several options.

        Probabilities is a list of 2-tuples, (probability, option). The
        probabilties don't need to add up to anything, they are automatically
        scaled.