Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.10/site-packages/numpy/lib/_array_utils_impl.py: 30%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

20 statements  

1""" 

2Miscellaneous utils. 

3""" 

4from numpy._core import asarray 

5from numpy._core.numeric import normalize_axis_tuple, normalize_axis_index 

6from numpy._utils import set_module 

7 

8__all__ = ["byte_bounds", "normalize_axis_tuple", "normalize_axis_index"] 

9 

10 

11@set_module("numpy.lib.array_utils") 

12def byte_bounds(a): 

13 """ 

14 Returns pointers to the end-points of an array. 

15 

16 Parameters 

17 ---------- 

18 a : ndarray 

19 Input array. It must conform to the Python-side of the array 

20 interface. 

21 

22 Returns 

23 ------- 

24 (low, high) : tuple of 2 integers 

25 The first integer is the first byte of the array, the second 

26 integer is just past the last byte of the array. If `a` is not 

27 contiguous it will not use every byte between the (`low`, `high`) 

28 values. 

29 

30 Examples 

31 -------- 

32 >>> import numpy as np 

33 >>> I = np.eye(2, dtype='f'); I.dtype 

34 dtype('float32') 

35 >>> low, high = np.lib.array_utils.byte_bounds(I) 

36 >>> high - low == I.size*I.itemsize 

37 True 

38 >>> I = np.eye(2); I.dtype 

39 dtype('float64') 

40 >>> low, high = np.lib.array_utils.byte_bounds(I) 

41 >>> high - low == I.size*I.itemsize 

42 True 

43 

44 """ 

45 ai = a.__array_interface__ 

46 a_data = ai['data'][0] 

47 astrides = ai['strides'] 

48 ashape = ai['shape'] 

49 bytes_a = asarray(a).dtype.itemsize 

50 

51 a_low = a_high = a_data 

52 if astrides is None: 

53 # contiguous case 

54 a_high += a.size * bytes_a 

55 else: 

56 for shape, stride in zip(ashape, astrides): 

57 if stride < 0: 

58 a_low += (shape-1)*stride 

59 else: 

60 a_high += (shape-1)*stride 

61 a_high += bytes_a 

62 return a_low, a_high