Load a .pyc file from a file-like object.

    Arguments:
        fp(file): The file-like object to read.

    Returns:
        PycFile: The parsed representation of the .pyc file.

def pyc_load(fp):
    """
    Load a .pyc file from a file-like object.

    Arguments:
        fp(file): The file-like object to read.

    Returns:
        PycFile: The parsed representation of the .pyc file.
    """

    magic_1 = U16(fp.read(2), target=MARSHAL_TARGET)
    magic_2 = U16(fp.read(2), target=MARSHAL_TARGET)

    internals = MAGIC_MAP.get(magic_1)
    if internals is None:
        raise ValueError('Invalid or unknown magic (%d).' % magic_1)

    if magic_2 != 2573:
        raise ValueError('Invalid secondary magic (%d).' % magic_2)

    timestamp = datetime.datetime.fromtimestamp(U32(fp.read(4), target=MARSHAL_TARGET))

    if internals['version'] >= 33:
        file_size = U32(fp.read(4))
    else:
        file_size = None

    code_object = marshal_load(fp, internals)

    return PycFile(magic_1, internals, timestamp, file_size, code_object)