<s> from . robottypes import is_integer , is_string <EOL> def frange ( * args ) : <EOL> """<STR_LIT>""" <EOL> if all ( is_integer ( arg ) for arg in args ) : <EOL> return range ( * args ) <EOL> start , stop , step = _get_start_stop_step ( args ) <EOL> digits = max ( _digits ( start ) , _digits ( stop ) , _digits ( step ) ) <EOL> factor = pow ( <NUM_LIT:10> , digits ) <EOL> return [ x / float ( factor ) for x in range ( int ( round ( start * factor ) ) , <EOL> int ( round ( stop * factor ) ) , <EOL> int ( round ( step * factor ) ) ) ] <EOL> def _get_start_stop_step ( args ) : <EOL> if len ( args ) == <NUM_LIT:1> : <EOL> return <NUM_LIT:0> , args [ <NUM_LIT:0> ] , <NUM_LIT:1> <EOL> if len ( args ) == <NUM_LIT:2> : <EOL> return args [ <NUM_LIT:0> ] , args [ <NUM_LIT:1> ] , <NUM_LIT:1> <EOL> if len ( args ) == <NUM_LIT:3> : <EOL> return args <EOL> raise TypeError ( '<STR_LIT>' % len ( args ) ) <EOL> def _digits ( number ) : <EOL> if not is_string ( number ) : <EOL> number = repr ( number ) <EOL> if '<STR_LIT:e>' in number : <EOL> return _digits_with_exponent ( number ) <EOL> if '<STR_LIT:.>' in number : <EOL> return _digits_with_fractional ( number ) <EOL> return <NUM_LIT:0> <EOL> def _digits_with_exponent ( number ) : <EOL> mantissa , exponent = number . split ( '<STR_LIT:e>' ) <EOL> mantissa_digits = _digits ( mantissa ) <EOL> exponent_digits = int ( exponent ) * - <NUM_LIT:1> <EOL> return max ( mantissa_digits + exponent_digits , <NUM_LIT:0> ) <EOL> def _digits_with_fractional ( number ) : <EOL> fractional = number . split ( '<STR_LIT:.>' ) [ <NUM_LIT:1> ] <EOL> if fractional == '<STR_LIT:0>' : <EOL> return <NUM_LIT:0> <EOL> return len ( fractional ) </s>
