Files
python3-damaris/src/damaris/tools/ranges.py
T
markusro 6abb338c4a
Build Debian Packages / build (bookworm, debian12) (push) Successful in 13m3s
Build Debian Packages / build (trixie, debian13) (push) Successful in 13m46s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
move to a more standard python packaging structure
2026-04-07 17:09:10 +02:00

128 lines
3.1 KiB
Python

import numpy as N
import sys
if sys.version_info > (2,6,0):
import numbers
else:
pass
if sys.version_info > (2,6,0):
def lin_range(start,stop,step):
if isinstance(step, numbers.Integral):
return N.linspace(start,stop,step)
else:
return N.arange(start,stop,step)
else:
def lin_range(start,stop,step):
return N.arange(start,stop,step)
def log_range(start, stop, stepno):
if (start<=0 or stop<=0 or stepno<1):
raise ValueError("start, stop must be positive and stepno must be >=1")
return N.logspace(N.log10(start),N.log10(stop), num=stepno)
def staggered_range(some_range, size=3):
m=0
if isinstance(some_range, N.ndarray):
is_numpy = True
some_range = list(some_range)
else:
is_numpy = False
new_list=[]
for k in range(len(some_range)):
for i in range(size):
try:
index = (m*size)
new_list.append(some_range.pop(index))
except IndexError:
break
m+=1
if is_numpy:
new_list = N.asarray(new_list+some_range)
else:
new_list+=some_range
return new_list
def combine_ranges(*ranges):
new_list = []
for r in ranges:
new_list.extend(r)
return new_list
combined_ranges=combine_ranges
def interleaved_range(some_list, left_out):
"""
in first run, do every n-th, then do n-1-th of the remaining values and so on...
"""
m=0
new_list = []
for j in range(left_out):
for i in range(len(some_list)):
if (i*left_out+m) < len(some_list):
new_list.append(some_list[i*left_out+m])
else:
m+=1
break
if isinstance(some_list, N.ndarray):
new_list = N.array(new_list)
return new_list
# These are the generators
def lin_range_iter(start,stop, step):
this_one=float(start)+0.0
if step>0:
while (this_one<=float(stop)):
yield this_one
this_one+=float(step)
else:
while (this_one>=float(stop)):
yield this_one
this_one+=float(step)
def log_range_iter(start, stop, stepno):
if (start<=0 or stop<=0 or stepno<1):
raise ValueError("start, stop must be positive and stepno must be >=1")
if int(stepno)==1:
factor=1.0
else:
factor=(stop/start)**(1.0/int(stepno-1))
for i in range(int(stepno)):
yield start*(factor**i)
def staggered_range_iter(some_range, size = 1):
"""
size=1: do one, drop one, ....
size=n: do 1 ... n, drop n+1 ... 2*n
in a second run the dropped values were done
"""
left_out=[]
try:
while True:
for i in range(size):
yield next(some_range)
for i in range(size):
left_out.append(next(some_range))
except StopIteration:
pass
# now do the droped ones
for i in left_out:
yield i
def combined_ranges_iter(*ranges):
"""
iterate over one range after the other
"""
for r in ranges:
for i in r:
yield i
combine_ranges_iter=combined_ranges_iter