@classmethod
    def on_change(cls, callback):
        existing = _on_change_callbacks.get(cls, [])
        if callback.__name__ in [e.__name__ for e in existing]:
            return callback

        _on_change_callbacks.setdefault(cls, []).append(callback)
        return callback
Return shear angle, direction and plane from shear matrix.
dataset/ETHPy150Open mozilla/addons-server/src/olympia/amo/models.py/OnChangeMixin.on_change--crossover with--dataset/ETHPy150Open IEEERobotics/bot/bot/hardware/complex_hardware/transformations.py/shear_from_matrix