def potency_tensor(normal, slip):
    """
    Given a fault unit normal and a slip vector, return a symmetric potency
    tensor as volume components (W11, W22, W33), and shear components
    (W23, W31, W12).
    """
    v = [
        normal[0] * slip[0],
        normal[1] * slip[1],
        normal[2] * slip[2],
    ]
    s = [
        0.5 * (normal[1] * slip[2] + normal[2] * slip[1]),
        0.5 * (normal[2] * slip[0] + normal[0] * slip[2]),
        0.5 * (normal[0] * slip[1] + normal[1] * slip[0]),
    ]
    return [v, s]