<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_GEO(geo=None, filepath=None, destdir="./", how='full', annotate_gpl=False, geotype=None, include_data=False, silent=False, aspera=False, partial=None):
 """Get the GEO entry. The GEO entry is taken directly from the GEO database or read it from SOFT file. Args: geo (:obj:`str`):
 GEO database identifier. filepath (:obj:`str`):
 Path to local SOFT file. Defaults to None. destdir (:obj:`str`, optional):
 Directory to download data. Defaults to None. how (:obj:`str`, optional):
 GSM download mode. Defaults to "full". annotate_gpl (:obj:`bool`, optional):
 Download the GPL annotation instead of regular GPL. If not available, fallback to regular GPL file. Defaults to False. geotype (:obj:`str`, optional):
 Type of GEO entry. By default it is inferred from the ID or the file name. include_data (:obj:`bool`, optional):
 Full download of GPLs including series and samples. Defaults to False. silent (:obj:`bool`, optional):
 Do not print anything. Defaults to False. aspera (:obj:`bool`, optional):
 EXPERIMENTAL Download using Aspera Connect. Follow Aspera instructions for further details. Defaults to False. partial (:obj:'iterable', optional):
 A list of accession IDs of GSMs to be partially extracted from GPL, works only if a file/accession is a GPL. Returns: :obj:`GEOparse.BaseGEO`: A GEO object of given type. """

    if geo is None and filepath is None:
        raise Exception("You have to specify filename or GEO accession!")
    if geo is not None and filepath is not None:
        raise Exception("You can specify filename or GEO accession - not both!")

    if silent:
        logger.setLevel(100)  # More than critical

    if filepath is None:
        filepath, geotype = get_GEO_file(geo, destdir=destdir, how=how,
                                         annotate_gpl=annotate_gpl,
                                         include_data=include_data,
                                         silent=silent,
                                         aspera=aspera)
    else:
        if geotype is None:
            geotype = path.basename(filepath)[:3]

    logger.info("Parsing %s: " % filepath)
    if geotype.upper() == "GSM":
        return parse_GSM(filepath)
    elif geotype.upper() == "GSE":
        return parse_GSE(filepath)
    elif geotype.upper() == 'GPL':
        return parse_GPL(filepath, partial=partial)
    elif geotype.upper() == 'GDS':
        return parse_GDS(filepath)
    else:
        raise ValueError(("Unknown GEO type: %s. Available types: GSM, GSE, "
                          "GPL and GDS.") % geotype.upper())