def get_value(self, context=None, component=None, field=None, key=None, cindex=None, propname=None, fkey=None, findex=None, scope=None, column='value', return_list=False): """値を取得する コンポーネント/コンテキストのキー(key), コンポーネントのインデックス(cindex), プロパティ名(propname), フィールドのキー(fkey), フィールドのインデックス(findex), スコープ(scope)を適切に設定することにより、 複数の値を一度に取得することができる。 return_list=False のとき、取得した値が1つの場合は値(のみ)を直接取得することができる。 それ以外の場合、値はリストで取得される。 """ if context is not None: key, cindex = util.get_key_and_index(context) if component is not None: key, cindex = util.get_key_and_index(component) if field is not None: fkey, findex = util.get_key_and_index(field) key = self._conv_key(key) fkey = self._conv_key(fkey) slicer = self.get_islicer(key=key, cindex=cindex, propname=propname, fkey=fkey, findex=findex, scope=scope) values = self.data.loc[slicer, column].values if (len(values) == 1) and (return_list == False): return values[0] else: return values
def set_component(self, component, _to): """1つのコンポーネントを1つのフィールドにセットする このメソッドはunknownとvalueを一組で設定します。すなわち、unknownなフィールドにあったコンポーネントを 移動するとき、同じフィールドがunknownとなっていた別コンポーネントも同様に処理されるということです。 """ assert component is not None assert _to is not None ckey, cindex = util.get_key_and_index(component) fkey, findex = util.get_key_and_index(_to) self.set_value(self.VALUE_NON_EXISTENT, fkey=fkey, findex=findex) self.set_value(self.VALUE_EXISTENT, key=ckey, cindex=cindex, fkey=fkey, findex=findex)
def move_component(self, _from, _to): """フィールドからフィールドへ1つのコンポーネントを移動する """ assert _from is not None assert _to is not None fkey, findex = util.get_key_and_index(_from) #fkey = self._conv_key(_fkey) tkey, tindex = util.get_key_and_index(_to) #tkey = self._conv_key(_tkey) values = self.get_value(fkey=fkey, findex=findex) self.set_value(values, fkey=tkey, findex=tindex) self.set_value(float('nan'), fkey=fkey, findex=findex)
def output_component(self, field=None, fkey=None, findex=None): """指定されたフィールドにセットされているコンポーネントの出力形式を取得する """ output = ' ' #何もセットされてない場合の出力形式 strs = [] if field is not None: fkey, findex = util.get_key_and_index(field) fkey = self._conv_key(fkey) slicer = self.get_islicer(propname='_placed', fkey=fkey, findex=findex) unknown = self.data.loc[slicer, 'unknown'][0] #print 'unknown:', unknown #DEBUG value = self.data.loc[slicer, 'value'] #print 'value:', value #DEBUG for _key, _value in value.iteritems(): #print '_key:', _key, ', _value:', _value #DEBUG if _value > 0: ckey = _key[0] str_key = 'rstr' if unknown == 1 else 'str' _str = util.dict_value(self.components, str_key, search=('key', ckey)) strs.append(_str) strs = np.unique(strs) #print 'strs:', strs, ', len=', len(strs) #DEBUG if len(strs) > 0: output = "/".join(strs) return output
def set_value(self, value, context=None, component=None, field=None, key=None, cindex=None, propname=None, fkey=None, findex=None, scope=None, column='value'): """値を設定する コンポーネント/コンテキストのキー(key), コンポーネントのインデックス(cindex), プロパティ名(propname), フィールドのキー(fkey), フィールドのインデックス(findex), スコープ(scope)を適切に設定することにより、 複数の値を一度に設定することができる。 """ if context is not None: key, cindex = util.get_key_and_index(context) if component is not None: key, cindex = util.get_key_and_index(component) if field is not None: fkey, findex = util.get_key_and_index(field) key = self._conv_key(key) fkey = self._conv_key(fkey) slicer = self.get_islicer(key=key, cindex=cindex, propname=propname, fkey=fkey, findex=findex, scope=scope) try: self.data.loc[slicer, column] = value except KeyError: pass