from __future__ import print_function
import numpy as np

def AlphaQuadraturePointsWeightsHex(C):

    if C % 2 != 0:
        C += 1

    if C > 6:
        raise ValueError("Alpha optimal quadrature points beyond C=4 not available. Consider using tensor product or WV quadrature")

    if C == 0:
        zw = np.array([0., 0., 0., 8.])
    elif C==2:
        zw = np.array([
                [ 1.0, -1.0, -1.0, 1.0],
                [-1.0,  1.0, -1.0, 1.0],
                [ 1.0,  1.0, -1.0, 1.0],
                [-1.0, -1.0,  1.0, 1.0],
                [ 1.0, -1.0,  1.0, 1.0],
                [-1.0,  1.0,  1.0, 1.0],
                [ 1.0,  1.0,  1.0, 1.0]
            ])
    elif C==4:
        zw = np.array([
            [-1.0, -1.0, -1.0, 0.037037037037037037037037037037037037],
            [ 0.0, -1.0, -1.0, 0.148148148148148148148148148148148148],
            [ 1.0, -1.0, -1.0, 0.037037037037037037037037037037037037],
            [-1.0,  0.0, -1.0, 0.148148148148148148148148148148148148],
            [ 0.0,  0.0, -1.0, 0.592592592592592592592592592592592593],
            [ 1.0,  0.0, -1.0, 0.148148148148148148148148148148148148],
            [-1.0,  1.0, -1.0, 0.037037037037037037037037037037037037],
            [ 0.0,  1.0, -1.0, 0.148148148148148148148148148148148148],
            [ 1.0,  1.0, -1.0, 0.037037037037037037037037037037037037],
            [-1.0, -1.0,  0.0, 0.148148148148148148148148148148148148],
            [ 0.0, -1.0,  0.0, 0.592592592592592592592592592592592593],
            [ 1.0, -1.0,  0.0, 0.148148148148148148148148148148148148],
            [-1.0,  0.0,  0.0, 0.592592592592592592592592592592592593],
            [ 0.0,  0.0,  0.0, 2.370370370370370370370370370370370370],
            [ 1.0,  0.0,  0.0, 0.592592592592592592592592592592592593],
            [-1.0,  1.0,  0.0, 0.148148148148148148148148148148148148],
            [ 0.0,  1.0,  0.0, 0.592592592592592592592592592592592593],
            [ 1.0,  1.0,  0.0, 0.148148148148148148148148148148148148],
            [-1.0, -1.0,  1.0, 0.037037037037037037037037037037037037],
            [ 0.0, -1.0,  1.0, 0.148148148148148148148148148148148148],
            [ 1.0, -1.0,  1.0, 0.037037037037037037037037037037037037],
            [-1.0,  0.0,  1.0, 0.148148148148148148148148148148148148],
            [ 0.0,  0.0,  1.0, 0.592592592592592592592592592592592593],
            [ 1.0,  0.0,  1.0, 0.148148148148148148148148148148148148],
            [-1.0,  1.0,  1.0, 0.037037037037037037037037037037037037],
            [ 0.0,  1.0,  1.0, 0.148148148148148148148148148148148148],
            [ 1.0,  1.0,  1.0, 0.037037037037037037037037037037037037]
        ])

    return zw

from __future__ import print_function
import numpy as np

def AlphaQuadraturePointsWeightsHex(C):

    if C % 2 != 0:
        C += 1

    if C > 6:
        raise ValueError("Alpha optimal quadrature points beyond C=4 not available. Consider using tensor product or WV quadrature")

    if C == 0:
        zw = np.array([0., 0., 0., 8.])
    elif C==2:
        zw = np.array([
                [ 1.0, -1.0, -1.0, 1.0],
                [-1.0,  1.0, -1.0, 1.0],
                [ 1.0,  1.0, -1.0, 1.0],
                [-1.0, -1.0,  1.0, 1.0],
                [ 1.0, -1.0,  1.0, 1.0],
                [-1.0,  1.0,  1.0, 1.0],
                [ 1.0,  1.0,  1.0, 1.0]
            ])
    elif C==4:
        zw = np.array([
            [-1.0, -1.0, -1.0, 0.037037037037037037037037037037037037],
            [ 0.0, -1.0, -1.0, 0.148148148148148148148148148148148148],
            [ 1.0, -1.0, -1.0, 0.037037037037037037037037037037037037],
            [-1.0,  0.0, -1.0, 0.148148148148148148148148148148148148],
            [ 0.0,  0.0, -1.0, 0.592592592592592592592592592592592593],
            [ 1.0,  0.0, -1.0, 0.148148148148148148148148148148148148],
            [-1.0,  1.0, -1.0, 0.037037037037037037037037037037037037],
            [ 0.0,  1.0, -1.0, 0.148148148148148148148148148148148148],
            [ 1.0,  1.0, -1.0, 0.037037037037037037037037037037037037],
            [-1.0, -1.0,  0.0, 0.148148148148148148148148148148148148],
            [ 0.0, -1.0,  0.0, 0.592592592592592592592592592592592593],
            [ 1.0, -1.0,  0.0, 0.148148148148148148148148148148148148],
            [-1.0,  0.0,  0.0, 0.592592592592592592592592592592592593],
            [ 0.0,  0.0,  0.0, 2.370370370370370370370370370370370370],
            [ 1.0,  0.0,  0.0, 0.592592592592592592592592592592592593],
            [-1.0,  1.0,  0.0, 0.148148148148148148148148148148148148],
            [ 0.0,  1.0,  0.0, 0.592592592592592592592592592592592593],
            [ 1.0,  1.0,  0.0, 0.148148148148148148148148148148148148],
            [-1.0, -1.0,  1.0, 0.037037037037037037037037037037037037],
            [ 0.0, -1.0,  1.0, 0.148148148148148148148148148148148148],
            [ 1.0, -1.0,  1.0, 0.037037037037037037037037037037037037],
            [-1.0,  0.0,  1.0, 0.148148148148148148148148148148148148],
            [ 0.0,  0.0,  1.0, 0.592592592592592592592592592592592593],
            [ 1.0,  0.0,  1.0, 0.148148148148148148148148148148148148],
            [-1.0,  1.0,  1.0, 0.037037037037037037037037037037037037],
            [ 0.0,  1.0,  1.0, 0.148148148148148148148148148148148148],
            [ 1.0,  1.0,  1.0, 0.037037037037037037037037037037037037]
        ])

    return zw
