Python - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


CodeGeneration

  

Python

  

translate Maple code to Python code

 

Calling Sequence

Parameters

Description

Examples

Compatibility

Calling Sequence

Python(x, cgopts)

Parameters

x

-

expression, list, rtable, procedure, or module

cgopts

-

(optional) one or more CodeGeneration options

Description

• 

The Python(x, cgopts) calling sequence translates Maple code to Python code.

  

- If the parameter x is an algebraic expression, then a Python statement assigning the expression to a variable is generated.

  

- If x is a list, Maple Array, or rtable of algebraic expressions, then a sequence of Python statements assigning the elements to a Python array is produced.  Only the initialized elements of the rtable or Maple Array are translated.

  

- If x is a list of equations nm=expr, where nm is a name and expr is an algebraic expression, then this is understood as a sequence of assignment statements.  In this case, the equivalent sequence of Python assignment statements is generated.

  

- If x is a procedure, then a Python class is generated containing a function equivalent to the procedure, along with any necessary import statements.

  

- If x is a module, then a Python class is generated, as described on the PythonDetails help page.

• 

The parameter cgopts may include one or more CodeGeneration options, as described in CodeGenerationOptions.

• 

For more information about how the CodeGeneration package translates Maple code to other languages, see Translation Details. For more information about translation to Python in particular, see PythonDetails.

Examples

For a description of the options used in the following examples, see CodeGenerationOptions.

withCodeGeneration:

Translate a simple expression and assign it to the name w in the target code.

Pythonx+yz2xz,resultname=w

w = -2 * x * z + y * z + x

Translate a list and assign it to an array with the name w in the target code.

Pythonx,2y,5,z,resultname=w

w = [[x,2 * y],[5,z]]

Translate a computation sequence.  Optimize the input first.

css=1.0+x,t=lnsexpx,r=expx+xt:

Pythoncs,optimize

s = 0.10e1 + x
t1 = math.log(s)
t2 = math.exp(-x)
t = t2 * t1
r = x * t + t2

Declare that x is a float and y is an integer. Return the result in a string.

sPythonx+y+1,declare=x::float,y::integer,output=string

scg = x + y + 1

(1)

Translate a procedure.  Assume that all untyped variables have type integer.

f := proc(x, y, z) return x*y-y*z+x*z; end proc:

Pythonf,defaulttype=integer

def f (x, y, z):
    return(y * x - y * z + x * z)

Translate a procedure containing an implicit return.  A new variable is created to hold the return value.

f := proc(n)
  local x, i;
  x := 0.0;
  for i to n do
    x := x + i;
  end do;
end proc:

Pythonf

def f (n):
    x = 0.0e0
    for i in range(1, n + 1):
        x = x + i
        cgret = x
    return(cgret)

Translate a linear combination of hyperbolic trigonometric functions.

Python2coshx7tanhx

cg0 = 2 * math.cosh(x) - 7 * math.tanh(x)

Translate a procedure with no return value containing a printf statement.

f := proc(a::integer, p::integer)
  printf("The integer remainder of %d divided by %d is: %d\n", a, p, irem(a, p));
end proc:

Pythonf

def f (a, p):
    printf("The integer remainder of %d divided by %d is: %d\n", a, p, a % p)

Translate a procedure involving linear algebra.

detHilbert := proc(n :: posint)
   uses LinearAlgebra;
   return Determinant( HilbertMatrix( n ) );
end proc:

PythondetHilbert

import numpy.linalg
import scipy.linalg

def detHilbert (n):
    return(numpy.linalg.det(scipy.linalg.hilbert(n)))

Notice that by default CodeGeneration translates LinearAlgebra[Determinant] to the Python function numpy.linalg.det.  However as the Python scipy.linalg library is already being used in the above example and also contains a implementation of the determinant, it may be simpler to use that translation.  This may be achieved using the libraryorder option to indicate that scipy.linalg is preferred over numpy.linalg.

PythondetHilbert,libraryorder=scipy.linalg,numpy.linalg

import scipy.linalg

def detHilbert (n):
    return(scipy.linalg.det(scipy.linalg.hilbert(n)))

Compatibility

• 

The CodeGeneration[Python] command was introduced in Maple 18.

• 

For more information on Maple 18 changes, see Updates in Maple 18.

See Also

CodeGeneration

CodeGenerationOptions

OpenMaple,Python

Python

PythonDetails

TranslationDetails