Extending DaCe ============== The DaCe framework is designed to be user-extensible. Developers can externally extend DaCe by adding new types of nodes, frontend languages, transformations, and hardware architecture backends. The three key mechanisms of extensibility are class inheritance, replacements, and enumerations. * Class inheritance is used for new :ref:`library nodes `, :ref:`data types `, :ref:`transformations `, :ref:`passes `, :ref:`code generator targets `, :ref:`instrumentation providers `, and others. * Replacements are used to extend the :ref:`frontends ` with new language constructs and specialized library functions (e.g., a `custom implementation `_ for ``numpy.eye``). * Enumerations can be extended to add new entries to device types, :ref:`storage locations `, and others. See the enumerations in :mod:`dace.dtypes` for more examples. For more examples of how to extend DaCe, see the following resources: * Library nodes: `Einsum specialization library node `_ * Transformations: `Using and Creating Transformations `_ * Code generators: `Extending the Code Generator `_ * Frontend extensions (enumerations and replacements): `Tensor Core code sample `_ .. toctree:: :maxdepth: 1 symbolic libraries frontend sdfgconvertible backend instrumentation