def test(): pytree = Tree('pytree', self.shot) testing = Tree('testing', -1) for node in testing.getNodeWild(".compression:*"): pytree.SIG_CMPRS.record = node.record self.assertTrue((pytree.SIG_CMPRS.record == node.record).all(), msg="Error writing compressed signal%s" % node)
def getCompression(self): with Tree('pytree',self.shot+10,'new') as pytree: node = pytree.addNode('SIG_CMPRS', 'signal') node.compress_on_put = True pytree.write() pytree.normal() testing = Tree('testing', -1) for node in testing.getNodeWild(".compression:*"): pytree.SIG_CMPRS.record=node.record self.assertTrue((pytree.SIG_CMPRS.record == node.record).all(), msg="Error writing compressed signal%s"%node)
def findNode(self): pytree=Tree('pytree',self.shot+4,'ReadOnly') nodes = pytree.getNodeWild('***:SIG_CMPRS') self.assertEqual(len(nodes), 1) self.assertEqual(str(nodes[0]), '\\PYTREE::TOP:SIG_CMPRS')
def thick(self): def testnci(thick, local, con, nci): l = local.S.__getattribute__(nci) t = thick.S.__getattribute__(nci) if nci.endswith("_nids"): l, t = str(l), str(t) try: c = str(con.get("getnci(getnci(S,$),'nid_number')", nci)) except TreeNNF: c = '[]' else: c = con.get("getnci(S,$)", nci) try: self.assertEqual(t, c) self.assertEqual(t, l) except: print(nci, t, l, c) raise server, server_port = self._setup_mdsip('ACTION_SERVER', 'ACTION_PORT', 7000 + self.index, True) svr, svr_log = self._start_mdsip(server, server_port, 'thick') try: con = Connection(server) self.assertEqual( con.get("zero([1,1,1,1,1,1,1,1],1)").tolist(), [[[[[[[[0]]]]]]]]) with Tree(self.tree, -1, "new") as local: local.addNode(self.treesub, "SUBTREE") s = local.addNode("S", "SIGNAL") s.addTag("tagS") s.record = ADD(Float32(1), Float32(2)) t = local.addNode("T", "TEXT") t.addNode("TT", "TEXT").addTag("tagTT") t.record = t.TT t.TT = "recTT" local.write() with Tree(self.treesub, -1, "new") as sub: sub.addNode("OK") sub.write() local.normal() Tree.setCurrent(self.tree, 7) setenv("%s_path" % self.tree, "%s::" % server) print(con.get("getenv($//'_path')", self.tree)) con.get("TreeShr->TreeOpen(ref($),val($),val(1))", self.tree, -1) thick = Tree(self.tree, -1) thick.createPulse(1) thick1 = Tree(self.tree, 1) self.assertEqual( getattr(local, self.treesub.upper()).OK.nid, getattr(thick1, self.treesub.upper()).OK.nid) local_filename = local.getFileName() thick_filename = thick.getFileName() self.assertTrue("::" in thick_filename, thick_filename) self.assertTrue(local_filename, thick_filename.split("::", 1)[1]) """ TreeTurnOff / TreeTurnOn """ thick.S.on = False self.assertEqual(local.S.on, False) thick.S.on = True self.assertEqual(local.S.on, True) """ TreeSetCurrentShotId / TreeGetCurrentShotId """ Tree.setCurrent(self.tree, 1) self.assertEqual(Tree.getCurrent(self.tree), 1) """ TreeGetRecord / TreeSetRecord """ self.assertEqual(str(local.S.record), "1. + 2.") self.assertEqual(str(thick.S.record), "1. + 2.") thick.S.record = ADD(Float32(2), Float32(4)) self.assertEqual(str(local.S.record), "2. + 4.") self.assertEqual(str(thick.S.record), "2. + 4.") self.assertEqual(str(local.T.record), str(thick.T.record)) """ GetDefaultNid / SetDefaultNid """ self.assertEqual(thick.getDefault(), thick.top) thick.setDefault(thick.S) self.assertEqual(thick.getDefault(), thick.top.S) thick.setDefault(thick.top) """ FindNodeWildRemote """ self.assertEqual(str(thick.getNodeWild("T*")), str(local.getNodeWild("T*"))) """ FindTagWildRemote """ self.assertEqual(thick.findTags("*"), local.findTags("*")) """ nci """ thick.S.write_once = True self.assertEqual(thick.S.write_once, True) for nci in ( 'on', 'depth', 'usage_str', 'dtype', 'length', 'rlength', 'fullpath', 'minpath', 'member_nids', 'children_nids', 'rfa', 'write_once', ): testnci(thick, local, con, nci) """ new stuff """ self.assertEqual(local.getFileName(), con.get("treefilename($,-1)", self.tree)) finally: if svr_log: svr_log.close() self._stop_mdsip((svr, server))
class mdsTree: """ 构建MDSplus.Tree的一些常用方法 """ def __init__(self, dbname, shot): self.shot = shot self.dbname = dbname self.tree = Tree(self.dbname, self.shot) def formChannelPool(self): """ 构建一个通道池, 对外显示的通道均有与通道名称相同的tags """ node_list = self.tree.getNodeWild("***") channels = [] for node in node_list: if node.usage == 'SIGNAL' and len(node.tags) == 1 and str( node.tags[0]) == node.name: channels.append(node.name.strip()) return channels def close(self): self.tree.close() def getCurrentShot(self): """ 获取当前炮号 """ try: shot_num = self.tree.getCurrent() new_tree = Tree(self.dbname, shot_num) shot_num = shot_num if new_tree.getNode( 'FBC:DUPS1').getLength() else shot_num - 1 except mdsExceptions.TreeNNF: # MDSplus.mdsExceptions.TreeNNF: %TREE-W-NNF, Node Not Found shot_num = shot_num if new_tree.getNode( 'FBC:IP').getLength() else shot_num - 1 except mdsExceptions.TreeNOCURRENT: # MDSplus.mdsExceptions.TreeNOCURRENT: %TREE-E-NOCURRENT, No current shot number set for this tree. shot_num = None return shot_num def renameChaName(self, channel_name): """ 通道名加r'\'是通道的tags, 不在使用'子树:通道名'方式进行索引""" return '\\' + channel_name.upper() def isHaveData(self, channel_name): """ 返回储存内容长度, 当里面不是数据是公式的时候也有长度(此时如果公式索引的通道没数据同样没有数据) """ # length = self.tree.getNode(self.renameChaName(channel_name)).getCompressedLength() length = self.tree.getNode( self.renameChaName(channel_name)).getLength() return length def getWrittenTime(self, channel_name): """ 获得数据写入时间 """ return self.tree.getNode( self.renameChaName(channel_name)).getTimeInserted().date def setTimeContext(self, begin, end, delta): """ 设置起止时间及采样率,参数单位s """ self.tree.setTimeContext(begin, end, delta) def getData(self, channel_name, begin=None, end=None, delta=None): """ 返回x,y数据,如果没有数据,或出错,返回两个空列表 """ self.setTimeContext(begin, end, delta) channel_name = self.renameChaName(channel_name) try: data_x = self.tree.getNode(channel_name).dim_of().data() data_y = self.tree.getNode(channel_name).data() except mdsExceptions.TreeNODATA: # MDSplus.mdsExceptions.TreeNODATA: %TREE-E-NODATA, No data available for this node data_x = [] data_y = [] except mdsExceptions.TreeNNF: # MDSplus.mdsExceptions.TreeNNF: %TREE-W-NNF, Node Not Found data_x = [] data_y = [] except Exception as e: print('Check {} find that {}'.format(channel_name, str(e))) data_x = [] data_y = [] return data_x, data_y def getYInfo(self, channel_name): """ 获得通道数据Y轴单位 """ try: unit = self.tree.getNode( self.renameChaName(channel_name)).units_of() unit = '-' if unit == ' ' else unit except Exception as e: print('get {} unit find that {}'.format(channel_name, str(e))) unit = '-' return {"unit": unit}
def test(): pytree = Tree('pytree', self.shot, 'ReadOnly') ip = pytree.getNode('\\ip') self.assertEqual(ip.getUsage(), 'SIGNAL') self.assertEqual(ip.usage, ip.getUsage()) try: # do not continue and print when no match self.assertEqual(ip.getClass(), 'CLASS_R') except AssertionError: print("ip.nid=%d" % (ip.nid, )) print("Error with ip in %s" % (str(ip.tree), )) raise self.assertEqual(ip.class_str, 'CLASS_R') self.assertEqual(ip.compressible, False) self.assertEqual(ip.compressible, ip.isCompressible()) self.assertEqual(ip.compress_on_put, True) self.assertEqual(ip.compress_on_put, ip.isCompressOnPut()) self.assertEqual(ip.data_in_nci, False) self.assertEqual(ip.on, True) self.assertEqual(ip.on, ip.isOn()) self.assertEqual(ip.do_not_compress, False) self.assertEqual(ip.do_not_compress, ip.isDoNotCompress()) self.assertEqual(ip.dtype_str, 'DTYPE_SIGNAL') self.assertEqual(ip.dtype_str, ip.getDtype()) self.assertEqual(ip.essential, False) self.assertEqual(ip.essential, ip.isEssential()) mhdtree = pytree.getNode('\\PYTREESUB::TOP') self.assertEqual(mhdtree.include_in_pulse, True) self.assertEqual(mhdtree.include_in_pulse, mhdtree.isIncludeInPulse()) self.assertEqual(ip.length, int(Data.execute('getnci($,"LENGTH")', ip))) self.assertEqual(ip.length, ip.getLength()) self.assertEqual(ip.no_write_shot, False) self.assertEqual(ip.no_write_shot, ip.isNoWriteShot()) self.assertEqual(ip.no_write_model, False) self.assertEqual(ip.no_write_model, ip.isNoWriteModel()) self.assertEqual(ip.write_once, False) self.assertEqual(ip.write_once, ip.isWriteOnce()) pydev = pytree.TESTDEVICE part = pydev.conglomerate_nids[1] self.assertEqual(part.PART_NAME(), ':ACTIONSERVER') self.assertEqual(part.original_part_name, ':ACTIONSERVER') self.assertEqual( str(Data.execute('GETNCI($,"ORIGINAL_PART_NAME")', part)), ':ACTIONSERVER') self.assertEqual(pydev.__class__, Device.PyDevice('TestDevice')) devs = pytree.getNodeWild('\\PYTREESUB::TOP.***', 'DEVICE') part = devs[0].conglomerate_nids[3] self.assertEqual(part.original_part_name, ':COMMENT') self.assertEqual( part.original_part_name, str(Data.execute('GETNCI($,"ORIGINAL_PART_NAME")', part))) self.assertEqual(ip.owner_id, ip.getOwnerId()) self.assertEqual(ip.rlength, 168) self.assertEqual(ip.rlength, ip.getCompressedLength()) self.assertEqual(ip.setup_information, False) self.assertEqual(ip.setup_information, ip.isSetup()) self.assertEqual(ip.status, 0) self.assertEqual(ip.status, ip.getStatus()) self.assertEqual((ip.tags == makeArray([ 'IP', 'MAGNETICS_IP', 'MAG_IP', 'MAGNETICS_PLASMA_CURRENT', 'MAG_PLASMA_CURRENT' ])).all(), True) self.assertEqual((ip.tags == ip.getTags()).all(), True) self.assertEqual(ip.time_inserted, ip.getTimeInserted())
def test(): from numpy import array, int32 pytree = Tree('pytree', self.shot, 'ReadOnly') top = TreeNode(0, pytree) members = pytree.getNodeWild(':*') self.assertEqual((members == top.member_nids).all(), True) self.assertEqual((members == top.getMembers()).all(), True) self.assertEqual(top.member.nid_number, members[0].nid_number) member = top.member for idx in range(1, len(members)): self.assertEqual(member.brother.nid_number, members[idx].nid_number) member = member.brother children = pytree.getNodeWild('.*') self.assertEqual((children == top.children_nids).all(), True) self.assertEqual((children == top.getChildren()).all(), True) self.assertEqual(top.child.nid_number, children[0].nid_number) child = top.child for idx in range(1, len(children)): self.assertEqual(child.brother.nid_number, children[idx].nid_number) child = child.brother self.assertEqual(top.child.nid_number, pytree.getNode(str(top.child)).nid_number) self.assertEqual(top.child.child.parent.nid_number, top.child.nid_number) x = array(int32(0)).repeat(len(members) + len(children)) x[0:len(children)] = children.nid_number.data() x[len(children):] = members.nid_number.data() self.assertEqual( (makeArray(x) == top.descendants.nid_number).all(), True) self.assertEqual( (top.descendants.nid_number == top.getDescendants().nid_number ).all(), True) self.assertEqual(top.child.child.depth, 3) self.assertEqual(top.getNumDescendants(), len(x)) self.assertEqual(top.getNumMembers(), len(members)) self.assertEqual(top.getNumChildren(), len(children)) self.assertEqual(top.number_of_members, len(members)) self.assertEqual(top.number_of_children, len(children)) self.assertEqual(top.number_of_descendants, len(x)) devs = pytree.getNodeWild('\\PYTREESUB::TOP.***', 'DEVICE') dev = devs[0].conglomerate_nids self.assertEqual( (dev.nid_number == devs[0].getConglomerateNodes().nid_number ).all(), True) self.assertEqual( (dev.conglomerate_elt == makeArray(array(range(len(dev))) + 1)).all(), True) for idx in range(len(dev)): self.assertEqual(dev[idx].conglomerate_elt, idx + 1) self.assertEqual(dev[idx].getConglomerateElt(), idx + 1) self.assertEqual(top.child.is_child, True) self.assertEqual(top.child.is_member, False) self.assertEqual(top.member.is_child, False) self.assertEqual(top.member.is_member, True) self.assertEqual(top.child.is_child, top.child.isChild()) self.assertEqual(top.child.is_member, top.child.isMember()) ip = pytree.getNode('\\ip') pytree.setDefault(ip) self.assertEqual(ip.fullpath, "\\PYTREE::TOP.PYTREESUB:IP") self.assertEqual(ip.fullpath, ip.getFullPath()) self.assertEqual(ip.minpath, "\\IP") self.assertEqual(ip.minpath, ip.getMinPath()) self.assertEqual(ip.node_name, 'IP') self.assertEqual(ip.node_name, ip.getNodeName()) self.assertEqual(ip.path, "\\PYTREESUB::IP") self.assertEqual(ip.path, ip.getPath())
def find(self): tree = Tree('main', -1, 'ReadOnly') nodes = tree.getNodeWild('***:COMMENT') self.assertEqual(len(nodes), 71) self.assertEqual(str(nodes[0]), '\\SUBTREE::TOP:COMMENT')
dfs = t.getDatafileSize() # t.cleanDatafile() # t.compressDatafile() fn = t.getFileName() t2 = t.copy() # t.close() # top = t.top() # ad = t.addDevice('SUB3') # an = t.addNode('SUB4') # createPulse(1) dir = t.dir() # gc = t.getCurrent('SUB1') gd = t.getDefault() gn = t.getNode("SUB1") gnwi_iterator = t.getNodeWildIter('***') gnw_array = t.getNodeWild('***') gtc_tuple = t.getTimeContext() im_bool = t.isModified() # sd_tn = t.setDefault("SUB1") # ----------------------- Static Methods ----------------------- # gvd_str = t.getVersionDate() # --------------------------- TreeNode Methods --------------------------- # from MDSplus import TreeNode tn = t.getNode("SUB1") c_tn = tn.copy() opn_str = tn.ORIGINAL_PART_NAME() pn_str = tn.PART_NAME() # cn = tn.children_nids() # mn = tn.member_nids() # desc = tn.descendants()