Py-Engineering documentation
Welcome to the Py-Engineering documentation. If you're new to these docs, we
recommend you to check what Py-Engineering is all about. Watch the introduction movie
"How it works" and checkout some examples.
If you think anything is missing or unclear, let us know. Ready to start, but no
Py-Engineering account yet? Request a demo!
Content
Calculation
Calculation steps
A calculation will try to run main_function
with the provided input in a dictionnary called
input_dict
. Optionnaly, a validation script can be ran prior to executing the main script.
If the script ran succesfully, a pdf document can be created using a LaTeX script.
Step |
Optional states |
Form validation Before trying to execute any script, a simple form
validation checks if all the required fields are filled. For integer and float fields, the min-
and max values will alse be checked.
|
If the validation fails, the user is informed by styling the form. No calculation is started yet
and results of this step will not be logged.
If the form validation is passed, the next step will start.
|
If multiple calculations run at the same time, it is possible that a calculation is queued.
The next step will start when other calcualtions are done.
|
Queued
|
Python validation script (optional) A more complex valiation
can be done with a custom python script.
If the python validation script did not return anything and printed nothing, the next step will
start.
|
Busy validating
Error in python
validation script
Failed validation
|
Python script
If the python validation script did not return anything and printed nothing, the next step will
start.
|
Busy calculating
Error in python
script
|
LaTeX script (optional)
A PDF-file can be created using the results of the python script.
|
Error in LaTeX
script
|
Finally, if all steps are completed without errors.
|
Done
|
A calculation comes with a form where the user can provide input according to the input settings. This
will result in a python dictionnary that can be used in the python scripts.
The type of input defines the form-element that is used and in which type object the input is stored and
passed to the python script. Some input types require predefined input. A dropdown for example needs to
have a set of option from wich
the user can choose.
Input type |
Form element |
Python object |
Required attributes |
Integer |
input (restricted to [-][numbers]) |
int |
|
Integer (slider) |
range (step=1) |
int |
Min value;
Max value
|
Float |
input (restricted to [-][numbers][dot or comma][numbers]) |
float |
|
Float (slider) |
range (step=0.01) |
float |
Min value;
Max value
|
Text |
input (type: text) |
str |
|
Radio |
input (type: radio) |
[Autodiscover] |
Predefined input |
Boolean |
input (type: checkbox) |
bool |
|
Check multiple |
input (type: checkbox) |
list |
Predefined input |
Select multiple |
select (multiple) |
[Autodiscover] |
Predefined input |
Select (1rst level) |
select |
[Autodiscover] |
Predefined input |
Select (2nd level) |
select |
[Autodiscover] |
Predefined input; Select (1rst level) |
Select (3rd level) |
select |
[Autodiscover] |
Predefined input; Select (1rst level); Select (2nd level) |
EXAMPLE Showing all different
input types with their form-elements
Predefined input
For some input types, a selection of options need to be predefined. This is done with a JSON script. The
JSON script needs to contain a list of choices. Every choice should have an id, name and optionally
another list of choices. The id is
passed to the python dictionary if that name is selected. The deepest level does not contain choices,
but only id and name. For translation, name_XX can be used with XX being the language code.
{
"choices": [
{
"id": "a",
"name": "Option A"
},
{
"id": "b",
"name": "Option B"
},
{
"id": "c",
"name": "Option C"
},
{
"id": "d",
"name": "Option D"
}
]
}
{
"choices": [
{
"id": "a",
"name": "Main: A",
"name_nl": "Hoofd: A",
"choices": [
{
"id": "a_1",
"name": "Second: A1",
"name_nl": "Tweede: A1",
"choices": [
{
"id": "a_11",
"name": "Third: A1.1",
"name_nl": "Derde: A1.1"
},
{
"id": "a_12",
"name": "Third: A1.2",
"name_nl": "Derde: A1.2"
}
]
},
{
"id": "a_2",
"name": "Second: A2",
"name_nl": "Tweede: A2",
"choices": [
{
"id": "a_21",
"name": "Third: A2.2",
"name_nl": "Derde: A2.2"
},
{
"id": "a_22",
"name": "Third: A2.2",
"name_nl": "Derde: A2.2"
}
]
}
]
},
{
"id": "b",
"name": "Main: B",
"name_nl": "Hoofd: B",
"choices": [
{
"id": "b_1",
"name": "Second: B1",
"name_nl": "Tweede: B1",
"choices": [
{
"id": "b_11",
"name": "Third: B1.1",
"name_nl": "Derde: B1.1"
},
{
"id": "b_22",
"name": "Third: B1.2",
"name_nl": "Derde: B1.2"
}
]
},
{
"id": "b_2",
"name": "Second: B2",
"name_nl": "Tweede: B2",
"choices": [
{
"id": "b_21",
"name": "Third: B2.1",
"name_nl": "Derde: B2.1"
},
{
"id": "b_22",
"name": "Third: B2.2",
"name_nl": "Derde: B2.2"
}
]
}
]
}
]
}
EXAMPLE Using a
three level dropdown
Mathematical operators
Mathematical operators can be assigend to an input field to create an extra dropdown where the user can
choose if the value needs to be interpreted as a minimal or maximal value for example. An extra key and
value will be added to the
dictionnary. The key in this dictionary is the CID of the parameter appended with _operator
Mathematical operator |
Symbol |
Value |
Less than |
< |
lt |
Less than or equal |
≤ |
le |
Equal |
= |
equals |
Greater than or equal |
≥ |
ge |
Greater than |
> |
gt |
Note that the use of the string _operator
is aloud as an input cid. A mathematical operator
for an input cid some_operator
for example becomes some_operator_operator
.
Validation
If validation is set in the input settings, the user will be notified if the input is not correct before
the calculation will run.
- Required
- Minimum value
- Maximum value
Validation
Validtion script
External files
External files can be uploaded in the admin console Caclulator
> Upload files. Select your platform and calculation(s) that are aloud to use this file.
Once external files are uploaded, you can add them to your calculation under USE EXTERNAL FILES
In your Python code, the file can be opened like it would be in the same directory as the python script itself.
For example:
import csv
with open('example_file.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
for row in csv_reader:
print(row)
line_count += 1
EXAMPLE Reading an external CSV file
Output
All statements printed while executing the python script are treated as output. There are some special
tags that you could use to format the output text.
Characters as &
<
, >
, "
and '
are
escaped when formatting the output as HTML. The newline character is not escaped, so to start a new
line: print \n
. To escape the
newline character, print \\n
.
There are some tags that translate to specific HTML.
Start- and end tags can be used to format text in between te tags. If only a start-tag is used, all the
following text will be formatted according to the tag. Likewise, if only an end-tag is used, all the
previous output is formatted. Start-
and end-tags are written in lowercase within an underscore and an open or close bracket like
_tag[
Start tag |
End tag |
HTML substitution |
LaTeX substitution |
Example |
_bold[ or _b[ |
_bold] or _b] |
<b> ... </b> |
\textbf{ ... } |
_bold[Bold_b]
Bold |
_italic[ or _i[ |
_italic] or _i] |
<i> ... </i> |
\textit{ ... } |
_italic[Italic_i]
Italic |
_underline[ or _u[ |
_underline] or _u] |
<u> ... </u> |
\underline{ ... } |
_underline[Underline_u]
Underline |
_superscript[ or _sup[ |
_superscript] or _sup] |
<sup> ... </sup> |
$^{ ... }$ |
x_sup[2_sup]
x2 |
_subscript[ or _sub[ |
_subscript] or _sub] |
<sub> ... </sub> |
$_{ ... }$ |
y_sub[z_sub]
yz |
_code_inline[ or _ci[ |
_code_inline] or _ci] |
<code> ... </code> |
\begin{verbatim} ... \end{verbatim} |
_code_inline[code_inline_ci]
code_inline |
_code_block[ or _cb[ |
_code_block] or _cb] |
<pre> ... </pre> |
\begin{verbatim} ... \end{verbatim} |
_code_block[multiple lines\nof code_cb]
multiple lines of code
|
_html_inline[ or _hi[ |
_html_inline] or _hi] |
<code> ... </code> |
...
|
_html_inline[html_inline_hi]
html_inline |
Single line tags are written in lowercase within an underscore and a space like _single_line_tag
...
. The following line up to a newline character is formatted according to the tag.
You can use start- and end-tags within each other and within aa single line tag.
Single line tag |
HTML substitution |
Example |
_info |
<p class="text-info my-1"><span class="fa fa-fw
fa-info-circle"></span> ...</p> |
_info Info
Info
|
_warning |
<p class="text-warning my-1"><span class="fa fa-fw
fa-exlamation-circle"></span>
...</p> |
_warning Info
Warning
|
_danger |
<p class="text-danger my-1"><span class="fa fa-fw fa-times-circle"></span>
...</p> |
_danger Info
Danger
|
_success |
<p class="text-success my-1"><span class="fa fa-fw fa-check-circle"></span>
...</p> |
_success Info
Success
|
_header |
<h6> ...</h6> |
_header Header
Header
|
_small |
<small>< ...</small> |
_small Small
Small
|
EXAMPLE Showing how
output formatting can be used and combined.
In the substituted HTML,
Twitter Bootstrap is
used for styling and
Font Awesome is used for
certain icons. The actual output
might look different in different browsers or with custom style sheets.
Show file or image
If your python script creates a file, you can show a download link as ouptut or show a responsive image if the
file is an image.
Tag |
HTML substitution |
_img[...] |
<img src="..." class="img-fluid"><br> |
_file_link[...] |
<a href="...">...</a> |
Generate PDF with LaTeX
If a LaTeX script is provided, a PDF will be created after the python function is finished. The PDF can
be downloaded or sent by mail.
Tex file from template
You can specify a tex-file as a template in each available language in the admin console. This template can be
modified with print statements from your python script.
Print statements with _latex
tags will be inserted in the .tex file before the PDF is compiled. Use
the tag
_latex_line
or _latex_line99
where 99
is a positive integer.
By using no positive
integer, the line will be inserted 1 line above the
\begin{document}
statement.
Single line tag |
Example |
_latex_line |
print('_latex_line15', 'Custom text inserted before the \begin{document}
statement')
|
_latex_line |
print('_latex_line15', 'Custom text inserted in row $15$')
|
Tex file generated by python script
If your python script generates a .tex file, you can set the name of the file in the admin console and the .tex file will be compiled aftere executing the python code.
EXAMPLE of a PDF compiled with
LaTeX using both a template and a .tex file generated by the python script.