MCPcopy Create free account
hub / github.com/numpy/numpy / _common_stride

Function _common_stride

numpy/lib/recfunctions.py:888–930  ·  view source on GitHub ↗

Returns the stride between the fields, or None if the stride is not constant. The values in "counts" designate the lengths of subarrays. Subarrays are treated as many contiguous fields, with always positive stride.

(offsets, counts, itemsize)

Source from the content-addressed store, hash-verified

886 return fields
887
888def _common_stride(offsets, counts, itemsize):
889 """
890 Returns the stride between the fields, or None if the stride is not
891 constant. The values in "counts" designate the lengths of
892 subarrays. Subarrays are treated as many contiguous fields, with
893 always positive stride.
894 """
895 if len(offsets) <= 1:
896 return itemsize
897
898 negative = offsets[1] < offsets[0] # negative stride
899 if negative:
900 # reverse, so offsets will be ascending
901 it = zip(reversed(offsets), reversed(counts))
902 else:
903 it = zip(offsets, counts)
904
905 prev_offset = None
906 stride = None
907 for offset, count in it:
908 if count != 1: # subarray: always c-contiguous
909 if negative:
910 return None # subarrays can never have a negative stride
911 if stride is None:
912 stride = itemsize
913 if stride != itemsize:
914 return None
915 end_offset = offset + (count - 1) * itemsize
916 else:
917 end_offset = offset
918
919 if prev_offset is not None:
920 new_stride = offset - prev_offset
921 if stride is None:
922 stride = new_stride
923 if stride != new_stride:
924 return None
925
926 prev_offset = end_offset
927
928 if negative:
929 return -stride
930 return stride
931
932
933def _structured_to_unstructured_dispatcher(arr, dtype=None, copy=None,

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected