def pyfun(fun, module=None, *args): MDSplus.DEALLOCATE('public _py_exception') fun = MDSplus.Data(fun).data() module = MDSplus.Data(module).data() def getfun(fun): fun = str(fun) if module is not None: return __import__(str(module), globals(), locals(), [fun]).__dict__[fun] builtins = __builtins__ if isinstance(__builtins__, dict) else __builtins__.__dict__ if fun in builtins: return builtins[fun] try: return MDSplus.__dict__[fun] except: raise MDSplus.TdiUNKNOWN_VAR(fun) fun = getfun(fun) args = tuple(map(MDSplus.Data.evaluate, args)) try: return fun(*args) except Exception as exc: import traceback traceback.print_exc() MDSplus.String(str(exc)).setTdiVar("_py_exception")
def data(self): self.assertEqual(m.Data(0x80000000).__class__, m.Int64) self.assertEqual(m.Data(0x7fffffff).__class__, m.Int32) if m.version.ispy2: self.assertEqual(m.Data(long(1)).__class__, m.Int64) a = m.ADD(m.Int32(1), m.Int32(2)) self.assertEqual(m.MULTIPLY(a, a).decompile(), "(1 + 2) * (1 + 2)") self.assertEqual(m.Data(2).compare(2), True) self.assertEqual(m.Data(2).compare(1), False) self.assertEqual( m.Dictionary([1, 'a', 2, 'b']).data().tolist(), { 1: 'a', 2: 'b' }) self.assertEqual( m.List([1, 'a', 2, 'b']).data().tolist(), [1, 'a', 2, 'b']) a = m.Apd() e = m.Data(1) e.tree = 'dummy_e' f = m.Data(2) f.tree = 'dummy_f' self.assertEqual(a.tree, None) a.append(e) # a should use tree of e self.assertEqual(a.tree, e.tree) self.assertEqual(a[0].tree, e.tree) a.append(f) # a should keep tree of e self.assertEqual(a.tree, e.tree) self.assertEqual(a[1].tree, f.tree) self._doUnaryArray(m.Int32(range(10)), m.Int32Array(range(10)), 'Int32(range(10))')
def doTest(suffix, cl, scl, ucl, **kw): """ test array and signal """ def results(cl, scl, ucl): from numpy import array return [ cl([13, 8, 7]), cl([7, 0, -3]), cl([30, 16, 10]), cl([10. / 3, 1, .4]), cl([1000, 256, 32]), # +,-,*,/,** ucl([11, 4, 7]), ucl([2, 4, 0]), # |,& array([False, True, False]), # == array([True, False, True]), # != cl([80, 64, 64]), cl([1, 0, 0]), scl([-10, -4, -2]), scl([10, 4, 2]), scl([10, 4, 2]), scl([100, 16, 4]), # <<,>>,-,abs cl([22026.4658, 54.5981500, 7.38905610]), # exp cl([2.30258509, 1.38629436, 0.69314718]), # log cl([-0.54402111, -0.7568025, 0.90929743]), # sin cl([-0.83907153, -0.65364362, -0.41614684]), # cos cl([0.64836083, 1.15782128, -2.18503986]), # tan cl([1.57079633, 0.41151685, 0.20135792]), # asin cl([0., 1.15927948, 1.36943841]), # acos cl([1.47112767, 1.32581766, 1.10714872]), # atan cl([1.47112767, 1.32581766, 1.10714872]), # atan2 cl([3.32192809, 2., 1.]), # log2 cl([1., 0.60205999, 0.30103]), # log10 cl([0.17364818, 0.06975647, 0.0348995]), # sind cl([0.98480775, 0.99756405, 0.99939083]), # cosd cl([0.17632698, 0.06992681, 0.03492077]), # tand cl([3, 1, 1]), # anint cl([1, 0, 2]), # % array([True, False, False]), # > array([True, True, False]), # >= array([False, False, True]), # < array([False, True, True]), # <= ] """ test array """ m.Data.execute('_a=[10%s,4%s,2%s],_b=[3%s,4%s,5%s]' % tuple([suffix] * 6)) a, b = cl([10, 4, 2]), cl([3, 4, 5]) self._doThreeTestArray('_a', m.Array(a), m.Data(a)) self._executeTests(self._doThreeTestArray, a, b, results(cl, scl, ucl), **kw) """ test signal """ Scl = lambda v: m.Signal(cl(v)) Sscl = lambda v: m.Signal(scl(v)) Sucl = lambda v: m.Signal(ucl(v)) m.Data.execute('_a=Make_Signal(_a,*)') a = m.Signal(a) self._executeTests(self._doThreeTestArray, a, b, results(Scl, Sscl, Sucl), **kw)
def testData(self): self.assertEqual(m.Data(2).compare(2),True) self.assertEqual(m.Data(2).compare(1),False)