示例#1
0
        internal static bool npy_arraydescr_isnative(NpyArray_Descr self)
        {
            if (self.names == null)
            {
                return(NpyArray_ISNBO(self));
            }
            else
            {
                NpyDict_Iter   pos    = new NpyDict_Iter();
                NpyDict_KVPair KVPair = new NpyDict_KVPair();
                KVPair.key   = null;
                KVPair.value = null;

                NpyDict_IterInit(pos);
                while (NpyDict_IterNext(self.fields, pos, KVPair))
                {
                    string key = (string)KVPair.key;
                    NpyArray_DescrField value = (NpyArray_DescrField)KVPair.value;
                    if (null != value.title && value.title.CompareTo(key) != 0)
                    {
                        continue;
                    }
                    if (false == npy_arraydescr_isnative(value.descr))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
示例#2
0
        internal static void NpyArray_CopySwapFunc(VoidPtr dest, VoidPtr Source, bool swap, NpyArray arr)
        {
            if (arr == null)
            {
                return;
            }

            if (NpyArray_HASFIELDS(arr))
            {
                NpyDict_KVPair KVPair = new NpyDict_KVPair();
                NpyArray_Descr descr;
                NpyDict_Iter   pos = new NpyDict_Iter();

                descr = arr.descr;
                NpyDict_IterInit(pos);


                while (NpyDict_IterNext(descr.fields, pos, KVPair))
                {
                    NpyArray_DescrField value = KVPair.value as NpyArray_DescrField;
                    string key = KVPair.key as string;

                    if (null != value.title && key.CompareTo(value.title) != 0)
                    {
                        continue;
                    }
                    arr.descr = value.descr;
                    MemCopy.GetMemcopyHelper(dest).copyswap(dest + value.offset, Source + value.offset, swap);
                }
                arr.descr = descr;
                return;
            }
            if (swap && arr.descr.subarray != null)
            {
                NpyArray_Descr descr    = new NpyArray_Descr(NPY_TYPES.NPY_OBJECT);
                NpyArray_Descr newDescr = null;
                npy_intp       num;
                int            itemsize;

                descr     = arr.descr;
                newDescr  = descr.subarray._base;
                arr.descr = newDescr;
                itemsize  = newDescr.elsize;
                num       = descr.elsize / itemsize;

                _default_copyswap(dest, itemsize, Source, itemsize, num, swap, arr);
                arr.descr = descr;
                return;
            }
            if (Source != null)
            {
                memcpy(dest, Source, NpyArray_ITEMSIZE(arr));
            }

            if (swap)
            {
                swapvalue(dest, NpyArray_ITEMSIZE(arr));
            }
            return;
        }
示例#3
0
        internal static NpyArray_Descr_Flags npy_descr_find_object_flag(NpyArray_Descr self)
        {
            if (self.flags != 0 || self.type_num == NPY_TYPES.NPY_OBJECT || self.kind == 'O')
            {
                return(NpyArray_Descr_Flags.NPY_OBJECT_DTYPE_FLAGS);
            }

            if (self.names != null)
            {
                NpyDict_Iter   pos    = new NpyDict_Iter();
                NpyDict_KVPair KVPair = new NpyDict_KVPair();
                KVPair.key   = null;
                KVPair.value = null;

                NpyDict_IterInit(pos);
                while (NpyDict_IterNext(self.fields, pos, KVPair))
                {
                    string key = (string)KVPair.key;
                    NpyArray_DescrField value = (NpyArray_DescrField)KVPair.value;

                    if (null != value.title && value.title.CompareTo(key) != 0)
                    {
                        continue;
                    }
                    if (npy_descr_find_object_flag(value.descr) != 0)
                    {
                        value.descr.flags = NpyArray_Descr_Flags.NPY_OBJECT_DTYPE_FLAGS;
                        return(NpyArray_Descr_Flags.NPY_OBJECT_DTYPE_FLAGS);
                    }
                }
            }
            return(0);
        }
示例#4
0
        internal static int NpyArrayAccess_GetFieldOffset(NpyArray_Descr descr, string fieldName, ref NpyArray_Descr pDescr)
        {
            if (descr.names == null)
            {
                return(-1);
            }
            NpyArray_DescrField value = (NpyArray_DescrField)NpyDict_Get(descr.fields, fieldName);

            if (value == null)
            {
                return(-1);
            }
            pDescr = value.descr;
            return(value.offset);
        }
示例#5
0
        internal static int NpyArrayAccess_GetDescrField(NpyArray_Descr descr, string fieldName, ref NpyArray_DescrField pField)
        {
            if (descr.names == null)
            {
                return(-1);
            }
            NpyArray_DescrField value = (NpyArray_DescrField)NpyDict_Get(descr.fields, fieldName);

            if (value == null)
            {
                return(-1);
            }
            pField = value;
            return(0);
        }
示例#6
0
        internal static void NpyArray_DescrSetField(NpyDict self, string key, NpyArray_Descr descr, int offset, string title)
        {
            NpyArray_DescrField field;

            field        = new NpyArray_DescrField();
            field.descr  = descr;
            field.offset = offset;
            field.title  = title;

            if (descr.fields.bucketArray.ContainsKey(key))
            {
                descr.fields.bucketArray[key] = field;
            }
            else
            {
                descr.fields.bucketArray.Add(key, field);
                descr.fields.numOfElements++;
            }
        }
示例#7
0
        static bool _equivalent_fields(NpyDict field1, NpyDict field2)
        {
            NpyDict_Iter        pos    = new NpyDict_Iter();
            NpyArray_DescrField value1 = null;
            NpyArray_DescrField value2 = null;
            object         key         = null;
            bool           same        = true;
            NpyDict_KVPair KVPair      = new NpyDict_KVPair();

            if (field1 == field2)
            {
                return(true);
            }
            if (field1 == null || field2 == null)
            {
                return(false);
            }
            if (NpyDict_Size(field1) != NpyDict_Size(field2))
            {
                same = false;
            }

            NpyDict_IterInit(pos);
            while (same && NpyDict_IterNext(field1, pos, KVPair))
            {
                value2 = (NpyArray_DescrField)NpyDict_Get(field2, key);
                if (null == value2 || value1.offset != value2.offset ||
                    ((null == value1.title && null != value2.title) ||
                     (null != value1.title && null == value2.title) ||
                     (null != value1.title && null != value2.title &&
                      value1.title == value2.title)))
                {
                    same = false;
                }
                else if (!NpyArray_EquivTypes(value1.descr, value2.descr))
                {
                    same = false;
                }
            }
            return(same);
        }
示例#8
0
        static int NpyArray_SubscriptAssignField(NpyArray self, string field, NpyArray v)
        {
            NpyArray_DescrField value = null;

            if (self.descr.names != null)
            {
                value = (NpyArray_DescrField)NpyDict_Get(self.descr.fields, field);
            }

            if (value != null)
            {
                Npy_INCREF(value.descr);
                return(NpyArray_SetField(self, value.descr, value.offset, v));
            }
            else
            {
                string msg = string.Format("field named {0} not found.", field);
                NpyErr_SetString(npyexc_type.NpyExc_ValueError, msg);
                return(-1);
            }
        }
示例#9
0
        internal static NpyArray_Descr NpyArray_DescrNewByteorder(NpyArray_Descr self, char newendian)
        {
            NpyArray_Descr _new;
            char           endian;

            _new   = NpyArray_DescrNew(self);
            endian = _new.byteorder;
            if (endian != NPY_IGNORE)
            {
                if (newendian == NPY_SWAP)
                {
                    /* swap byteorder */
                    if (NpyArray_ISNBO(endian))
                    {
                        endian = NPY_OPPBYTE;
                    }
                    else
                    {
                        endian = NPY_NATBYTE;
                    }
                    _new.byteorder = endian;
                }
                else if (newendian != NPY_IGNORE)
                {
                    _new.byteorder = newendian;
                }
            }
            if (null != _new.names)
            {
                NpyDict_KVPair KVPair = new NpyDict_KVPair();
                NpyArray_Descr newdescr;
                NpyDict_Iter   pos = new NpyDict_Iter();

                NpyDict_IterInit(pos);
                while (NpyDict_IterNext(_new.fields, pos, KVPair))
                {
                    NpyArray_DescrField value = KVPair.value as NpyArray_DescrField;
                    string key = KVPair.key as string;

                    if (null != value.title && key.CompareTo(value.title) != 0)
                    {
                        continue;
                    }
                    newdescr = NpyArray_DescrNewByteorder(value.descr, newendian);
                    if (newdescr == null)
                    {
                        Npy_DECREF(_new);
                        return(null);
                    }
                    Npy_DECREF(value.descr);
                    value.descr = newdescr;
                }
            }
            if (null != _new.subarray)
            {
                NpyArray_Descr old = _new.subarray._base;
                _new.subarray._base = NpyArray_DescrNewByteorder(self.subarray._base, newendian);
                Npy_DECREF(old);
            }
            return(_new);
        }
示例#10
0
 internal static int NpyArrayAccess_GetDescrField(NpyArray_Descr descr, string fieldName, ref NpyArray_DescrField pField)
 {
     return(numpyinternal.NpyArrayAccess_GetDescrField(descr, fieldName, ref pField));
 }