Skip to content

Latest commit

 

History

History
50 lines (37 loc) · 1.93 KB

codegen.rst

File metadata and controls

50 lines (37 loc) · 1.93 KB

Codegen

This module provides functionality to generate directly compilable code from Diofant expressions. The codegen function is the user interface to the code generation functionality in Diofant. Some details of the implementation is given below for advanced users that may want to use the framework directly.

Note

The codegen callable is not in the diofant namespace automatically, to use it you must first execute

>>> from diofant.utilities.codegen import codegen  # noqa: F401

Implementation Details

Here we present the most important pieces of the internal structure, as advanced users may want to use it directly, for instance by subclassing a code generator for a specialized application. It is very likely that you would prefer to use the codegen() function documented above.

Basic assumptions:

  • A generic Routine data structure describes the routine that must be translated into C/Fortran/... code. This data structure covers all features present in one or more of the supported languages.
  • Descendants from the CodeGen class transform multiple Routine instances into compilable code. Each derived class translates into a specific language.
  • In many cases, one wants a simple workflow. The friendly functions in the last part are a simple api on top of the Routine/CodeGen stuff. They are easier to use, but are less powerful.

Routine

The Routine class is a very important piece of the codegen module. Viewing the codegen utility as a translator of mathematical expressions into a set of statements in a programming language, the Routine instances are responsible for extracting and storing information about how the math can be encapsulated in a function call. Thus, it is the Routine constructor that decides what arguments the routine will need and if there should be a return value.

API Reference

.. automodule:: diofant.utilities.codegen
   :members: