/* Translate divisors into multiples of smaller units*/ static int _convert_divisor_to_multiple(NpyArray_DateTimeInfo dtinfo) { int i, num, ind; int [] totry; NPY_DATETIMEUNIT [] baseunit = new NPY_DATETIMEUNIT[2]; int q = 0; int r; ind = ((int)dtinfo._base - (int)NPY_DATETIMEUNIT.NPY_FR_Y) * 2; totry = (int [])_multiples_table[ind]; baseunit = (NPY_DATETIMEUNIT [])_multiples_table[ind + 1]; num = 3; if (dtinfo._base == NPY_DATETIMEUNIT.NPY_FR_W) { num = 4; } else if (dtinfo._base > NPY_DATETIMEUNIT.NPY_FR_D) { num = 2; } if (dtinfo._base >= NPY_DATETIMEUNIT.NPY_FR_s) { ind = ((int)NPY_DATETIMEUNIT.NPY_FR_s - (int)NPY_DATETIMEUNIT.NPY_FR_Y) * 2; totry = (int[])_multiples_table[ind]; baseunit = (NPY_DATETIMEUNIT[])_multiples_table[ind + 1]; baseunit[0] = dtinfo._base + 1; baseunit[1] = dtinfo._base + 2; if (dtinfo._base == NPY_DATETIMEUNIT.NPY_DATETIME_NUMUNITS - 2) { num = 1; } if (dtinfo._base == NPY_DATETIMEUNIT.NPY_DATETIME_NUMUNITS - 1) { num = 0; } } for (i = 0; i < num; i++) { q = totry[i] / dtinfo.den; r = totry[i] % dtinfo.den; if (r == 0) { break; } } if (i == num) { string msg = string.Format("divisor ({0}) is not a multiple of a lower-unit", dtinfo.den); NpyErr_SetString(npyexc_type.NpyExc_ValueError, msg); return(-1); } dtinfo._base = baseunit[i]; dtinfo.den = 1; dtinfo.num *= q; return(0); }
/* compare the metadata for two date-times * return 1 if they are the same, or 0 if not */ static bool _equivalent_units(NpyArray_DateTimeInfo info1, NpyArray_DateTimeInfo info2) { /* Same meta object */ return((info1 == info2) || ((info1._base == info2._base) && (info1.num == info2.num) && (info1.den == info2.den) && (info1.events == info2.events))); }
private static NpyArray_DateTimeInfo NpyArray_DupDateTimeInfo(NpyArray_DateTimeInfo dtinfo) { NpyArray_DateTimeInfo newDateTimeInfo = new NpyArray_DateTimeInfo() { den = dtinfo.den, events = dtinfo.events, num = dtinfo.num, _base = dtinfo._base, }; return(newDateTimeInfo); }
internal static int NpyArrayAccess_SetDateTimeInfo(NpyArray_Descr descr, string units, int num, int den, int events) { NpyArray_DateTimeInfo info = NpyArray_DateTimeInfoNew(units, num, den, events); if (info == null) { return(-1); } if (descr.dtinfo != null) { NpyArray_free(descr.dtinfo); } descr.dtinfo = info; return(0); }
static void _init_datetime_descr(NpyArray_Descr descr) { NpyArray_DateTimeInfo dt_data; dt_data = new NpyArray_DateTimeInfo(); dt_data._base = NPY_DATETIMEUNIT.NPY_FR_us; dt_data.num = 1; dt_data.den = 1; dt_data.events = 1; /* FIXME * There is no error check here and no way to indicate an error * until the metadata turns up NULL. */ descr.dtinfo = dt_data; }
internal static NpyArray_DateTimeInfo NpyArray_DateTimeInfoNew(string units, int num, int den, int events) { NpyArray_DateTimeInfo dt_data; dt_data = new NpyArray_DateTimeInfo(); dt_data._base = _unit_from_str(units); /* Assumes other objects are Python integers */ dt_data.num = num; dt_data.den = den; dt_data.events = events; if (dt_data.den > 1) { if (_convert_divisor_to_multiple(dt_data) < 0) { NpyArray_free(dt_data); return(null); } } return(dt_data); }
private static void NpyArray_free(NpyArray_DateTimeInfo dtinfo) { return; }