COMPASS  5.4.4
End-to-end AO simulation tool using GPU acceleration
config_setter_utils.py
1 
37 
38 import numpy as np
39 
40 
41 def enforce_int(number):
42  if not isinstance(number, (int, np.int32, np.int64)):
43  raise TypeError("Value should be integer.")
44  return number
45 
46 
47 def enforce_float(number):
48  if isinstance(number, (int, np.int32, np.int64)):
49  number = np.float32(number)
50  if not isinstance(number, (float, np.float32, np.float64)):
51  raise TypeError("Value should be float.")
52  return np.float32(number)
53 
54 
56  if isinstance(number, bool):
57  return number
58  if isinstance(number, (int, np.int32, np.int64, float, np.float32, np.float64)):
59  if number == 0:
60  return False
61  elif number == 1:
62  return True
63  else:
64  raise ValueError("Will not cast non 0/1 int or float to boolean.")
65  raise TypeError("Will only cast int and float to booleans.")
66 
67 
68 def enforce_array(data, size, dtype=np.float32, scalar_expand=False):
69  # Scalar case
70  if isinstance(data, (int, np.int32, np.int64, float, np.float32, np.float64, complex, np.complex64, np.complex128)):
71  data = [data]
72 
73  # Singleton case
74  if len(data) == 1:
75  if scalar_expand or size == 1:
76  return np.full(size, data[0], dtype=dtype)
77  else:
78  raise TypeError("This non-singleton array cannot " + \
79  "be initialized with a scalar.")
80 
81  if len(data) != size:
82  raise TypeError("Input argument has wrong number of elements.")
83  if isinstance(data, np.ndarray) and len(data.shape) > 1:
84  raise TypeError("Multidimensional ndarray input is not allowed")
85  if isinstance(data,
86  list) and not all([isinstance(x, (float, int, complex))
87  for x in data]):
88  raise TypeError("Input list may only contain numerical values.")
89 
90  # OK, now let's try it
91  return np.array(data, dtype=dtype)
92 
93 
94 def enforce_arrayMultiDim(data, shape, dtype=np.float32):
95  if not isinstance(data, np.ndarray):
96  raise TypeError("Input argument must be a np.ndarray")
97  else:
98  doRaise = False
99  if len(data.shape) != len(shape):
100  doRaise = True
101  for (i, j) in zip(data.shape, shape):
102  if j != -1 and i != j:
103  doRaise = True
104  if doRaise:
105  raise TypeError(
106  "Input has wrong dimensions, expect multi dimensional arrays")
107 
108  return np.array(data, dtype=dtype)
def enforce_arrayMultiDim(data, shape, dtype=np.float32)
def enforce_array(data, size, dtype=np.float32, scalar_expand=False)