Dinamica EGO and Python Coupling

Python support is present in the “Python” branch in the repositories (on top of the “Tasks” branch). To compile the branch, it is necessary to have Python dependencies in dff_dependencies_windows. The version containing the dependencies can be downloaded at http://csr.ufmg.br/~romulo/dff_dependencies_windows_python.7z. For execution, it is necessary to have the folder “PyEnvironment” inside the Dinamica folder, the PyEnvironment can also be obtained in http://csr.ufmg.br/~romulo/PyEnvironment.7z.

Example: Calculate Python Expression

An expression that can be used:

dinamica.package("numpy")
a = numpy.arange(15).reshape(3, 5)
print(a)
print(dinamica.inputs)
for row in dinamica.inputs["t1"]:
print(row)
for row in dinamica.inputs["t2"]:
print(row)
dinamica.outputs["teste"] = 2
dinamica.outputs["teste2"] = 2.5
dinamica.outputs["teste3"] = 'a'
dinamica.outputs["outraSaida"] = "yoyo"
dinamica.outputs["tabela"] = dinamica.prepareTable(dinamica.inputs["t1"], 3)
dinamica.outputs["lut"] = dinamica.prepareLookupTable(dinamica.inputs["t2"])

where:

dinamica.package("numpy")

Ask the PIP to install the numpy package and import it:

print(dinamica.inputs)

Prints the vector with all the entries passed by Dinamica:

dinamica.outputs["teste2"] = 2.5

Place an output in the struct named “test2”, containing a double with a value of 2.5:

dinamica.outputs["tabela"] = dinamica.prepareTable(dinamica.inputs["t1"], 3)

Coloca uma saída na struct com nome “tabela”, contendo uma tabela com 3 colunas de chave. Essa função não é necessária se a tabela já estiver com os '*' nos nomes da coluna (portanto o usuário poderia fazer apenas dinamica.outputs[“teste2”] = dinamica.inputs[“t1”]). Toda tabela no Python é tratada como uma lista de listas, onde cada lista interna corresponde a uma linha da tabela.

dinamica.outputs["lut"] = dinamica.prepareLookupTable(dinamica.inputs["t2"])

Put an output in the struct named “lut”, containing a LookupTable (There is no other way to pass a LookupTable back):

Calculate Python Utilities

Utility Name	Description	Parameters
package	It imports the module requested.	str packageName, str installPath=None, str loadPath=None
prepareTable	It returns the table prepared to output. Input Table has to be in the form [header1...headerN][line1]...[lineM] where the first list contains the headers of the table and all the other lists are lines containing the data.	list(list) inputTable, int numKeys
prepareLookupTable	It returns the lookup table prepared to output. The lut has to be in the form [key,value][line1]...[lineM] where the first list contains the headers of the table and all the other lists are lines containing the data.	list(list) lut
toTable	It returns a valid representation of dinamica table to output. Input Table can be: [header1...headerN][line1]...[lineM] where the first list contains the headers of the table and all the other lists are lines containing the data; {header1: [valuesOfColumn1], header2: [valuesOfColumn2]...} where the valuesOfComlumn# are all values of that column in table; (header1...headerN)(line)...(lineM) where the first tuple contains the headers of the table and all the other tuples are lines containing the data; [value1, value2, ..., valueN], those are the values for a lookup table with sequential key; pandas.Dataframe is a commom structure table used to manipulate CSVs; numpy.array is a commom structure for matrix, that can be tables as well. The first line of matrix needs to be the table header.	list(list);dict(list);list(tuple);list;pandas.DataFrame;numpy.array inputTable

Congratulations, you have successfully completed this lesson!

☞Next Lesson
☞ Back to Guidebook Start