@@ -86,7 +86,8 @@ typedef enum KeysArrayType{
86
86
NPY_DATETIMEUNIT
87
87
dt_unit_from_array (PyArrayObject * a ) {
88
88
// This is based on get_datetime_metadata_from_dtype in the NumPy source, but that function is private. This does not check that the dytpe is of the appropriate type.
89
- PyArray_DatetimeMetaData * dma = & (((PyArray_DatetimeDTypeMetaData * )PyArray_DESCR (a )-> c_metadata )-> meta );
89
+ PyArray_Descr * dt = PyArray_DESCR (a ); // borrowed ref
90
+ PyArray_DatetimeMetaData * dma = & (((PyArray_DatetimeDTypeMetaData * )PyDataType_C_METADATA (dt ))-> meta );
90
91
return dma -> base ;
91
92
}
92
93
@@ -451,7 +452,6 @@ typedef struct FAMIObject {
451
452
Py_ssize_t index ; // current index state, mutated in-place
452
453
} FAMIObject ;
453
454
454
-
455
455
static void
456
456
fami_dealloc (FAMIObject * self )
457
457
{
@@ -550,7 +550,6 @@ static PyTypeObject FAMIType = {
550
550
.tp_name = "arraymap.FrozenAutoMapIterator" ,
551
551
};
552
552
553
-
554
553
static PyObject *
555
554
fami_new (FAMObject * fam , ViewKind kind , bool reversed )
556
555
{
@@ -601,27 +600,23 @@ name(PyObject *left, PyObject *right) \
601
600
return result; \
602
601
}
603
602
604
-
605
603
FAMV_SET_OP (famv_and , And )
606
604
FAMV_SET_OP (famv_or , Or )
607
605
FAMV_SET_OP (famv_subtract , Subtract )
608
606
FAMV_SET_OP (famv_xor , Xor )
609
607
610
608
# undef FAMV_SET_OP
611
609
612
-
613
610
static PyNumberMethods famv_as_number = {
614
611
.nb_and = (binaryfunc ) famv_and ,
615
612
.nb_or = (binaryfunc ) famv_or ,
616
613
.nb_subtract = (binaryfunc ) famv_subtract ,
617
614
.nb_xor = (binaryfunc ) famv_xor ,
618
615
};
619
616
620
-
621
617
static int fam_contains (FAMObject * , PyObject * );
622
618
static PyObject * famv_fami_new (FAMVObject * );
623
619
624
-
625
620
static int
626
621
famv_contains (FAMVObject * self , PyObject * other )
627
622
{
@@ -637,41 +632,35 @@ famv_contains(FAMVObject *self, PyObject *other)
637
632
return result ;
638
633
}
639
634
640
-
641
635
static PySequenceMethods famv_as_sequence = {
642
636
.sq_contains = (objobjproc ) famv_contains ,
643
637
};
644
638
645
-
646
639
static void
647
640
famv_dealloc (FAMVObject * self )
648
641
{
649
642
Py_DECREF (self -> fam );
650
643
PyObject_Del ((PyObject * )self );
651
644
}
652
645
653
-
654
646
static PyObject *
655
647
famv_fami_new (FAMVObject * self )
656
648
{
657
649
return fami_new (self -> fam , self -> kind , false);
658
650
}
659
651
660
-
661
652
static PyObject *
662
653
famv_length_hint (FAMVObject * self )
663
654
{
664
655
return PyLong_FromSsize_t (self -> fam -> keys_size );
665
656
}
666
657
667
-
668
658
static PyObject *
669
659
famv_reversed (FAMVObject * self )
670
660
{
671
661
return fami_new (self -> fam , self -> kind , true);
672
662
}
673
663
674
-
675
664
static PyObject *
676
665
famv_isdisjoint (FAMVObject * self , PyObject * other )
677
666
{
@@ -684,7 +673,6 @@ famv_isdisjoint(FAMVObject *self, PyObject *other)
684
673
return PyBool_FromLong (result );
685
674
}
686
675
687
-
688
676
static PyObject *
689
677
famv_richcompare (FAMVObject * self , PyObject * other , int op )
690
678
{
@@ -703,15 +691,13 @@ famv_richcompare(FAMVObject *self, PyObject *other, int op)
703
691
return result ;
704
692
}
705
693
706
-
707
694
static PyMethodDef famv_methods [] = {
708
695
{"__length_hint__" , (PyCFunction ) famv_length_hint , METH_NOARGS , NULL },
709
696
{"__reversed__" , (PyCFunction ) famv_reversed , METH_NOARGS , NULL },
710
697
{"isdisjoint" , (PyCFunction ) famv_isdisjoint , METH_O , NULL },
711
698
{NULL },
712
699
};
713
700
714
-
715
701
static PyTypeObject FAMVType = {
716
702
PyVarObject_HEAD_INIT (NULL , 0 )
717
703
.tp_as_number = & famv_as_number ,
@@ -724,7 +710,6 @@ static PyTypeObject FAMVType = {
724
710
.tp_richcompare = (richcmpfunc ) famv_richcompare ,
725
711
};
726
712
727
-
728
713
static PyObject *
729
714
famv_new (FAMObject * fam , ViewKind kind )
730
715
{
@@ -941,7 +926,7 @@ lookup_hash_unicode(
941
926
Py_ssize_t table_pos = hash & mask ;
942
927
943
928
PyArrayObject * a = (PyArrayObject * )self -> keys ;
944
- Py_ssize_t dt_size = PyArray_DESCR (a )-> elsize / UCS4_SIZE ;
929
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (a ) / UCS4_SIZE ;
945
930
Py_ssize_t cmp_bytes = Py_MIN (key_size , dt_size ) * UCS4_SIZE ;
946
931
947
932
Py_hash_t h = 0 ;
@@ -983,7 +968,7 @@ lookup_hash_string(
983
968
Py_ssize_t table_pos = hash & mask ;
984
969
985
970
PyArrayObject * a = (PyArrayObject * )self -> keys ;
986
- Py_ssize_t dt_size = PyArray_DESCR (a )-> elsize ;
971
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (a );
987
972
Py_ssize_t cmp_bytes = Py_MIN (key_size , dt_size );
988
973
989
974
Py_hash_t h = 0 ;
@@ -1284,7 +1269,7 @@ lookup_unicode(FAMObject *self, PyObject* key) {
1284
1269
return -1 ;
1285
1270
}
1286
1271
PyArrayObject * a = (PyArrayObject * )self -> keys ;
1287
- Py_ssize_t dt_size = PyArray_DESCR (a )-> elsize / UCS4_SIZE ;
1272
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (a ) / UCS4_SIZE ;
1288
1273
// if the key_size is greater than the dtype size of the array, we know there cannot be a match
1289
1274
Py_ssize_t k_size = PyUnicode_GetLength (key );
1290
1275
if (k_size > dt_size ) {
@@ -1305,7 +1290,7 @@ lookup_string(FAMObject *self, PyObject* key) {
1305
1290
return -1 ;
1306
1291
}
1307
1292
PyArrayObject * a = (PyArrayObject * )self -> keys ;
1308
- Py_ssize_t dt_size = PyArray_DESCR (a )-> elsize ;
1293
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (a );
1309
1294
Py_ssize_t k_size = PyBytes_GET_SIZE (key );
1310
1295
if (k_size > dt_size ) {
1311
1296
return -1 ;
@@ -1650,7 +1635,7 @@ copy_to_new(PyTypeObject *cls, FAMObject *self, FAMObject *new)
1650
1635
new -> key_buffer = NULL ;
1651
1636
if (new -> keys_array_type == KAT_UNICODE ) {
1652
1637
PyArrayObject * a = (PyArrayObject * )new -> keys ;
1653
- Py_ssize_t dt_size = PyArray_DESCR (a )-> elsize / UCS4_SIZE ;
1638
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (a ) / UCS4_SIZE ;
1654
1639
new -> key_buffer = (Py_UCS4 * )PyMem_Malloc ((dt_size + 1 ) * UCS4_SIZE );
1655
1640
}
1656
1641
@@ -1831,7 +1816,7 @@ get(FAMObject *self, PyObject *key, PyObject *missing) {
1831
1816
# define GET_ALL_FLEXIBLE (char_type , get_end_func , lookup_func , hash_func , to_obj_func ) \
1832
1817
{ \
1833
1818
char_type* v; \
1834
- Py_ssize_t dt_size = PyArray_DESCR (key_array)->elsize / sizeof(char_type);\
1819
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (key_array) / sizeof(char_type);\
1835
1820
Py_ssize_t k_size; \
1836
1821
for (; i < key_size; i++) { \
1837
1822
v = (char_type*)PyArray_GETPTR1(key_array, i); \
@@ -2019,7 +2004,7 @@ fam_get_all(FAMObject *self, PyObject *key) {
2019
2004
# define GET_ANY_FLEXIBLE (char_type , get_end_func , lookup_func , hash_func ) \
2020
2005
{ \
2021
2006
char_type* v; \
2022
- Py_ssize_t dt_size = PyArray_DESCR (key_array)->elsize / sizeof(char_type);\
2007
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (key_array) / sizeof(char_type);\
2023
2008
Py_ssize_t k_size; \
2024
2009
for (; i < key_size; i++) { \
2025
2010
v = (char_type*)PyArray_GETPTR1(key_array, i); \
@@ -2539,13 +2524,13 @@ fam_init(PyObject *self, PyObject *args, PyObject *kwargs)
2539
2524
break ;
2540
2525
case KAT_UNICODE : {
2541
2526
// Over allocate buffer by 1 so there is room for null at end. This buffer is only used in lookup();
2542
- Py_ssize_t dt_size = PyArray_DESCR (a )-> elsize / UCS4_SIZE ;
2527
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (a ) / UCS4_SIZE ;
2543
2528
fam -> key_buffer = (Py_UCS4 * )PyMem_Malloc ((dt_size + 1 ) * UCS4_SIZE );
2544
2529
INSERT_FLEXIBLE (Py_UCS4 , insert_unicode , ucs4_get_end_p );
2545
2530
break ;
2546
2531
}
2547
2532
case KAT_STRING : {
2548
- Py_ssize_t dt_size = PyArray_DESCR (a )-> elsize ;
2533
+ Py_ssize_t dt_size = PyArray_ITEMSIZE (a );
2549
2534
INSERT_FLEXIBLE (char , insert_string , char_get_end_p );
2550
2535
break ;
2551
2536
}
0 commit comments