.. index

Performance Optimization
========================
Based on the complexity of smoothing and forecasting algorithms, pycast implements performance critical methods in C++ or OpenCL.
To enable those optimized functions, you need to execute the following::

    import pycast.common.PyCastObject
    PyCastObject.enable_global_optimization()

To disable the optimized functions::

    import pycast.common.PyCastObject
    PyCastObject.disable_global_optimization()

All objects instantiated after one of those calls will use / not use the optimized functions. All existing instances will not be changed.

Code Example
------------

Based on existing C++ Functions, you can enable optimization for your instances.
Therefore you need to:

  * inherit from `pycast.common.PyCastObject`
  * decorate the original method with the 'optimized' decorator

An example implementation looks like the following::

    from pycast.common import PyCastObject
    from pycast.common.decorators import optimized
    class CustomObject(PyCastObject):
        """Your custom class."""

        @optimized
        def method(self):
            """This is the python implementation of the method that should be replaced with an optimized version."""