### 81.1 Introduction to pytranslate

`pytranslate` package provides Maxima to Python translation functionality. The package is experimental, and the specifications of the functions in this package might change. It was written as a Google Summer of Code project by Lakshya A Agrawal (Undergraduate Student, IIIT-Delhi) in 2019. A detailed project report is available as a GitHub Gist.

The package needs to be loaded in a Maxima instance for use, by executing `load("pytranslate");`
The statements are converted to python3 syntax. The file pytranslate.py must be imported for all translations to run, as shown in example.

Example:

    (%i1) load ("pytranslate")$

    /* Define an example function to calculate factorial */
    (%i2) pytranslate(my_factorial(x) := if (x = 1 or x = 0) then 1
                      else x * my_factorial(x - 1));
    (%o2)
    def my_factorial(x, v = v):
        v = Stack({}, v)
        v.ins({"x" : x})
        return((1 if ((v["x"] == 1) or (v["x"] == 0)) \
                  else (v["x"] * my_factorial((v["x"] + (-1))))))
    m["my_factorial"] = my_factorial

    (%i3) my_factorial(5);
    (%o3)                          120

    >>> from pytranslate import *
    >>> def my_factorial(x, v = v):
    ...     v = Stack({}, v)
    ...     v.ins({"x" : x})
    ...     return((1 if ((v["x"] == 1) or (v["x"] == 0)) \
    ...     else (v["x"] * my_factorial((v["x"] + (-1))))))
    ...
    >>> my_factorial(5)
    120

The Maxima to Python Translator works in two stages:
1. Conversion of the internal Maxima representation to a defined Intermediate Representation, henceforth referred as IR(mapping is present in `share/pytranslate/maxima-to-ir.html`)
2. The conversion of IR to Python.

Supported Maxima forms:
1. `Numbers`(including complex numbers)
2. `Assignment operators`
3. `Arithmetic operators`(+, -, *, ^, /, !)
4. `Logical operators`(and, or, not)
5. `Relational operators`(`>`, `<`, `>=`, `<=`, `!=`, `==`)
6. `Lists`
7. `Arrays`
8. `block`
9. `Function` and function calls
10. `if`-else converted to Python conditionals
11. `for` loops
12. `lambda` form

#### 81.1.1 Tests for pytranslate

The tests for `pytranslate` are present at `share/pytranslate/rtest_pytranslate.mac` and can be run by executing `batch(rtest_pytranslate, test);`