import numpy as np
    
def fConformalMapKarmanTrefftz(z_in = None,a = None,l = None,bFlagReverse = None): 
    # Karman Trefftz conformal map (and inverse map)
# AUTHOR: E. Branlard
    if not ('bFlagReverse' is not None) :
        bFlagReverse = False
    
    if not bFlagReverse :
        z = z_in
        Z = l * a * ((z + a) ** l + (z - a) ** l) / ((z + a) ** l - (z - a) ** l)
        dZdz = (4 * (l * a) ** 2) * (np.multiply(((z - a) ** (l - 1)),((z + a) ** (l - 1)))) / ((((z + a) ** l) - ((z - a) ** l)) ** 2)
        z_out = Z
        dz_out = dZdz
    else:
        Z = z_in
        z = np.multiply(- a,((((Z - l) / (Z + l)) ** (1 / l)) + 1)) / ((((Z - l) / (Z + l)) ** (1 / l)) - 1)
        dzdZ = 1.0 / ((4 * (l * a) ** 2) * (np.multiply(((z - a) ** (l - 1)),((z + a) ** (l - 1)))) / ((((z + a) ** l) - ((z - a) ** l)) ** 2))
        z_out = z
        dz_out = dzdZ
    
    return z_out,dz_out