<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def leland94(V, s, r, a, t, C=None, d=None, PosEq=False):
 """Leland94 Capital Structure model, Corporate Bond valuation model Parameters: V : float Asset Value of the unlevered firm s : float Volatility s of the asset value V of the unlevered firm r : float Risk free rate a : float Bankruptcy cost t : float Corporate tax rate C : float (option, default C=None) The Coupon in $ per $100. - If C>0 then exogenous bancruptcy case, i.e. a failure to pay credit event is triggered when the firm cannot pay the coupon C - If C=None then an endogenous bankcruptcy case, i.e. the management can set endogenously an 'optimal' coupon: min VB, max W=E+D, E>=0 (see pp.1222). The internally computed 'optimal' coupon is retured as output argument. d : float (optional, default d=None) Required dividend by investors, or resp the net cash payout by the firm. - if d=None then 100% retained profits - if d>0 then d is the fixed dividend rate proportional to the firm's asset value. The intermediate result 'X' dependends on 'd'. PosEq : bool (optional, default PosEq=False) If True, then enforce a positive net worth, i.e. obligors demand a "protected bond covenant with positive net worth requirement" (pp.1233) [dt. Positive Eigenkapitalbasis] Returns: -------- D : float Value of debt (p.1219) [dt. Wert des Fremdkapital] E : float Value of equity Wert (p.1221) [dt. Eigenkapitalwert] W : float Value of levered company, or Total value of the firm (p.1221) [dt. Firmenwert] W = V + T - B W = D + E T : float Value of tax benefit (p.1220) [dt. Steuervorteil] B : float Value of bankruptcy costs (p.1220) [dt. Insolvenzkosten] VB : float Level of bankruptcy, i.e. the asset value V at which bankruptcy is declared [dt. Restwert bei Insolvenz] - if PosEq=False then formula in pp.1222 - if PosEq=True then the covenant "VB - D = 0" is applied to protect creditors (pp.1233) PV : float PV of $1 if bankruptcy (p.1219) [dt. Kapitalwert 1 GE bei Insolvenz] Returns (shiny financial metrics):
 lr : float Leverage Ratio [dt. Kredithebel] i.e. value of debt divided by value of levered firm value D / W yld : float Yield on Debt [dt. Fremdkapitalrendite] i.e. coupon in $ divided by value of debt C / D sprd : float Yield Spread in bp [dt. Kreditspread in bp] i.e. yield on debt minus riskfree rate converted to bps (C/D - r) * 10000 Returns (intermediate results):
 X : float Net Cash Payout X will differ depending on the dividend policy. - If d=None, then 100% retained profits (p.1218) [dt. Thesaurierend] - If d>0, then fixed dividend per firm value (p.1241) [dt. Prozentuale Dividendenausschüttung] (intermediate result) C : float The Coupon in $ per $100. - If input argument is C>0 then the input argument C is returned as is (exogenous brankruptcy case). - If input argument C=None, then the internally computed 'optimal' coupon the the endogenous brankruptcy case is returned (pp.1222) (intermediate result) A : float Annuity value (Wert der Annuitaet), "A=C/r", The coupon (in $) divded by the risk-free rate. (intermediate result) Examples: --------- PosEq: No (False), Pos Net Worth covenant (True) Coupon: Endo (C=None), Exo (C>0) Source: ------- Leland, Hayne E. 1994. "Corporate Debt Value, Bond Covenants, and Optimal Capital Structure." The Journal of Finance 49 (4):
 1213–52. https://doi.org/10.1111/j.1540-6261.1994.tb02452.x. """


    # subfunction for
    def netcashpayout_by_dividend(r, d, s):
        """net cash payout proportional to the firm's asset value
            for a given required dividend rate (p.1241)
        """
        import math
        s2 = s * s
        tmp = r - d - 0.5 * s2
        return (tmp + math.sqrt(tmp * tmp + 2.0 * s2 * r)) / s2

    def optimal_coupon(V, r, a, t, X):
        """Coupon for the endogenous bankcruptcy case (pp.1222)"""
        m = ((1.0 - t) * X / (r * (1.0 + X)))**X / (1.0 + X)
        h = (1.0 + X + a * (1 - t) * X / t) * m
        return V * ((1.0 + X) * h)**(-1.0 / X)

    def positivenetworth_target(VB, V, a, A, X):
        """protected bond covenant with positive net worth requirement"""
        return VB - A - ((1.0 - a) * VB - A) * (VB / V)**X

    # (1a) Net Cash Payout 'X'
    if d is None:
        # Net cash Payout if 100% retained profits (p.1218)
        X = (2.0 * r) / (s * s)
    else:
        # net cash payout proportional to the firm's asset value
        # for a given required dividend rate (p.1241)
        X = netcashpayout_by_dividend(r, d, s)

    # (1b) Optimal coupon of the endogenous bankruptcy
    #   case (p.1222ff.)
    if C is None:
        C = optimal_coupon(V, r, a, t, X)

    # (1c) Wert der Annuitaet
    A = C / r

    # (2a) Level of bankruptcy VB (pp.1222)
    VB = (1.0 - t) * C / (r + 0.5 * s * s)

    # (2b) protected bond covenant with positive net worth
    # requirement (pp.1233)
    if PosEq:
        from scipy.optimize import fsolve
        VB = fsolve(func=positivenetworth_target, x0=VB, args=(V, a, A, X))
        VB = float(VB)

    # (3a) PV of $1 if bankruptcy (p.1219)
    PV = (VB / V)**X

    # (3b) Value of debt (p.1219)
    D = A + ((1.0 - a) * VB - A) * PV

    # (3c) Value of bankruptcy costs (p.1220)
    B = a * VB * PV

    # (3d) Value of tax benefit (p.1220)
    T = t * A * (1.0 - PV)

    # (3e) Total value of the firm, or Value of levered company (p.1221)
    W = V + T - B

    # (3f) Value of equity (p.1221)
    E = W - D

    # (4a) Leverage Ratio
    lr = D / W

    # (4b) Yield on Debt
    yld = C / D

    # (4c) Yield Spread in bp
    sprd = (yld - r) * 10000.0

    # return results
    return D, E, W, T, B, VB, PV, lr, yld, sprd, X, C, A