def deriv_G(state, z, x, y, fase):
    """Calculate generic partial derivative
    :math:`\\left.\\frac{\\partial z}{\\partial x}\\right|_{y}` from a fundamental
    Gibbs free energy equation of state

    Parameters
    ----------
    state : any python object
        Only need to define P and T properties, non phase specific properties
    z : str
        Name of variables in numerator term of derivatives
    x : str
        Name of variables in denominator term of derivatives
    y : str
        Name of constant variable in partial derivaritive
    fase : any python object
        Define phase specific properties (v, cp, alfav, s, xkappa)

    Notes
    -----
    x, y and z can be the following values:

        * P: Pressure
        * T: Temperature
        * v: Specific volume
        * rho: Density
        * u: Internal Energy
        * h: Enthalpy
        * s: Entropy
        * g: Gibbs free energy
        * a: Helmholtz free energy

    Returns
    -------
    deriv : float
        ∂z/∂x|y

    References
    ----------
    IAPWS, Revised Advisory Note No. 3: Thermodynamic Derivatives from IAPWS
    Formulations, http://www.iapws.org/relguide/Advise3.pdf
    """
    mul = 1
    if z == 'rho':
        mul = -fase.rho ** 2
        z = 'v'
    if x == 'rho':
        mul = -1 / fase.rho ** 2
        x = 'v'
    dT = {'P': 0, 'T': 1, 'v': fase.v * fase.alfav, 'u': fase.cp - state.P *
        1000 * fase.v * fase.alfav, 'h': fase.cp, 's': fase.cp / state.T,
        'g': -fase.s, 'a': -state.P * 1000 * fase.v * fase.alfav - fase.s}
    dP = {'P': 1, 'T': 0, 'v': -fase.v * fase.xkappa, 'u': fase.v * (state.
        P * 1000 * fase.xkappa - state.T * fase.alfav), 'h': fase.v * (1 - 
        state.T * fase.alfav), 's': -fase.v * fase.alfav, 'g': fase.v, 'a':
        state.P * 1000 * fase.v * fase.xkappa}
    deriv = (dP[z] * dT[y] - dT[z] * dP[y]) / (dP[x] * dT[y] - dT[x] * dP[y])
    return mul * deriv
