<s> """<STR_LIT>""" <EOL> from decorators import cu <EOL> @ cu <EOL> def range ( n ) : <EOL> return indices ( replicate ( <NUM_LIT:0> , n ) ) <EOL> @ cu <EOL> def gather ( x , i ) : <EOL> def el ( ii ) : <EOL> return x [ ii ] <EOL> return map ( el , i ) <EOL> @ cu <EOL> def update ( dst , updates ) : <EOL> indices , src = unzip ( updates ) <EOL> return scatter ( src , indices , dst ) <EOL> @ cu <EOL> def any ( preds ) : <EOL> return reduce ( op_or , preds , False ) <EOL> @ cu <EOL> def all ( preds ) : <EOL> return reduce ( op_and , preds , True ) <EOL> @ cu <EOL> def sum ( x ) : <EOL> return reduce ( op_add , x , cast_to_el ( <NUM_LIT:0> , x ) ) <EOL> @ cu <EOL> def min ( x ) : <EOL> def min_el ( a , b ) : <EOL> if a < b : <EOL> return a <EOL> else : <EOL> return b <EOL> return reduce ( min_el , x , x [ <NUM_LIT:0> ] ) <EOL> @ cu <EOL> def max ( x ) : <EOL> def max_el ( a , b ) : <EOL> if a > b : <EOL> return a <EOL> else : <EOL> return b <EOL> return reduce ( max_el , x , x [ <NUM_LIT:0> ] ) <EOL> @ cu <EOL> def shift ( x , a , d ) : <EOL> def shift_el ( i ) : <EOL> i = i + a <EOL> if i < <NUM_LIT:0> or i >= len ( x ) : <EOL> return d <EOL> else : <EOL> return x [ i ] <EOL> return map ( shift_el , indices ( x ) ) <EOL> @ cu <EOL> def rotate ( x , a ) : <EOL> def torus_index ( i , a , b ) : <EOL> return ( i + a ) % b <EOL> def rotate_el ( i ) : <EOL> return x [ torus_index ( i , a , len ( x ) ) ] <EOL> return map ( rotate_el , indices ( x ) ) <EOL> @ cu <EOL> def bounded_range ( a , b ) : <EOL> length = b - a <EOL> return [ xi + a for xi in range ( length ) ] <EOL> @ cu <EOL> def enumerate ( x ) : <EOL> return zip ( range ( len ( x ) ) , x ) </s>
