def get_prelu_pattern():
        """
        ``x1 = transpose(perm=(0,2,3,1))(x)``

        ``y = a * relu(-1 * x1) + relu(x1)``

        When ``x`` is rank 4, and ``a`` is of shape (``C,)``, ``(1, C)``, ``(1,1,C)``, or ``(1,1,1,C)``,
        this is equivalent to ``prelu`` with ``alpha = -a.flatten()``, followed by a ``transpose``
        with ``perm (0,2,3,1)``.
        """

        @mb.program(
            input_specs=[
                mb.TensorSpec(
                    shape=([get_new_symbol(), get_new_symbol(), get_new_symbol(), get_new_symbol()])
                ),
            ]
        )
        def prelu_pattern(x):
            # perm value can be anything, it will be checked in "is_var_constraint_satisifed" method
            x = mb.transpose(x=x, perm=[0, 1, 2, 3], name="transpose")
            return fuse_prelu._prelu_pattern(x)

        return prelu_pattern

        ``x1 = transpose(perm=(0,2,3,1))(x)``

        ``y = a * relu(-1 * x1) + relu(x1)``

        When ``x`` is rank 4, and ``a`` is of shape (``C,)``, ``(1, C)``, ``(1,1,C)``, or ``(1,1,1,C)``,
        this is equivalent to ``prelu`` with ``alpha = -a.flatten()``, followed by a ``transpose``
        with ``perm (0,2,3,1)``.
        
coremltools/converters/mil/mil/passes/defs/optimize_activation.py