<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def calculate_elem_per_kb(max_chunk_kb, matrix_dtype):
 """ Calculates the number of elem per kb depending on the max chunk size set. Input: - max_chunk_kb (int, default=1024):
 The maximum number of KB a given chunk will occupy - matrix_dtype (numpy dtype, default=numpy.float32):
 Storage data type for data matrix. Currently needs to be np.float32 or np.float64 (TODO: figure out a better way to get bits from a numpy dtype). Returns: elem_per_kb (int), the number of elements per kb for matrix dtype specified. """

    if matrix_dtype == numpy.float32:
        return (max_chunk_kb * 8)/32
    elif matrix_dtype == numpy.float64:
        return (max_chunk_kb * 8)/64
    else:
        msg = "Invalid matrix_dtype: {}; only numpy.float32 and numpy.float64 are currently supported".format(matrix_dtype)
        logger.error(msg)
        raise Exception("write_gctx.calculate_elem_per_kb " + msg)