Table Of Contents

Previous topic

predictionmodel.py

Next topic

conditionparser.py

This Page

table.py

def table2array(table):

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.]])

def table2dict(table):

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}

def parse_classifiers(ns, elem):

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

def parse_tables(ns, elem):

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 Label(object):

Class for cash flow table classifier labels

Attributes:

  • label: label text
  • value: label value

class Classifier(object):

Class for cash flow table classifiers

Attributes:

  • level: classifier level as string
  • name: classifier name as string
  • ind: classifier level-variable indices a tuple: (level, variable,)
  • labels: list of Label objects
  • order: classifier order as list of integers

class Array(object):

Class for cash flow table arrays

Attributes:

  • array: table values in a numpy array
  • dict: table values in a dictionary
  • start_date: date object
  • end_date: date object