Exemplo n.º 1
0
        internal static int NpyArray_FillWithObject(NpyArray arr, object obj)
        {
            int      itemsize;
            npy_intp size;
            NpyArray_CopySwapFunc copyswap;

            VoidPtr objvp = new VoidPtr(obj, NPY_TYPES.NPY_OBJECT);

            if (!NpyArray_ISOBJECT(arr))
            {
                NpyErr_SetString(npyexc_type.NpyExc_ValueError, "Array is not an object array.");
            }

            size = NpyArray_SIZE(arr);
            if (size == 0)
            {
                return(0);
            }

            copyswap = NpyArray_DESCR(arr).f.copyswap;
            if (NpyArray_ISONESEGMENT(arr))
            {
                VoidPtr toptr = new VoidPtr(arr);
                NpyArray_FillWithScalarFunc fillwithscalar = NpyArray_DESCR(arr).f.fillwithscalar;
                itemsize = NpyArray_ITEMSIZE(arr);
                if (fillwithscalar != null && NpyArray_ISALIGNED(arr))
                {
                    copyswap(toptr, objvp, false, null);
                    fillwithscalar(toptr + itemsize, size - 1, toptr, arr);
                }
                else
                {
                    while (size > 0)
                    {
                        copyswap(toptr, objvp, false, arr);
                        toptr.data_offset += itemsize;
                        size -= itemsize;
                    }
                }
            }
            else
            {
                NpyArrayIterObject iter;

                iter = NpyArray_IterNew(arr);
                if (iter == null)
                {
                    return(-1);
                }
                while (size-- > 0)
                {
                    copyswap(iter.dataptr, objvp, false, arr);
                    NpyArray_ITER_NEXT(iter);
                }
                Npy_DECREF(iter);
            }
            return(0);
        }
Exemplo n.º 2
0
        internal static int NpyArray_FillWithScalar(NpyArray arr, NpyArray zero_d_array)
        {
            int      itemsize;
            bool     swap;
            npy_intp size;
            NpyArray_CopySwapFunc copyswap;
            NpyArray from;
            VoidPtr  fromptr;


            size = NpyArray_SIZE(arr);
            if (size == 0)
            {
                return(0);
            }

            if (!NpyArray_ISALIGNED(zero_d_array) || zero_d_array.descr.type != arr.descr.type)
            {
                Npy_INCREF(arr.descr);
                from = NpyArray_FromArray(zero_d_array, arr.descr, NPYARRAYFLAGS.NPY_ALIGNED);
                if (from == null)
                {
                    return(-1);
                }
            }
            else
            {
                from = zero_d_array;
                Npy_INCREF(from);
            }

            swap    = (NpyArray_ISNOTSWAPPED(arr) != NpyArray_ISNOTSWAPPED(from));
            fromptr = new VoidPtr(from);


            copyswap = NpyArray_DESCR(arr).f.copyswap;
            if (NpyArray_ISONESEGMENT(arr))
            {
                VoidPtr toptr = new VoidPtr(arr);
                NpyArray_FillWithScalarFunc fillwithscalar = NpyArray_DESCR(arr).f.fillwithscalar;
                itemsize = NpyArray_ITEMSIZE(arr);
                if (fillwithscalar != null && NpyArray_ISALIGNED(arr))
                {
                    copyswap(toptr, fromptr, swap, from);
                    fillwithscalar(toptr + itemsize, size - 1, toptr, arr);
                }
                else
                {
                    while (size-- > 0)
                    {
                        copyswap(toptr, fromptr, swap, arr);
                        toptr.data_offset += itemsize;
                    }
                }
            }
            else
            {
                NpyArrayIterObject iter;

                iter = NpyArray_IterNew(arr);
                if (iter == null)
                {
                    Npy_DECREF(from);
                    return(-1);
                }
                while (size-- > 0)
                {
                    copyswap(iter.dataptr, fromptr, swap, arr);
                    NpyArray_ITER_NEXT(iter);
                }
                Npy_DECREF(iter);
            }
            Npy_DECREF(from);
            return(0);
        }