File indexing completed on 2026-04-09 07:48:47
0001
0002
0003 import os, numpy as np
0004
0005 string2float_ = lambda s:float(s.replace("k","000"))
0006 efloat_ = lambda ekey, fallback:string2float_(os.environ.get(ekey,fallback))
0007 efloatlist_ = lambda ekey,fallback="":list(map(string2float_, filter(None, os.environ.get(ekey,fallback).split(","))))
0008 efloatarray_ = lambda ekey,fallback="":np.array( efloatlist_(ekey, fallback))
0009
0010 def eint_(ekey, fallback):
0011 """
0012 A blank value is special cased to return zero
0013 """
0014 val = os.environ.get(ekey, fallback)
0015 if val == "":
0016 val = "0"
0017 pass
0018 return int(val)
0019
0020
0021 def eintlist_(ekey, fallback, delim=","):
0022 """
0023 empty string envvar yields None
0024 """
0025 slis = os.environ.get(ekey,fallback)
0026 if slis is None or len(slis) == 0: return None
0027 slis = slis.split(delim)
0028 return list(map(int, filter(None, slis)))
0029
0030 def eslice_(ekey, fallback):
0031 ii = eintlist_(ekey, fallback, delim=":")
0032 if ii is None: return slice(None)
0033 return slice(*ii)
0034
0035
0036 def intlist_(s):
0037 """
0038 :param s: string of form 10:21,30,31,32,40:51
0039 :return ii: list of integers
0040
0041 Uses np.arange one past the end convention, so "10:20" would not include 20::
0042
0043 In [10]: np.arange(10,20)
0044 Out[10]: array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
0045
0046 """
0047 ii = []
0048 if not s is None and len(s) > 0:
0049 ee = s.split(",")
0050 for e in ee:
0051 if ":" in e:
0052 ab = e.split(":")
0053 assert len(ab) == 2
0054 a, b = list(map(int,ab))
0055 for i in range(a,b):
0056 ii.append(i)
0057 pass
0058 else:
0059 ii.append(int(e))
0060 pass
0061 pass
0062 pass
0063 return ii
0064
0065 def intarray_(s):
0066 ii = intlist_(s)
0067 return np.array(ii, dtype=np.int32 )
0068
0069 def eintarray_(ekey, fallback=None):
0070 s = os.environ.get(ekey,fallback)
0071 return intarray_(s)
0072
0073
0074 def elook_epsilon_(epsilon, ekey="LOOK"):
0075 if not ekey in os.environ:
0076 return None
0077 pass
0078 look = efloatlist_(ekey, "0,0,0")
0079 ce = np.zeros( (4,), dtype=np.float32 )
0080 ce[:3] = look
0081 ce[3] = epsilon
0082 return ce
0083
0084 def elookce_(extent="10.", ekey="LOOK"):
0085 """
0086 :param extent: float, is overridden by LOOKCE envvar
0087 :param ekey: typically "LOOK" specifting envvar that contains look coordinates eg "10.5,10.5,10.5"
0088 """
0089 if not ekey in os.environ:
0090 return None
0091 pass
0092 look = efloatlist_(ekey, "0,0,0")
0093 extents = efloatlist_("LOOKCE", extent)
0094 ce = np.zeros( (len(extents), 4,), dtype=np.float32 )
0095 for i in range(len(extents)):
0096 ce[i,:3] = look
0097 ce[i, 3] = extents[i]
0098 pass
0099 return ce
0100
0101
0102 def test_efloat():
0103 tmin0 = efloat_("TMIN",0.5)
0104 tmin1 = efloat_("TMIN","0.5")
0105 assert tmin0 == tmin1
0106
0107 def test_efloatlist():
0108 eye0 = efloatlist_("EYE", "1,-1,1")
0109 print("%10.4f %10.4f %10.4f " % tuple(eye0) )
0110
0111
0112
0113
0114 if __name__ == '__main__':
0115
0116 sli = eslice_("QLIM", "0:10:1" )
0117 a = np.arange(100)
0118 print("a[sli] %s " % str(a[sli]))
0119