def repr_data_size(size_in_bytes, precision=<NUM_LIT:2>):
if size_in_bytes < <NUM_LIT>:<EOL><INDENT>return "<STR_LIT>" % size_in_bytes<EOL><DEDENT>index = <NUM_LIT:0><EOL>while <NUM_LIT:1>:<EOL><INDENT>index += <NUM_LIT:1><EOL>size_in_bytes, mod = divmod(size_in_bytes, <NUM_LIT>)<EOL>if size_in_bytes < <NUM_LIT>:<EOL><INDENT>break<EOL><DEDENT><DEDENT>template = "<STR_LIT>" % precision<EOL>s = template.format(size_in_bytes + mod / <NUM_LIT>, MAGNITUDE_OF_DATA[index])<EOL>return s<EOL>
Return human readable string represent of a file size. Doesn't support
size greater than 1EB.

For example:

- 100 bytes => 100 B
- 100,000 bytes => 97.66 KB
- 100,000,000 bytes => 95.37 MB
- 100,000,000,000 bytes => 93.13 GB
- 100,000,000,000,000 bytes => 90.95 TB
- 100,000,000,000,000,000 bytes => 88.82 PB
...

Magnitude of data::

    1000         kB    kilobyte
    1000 ** 2    MB    megabyte
    1000 ** 3    GB    gigabyte
    1000 ** 4    TB    terabyte
    1000 ** 5    PB    petabyte
    1000 ** 6    EB    exabyte
    1000 ** 7    ZB    zettabyte
    1000 ** 8    YB    yottabyte