utils

  1import math
  2import sys
  3import re
  4from src.constants import help_string, the
  5
  6
  7def checknum(s):
  8    """
  9    Function to check if s can be converted to float
 10    :param s:
 11    :return: Boolean
 12    """
 13    try:
 14        float(s)
 15        return True
 16    except:
 17        return False
 18
 19
 20def coerce(s):
 21    def fun(s1):
 22        if s1 == "True":
 23            return True
 24        if s1 == "False":
 25            return False
 26        return s1
 27
 28    return float(s) if checknum(s) else None or fun(s.split()[0])
 29
 30
 31def cli():
 32    args = sys.argv
 33    for slot, v in the.items():
 34        v = str(v)
 35        for i in range(len(args)):
 36            if args[i] == "-" + slot[0] or args[i] == "--" + slot:
 37                v = (v == "False" and "True") or (v == "True" and "False") or args[i + 1]
 38        the[slot] = coerce(v)
 39        if the['help']:
 40            exit(print("\n" + help_string + "\n"))
 41    return the
 42
 43
 44def rogues():  # ToDo
 45    return NotImplementedError
 46
 47
 48def init_the():
 49    def func(v):
 50        the[v.group(1)] = coerce(v.group(2))
 51
 52    pattern = re.compile(r"[-][\S]+[\s]+[-][-]([\S]+)[^\n]+= ([\S]+)")
 53    for match in pattern.finditer(help_string):
 54        # extract words
 55        func(match)
 56
 57
 58def csv(fname, fun):
 59    sep = ","
 60    with open(fname) as fp:
 61        for s in fp.readlines():
 62            t = []
 63            for s1 in s.strip("\n").split(sep):
 64                t.append(coerce(s1))
 65            fun(t)
 66    return
 67
 68
 69def rnd(x, places):
 70    mult = 10 ** (places or 2)
 71    return math.floor(x * mult + 0.5) / mult
 72
 73
 74def per(t, p):
 75    p = math.floor(((p or .5) * len(t) - 1) + .5)
 76    return t[max(0, min(len(t) - 1, p))]
 77
 78
 79def o(t):
 80    if not (isinstance(t, dict) or isinstance(t, list)):
 81        return str(t)
 82
 83    def show(k, v):
 84        if str(k).find("_") != 0:
 85            v = o(v)
 86            return (isinstance(t, dict) and ":{} {}".format(k, v)) or str(v)
 87
 88    if isinstance(t, dict):
 89        u = [show(k, v) for k, v in t.items()]
 90        if isinstance(t, dict):
 91            u = sorted(u)
 92        return "{" + " ".join(u) + "}"
 93    elif isinstance(t, list):
 94        u = [show(k, v) for k, v in enumerate(t)]
 95        return "{" + " ".join(u) + "}"
 96
 97
 98def oo(t):
 99    return print(o(t))
100
101
102def copy(t):
103    if not (isinstance(t, list) or isinstance(t, dict)):
104        return t
105    elif isinstance(t, list):
106        return t.copy()
107    else:
108        u = {}
109        for k in t:
110            u[k] = t[k]
111        return u
def checknum(s):
 8def checknum(s):
 9    """
10    Function to check if s can be converted to float
11    :param s:
12    :return: Boolean
13    """
14    try:
15        float(s)
16        return True
17    except:
18        return False

Function to check if s can be converted to float

Parameters
  • s:
Returns

Boolean

def coerce(s):
21def coerce(s):
22    def fun(s1):
23        if s1 == "True":
24            return True
25        if s1 == "False":
26            return False
27        return s1
28
29    return float(s) if checknum(s) else None or fun(s.split()[0])
def cli():
32def cli():
33    args = sys.argv
34    for slot, v in the.items():
35        v = str(v)
36        for i in range(len(args)):
37            if args[i] == "-" + slot[0] or args[i] == "--" + slot:
38                v = (v == "False" and "True") or (v == "True" and "False") or args[i + 1]
39        the[slot] = coerce(v)
40        if the['help']:
41            exit(print("\n" + help_string + "\n"))
42    return the
def rogues():
45def rogues():  # ToDo
46    return NotImplementedError
def init_the():
49def init_the():
50    def func(v):
51        the[v.group(1)] = coerce(v.group(2))
52
53    pattern = re.compile(r"[-][\S]+[\s]+[-][-]([\S]+)[^\n]+= ([\S]+)")
54    for match in pattern.finditer(help_string):
55        # extract words
56        func(match)
def csv(fname, fun):
59def csv(fname, fun):
60    sep = ","
61    with open(fname) as fp:
62        for s in fp.readlines():
63            t = []
64            for s1 in s.strip("\n").split(sep):
65                t.append(coerce(s1))
66            fun(t)
67    return
def rnd(x, places):
70def rnd(x, places):
71    mult = 10 ** (places or 2)
72    return math.floor(x * mult + 0.5) / mult
def per(t, p):
75def per(t, p):
76    p = math.floor(((p or .5) * len(t) - 1) + .5)
77    return t[max(0, min(len(t) - 1, p))]
def o(t):
80def o(t):
81    if not (isinstance(t, dict) or isinstance(t, list)):
82        return str(t)
83
84    def show(k, v):
85        if str(k).find("_") != 0:
86            v = o(v)
87            return (isinstance(t, dict) and ":{} {}".format(k, v)) or str(v)
88
89    if isinstance(t, dict):
90        u = [show(k, v) for k, v in t.items()]
91        if isinstance(t, dict):
92            u = sorted(u)
93        return "{" + " ".join(u) + "}"
94    elif isinstance(t, list):
95        u = [show(k, v) for k, v in enumerate(t)]
96        return "{" + " ".join(u) + "}"
def oo(t):
 99def oo(t):
100    return print(o(t))
def copy(t):
103def copy(t):
104    if not (isinstance(t, list) or isinstance(t, dict)):
105        return t
106    elif isinstance(t, list):
107        return t.copy()
108    else:
109        u = {}
110        for k in t:
111            u[k] = t[k]
112        return u