pydae.core.builder.core

The Builder orchestrates the full pipeline:
  1. Parse & validate the symbolic system dictionary

  2. Compute symbolic Jacobians

  3. Translate to C code

  4. Compile into a shared library (.so / .dll) or CFFI extension

Usage

# Dense, CFFI (default) Builder(sys_dict)

# Sparse with KLU, ctypes Builder(sys_dict, target=’ctypes’, sparse=’klu’)

# Sparse with Apple Accelerate, CFFI Builder(sys_dict, target=’cffi’, sparse=’accelerate’)

# Sparse with PARDISO, ctypes Builder(sys_dict, target=’ctypes’, sparse=’pardiso’)

# Legacy: sparse=True is equivalent to sparse=’klu’ Builder(sys_dict, sparse=True)

Classes

Builder(system_dict[, verbose, API, target, ...])

SympyEncoder(*[, skipkeys, ensure_ascii, ...])

JSON encoder that handles SymPy Symbol/Expr objects.

class pydae.core.builder.core.Builder(system_dict, verbose=False, API=False, target='cffi', sparse=True)[source]

Bases: object

build()[source]

The main orchestration pipeline.

class pydae.core.builder.core.SympyEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]

Bases: JSONEncoder

JSON encoder that handles SymPy Symbol/Expr objects.

default(obj)[source]

Implement this method in a subclass such that it returns a serializable object for o, or calls the base implementation (to raise a TypeError).

For example, to support arbitrary iterators, you could implement default like this:

def default(self, o):
    try:
        iterable = iter(o)
    except TypeError:
        pass
    else:
        return list(iterable)
    # Let the base class default method raise the TypeError
    return super().default(o)