<s> import functools <EOL> @ functools . total_ordering <EOL> class Lexicographic ( object ) : <EOL> def __init__ ( self , values = None , maximize = True ) : <EOL> if values is None : <EOL> values = [ ] <EOL> self . values = values <EOL> try : <EOL> iter ( maximize ) <EOL> except TypeError : <EOL> maximize = [ maximize for v in values ] <EOL> self . maximize = maximize <EOL> def __len__ ( self ) : <EOL> return len ( self . values ) <EOL> def __getitem__ ( self , key ) : <EOL> return self . values [ key ] <EOL> def __iter__ ( self ) : <EOL> return iter ( self . values ) <EOL> def __lt__ ( self , other ) : <EOL> for v , o , m in zip ( self . values , other . values , self . maximize ) : <EOL> if m : <EOL> if v < o : <EOL> return True <EOL> elif v > o : <EOL> return False <EOL> else : <EOL> if v > o : <EOL> return True <EOL> elif v < o : <EOL> return False <EOL> return False <EOL> def __eq__ ( self , other ) : <EOL> return ( self . values == other . values and self . maximize == other . maximize ) <EOL> def __str__ ( self ) : <EOL> return str ( self . values ) <EOL> def __repr__ ( self ) : <EOL> return str ( self . values ) <EOL> def my_evaluator ( candidates , args ) : <EOL> fitness = [ ] <EOL> for candidate in candidates : <EOL> f = candidate [ <NUM_LIT:0> ] ** <NUM_LIT:2> + <NUM_LIT:1> <EOL> g = candidate [ <NUM_LIT:0> ] ** <NUM_LIT:2> - <NUM_LIT:1> <EOL> fitness . append ( Lexicographic ( [ f , g ] , maximize = False ) ) <EOL> return fitness <EOL> def my_generator ( random , args ) : <EOL> return [ random . random ( ) ] <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> a = Lexicographic ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , maximize = True ) <EOL> b = Lexicographic ( [ <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:2> ] , maximize = True ) <EOL> c = Lexicographic ( [ <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:3> ] , maximize = True ) <EOL> d = Lexicographic ( [ <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:1> ] , maximize = True ) <EOL> e = Lexicographic ( [ <NUM_LIT:3> , <NUM_LIT:1> , <NUM_LIT:2> ] , maximize = True ) <EOL> f = Lexicographic ( [ <NUM_LIT:3> , <NUM_LIT:2> , <NUM_LIT:1> ] , maximize = True ) <EOL> u = Lexicographic ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , maximize = False ) <EOL> v = Lexicographic ( [ <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:2> ] , maximize = False ) <EOL> w = Lexicographic ( [ <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:3> ] , maximize = False ) <EOL> x = Lexicographic ( [ <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:1> ] , maximize = False ) <EOL> y = Lexicographic ( [ <NUM_LIT:3> , <NUM_LIT:1> , <NUM_LIT:2> ] , maximize = False ) <EOL> z = Lexicographic ( [ <NUM_LIT:3> , <NUM_LIT:2> , <NUM_LIT:1> ] , maximize = False ) <EOL> for p in [ a , b , c , d , e , f ] : <EOL> for q in [ a , b , c , d , e , f ] : <EOL> print ( '<STR_LIT>' % ( p , q , p < q ) ) <EOL> print ( '<STR_LIT>' ) <EOL> for p in [ u , v , w , x , y , z ] : <EOL> for q in [ u , v , w , x , y , z ] : <EOL> print ( '<STR_LIT>' % ( p , q , p < q ) ) </s>
