def parse_bytes(bytes_str):
    """
    uint8_size = ut.parse_bytes('1B')
    image_size = ut.parse_bytes('3.5MB')
    float32_size = ut.parse_bytes('32bit')
    desc_size = 128 * uint8_size
    kpts_size = 6 * float32_size
    chip_size = ut.parse_bytes('400 KB')
    probchip_size = ut.parse_bytes('50 KB')
    nImgs = 80000 # 80,000
    nAnnots = nImgs * 2
    desc_per_img = 3000
    size_stats = {
        'image': nImgs * image_size,
        'chips': nAnnots * chip_size,
        'probchips': nAnnots * probchip_size,
        'desc': nAnnots * desc_size * desc_per_img,
        'kpts': nAnnots * kpts_size * desc_per_img,
    }
    print(ut.repr3(ut.map_dict_vals(ut.byte_str2, size_stats), align=True))
    print('total = ' + ut.byte_str2(sum(size_stats.values())))
    """
    import utool as ut
    import re
    numstr = ut.named_field('num', r'\d\.?\d*')
    unitstr = ut.named_field('unit', r'[a-zA-Z]+')
    match = re.match(numstr + ' *' + unitstr, bytes_str)
    nUnits = float(match.groupdict()['num'])
    unit = match.groupdict()['unit'].upper()
    nBytes = get_bytes(nUnits, unit)
    return nBytes
uint8_size = ut.parse_bytes('1B')
    image_size = ut.parse_bytes('3.5MB')
    float32_size = ut.parse_bytes('32bit')
    desc_size = 128 * uint8_size
    kpts_size = 6 * float32_size
    chip_size = ut.parse_bytes('400 KB')
    probchip_size = ut.parse_bytes('50 KB')
    nImgs = 80000 # 80,000
    nAnnots = nImgs * 2
    desc_per_img = 3000
    size_stats = {
        'image': nImgs * image_size,
        'chips': nAnnots * chip_size,
        'probchips': nAnnots * probchip_size,
        'desc': nAnnots * desc_size * desc_per_img,
        'kpts': nAnnots * kpts_size * desc_per_img,
    }
    print(ut.repr3(ut.map_dict_vals(ut.byte_str2, size_stats), align=True))
    print('total = ' + ut.byte_str2(sum(size_stats.values())))