Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/pandas/core/array_algos/transforms.py: 10%

20 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1""" 

2transforms.py is for shape-preserving functions. 

3""" 

4 

5from __future__ import annotations 

6 

7import numpy as np 

8 

9 

10def shift(values: np.ndarray, periods: int, axis: int, fill_value) -> np.ndarray: 

11 new_values = values 

12 

13 if periods == 0 or values.size == 0: 

14 return new_values.copy() 

15 

16 # make sure array sent to np.roll is c_contiguous 

17 f_ordered = values.flags.f_contiguous 

18 if f_ordered: 

19 new_values = new_values.T 

20 axis = new_values.ndim - axis - 1 

21 

22 if new_values.size: 

23 new_values = np.roll( 

24 new_values, 

25 np.intp(periods), 

26 axis=axis, 

27 ) 

28 

29 axis_indexer = [slice(None)] * values.ndim 

30 if periods > 0: 

31 axis_indexer[axis] = slice(None, periods) 

32 else: 

33 axis_indexer[axis] = slice(periods, None) 

34 new_values[tuple(axis_indexer)] = fill_value 

35 

36 # restore original order 

37 if f_ordered: 

38 new_values = new_values.T 

39 

40 return new_values