@@ -246,9 +246,12 @@ binary_resolve_descriptors(struct PyArrayMethodObject_tag *NPY_UNUSED(method),
246
246
{
247
247
PyArray_StringDTypeObject *descr1 = (PyArray_StringDTypeObject *)given_descrs[0 ];
248
248
PyArray_StringDTypeObject *descr2 = (PyArray_StringDTypeObject *)given_descrs[1 ];
249
- PyArray_StringDTypeObject *common_descr = common_instance (descr1, descr2);
249
+ int out_coerce = 1 ;
250
+ PyObject *out_na_object = NULL ;
250
251
251
- if (common_descr == NULL ) {
252
+ if (stringdtype_compatible_settings (
253
+ descr1->na_object , descr2->na_object , &out_na_object,
254
+ descr1->coerce , descr2->coerce , &out_coerce) == -1 ) {
252
255
return (NPY_CASTING)-1 ;
253
256
}
254
257
@@ -261,7 +264,7 @@ binary_resolve_descriptors(struct PyArrayMethodObject_tag *NPY_UNUSED(method),
261
264
262
265
if (given_descrs[2 ] == NULL ) {
263
266
out_descr = (PyArray_Descr *)new_stringdtype_instance (
264
- common_descr-> na_object , common_descr-> coerce );
267
+ out_na_object, out_coerce );
265
268
266
269
if (out_descr == NULL ) {
267
270
return (NPY_CASTING)-1 ;
@@ -552,9 +555,8 @@ string_comparison_resolve_descriptors(
552
555
{
553
556
PyArray_StringDTypeObject *descr1 = (PyArray_StringDTypeObject *)given_descrs[0 ];
554
557
PyArray_StringDTypeObject *descr2 = (PyArray_StringDTypeObject *)given_descrs[1 ];
555
- PyArray_StringDTypeObject *common_descr = common_instance (descr1, descr2);
556
558
557
- if (common_descr == NULL ) {
559
+ if (stringdtype_compatible_na (descr1-> na_object , descr2-> na_object ) == - 1 ) {
558
560
return (NPY_CASTING)-1 ;
559
561
}
560
562
@@ -784,9 +786,12 @@ string_findlike_resolve_descriptors(
784
786
{
785
787
PyArray_StringDTypeObject *descr1 = (PyArray_StringDTypeObject *)given_descrs[0 ];
786
788
PyArray_StringDTypeObject *descr2 = (PyArray_StringDTypeObject *)given_descrs[1 ];
787
- PyArray_StringDTypeObject *common_descr = common_instance (descr1, descr2);
789
+ int out_coerce = 1 ;
790
+ PyObject *out_na_object = NULL ;
788
791
789
- if (common_descr == NULL ) {
792
+ if (stringdtype_compatible_settings (
793
+ descr1->na_object , descr2->na_object , &out_na_object,
794
+ descr1->coerce , descr2->coerce , &out_coerce) == -1 ) {
790
795
return (NPY_CASTING)-1 ;
791
796
}
792
797
@@ -834,9 +839,12 @@ string_startswith_endswith_resolve_descriptors(
834
839
{
835
840
PyArray_StringDTypeObject *descr1 = (PyArray_StringDTypeObject *)given_descr
10000
s[0 ];
836
841
PyArray_StringDTypeObject *descr2 = (PyArray_StringDTypeObject *)given_descrs[1 ];
837
- PyArray_StringDTypeObject *common_descr = common_instance (descr1, descr2);
842
+ int out_coerce = 1 ;
843
+ PyObject *out_na_object = NULL ;
838
844
839
- if (common_descr == NULL ) {
845
+ if (stringdtype_compatible_settings (
846
+ descr1->na_object , descr2->na_object , &out_na_object,
847
+ descr1->coerce , descr2->coerce , &out_coerce) == -1 ) {
840
848
return (NPY_CASTING)-1 ;
841
849
}
842
850
@@ -1242,11 +1250,18 @@ replace_resolve_descriptors(struct PyArrayMethodObject_tag *NPY_UNUSED(method),
1242
1250
PyArray_StringDTypeObject *descr1 = (PyArray_StringDTypeObject *)given_descrs[0 ];
1243
1251
PyArray_StringDTypeObject *descr2 = (PyArray_StringDTypeObject *)given_descrs[1 ];
1244
1252
PyArray_StringDTypeObject *descr3 = (PyArray_StringDTypeObject *)given_descrs[2 ];
1253
+ int out_coerce = 1 ;
1254
+ PyObject *out_na_object = NULL ;
1245
1255
1246
- PyArray_StringDTypeObject *common_descr = common_instance (
1247
- common_instance (descr1, descr2), descr3);
1256
+ if (stringdtype_compatible_settings (
1257
+ descr1->na_object , descr2->na_object , &out_na_object,
1258
+ descr1->coerce , descr2->coerce , &out_coerce) == -1 ) {
1259
+ return (NPY_CASTING)-1 ;
1260
+ }
1248
1261
1249
- if (common_descr == NULL ) {
1262
+ if (stringdtype_compatible_settings (
1263
+ out_na_object, descr3->na_object , &out_na_object,
1264
+ out_coerce, descr3->coerce , &out_coerce) == -1 ) {
1250
1265
return (NPY_CASTING)-1 ;
1251
1266
}
1252
1267
@@ -1263,7 +1278,7 @@ replace_resolve_descriptors(struct PyArrayMethodObject_tag *NPY_UNUSED(method),
1263
1278
1264
1279
if (given_descrs[4 ] == NULL ) {
1265
1280
out_descr = (PyArray_Descr *)new_stringdtype_instance (
1266
- common_descr-> na_object , common_descr-> coerce );
1281
+ out_na_object, out_coerce );
1267
1282
1268
1283
if (out_descr == NULL ) {
1269
1284
return (NPY_CASTING)-1 ;
@@ -1510,9 +1525,12 @@ center_ljust_rjust_resolve_descriptors(
1510
1525
{
1511
1526
PyArray_StringDTypeObject *input_descr = (PyArray_StringDTypeObject *)given_descrs[0 ];
1512
1527
PyArray_StringDTypeObject *fill_descr = (PyArray_StringDTypeObject *)given_descrs[2 ];
1513
- PyArray_StringDTypeObject *common_descr = common_instance (input_descr, fill_descr);
1528
+ int out_coerce = 1 ;
1529
+ PyObject *out_na_object = NULL ;
1514
1530
1515
- if (common_descr == NULL ) {
1531
+ if (stringdtype_compatible_settings (
1532
+ input_descr->na_object , fill_descr->na_object , &out_na_object,
1533
+ input_descr->coerce , fill_descr->coerce , &out_coerce) == -1 ) {
1516
1534
return (NPY_CASTING)-1 ;
1517
1535
}
1518
1536
@@ -1527,7 +1545,7 @@ center_ljust_rjust_resolve_descriptors(
1527
1545
1528
1546
if (given_descrs[3 ] == NULL ) {
1529
1547
out_descr = (PyArray_Descr *)new_stringdtype_instance (
1530
- common_descr-> na_object , common_descr-> coerce );
1548
+ out_na_object, out_coerce );
1531
1549
1532
1550
if (out_descr == NULL ) {
1533
1551
return (NPY_CASTING)-1 ;
@@ -1817,9 +1835,12 @@ string_partition_resolve_descriptors(
1817
1835
1818
1836
PyArray_StringDTypeObject *descr1 = (PyArray_StringDTypeObject *)given_descrs[0 ];
1819
1837
PyArray_StringDTypeObject *descr2 = (PyArray_StringDTypeObject *)given_descrs[1 ];
1820
- PyArray_StringDTypeObject *common_descr = common_instance (descr1, descr2);
1838
+ int out_coerce = 1 ;
1839
+ PyObject *out_na_object = NULL ;
1821
1840
1822
- if (common_descr == NULL ) {
1841
+ if (stringdtype_compatible_settings (
1842
+ descr1->na_object , descr2->na_object , &out_na_object,
1843
+ descr1->coerce , descr2->coerce , &out_coerce) == -1 ) {
1823
1844
return (NPY_CASTING)-1 ;
1824
1845
}
1825
1846
@@ -1830,7 +1851,7 @@ string_partition_resolve_descriptors(
1830
1851
1831
1852
for (int i=2 ; i<5 ; i++) {
1832
1853
loop_descrs[i] = (PyArray_Descr *)new_stringdtype_instance (
1833
- common_descr-> na_object , common_descr-> coerce );
1854
+ out_na_object, out_coerce );
1834
1855
if (loop_descrs[i] == NULL ) {
1835
1856
return (NPY_CASTING)-1 ;
1836
1857
}
0 commit comments