示例#1
0
文件: period.c 项目: Vistarino/pandas
void get_asfreq_info(int fromFreq, int toFreq, asfreq_info *af_info) {
    int fromGroup = get_freq_group(fromFreq);
    int toGroup = get_freq_group(toFreq);

	af_info->sourceFreq = fromFreq;
    af_info->targetFreq = toFreq;

    switch(fromGroup)
    {
        case FR_WK: 
            af_info->from_week_end = calc_week_end(fromFreq, fromGroup);
            break;
        case FR_ANN: 
            af_info->from_a_year_end = calc_a_year_end(fromFreq, fromGroup);
            break;
        case FR_QTR: 
            af_info->from_q_year_end = calc_a_year_end(fromFreq, fromGroup);
            break;
    }

    switch(toGroup)
    {
        case FR_WK: 
            af_info->to_week_end = calc_week_end(toFreq, toGroup);
            break;
        case FR_ANN: 
            af_info->to_a_year_end = calc_a_year_end(toFreq, toGroup);
            break;
        case FR_QTR: 
            af_info->to_q_year_end = calc_a_year_end(toFreq, toGroup);
            break;
    }
}
示例#2
0
文件: period.c 项目: takluyver/pandas
static void get_asfreq_info(int fromFreq, int toFreq, asfreq_info *af_info) {
    int fromGroup = get_freq_group(fromFreq);
    int toGroup = get_freq_group(toFreq);

    switch(fromGroup)
    {
        case FR_WK: {
            af_info->from_week_end = calc_week_end(fromFreq, fromGroup);
        } break;
        case FR_ANN: {
            af_info->from_a_year_end = calc_a_year_end(fromFreq, fromGroup);
        } break;
        case FR_QTR: {
            af_info->from_q_year_end = calc_a_year_end(fromFreq, fromGroup);
        } break;
    }

    switch(toGroup)
    {
        case FR_WK: {
            af_info->to_week_end = calc_week_end(toFreq, toGroup);
        } break;
        case FR_ANN: {
            af_info->to_a_year_end = calc_a_year_end(toFreq, toGroup);
        } break;
        case FR_QTR: {
            af_info->to_q_year_end = calc_a_year_end(toFreq, toGroup);
        } break;
    }
}
示例#3
0
文件: period.c 项目: Vistarino/pandas
freq_conv_func get_asfreq_func(int fromFreq, int toFreq)
{
    int fromGroup = get_freq_group(fromFreq);
    int toGroup = get_freq_group(toFreq);

    if (fromGroup == FR_UND) { fromGroup = FR_DAY; }

    switch(fromGroup)
    {
        case FR_ANN:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_AtoA;
                case FR_QTR: return &asfreq_AtoQ;
                case FR_MTH: return &asfreq_AtoM;
                case FR_WK: return &asfreq_AtoW;
                case FR_BUS: return &asfreq_AtoB;
                case FR_DAY: 
                case FR_HR: 
                case FR_MIN: 
                case FR_SEC:
                case FR_MS:
                case FR_US:
                case FR_NS:
                             return &asfreq_AtoDT;

                default: return &nofunc;
            }

        case FR_QTR:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_QtoA;
                case FR_QTR: return &asfreq_QtoQ;
                case FR_MTH: return &asfreq_QtoM;
                case FR_WK: return &asfreq_QtoW;
                case FR_BUS: return &asfreq_QtoB;
                case FR_DAY: 
                case FR_HR:
                case FR_MIN:
                case FR_SEC:
                case FR_MS:
                case FR_US:
                case FR_NS:
                             return &asfreq_QtoDT;
                default: return &nofunc;
            }

        case FR_MTH:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_MtoA;
                case FR_QTR: return &asfreq_MtoQ;
                case FR_MTH: return &no_op;
                case FR_WK: return &asfreq_MtoW;
                case FR_BUS: return &asfreq_MtoB;
                case FR_DAY:
                case FR_HR:
                case FR_MIN:
                case FR_SEC:
                case FR_MS:
                case FR_US:
                case FR_NS:
                             return &asfreq_MtoDT;
                default: return &nofunc;
            }

        case FR_WK:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_WtoA;
                case FR_QTR: return &asfreq_WtoQ;
                case FR_MTH: return &asfreq_WtoM;
                case FR_WK: return &asfreq_WtoW;
                case FR_BUS: return &asfreq_WtoB;
                case FR_DAY: 
                case FR_HR: 
                case FR_MIN: 
                case FR_SEC: 
                case FR_MS:
                case FR_US:
                case FR_NS:
                             return &asfreq_WtoDT;
                default: return &nofunc;
            }

        case FR_BUS:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_BtoA;
                case FR_QTR: return &asfreq_BtoQ;
                case FR_MTH: return &asfreq_BtoM;
                case FR_WK: return &asfreq_BtoW;
                case FR_BUS: return &no_op;
                case FR_DAY: 
                case FR_HR: 
                case FR_MIN: 
                case FR_SEC:
                case FR_MS:
                case FR_US:
                case FR_NS:
                             return &asfreq_BtoDT;
                default: return &nofunc;
            }

        case FR_DAY:
        case FR_HR:
        case FR_MIN:
        case FR_SEC:
        case FR_MS:
        case FR_US:
        case FR_NS:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_DTtoA;
                case FR_QTR: return &asfreq_DTtoQ;
                case FR_MTH: return &asfreq_DTtoM;
                case FR_WK: return &asfreq_DTtoW;
                case FR_BUS: return &asfreq_DTtoB;
                case FR_DAY: 
                case FR_HR:
                case FR_MIN:
                case FR_SEC:
                case FR_MS:
                case FR_US:
                case FR_NS:
                             return &asfreq_WithinDT;
                default: return &nofunc;
            }

        default: return &nofunc;
    }
}
示例#4
0
文件: period.c 项目: Vistarino/pandas
/* generate an ordinal in period space */
npy_int64 get_period_ordinal(int year, int month, int day,
        int hour, int minute, int second, int microseconds, int picoseconds,
        int freq)
{
    npy_int64 absdays, delta, seconds;
    npy_int64 weeks, days;
    npy_int64 ordinal, day_adj;
    int freq_group, fmonth, mdiff;
    freq_group = get_freq_group(freq);

    if (freq == FR_SEC || freq == FR_MS || freq == FR_US || freq == FR_NS) {

        absdays = absdate_from_ymd(year, month, day);
        delta = (absdays - ORD_OFFSET);
        seconds = (npy_int64)(delta * 86400 + hour * 3600 + minute * 60 + second);

        switch(freq) {
          case FR_MS:
            return seconds * 1000 + microseconds / 1000;

          case FR_US:
            return seconds * 1000000 + microseconds;

          case FR_NS:
            return seconds * 1000000000 + microseconds * 1000 + picoseconds / 1000;
        }

        return seconds;
    }

    if (freq == FR_MIN) {
        absdays = absdate_from_ymd(year, month, day);
        delta = (absdays - ORD_OFFSET);
        return (npy_int64)(delta*1440 + hour*60 + minute);
    }

    if (freq == FR_HR) {
        if ((absdays = absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        delta = (absdays - ORD_OFFSET);
        return (npy_int64)(delta*24 + hour);
    }

    if (freq == FR_DAY)
    {
        return (npy_int64) (absdate_from_ymd(year, month, day) - ORD_OFFSET);
    }

    if (freq == FR_UND)
    {
        return (npy_int64) (absdate_from_ymd(year, month, day) - ORD_OFFSET);
    }

    if (freq == FR_BUS)
    {
        if((days = absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        weeks = days / 7;
        return (npy_int64)(days - weeks * 2) - BDAY_OFFSET;
    }

    if (freq_group == FR_WK)
    {
        if((ordinal = (npy_int64)absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        day_adj = freq - FR_WK;
        return (ordinal - (1 + day_adj)) / 7 + 1 - WEEK_OFFSET;
    }

    if (freq == FR_MTH)
    {
        return (year - BASE_YEAR) * 12 + month - 1;
    }

    if (freq_group == FR_QTR)
    {
        fmonth = freq - FR_QTR;
        if (fmonth == 0) fmonth = 12;

        mdiff = month - fmonth;
        if (mdiff < 0) mdiff += 12;
        if (month >= fmonth) mdiff += 12;

        return (year - BASE_YEAR) * 4 + (mdiff - 1) / 3;
    }

    if (freq_group == FR_ANN)
    {
        fmonth = freq - FR_ANN;
        if (fmonth == 0) fmonth = 12;
        if (month <= fmonth) {
            return year - BASE_YEAR;
        }
        else {
            return year - BASE_YEAR + 1;
        }
    }

    Py_Error(PyExc_RuntimeError, "Unable to generate frequency ordinal");

onError:
    return INT_ERR_CODE;
}
示例#5
0
文件: period.c 项目: takluyver/pandas
/* generate an ordinal in period space */
long_t get_period_ordinal(int year, int month, int day,
                      int hour, int minute, int second,
                      int freq)
{
    int freq_group = get_freq_group(freq);
    int quarter=((month-1)/3)+1;

    if (freq == FR_SEC) {
        long_t absdays, delta;
        absdays = absdate_from_ymd(year, month, day);
        delta = (absdays - HIGHFREQ_ORIG);
        return (long_t)(delta*86400 + hour*3600 + minute*60 + second + 1);
    }

    if (freq == FR_MIN) {
        long_t absdays, delta;
        absdays = absdate_from_ymd(year, month, day);
        delta = (absdays - HIGHFREQ_ORIG);
        return (long_t)(delta*1440 + hour*60 + minute + 1);
    }

    if (freq == FR_HR) {
        long_t absdays, delta;
        if ((absdays = absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        delta = (absdays - HIGHFREQ_ORIG);
        return (long_t)(delta*24 + hour + 1);
    }

    if (freq == FR_DAY)
    {
        return (long_t)absdate_from_ymd(year, month, day);
    }

    if (freq == FR_UND)
    {
        return (long_t)absdate_from_ymd(year, month, day);
    }

    if (freq == FR_BUS)
    {
        long_t weeks, days;
        if((days = absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        weeks = days/7;
        return (long_t)(days - weeks*2);
    }

    if (freq_group == FR_WK)
    {
        long_t adj_ordinal, ordinal, day_adj;
        if((ordinal = (long_t)absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        day_adj = (7 - (freq - FR_WK)) % 7;
        adj_ordinal = ordinal + ((7 - day_adj) - ordinal % 7) % 7;
        return adj_ordinal/7;
    }

    if (freq == FR_MTH)
    {
        return (year-1)*12 + month;
    }

    if (freq_group == FR_QTR)
    {
        return (year-1)*4 + quarter;
    }

    if (freq_group == FR_ANN)
    {
        return year;
    }

    Py_Error(PyExc_RuntimeError, "Unable to generate frequency ordinal");

onError:
    return INT_ERR_CODE;
}
示例#6
0
文件: period.c 项目: takluyver/pandas
static freq_conv_func get_asfreq_func(int fromFreq, int toFreq, int forConvert)
{
    int fromGroup = get_freq_group(fromFreq);
    int toGroup = get_freq_group(toFreq);

    if (fromGroup == FR_UND) { fromGroup = FR_DAY; }

    switch(fromGroup)
    {
        case FR_ANN:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_AtoA;
                case FR_QTR: return &asfreq_AtoQ;
                case FR_MTH: return &asfreq_AtoM;
                case FR_WK: return &asfreq_AtoW;
                case FR_BUS: return &asfreq_AtoB;
                case FR_DAY: return &asfreq_AtoD;
                case FR_HR: return &asfreq_AtoH;
                case FR_MIN: return &asfreq_AtoT;
                case FR_SEC: return &asfreq_AtoS;
                default: return &nofunc;
            }

        case FR_QTR:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_QtoA;
                case FR_QTR: return &asfreq_QtoQ;
                case FR_MTH: return &asfreq_QtoM;
                case FR_WK: return &asfreq_QtoW;
                case FR_BUS: return &asfreq_QtoB;
                case FR_DAY: return &asfreq_QtoD;
                case FR_HR: return &asfreq_QtoH;
                case FR_MIN: return &asfreq_QtoT;
                case FR_SEC: return &asfreq_QtoS;
                default: return &nofunc;
            }

        case FR_MTH:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_MtoA;
                case FR_QTR: return &asfreq_MtoQ;
                case FR_MTH: return &no_op;
                case FR_WK: return &asfreq_MtoW;
                case FR_BUS: return &asfreq_MtoB;
                case FR_DAY: return &asfreq_MtoD;
                case FR_HR: return &asfreq_MtoH;
                case FR_MIN: return &asfreq_MtoT;
                case FR_SEC: return &asfreq_MtoS;
                default: return &nofunc;
            }

        case FR_WK:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_WtoA;
                case FR_QTR: return &asfreq_WtoQ;
                case FR_MTH: return &asfreq_WtoM;
                case FR_WK: return &asfreq_WtoW;
                case FR_BUS: return &asfreq_WtoB;
                case FR_DAY: return &asfreq_WtoD;
                case FR_HR: return &asfreq_WtoH;
                case FR_MIN: return &asfreq_WtoT;
                case FR_SEC: return &asfreq_WtoS;
                default: return &nofunc;
            }

        case FR_BUS:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_BtoA;
                case FR_QTR: return &asfreq_BtoQ;
                case FR_MTH: return &asfreq_BtoM;
                case FR_WK: return &asfreq_BtoW;
                case FR_DAY: return &asfreq_BtoD;
                case FR_BUS: return &no_op;
                case FR_HR: return &asfreq_BtoH;
                case FR_MIN: return &asfreq_BtoT;
                case FR_SEC: return &asfreq_BtoS;
                default: return &nofunc;
            }

        case FR_DAY:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_DtoA;
                case FR_QTR: return &asfreq_DtoQ;
                case FR_MTH: return &asfreq_DtoM;
                case FR_WK: return &asfreq_DtoW;
                case FR_BUS:
                    if (forConvert) { return &asfreq_DtoB_forConvert; }
                    else            { return &asfreq_DtoB; }
                case FR_DAY: return &asfreq_DtoD;
                case FR_HR: return &asfreq_DtoH;
                case FR_MIN: return &asfreq_DtoT;
                case FR_SEC: return &asfreq_DtoS;
                default: return &nofunc;
            }

        case FR_HR:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_HtoA;
                case FR_QTR: return &asfreq_HtoQ;
                case FR_MTH: return &asfreq_HtoM;
                case FR_WK: return &asfreq_HtoW;
                case FR_BUS:
                    if (forConvert) { return &asfreq_HtoB_forConvert; }
                    else            { return &asfreq_HtoB; }
                case FR_DAY: return &asfreq_HtoD;
                case FR_HR: return &no_op;
                case FR_MIN: return &asfreq_HtoT;
                case FR_SEC: return &asfreq_HtoS;
                default: return &nofunc;
            }

        case FR_MIN:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_TtoA;
                case FR_QTR: return &asfreq_TtoQ;
                case FR_MTH: return &asfreq_TtoM;
                case FR_WK: return &asfreq_TtoW;
                case FR_BUS:
                    if (forConvert) { return &asfreq_TtoB_forConvert; }
                    else            { return &asfreq_TtoB; }
                case FR_DAY: return &asfreq_TtoD;
                case FR_HR: return &asfreq_TtoH;
                case FR_MIN: return &no_op;
                case FR_SEC: return &asfreq_TtoS;
                default: return &nofunc;
            }

        case FR_SEC:
            switch(toGroup)
            {
                case FR_ANN: return &asfreq_StoA;
                case FR_QTR: return &asfreq_StoQ;
                case FR_MTH: return &asfreq_StoM;
                case FR_WK: return &asfreq_StoW;
                case FR_BUS:
                    if (forConvert) { return &asfreq_StoB_forConvert; }
                    else            { return &asfreq_StoB; }
                case FR_DAY: return &asfreq_StoD;
                case FR_HR: return &asfreq_StoH;
                case FR_MIN: return &asfreq_StoT;
                case FR_SEC: return &no_op;
                default: return &nofunc;
            }
        default: return &nofunc;
    }
}
示例#7
0
/* generate an ordinal in period space */
int64_t get_period_ordinal(int year, int month, int day,
                      int hour, int minute, int second,
                      int freq)
{
	  int64_t absdays, delta;
    int64_t weeks, days;
    int64_t adj_ordinal, ordinal, day_adj;
    int freq_group, fmonth, mdiff, quarter;
    freq_group = get_freq_group(freq);

    if (freq == FR_SEC) {
        absdays = absdate_from_ymd(year, month, day);
        delta = (absdays - HIGHFREQ_ORIG);
        return (int64_t)(delta*86400 + hour*3600 + minute*60 + second + 1);
    }

    if (freq == FR_MIN) {
        absdays = absdate_from_ymd(year, month, day);
        delta = (absdays - HIGHFREQ_ORIG);
        return (int64_t)(delta*1440 + hour*60 + minute + 1);
    }

    if (freq == FR_HR) {
        if ((absdays = absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        delta = (absdays - HIGHFREQ_ORIG);
        return (int64_t)(delta*24 + hour + 1);
    }

    if (freq == FR_DAY)
    {
        return (int64_t)absdate_from_ymd(year, month, day);
    }

    if (freq == FR_UND)
    {
        return (int64_t)absdate_from_ymd(year, month, day);
    }

    if (freq == FR_BUS)
    {
        if((days = absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        weeks = days/7;
        return (int64_t)(days - weeks*2);
    }

    if (freq_group == FR_WK)
    {
        if((ordinal = (int64_t)absdate_from_ymd(year, month, day)) == INT_ERR_CODE)
        {
            goto onError;
        }
        day_adj = (7 - (freq - FR_WK)) % 7;
        adj_ordinal = ordinal + ((7 - day_adj) - ordinal % 7) % 7;
        return adj_ordinal/7;
    }

    if (freq == FR_MTH)
    {
        return (year-1)*12 + month;
    }

    if (freq_group == FR_QTR)
    {
      fmonth = freq - FR_QTR;
      if (fmonth == 0) fmonth = 12;

      mdiff = month - fmonth;
      if (mdiff < 0) mdiff += 12;
      if (month >= fmonth) mdiff += 12;

      return 1 + (year - 1) * 4 + (mdiff - 1) / 3;
    }

    if (freq_group == FR_ANN)
    {
      fmonth = freq - FR_ANN;
      if (fmonth == 0) fmonth = 12;
      if (month <= fmonth) {
        return year;
      }
      else {
        return year + 1;
      }
    }

    Py_Error(PyExc_RuntimeError, "Unable to generate frequency ordinal");

onError:
    return INT_ERR_CODE;
}