Cython Generation

Generates a Cython wrappers from description dictionaries. This module relies heavily on the type system to convert between C/C++, Cython, and Python types in a seamless way. While this module does not explicitly rely on the auto-describer, it sure helps! The functions in this module are conceptually easy to understand – given class descriptions they generate strings of Cython code – their implementations do a lot of heavy lifting.

This module is available as an xdress plugin by the name xdress.cythongen. Note that while the module does not rely on the autodescriber, the plugin does.

author:Anthony Scopatz <scopatz@gmail.com>

Cython Generation API

class xdress.cythongen.XDressPlugin[source]

The main cython generator plugin.

The __init__() method may take no arguments or keyword arguments.

requires = ('xdress.autodescribe',)

This plugin requires autodescribe.

xdress.cythongen.classcpppxd(desc, exceptions=True, ts=None)[source]

Generates a cpp_*.pxd Cython header snippet for exposing a C/C++ class or struct to other Cython wrappers based off of a dictionary description of the class or struct.

Parameters:

desc : dict

Class description dictonary.

exceptions : bool or str, optional

Cython exception annotation. Set to True to automatically detect exception types, False for when exceptions should not be included, and a str (such as ‘+’ or ‘-1’) to apply to everywhere.

ts : TypeSystem, optional

A type system instance.

Returns:

cimport_tups : set of tuples

Set of Cython cimport tuples for cpp_*.pxd header file.

cpppxd : str

Cython cpp_*.pxd header file as in-memory string.

xdress.cythongen.classpxd(desc, classes=(), ts=None, max_callbacks=8)[source]

Generates a *pxd Cython header snippet for exposing a C/C++ class to other Cython wrappers based off of a dictionary description.

Parameters:

desc : dict

Class description dictonary.

classes : sequence, optional

Listing of all class names that are handled by cythongen. This may be the same dictionary as in modpyx().

ts : TypeSystem, optional

A type system instance.

max_callbacks : int, optional

The default maximum number of callbacks for function pointers.

Returns:

cimport_tups : set of tuples

Set of Cython cimport tuples for .pxd header file.

pxd : str

Cython *.pxd header snippet for class.

xdress.cythongen.classpyx(desc, classes=None, ts=None, max_callbacks=8)[source]

Generates a *.pyx Cython wrapper implementation for exposing a C/C++ class based off of a dictionary description. The environment is a dictionary of all class names known to their descriptions.

Parameters:

desc : dict

Class description dictonary.

classes : dict, optional

Dictionary which maps all class names that are required to their own descriptions. This is required for resolving class heirarchy dependencies.

ts : TypeSystem, optional

A type system instance.

max_callbacks : int, optional

The default maximum number of callbacks for function pointers.

Returns:

pyx : str

Cython *.pyx implementation file as in-memory string.

xdress.cythongen.cpppxd_sorted_names(mod, ts)[source]

Sorts the variable names in a cpp_*.pxd module so that C/C++ declarations happen in the proper order.

xdress.cythongen.funccpppxd(desc, exceptions=True, ts=None)[source]

Generates a cpp_*.pxd Cython header snippet for exposing a C/C++ function to other Cython wrappers based off of a dictionary description.

Parameters:

desc : dict

Function description dictonary.

exceptions : bool or str, optional

Cython exception annotation. Set to True to automatically detect exception types, False for when exceptions should not be included, and a str (such as ‘+’ or ‘-1’) to apply to everywhere.

ts : TypeSystem, optional

A type system instance.

Returns:

cimport_tups : set of tuples

Set of Cython cimport tuples for cpp_*.pxd header file.

cpppxd : str

Cython cpp_*.pxd header file as in-memory string.

xdress.cythongen.funcpyx(desc, ts=None)[source]

Generates a *.pyx Cython wrapper implementation for exposing a C/C++ function based off of a dictionary description.

Parameters:

desc : dict

function description dictonary.

ts : TypeSystem, optional

A type system instance.

Returns:

pyx : str

Cython *.pyx implementation as in-memory string.

xdress.cythongen.gencpppxd(env, exceptions=True, ts=None)[source]

Generates all cpp_*.pxd Cython header files for an environment of modules.

Parameters:

env : dict

Environment dictonary mapping target module names to module description dictionaries.

exceptions : bool or str, optional

Cython exception annotation. Set to True to automatically detect exception types, False for when exceptions should not be included, and a str (such as ‘+’ or ‘-1’) to apply to everywhere.

ts : TypeSystem, optional

A type system instance.

Returns:

cpppxds : dict

Maps environment target names to Cython cpp_*.pxd header files strings.

xdress.cythongen.genpxd(env, classes=(), ts=None, max_callbacks=8)[source]

Generates all pxd Cython header files for an environment of modules.

Parameters:

env : dict

Environment dictonary mapping target module names to module description dictionaries.

classes : sequence, optional

Listing of all class names that are handled by cythongen. This may be the same dictionary as in genpyx()

ts : TypeSystem, optional

A type system instance.

max_callbacks : int, optional

The default maximum number of callbacks for function pointers.

Returns:

pxds : str

Maps environment target names to Cython pxd header files strings.

xdress.cythongen.genpyx(env, classes=None, ts=None, max_callbacks=8)[source]

Generates all pyx Cython implementation files for an environment of modules.

Parameters:

env : dict

Environment dictonary mapping target module names to module description dictionaries.

classes : dict, optional

Dictionary which maps all class names that are required to their own descriptions. This is required for resolving class heirarchy dependencies. If None, this will be computed here.

ts : TypeSystem, optional

A type system instance.

max_callbacks : int, optional

The default maximum number of callbacks for function pointers.

Returns:

pyxs : str

Maps environment target names to Cython pxd header files strings.

xdress.cythongen.modcpppxd(mod, exceptions=True, ts=None)[source]

Generates a cpp_*.pxd Cython header file for exposing a C/C++ module to other Cython wrappers based off of a dictionary description of the module.

Parameters:

mod : dict

Module description dictonary.

exceptions : bool or str, optional

Cython exception annotation. Set to True to automatically detect exception types, False for when exceptions should not be included, and a str (such as ‘+’ or ‘-1’) to apply to everywhere.

ts : TypeSystem, optional

A type system instance.

Returns:

cpppxd : str

Cython cpp_*.pxd header file as in-memory string.

xdress.cythongen.modpxd(mod, classes=(), ts=None, max_callbacks=8)[source]

Generates a pxd Cython header file for exposing C/C++ data to other Cython wrappers based off of a dictionary description.

Parameters:

mod : dict

Module description dictonary.

classes : sequence, optional

Listing of all class names that are handled by cythongen. This may be the same dictionary as in modpyx().

ts : TypeSystem, optional

A type system instance.

max_callbacks : int, optional

The default maximum number of callbacks for function pointers.

Returns:

pxd : str

Cython .pxd header file as in-memory string.

xdress.cythongen.modpyx(mod, classes=None, ts=None, max_callbacks=8)[source]

Generates a pyx Cython implementation file for exposing C/C++ data to other Cython wrappers based off of a dictionary description.

Parameters:

mod : dict

Module description dictonary.

classes : dict, optional

Dictionary which maps all class names that are required to their own descriptions. This is required for resolving class heirarchy dependencies.

ts : TypeSystem, optional

A type system instance.

max_callbacks : int, optional

The default maximum number of callbacks for function pointers.

Returns:

pyx : str

Cython pyx header file as in-memory string.

xdress.cythongen.pxd_sorted_names(mod)[source]

Sorts the names in a module to make sure that pxd declarations happen in the proper order.

xdress.cythongen.varcpppxd(desc, exceptions=True, ts=None)[source]

Generates a cpp_*.pxd Cython header snippet for exposing a C/C++ variable to other Cython wrappers based off of a dictionary description.

Parameters:

desc : dict

Function description dictonary.

exceptions : bool or str, optional

Cython exception annotation. Set to True to automatically detect exception types, False for when exceptions should not be included, and a str (such as ‘+’ or ‘-1’) to apply to everywhere.

ts : TypeSystem, optional

A type system instance.

Returns:

cimport_tups : set of tuples

Set of Cython cimport tuples for cpp_*.pxd header file.

cpppxd : str

Cython cpp_*.pxd header file as in-memory string.

xdress.cythongen.varpyx(desc, ts=None)[source]

Generates a *.pyx Cython wrapper implementation for exposing a C/C++ variable based off of a dictionary description.

Parameters:

desc : dict

Variable description dictonary.

ts : TypeSystem, optional

A type system instance.

Returns:

pyx : str

Cython *.pyx implementation as in-memory string.