Create a single Numpy array from XML cash_flow table:
>>> from lxml import etree
>>> from simo.builder.modelbase.table import table2array
>>> tablexml = u"""<table>
... <cash_flow>1 1 1 160 370 55</cash_flow>
... <cash_flow>2 1 1 160 400 56 </cash_flow>
... </table>"""
>>> elem = etree.fromstring(tablexml)
>>> arr = table2array(elem)
>>> arr
array([[ 1., 1., 1., 160., 370., 55.],
[ 2., 1., 1., 160., 400., 56.]])
Create a dictionary with the classifying values joined together as the dictionary key and the cash flow as the value; i.e., a row ‘1 2 3 4 5 6 7 100’ translates to cdict[‘1:2:3:4:5:6:7’]=100:
>>> from lxml import etree
>>> from simo.builder.modelbase.table import table2dict
>>> tablexml = u"""<table>
... <cash_flow>1 1 1 160 370 55</cash_flow>
... <cash_flow>2 1 1 160 400 56</cash_flow>
... </table>"""
>>> elem = etree.fromstring(tablexml)
>>> dct = table2dict(elem)
>>> dct
{'1:1:1:160:370': 55.0, '2:1:1:160:400': 56.0}
Parse cash flow table and/or trend classifiers:
>>> class Lexicon(object):
... def variable_ind(self, level, var, active=False):
... return (1, 1)
... def level_ind(self, level):
... return 1
>>> class Validator(object):
... def __init__(self, lexicon):
... self.errors = set([])
... self.warnings = []
... self.lexicon = lexicon
... def variable_ind(self, level, variable):
... return self.lexicon.variable_ind(level, variable)
... def level_ind(self, level):
... return self.lexicon.level_ind(level)
... def add_error(self, msg):
... self.errors.add(msg)
... def add_warnings(self, msg):
... self.warnings.append(msg)
... model_type = 'cash_flow_table'
>>> validator = Validator(Lexicon())
>>> from lxml import etree
>>> from simo.builder.modelbase.table import parse_classifiers
>>> cfierxml = u"""<classifiers>
... <classifier>
... <variable>PRICE_REGION</variable>
... <level>comp_unit</level>
... </classifier>
... <classifier to_db="true">
... <variable>SP</variable>
... <level>comp_unit</level>
... </classifier>
... <classifier>
... <variable>assortment</variable>
... <level>within-operation</level>
... <labels>
... <label>
... <value>1</value>
... <name>log</name>
... </label>
... <label>
... <value>2</value>
... <name>pulp</name>
... </label>
... </labels>
... </classifier>
... </classifiers>"""
>>> elem = etree.fromstring(cfierxml)
>>> ns = ""
>>> cfiers, db_cfiers, db_cfiers_ind, corder, keycount = \
... parse_classifiers(ns, elem, validator)
>>> 'PRICE_REGION' in cfiers
True
>>> c = cfiers['assortment']
>>> c.name
'assortment'
>>> c.level
'within-operation'
>>> c.ind
>>> c.order
2
>>> c.variable_type
>>> len(c.labels)
2
>>> l = c.labels[1]
>>> l.label
'pulp'
>>> l.value
2
>>> db_cfiers
['SP']
>>> keycount
2
Parse <tables> element contents into ctypes array, value dictionary and activation time objects for each table:
>>> from lxml import etree
>>> from simo.builder.modelbase.table import parse_tables
>>> tablesxml = u"""<tables>
... <table>
... <cash_flow>1 1 1 160 370 55</cash_flow>
... <cash_flow>2 1 1 160 400 56</cash_flow>
... </table>
... </tables>"""
>>> elem = etree.fromstring(tablesxml)
>>> tables, n = parse_tables(elem)
>>> tables[0].array
array([[ 1., 1., 1., 160., 370., 55.],
[ 2., 1., 1., 160., 400., 56.]])
>>> tables[0].dict
{'1:1:1:160:370': 55.0, '2:1:1:160:400': 56.0}
>>> n
1
Class for cash flow table classifier labels
Attributes:
Class for cash flow table classifiers
Attributes:
Class for cash flow table arrays
Attributes: