File indexing completed on 2026-04-09 07:49:37
0001
0002
0003 import os, numpy as np
0004 from opticks.ana.fold import Fold
0005
0006 class fold(object):
0007 pass
0008
0009 class sfreq(object):
0010 @classmethod
0011 def CreateFromArray(cls, a):
0012 usub, nsub = np.unique(a, return_counts=True )
0013 f = fold()
0014 f.key = usub
0015 f.val = nsub
0016 return cls(f, sort=True)
0017
0018 @classmethod
0019 def ArrayFromFile(cls, base=None, name="subs.txt"):
0020 if base is None:
0021 base = os.environ.get("FOLD", None)
0022 pass
0023 path = os.path.join(base, name)
0024 a = np.loadtxt(path, dtype="|S32" )
0025 return a
0026
0027 @classmethod
0028 def CreateFromFile(cls, base=None, name="subs.txt"):
0029 a = cls.ArrayFromFile(base=base, name=name)
0030 return cls.CreateFromArray(a)
0031
0032 def __init__(self, f, sort=True):
0033 order = np.argsort(f.val)[::-1] if sort else slice(None)
0034 okey = f.key[order]
0035 oval = f.val[order]
0036 subs = list(map(lambda _:_.decode("utf-8"), okey.view("|S32").ravel() ))
0037 vals = list(map(int, oval))
0038
0039 self.f = f
0040 self.okey = okey
0041 self.oval = oval
0042 self.subs = subs
0043 self.vals = vals
0044 self.order = order
0045
0046
0047 def find_index(self, key):
0048 key = key.encode() if type(key) is str else key
0049 assert type(key) is bytes
0050 ii = np.where( self.okey.view("|S32") == key )[0]
0051 assert len(ii) == 1
0052 return int(ii[0])
0053
0054 def desc_key(self, key):
0055 idx = self.find_index(key)
0056 return self.desc_idx(idx)
0057
0058 def desc_idx(self, idx):
0059 return "sf %3d : %7d : %s." % (idx, self.vals[idx], self.subs[idx])
0060
0061 def __repr__(self):
0062 return "\n".join(self.desc_idx(idx) for idx in range(len(self.subs)))
0063
0064 def __str__(self):
0065 return str(self.f)
0066
0067
0068 if __name__ == '__main__':
0069 sf = sfreq.CreateFromFile()
0070 print(repr(sf))
0071
0072
0073
0074
0075