コード例 #1
0
 def load_setting(self, setting, prefix=''):
     if isseq(setting):
         setting_list = setting
     elif isinstance(setting, (str, unicode)):
         setting_file = open(setting)
         setting_list = []
         current_lines = []
         for l in setting_file:
             l = l.rstrip()
             if not l:
                 continue
             current_lines.append(l)
             if not l.endswith(','):
                 joined = '\n'.join(current_lines)
                 setting_list.append(joined)
                 current_lines = []
         if current_lines:
             setting_list.append('\n'.join(current_lines))
     for setting_item in setting_list:
         if setting_item.startswith(prefix):
             try:
                 setting_item = setting_item.lstrip(prefix)
                 cmd = 'self.' + setting_item
                 exec cmd
             except Exception as e:
                 pass
コード例 #2
0
ファイル: misc.py プロジェクト: yeyuguo/metamet
 def load_setting(self, setting, prefix=""):
     if isseq(setting):
         setting_list = setting
     elif isinstance(setting, (str, unicode)):
         setting_file = open(setting)
         setting_list = []
         current_lines = []
         for l in setting_file:
             l = l.rstrip()
             if not l:
                 continue
             current_lines.append(l)
             if not l.endswith(","):
                 joined = "\n".join(current_lines)
                 setting_list.append(joined)
                 current_lines = []
         if current_lines:
             setting_list.append("\n".join(current_lines))
     for setting_item in setting_list:
         if setting_item.startswith(prefix):
             try:
                 setting_item = setting_item.lstrip(prefix)
                 cmd = "self." + setting_item
                 exec cmd
             except Exception as e:
                 pass
コード例 #3
0
ファイル: misc.py プロジェクト: yeyuguo/metamet
def datetime2yearseason(dts, seasonformat='name', sep='_', DJF='JF_year'):
    """Converts datetime to "Year_Season" strs
    Parameters:
        dts: datetime / datetime seq;
        seasonformat: '0123', '1234', 'name' or ANY seq with at least 4 elements;
        sep: result str is "Year" + sep + "Season";
        DJF: 
            'JF_year' (default): December belongs to the next year (same as Jan/Feb).
            'D_year': Jan/Feb belongs to the prev year (same as Dec).
            '': Dec/Jan/Feb belongs to its own year.
    Returns:
        "Year_Season" str/seq.
"""
    dts = T(dts)
    if isseq(dts):
        scalar_res = False
    else:
        scalar_res = True
        dts = np.array([dts])

    seasons = datetime2season(dts, seasonformat)
    years = np.array([dt.year for dt in dts])
    months = np.array([dt.month for dt in dts])
    if DJF == 'JF_year':
        years[months == 12] += 1
    elif DJF == 'D_year':
        years[months == 1] -= 1
        years[months == 2] -= 1
    res = np.array(['%s%s%s' % (year, sep, season) for year, season in zip(years, seasons)])
    if scalar_res:
        res = res[0]
    return res
コード例 #4
0
ファイル: misc.py プロジェクト: ddlddl58/metamet
def datetime2yearseason(dts, seasonformat='name', sep='_', DJF='JF_year'):
    """Converts datetime to "Year_Season" strs
    Parameters:
        dts: datetime / datetime seq;
        seasonformat: '0123', '1234', 'name' or ANY seq with at least 4 elements;
        sep: result str is "Year" + sep + "Season";
        DJF: 
            'JF_year' (default): December belongs to the next year (same as Jan/Feb).
            'D_year': Jan/Feb belongs to the prev year (same as Dec).
            '': Dec/Jan/Feb belongs to its own year.
    Returns:
        "Year_Season" str/seq.
"""
    dts = T(dts)
    if isseq(dts):
        scalar_res = False
    else:
        scalar_res = True
        dts = np.array([dts])

    seasons = datetime2season(dts, seasonformat)
    years = np.array([dt.year for dt in dts])
    months = np.array([dt.month for dt in dts])
    if DJF == 'JF_year':
        years[months == 12] += 1
    elif DJF == 'D_year':
        years[months == 1] -= 1
        years[months == 2] -= 1
    res = np.array([
        '%s%s%s' % (year, sep, season) for year, season in zip(years, seasons)
    ])
    if scalar_res:
        res = res[0]
    return res
コード例 #5
0
ファイル: util.py プロジェクト: ddlddl58/metamet
def format_ticks(ax=None, fmt=None, axis='x', **kwargs):
    """Format ticks.
    ax: ax, default gca().
    fmt: date format like "%Y%m%d", or format string like "%.2f", or a func, or sequence of strs, or sequence of (position, str), default None.
    axis: 'x' | 'y' | 'z', default 'x'.
    kwargs: anything that can be applied to ticklabels, e.g., fontsize, fontweight, etc.
    """
    if not ax:
        ax = plt.gca()

    if axis == 'x':
        theaxis = ax.xaxis
    elif axis == 'y':
        theaxis = ax.yaxis
    elif theaxis == 'z':
        theaxis = ax.zaxis
    else:
        theaxis = Null

    if fmt:
        datefmt_pattern = r'%H|%I|%M|%S|%Y|%y|%m|%w|%W|%a|%A|%b|%B|%p|%z|%Z|%j|%U|%c|%x|%X'
        str_pattern = r'%'
        if callable(fmt):
            fmt = FuncFormatter(fmt)
        elif isinstance(fmt, (str, unicode, np.string_)):
            if re.search(datefmt_pattern, fmt):
                fmter = DateFormatter(fmt)
            elif re.search(str_pattern, fmt):
                fmter = FormatStrFormatter(fmt)
            else:
                fmter = Null
        elif isseq(fmt):
            if np.ndim(fmt) == 1:
                fmter = FixedFormatter(fmt)
            elif np.ndim(fmt) == 2 and np.shape(fmt)[1] == 2:
                fmt = np.array(fmt)
                pos = fmt[:, 0]
                fmter = FixedFormatter(fmt[:, 1])
                theaxis.set_ticks(pos)
            else:
                fmter = Null
        else:
            fmt = Null

        if fmter:
            theaxis.set_major_formatter(fmter)

    ticklabels = theaxis.get_ticklabels()
    for key, value in kwargs.iteritems():
        little_kwargs = {key: value}
        try:
            plt.setp(ticklabels, **little_kwargs)
        except Exception as e:
            warnings.warn(e)
コード例 #6
0
ファイル: util.py プロジェクト: yeyuguo/metamet
def format_ticks(ax=None, fmt=None, axis='x', **kwargs):
    """Format ticks.
    ax: ax, default gca().
    fmt: date format like "%Y%m%d", or format string like "%.2f", or a func, or sequence of strs, or sequence of (position, str), default None.
    axis: 'x' | 'y' | 'z', default 'x'.
    kwargs: anything that can be applied to ticklabels, e.g., fontsize, fontweight, etc.
    """
    if not ax:
        ax = plt.gca()

    if axis == 'x':
        theaxis = ax.xaxis
    elif axis == 'y':
        theaxis = ax.yaxis
    elif theaxis == 'z':
        theaxis = ax.zaxis
    else:
        theaxis = Null

    if fmt:
        datefmt_pattern = r'%H|%I|%M|%S|%Y|%y|%m|%w|%W|%a|%A|%b|%B|%p|%z|%Z|%j|%U|%c|%x|%X'
        str_pattern = r'%'
        if callable(fmt):
            fmt = FuncFormatter(fmt)
        elif isinstance(fmt, (str, unicode, np.string_)):
            if re.search(datefmt_pattern, fmt):
                fmter = DateFormatter(fmt)
            elif re.search(str_pattern, fmt):
                fmter = FormatStrFormatter(fmt)
            else:
                fmter = Null
        elif isseq(fmt):
            if np.ndim(fmt) == 1:
                fmter = FixedFormatter(fmt)
            elif np.ndim(fmt) == 2 and np.shape(fmt)[1] == 2:
                fmt = np.array(fmt)
                pos = fmt[:, 0]
                fmter = FixedFormatter(fmt[:,1])
                theaxis.set_ticks(pos)
            else:
                fmter = Null
        else:
            fmt = Null

        if fmter:
            theaxis.set_major_formatter(fmter)

    ticklabels = theaxis.get_ticklabels()
    for key, value in kwargs.iteritems():
        little_kwargs = {key:value}
        try:
            plt.setp(ticklabels, **little_kwargs)
        except Exception as e:
            warnings.warn(e)
コード例 #7
0
ファイル: misc.py プロジェクト: yeyuguo/metamet
def datetime2season(dts, outformat='0123'):
    """Converts datetime to season number or names.
    Parameters:
        dts: datetime / datetime seq.
        outformat: '0123', '1234', 'name' or ANY seq with at least 4 elements
"""
    if isseq(dts):
        months = [dt.month for dt in T(dts)]
    else:
        months = T(dts).month
    return month2season(months, outformat=outformat)
コード例 #8
0
ファイル: misc.py プロジェクト: ddlddl58/metamet
def datetime2season(dts, outformat='0123'):
    """Converts datetime to season number or names.
    Parameters:
        dts: datetime / datetime seq.
        outformat: '0123', '1234', 'name' or ANY seq with at least 4 elements
"""
    if isseq(dts):
        months = [dt.month for dt in T(dts)]
    else:
        months = T(dts).month
    return month2season(months, outformat=outformat)
コード例 #9
0
ファイル: misc.py プロジェクト: yeyuguo/metamet
def month2season(month, outformat='0123'):
    """Converts month number ( 1-12 ) to season number or names.
    Parameters:
        month : int or seq of int ( 1 - 12 )
        outformat: '0123', '1234', 'name' or ANY seq with at least 4 elements
"""
    if outformat == 'name':
        season_names = np.array(['Spring', 'Summer', 'Autumn', 'Winter'], dtype='O')
    elif outformat == '0123':
        season_names = np.array([0,1,2,3], dtype='i4')
    elif outformat == '1234':
        season_names = np.array([1,2,3,4], dtype='i4')
    else:
        if len(outformat) < 4:
            raise ValueError, 'outformat: "%s" length less than 4' % outformat
        season_names = np.array(list(outformat))

    if isseq(month):
        season_index = (np.array(month, dtype=int)+9) / 3 % 4
    else:
        season_index = (int(month) + 9) / 3 % 4
    return season_names[season_index]
コード例 #10
0
ファイル: misc.py プロジェクト: ddlddl58/metamet
def month2season(month, outformat='0123'):
    """Converts month number ( 1-12 ) to season number or names.
    Parameters:
        month : int or seq of int ( 1 - 12 )
        outformat: '0123', '1234', 'name' or ANY seq with at least 4 elements
"""
    if outformat == 'name':
        season_names = np.array(['Spring', 'Summer', 'Autumn', 'Winter'],
                                dtype='O')
    elif outformat == '0123':
        season_names = np.array([0, 1, 2, 3], dtype='i4')
    elif outformat == '1234':
        season_names = np.array([1, 2, 3, 4], dtype='i4')
    else:
        if len(outformat) < 4:
            raise ValueError, 'outformat: "%s" length less than 4' % outformat
        season_names = np.array(list(outformat))

    if isseq(month):
        season_index = (np.array(month, dtype=int) + 9) / 3 % 4
    else:
        season_index = (int(month) + 9) / 3 % 4
    return season_names[season_index]