Example #1
0
        /* 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);
        }
Example #2
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)));
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
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;
        }
Example #6
0
        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);
        }
Example #7
0
 private static void NpyArray_free(NpyArray_DateTimeInfo dtinfo)
 {
     return;
 }