@@ -450,14 +450,19 @@ NPY_NO_EXPORT NPY_GCC_OPT_3 int
450
450
void * NPY_UNUSED (func ))
451
451
{
452
452
char * ip1 = args [0 ];
453
- char * indx = args [1 ];
453
+ char * indxp = args [1 ];
454
454
char * value = args [2 ];
455
455
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
456
+ npy_intp shape = steps [3 ];
456
457
npy_intp n = dimensions [0 ];
457
458
npy_intp i ;
458
459
@type @ * indexed ;
459
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
460
- indexed = (@type @ * )(ip1 + is1 * * (npy_intp * )indx );
460
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
461
+ npy_intp indx = * (npy_intp * )indxp ;
462
+ if (indx < 0 ) {
463
+ indx += shape ;
464
+ }
465
+ indexed = (@type @ * )(ip1 + is1 * indx );
461
466
* indexed = * indexed @OP @ * (@type @ * )value ;
462
467
}
463
468
return 0 ;
@@ -1241,14 +1246,19 @@ NPY_NO_EXPORT int
1241
1246
void * NPY_UNUSED (func ))
1242
1247
{
1243
1248
char * ip1 = args [0 ];
1244
- char * indx = args [1 ];
1249
+ char * indxp = args [1 ];
1245
1250
char * value = args [2 ];
1246
1251
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
1252
+ npy_intp shape = steps [3 ];
1247
1253
npy_intp n = dimensions [0 ];
1248
1254
npy_intp i ;
1249
1255
@type @ * indexed ;
1250
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
1251
- indexed = (@type @ * )(ip1 + is1 * * (npy_intp * )indx );
1256
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
1257
+ npy_intp indx = * (npy_intp * )indxp ;
1258
+ if (indx < 0 ) {
1259
+ indx += shape ;
1260
+ }
1261
+ indexed = (@type @ * )(ip1 + is1 * indx );
1252
1262
* indexed = npy_floor_divide @c @(* indexed , * (@type @ * )value );
1253
1263
}
1254
1264
return 0 ;
@@ -1395,14 +1405,19 @@ LONGDOUBLE_@kind@_indexed(PyArrayMethod_Context *NPY_UNUSED(context),
1395
1405
void * NPY_UNUSED (func ))
1396
1406
{
1397
1407
char * ip1 = args [0 ];
1398
- char * indx = args [1 ];
1408
+ char * indxp = args [1 ];
1399
1409
char * value = args [2 ];
1400
1410
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
1411
+ npy_intp shape = steps [3 ];
1401
1412
npy_intp n = dimensions [0 ];
1402
1413
npy_intp i ;
1403
1414
npy_longdouble * indexed ;
1404
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
1405
- indexed = (npy_longdouble * )(ip1 + is1 * * (npy_intp * )indx );
1415
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
1416
+ npy_intp indx = * (npy_intp * )indxp ;
1417
+ if (indx < 0 ) {
1418
+ indx += shape ;
1419
+ }
1420
+ indexed = (npy_longdouble * )(ip1 + is1 * indx );
1406
1421
* indexed = * indexed @OP @ * (npy_longdouble * )value ;
1407
1422
}
1408
1423
return 0 ;
@@ -1520,14 +1535,19 @@ HALF_@kind@_indexed(void *NPY_UNUSED(context),
1520
1535
void * NPY_UNUSED (func ))
1521
1536
{
1522
1537
char * ip1 = args [0 ];
1523
- char * indx = args [1 ];
1538
+ char * indxp = args [1 ];
1524
1539
char * value = args [2 ];
1525
1540
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
1541
+ npy_intp shape = steps [3 ];
1526
1542
npy_intp n = dimensions [0 ];
1527
1543
npy_intp i ;
1528
1544
npy_half * indexed ;
1529
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
1530
- indexed = (npy_half * )(ip1 + is1 * * (npy_intp * )indx );
1545
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
1546
+ npy_intp indx = * (npy_intp * )indxp ;
1547
+ if (indx < 0 ) {
1548
+ indx += shape ;
1549
+ }
1550
+ indexed = (npy_half * )(ip1 + is1 * indx );
1531
1551
const float v = npy_half_to_float (* (npy_half * )value );
1532
1552
* indexed = npy_float_to_half (npy_half_to_float (* indexed ) @OP @ v );
1533
1553
}
@@ -1641,14 +1661,19 @@ HALF_@kind@_indexed(PyArrayMethod_Context *NPY_UNUSED(context),
1641
1661
void * NPY_UNUSED (func ))
1642
1662
{
1643
1663
char * ip1 = args [0 ];
1644
- char * indx = args [1 ];
1664
+ char * indxp = args [1 ];
1645
1665
char * value = args [2 ];
1646
1666
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
1667
+ npy_intp shape = steps [3 ];
1647
1668
npy_intp n = dimensions [0 ];
1648
1669
npy_intp i ;
1649
1670
npy_half * indexed ;
1650
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
1651
- indexed = (npy_half * )(ip1 + is1 * * (npy_intp * )indx );
1671
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
1672
+ npy_intp indx = * (npy_intp * )indxp ;
1673
+ if (indx < 0 ) {
1674
+ indx += shape ;
1675
+ }
1676
+ indexed = (npy_half * )(ip1 + is1 * indx );
1652
1677
npy_half v = * (npy_half * )value ;
1653
1678
* indexed = (@OP @(* indexed , v ) || npy_half_isnan (* indexed )) ? * indexed : v ;
1654
1679
}
@@ -1679,14 +1704,19 @@ HALF_@kind@_indexed(PyArrayMethod_Context *NPY_UNUSED(context),
1679
1704
void * NPY_UNUSED (func ))
1680
1705
{
1681
1706
char * ip1 = args [0 ];
1682
- char * indx = args [1 ];
1707
+ char * indxp = args [1 ];
1683
1708
char * value = args [2 ];
1684
1709
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
1710
+ npy_intp shape = steps [3 ];
1685
1711
npy_intp n = dimensions [0 ];
1686
1712
npy_intp i ;
1687
1713
npy_half * indexed ;
1688
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
1689
- indexed = (npy_half * )(ip1 + is1 * * (npy_intp * )indx );
1714
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
1715
+ npy_intp indx = * (npy_intp * )indxp ;
1716
+ if (indx < 0 ) {
1717
+ indx += shape ;
1718
+ }
1719
+ indexed = (npy_half * )(ip1 + is1 * indx );
1690
1720
npy_half v = * (npy_half * )value ;
1691
1721
* indexed = (@OP @(* indexed , v ) || npy_half_isnan (v )) ? * indexed : v ;
1692
1722
}
@@ -1717,14 +1747,19 @@ HALF_floor_divide_indexed(PyArrayMethod_Context *NPY_UNUSED(context),
1717
1747
void * NPY_UNUSED (func ))
1718
1748
{
1719
1749
char * ip1 = args [0 ];
1720
- char * indx = args [1 ];
1750
+ char * indxp = args [1 ];
1721
1751
char * value = args [2 ];
1722
1752
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
1753
+ npy_intp shape = steps [3 ];
1723
1754
npy_intp n = dimensions [0 ];
1724
1755
npy_intp i ;
1725
1756
npy_half * indexed ;
1726
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
1727
- indexed = (npy_half * )(ip1 + is1 * * (npy_intp * )indx );
1757
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
1758
+ npy_intp indx = * (npy_intp * )indxp ;
1759
+ if (indx < 0 ) {
1760
+ indx += shape ;
1761
+ }
1762
+ indexed = (npy_half * )(ip1 + is1 * indx );
1728
1763
float v = npy_half_to_float (* (npy_half * )value );
1729
1764
float div = npy_floor_dividef (npy_half_to_float (* indexed ), v );
1730
1765
* indexed = npy_float_to_half (div );
@@ -1947,14 +1982,19 @@ NPY_NO_EXPORT int @TYPE@_@kind@_indexed
1947
1982
(PyArrayMethod_Context * NPY_UNUSED (context ), char * const * args , npy_intp const * dimensions , npy_intp const * steps , NpyAuxData * NPY_UNUSED (func ))
1948
1983
{
1949
1984
char * ip1 = args [0 ];
1950
- char * indx = args [1 ];
1985
+ char * indxp = args [1 ];
1951
1986
char * value = args [2 ];
1952
1987
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
1988
+ npy_intp shape = steps [3 ];
1953
1989
npy_intp n = dimensions [0 ];
1954
1990
npy_intp i ;
1955
1991
@ftype @ * indexed ;
1956
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
1957
- indexed = (@ftype @ * )(ip1 + is1 * * (npy_intp * )indx );
1992
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
1993
+ npy_intp indx = * (npy_intp * )indxp ;
1994
+ if (indx < 0 ) {
1995
+ indx += shape ;
1996
+ }
1997
+ indexed = (@ftype @ * )(ip1 + is1 * indx );
1958
1998
const @ftype @ b_r = ((@ftype @ * )value )[0 ];
1959
1999
const @ftype @ b_i = ((@ftype @ * )value )[1 ];
1960
2000
indexed [0 ] @OP @= b_r ;
@@ -1981,14 +2021,19 @@ NPY_NO_EXPORT int @TYPE@_multiply_indexed
1981
2021
(PyArrayMethod_Context * NPY_UNUSED (context ), char * const * args , npy_intp const * dimensions , npy_intp const * steps , NpyAuxData * NPY_UNUSED (func ))
1982
2022
{
1983
2023
char * ip1 = args [0 ];
1984
- char * indx = args [1 ];
2024
+ char * indxp = args [1 ];
1985
2025
char * value = args [2 ];
1986
2026
npy_intp is1 = steps [0 ], isindex = steps [1 ], isb = steps [2 ];
2027
+ npy_intp shape = steps [3 ];
1987
2028
npy_intp n = dimensions [0 ];
1988
2029
npy_intp i ;
1989
2030
@ftype @ * indexed ;
1990
- for (i = 0 ; i < n ; i ++ , indx += isindex , value += isb ) {
1991
- indexed = (@ftype @ * )(ip1 + is1 * * (npy_intp * )indx );
2031
+ for (i = 0 ; i < n ; i ++ , indxp += isindex , value += isb ) {
2032
+ npy_intp indx = * (npy_intp * )indxp ;
2033
+ if (indx < 0 ) {
2034
+ indx += shape ;
2035
+ }
2036
+ indexed = (@ftype @ * )(ip1 + is1 * indx );
1992
2037
const @ftype @ a_r = indexed [0 ];
1993
2038
const @ftype @ a_i = indexed [1 ];
1994
2039
const @ftype @ b_r = ((@ftype @ * )value )[0 ];
0 commit comments