@@ -459,13 +459,15 @@ def _series_getitem_idx_bool_indexer_impl(self, idx):
459
459
if (isinstance (idx , SeriesType ) and index_is_positional
460
460
and not isinstance (idx .data .dtype , (types .Boolean , bool ))):
461
461
def hpat_pandas_series_getitem_idx_list_impl (self , idx ):
462
- res = numpy .copy (self ._data [:len (idx ._data )])
463
- index = numpy .arange (len (self ._data ))
462
+ idx_data = idx ._data
463
+ self_data = self ._data
464
+ res = numpy .copy (self ._data [:len (idx_data )])
465
+ index = numpy .arange (len (self_data ))
464
466
for i in numba .prange (len (res )):
465
467
for j in numba .prange (len (index )):
466
- if j == idx . _data [i ]:
467
- res [i ] = self . _data [j ]
468
- return pandas .Series (data = res , index = index [idx . _data ], name = self ._name )
468
+ if j == idx_data [i ]:
469
+ res [i ] = self_data [j ]
470
+ return pandas .Series (data = res , index = index [idx_data ], name = self ._name )
469
471
return hpat_pandas_series_getitem_idx_list_impl
470
472
471
473
# idx is Series and it's index is not PositionalIndex, idx.dtype is not Boolean
@@ -647,6 +649,7 @@ def sdc_pandas_series_setitem_no_reindexing_impl(self, idx, value):
647
649
648
650
def sdc_pandas_series_setitem_idx_bool_array_align_impl (self , idx , value ):
649
651
652
+ series_data = self ._data # FIXME_Numba#6960
650
653
# if idx is a Boolean array (and value is a series) it's used as a mask for self.index
651
654
# and filtered indexes are looked in value.index, and if found corresponding value is set
652
655
if value_is_series == True : # noqa
@@ -659,7 +662,7 @@ def sdc_pandas_series_setitem_idx_bool_array_align_impl(self, idx, value):
659
662
self_index_has_duplicates = len (unique_self_indices ) != len (self_index )
660
663
value_index_has_duplicates = len (unique_value_indices ) != len (value_index )
661
664
if (self_index_has_duplicates or value_index_has_duplicates ):
662
- self . _data [idx ] = value ._data
665
+ series_data [idx ] = value ._data
663
666
else :
664
667
map_index_to_position = Dict .empty (
665
668
key_type = indexes_common_dtype ,
@@ -674,13 +677,13 @@ def sdc_pandas_series_setitem_idx_bool_array_align_impl(self, idx, value):
674
677
if idx [i ]:
675
678
self_index_value = self_index [i ]
676
679
if self_index_value in map_index_to_position :
677
- self . _data [i ] = value ._data [map_index_to_position [self_index_value ]]
680
+ series_data [i ] = value ._data [map_index_to_position [self_index_value ]]
678
681
else :
679
- sdc .hiframes .join .setitem_arr_nan (self . _data , i )
682
+ sdc .hiframes .join .setitem_arr_nan (series_data , i )
680
683
681
684
else :
682
685
# if value has no index - nothing to reindex and assignment is made along positions set by idx mask
683
- self . _data [idx ] = value
686
+ series_data [idx ] = value
684
687
685
688
return self
686
689
@@ -755,31 +758,35 @@ def sdc_pandas_series_setitem_idx_bool_series_align_impl(self, idx, value):
755
758
value_is_scalar = not (value_is_series or value_is_array )
756
759
def sdc_pandas_series_setitem_idx_int_series_align_impl (self , idx , value ):
757
760
761
+ # FIXME_Numba#6960: all changes of this commit are unnecessary - revert when resolved
762
+ self_data = self ._data
763
+ self_index = self ._index
764
+ self_index_size = len (self_index )
765
+ idx_size = len (idx )
766
+
758
767
_idx = idx ._data if idx_is_series == True else idx # noqa
759
768
_value = value ._data if value_is_series == True else value # noqa
760
769
761
- self_index_size = len (self ._index )
762
- idx_size = len (_idx )
763
770
valid_indices = numpy .repeat (- 1 , self_index_size )
764
771
for i in numba .prange (self_index_size ):
765
772
for j in numpy .arange (idx_size ):
766
- if self . _index [i ] == _idx [j ]:
773
+ if self_index [i ] == _idx [j ]:
767
774
valid_indices [i ] = j
768
775
769
776
valid_indices_positions = numpy .arange (self_index_size )[valid_indices != - 1 ]
770
777
valid_indices_masked = valid_indices [valid_indices != - 1 ]
771
778
772
- indexes_found = self . _index [valid_indices_positions ]
779
+ indexes_found = self_index [valid_indices_positions ]
773
780
if len (numpy .unique (indexes_found )) != len (indexes_found ):
774
781
raise ValueError ("Reindexing only valid with uniquely valued Index objects" )
775
782
776
783
if len (valid_indices_masked ) != idx_size :
777
784
raise KeyError ("Reindexing not possible: idx has index not found in Series" )
778
785
779
786
if value_is_scalar == True : # noqa
780
- self . _data [valid_indices_positions ] = _value
787
+ self_data [valid_indices_positions ] = _value
781
788
else :
782
- self . _data [valid_indices_positions ] = numpy .take (_value , valid_indices_masked )
789
+ self_data [valid_indices_positions ] = numpy .take (_value , valid_indices_masked )
783
790
784
791
return self
785
792
@@ -1598,17 +1605,18 @@ def hpat_pandas_series_var_impl(self, axis=None, skipna=None, level=None, ddof=1
1598
1605
if skipna is None :
1599
1606
skipna = True
1600
1607
1608
+ self_data = self ._data # FIXME_Numba#6960
1601
1609
if skipna :
1602
- valuable_length = len (self . _data ) - numpy .sum (numpy .isnan (self . _data ))
1610
+ valuable_length = len (self_data ) - numpy .sum (numpy .isnan (self_data ))
1603
1611
if valuable_length <= ddof :
1604
1612
return numpy .nan
1605
1613
1606
- return numpy_like .nanvar (self . _data ) * valuable_length / (valuable_length - ddof )
1614
+ return numpy_like .nanvar (self_data ) * valuable_length / (valuable_length - ddof )
1607
1615
1608
- if len (self . _data ) <= ddof :
1616
+ if len (self_data ) <= ddof :
1609
1617
return numpy .nan
1610
1618
1611
- return self . _data . var () * len (self . _data ) / (len (self . _data ) - ddof )
1619
+ return self_data . var () * len (self_data ) / (len (self_data ) - ddof )
1612
1620
1613
1621
return hpat_pandas_series_var_impl
1614
1622
@@ -2859,8 +2867,9 @@ def hpat_pandas_series_prod_impl(self, axis=None, skipna=None, level=None, numer
2859
2867
else :
2860
2868
_skipna = skipna
2861
2869
2870
+ series_data = self ._data # FIXME_Numba#6960
2862
2871
if _skipna :
2863
- return numpy_like .nanprod (self . _data )
2872
+ return numpy_like .nanprod (series_data )
2864
2873
else :
2865
2874
return numpy .prod (self ._data )
2866
2875
@@ -3079,8 +3088,9 @@ def hpat_pandas_series_min_impl(self, axis=None, skipna=None, level=None, numeri
3079
3088
else :
3080
3089
_skipna = skipna
3081
3090
3091
+ series_data = self ._data # FIXME_Numba#6960
3082
3092
if _skipna :
3083
- return numpy_like .nanmin (self . _data )
3093
+ return numpy_like .nanmin (series_data )
3084
3094
3085
3095
return self ._data .min ()
3086
3096
@@ -3156,8 +3166,9 @@ def hpat_pandas_series_max_impl(self, axis=None, skipna=None, level=None, numeri
3156
3166
else :
3157
3167
_skipna = skipna
3158
3168
3169
+ series_data = self ._data # FIXME_Numba#6960
3159
3170
if _skipna :
3160
- return numpy_like .nanmax (self . _data )
3171
+ return numpy_like .nanmax (series_data )
3161
3172
3162
3173
return self ._data .max ()
3163
3174
@@ -3222,8 +3233,9 @@ def hpat_pandas_series_mean_impl(self, axis=None, skipna=None, level=None, numer
3222
3233
else :
3223
3234
_skipna = skipna
3224
3235
3236
+ series_data = self ._data # FIXME_Numba#6960
3225
3237
if _skipna :
3226
- return numpy_like .nanmean (self . _data )
3238
+ return numpy_like .nanmean (series_data )
3227
3239
3228
3240
return self ._data .mean ()
3229
3241
@@ -3780,54 +3792,56 @@ def hpat_pandas_series_argsort(self, axis=0, kind='quicksort', order=None):
3780
3792
3781
3793
if not isinstance (self .index , PositionalIndexType ):
3782
3794
def hpat_pandas_series_argsort_idx_impl (self , axis = 0 , kind = 'quicksort' , order = None ):
3795
+ series_data = self ._data # FIXME_Numba#6960
3783
3796
if kind != 'quicksort' and kind != 'mergesort' :
3784
3797
raise ValueError ("Method argsort(). Unsupported parameter. Given 'kind' != 'quicksort' or 'mergesort'" )
3785
3798
if kind == 'mergesort' :
3786
3799
#It is impossible to use numpy.argsort(self._data, kind=kind) since numba gives typing error
3787
- sort = numpy_like .argsort (self . _data , kind = 'mergesort' )
3800
+ sort = numpy_like .argsort (series_data , kind = 'mergesort' )
3788
3801
else :
3789
- sort = numpy_like .argsort (self . _data )
3802
+ sort = numpy_like .argsort (series_data )
3790
3803
na = self .isna ().sum ()
3791
- result = numpy .empty (len (self . _data ), dtype = numpy .int64 )
3792
- na_data_arr = sdc .hiframes .api .get_nan_mask (self . _data )
3804
+ result = numpy .empty (len (series_data ), dtype = numpy .int64 )
3805
+ na_data_arr = sdc .hiframes .api .get_nan_mask (series_data )
3793
3806
if kind == 'mergesort' :
3794
- sort_nona = numpy_like .argsort (self . _data [~ na_data_arr ], kind = 'mergesort' )
3807
+ sort_nona = numpy_like .argsort (series_data [~ na_data_arr ], kind = 'mergesort' )
3795
3808
else :
3796
- sort_nona = numpy_like .argsort (self . _data [~ na_data_arr ])
3809
+ sort_nona = numpy_like .argsort (series_data [~ na_data_arr ])
3797
3810
q = 0
3798
3811
for id , i in enumerate (sort ):
3799
- if id in set (sort [len (self . _data ) - na :]):
3812
+ if id in set (sort [len (series_data ) - na :]):
3800
3813
q += 1
3801
3814
else :
3802
3815
result [id ] = sort_nona [id - q ]
3803
- for i in sort [len (self . _data ) - na :]:
3816
+ for i in sort [len (series_data ) - na :]:
3804
3817
result [i ] = - 1
3805
3818
3806
3819
return pandas .Series (result , self ._index )
3807
3820
3808
3821
return hpat_pandas_series_argsort_idx_impl
3809
3822
3810
3823
def hpat_pandas_series_argsort_noidx_impl (self , axis = 0 , kind = 'quicksort' , order = None ):
3824
+ series_data = self ._data # FIXME_Numba#6960
3811
3825
if kind != 'quicksort' and kind != 'mergesort' :
3812
3826
raise ValueError ("Method argsort(). Unsupported parameter. Given 'kind' != 'quicksort' or 'mergesort'" )
3813
3827
if kind == 'mergesort' :
3814
- sort = numpy_like .argsort (self . _data , kind = 'mergesort' )
3828
+ sort = numpy_like .argsort (series_data , kind = 'mergesort' )
3815
3829
else :
3816
- sort = numpy_like .argsort (self . _data )
3830
+ sort = numpy_like .argsort (series_data )
3817
3831
na = self .isna ().sum ()
3818
- result = numpy .empty (len (self . _data ), dtype = numpy .int64 )
3819
- na_data_arr = sdc .hiframes .api .get_nan_mask (self . _data )
3832
+ result = numpy .empty (len (series_data ), dtype = numpy .int64 )
3833
+ na_data_arr = sdc .hiframes .api .get_nan_mask (series_data )
3820
3834
if kind == 'mergesort' :
3821
- sort_nona = numpy_like .argsort (self . _data [~ na_data_arr ], kind = 'mergesort' )
3835
+ sort_nona = numpy_like .argsort (series_data [~ na_data_arr ], kind = 'mergesort' )
3822
3836
else :
3823
- sort_nona = numpy_like .argsort (self . _data [~ na_data_arr ])
3837
+ sort_nona = numpy_like .argsort (series_data [~ na_data_arr ])
3824
3838
q = 0
3825
3839
for id , i in enumerate (sort ):
3826
- if id in set (sort [len (self . _data ) - na :]):
3840
+ if id in set (sort [len (series_data ) - na :]):
3827
3841
q += 1
3828
3842
else :
3829
3843
result [id ] = sort_nona [id - q ]
3830
- for i in sort [len (self . _data ) - na :]:
3844
+ for i in sort [len (series_data ) - na :]:
3831
3845
result [i ] = - 1
3832
3846
3833
3847
return pandas .Series (result )
0 commit comments