def eval(cls, arg): if arg.is_Number: if arg is S.NaN: return S.NaN elif arg is S.Infinity: return S.NegativeInfinity * S.ImaginaryUnit elif arg is S.NegativeInfinity: return S.Infinity * S.ImaginaryUnit elif arg is S.Zero: return S.Zero elif arg is S.One: return S.Pi / 2 elif arg is S.NegativeOne: return -S.Pi / 2 if arg.could_extract_minus_sign(): return -cls(-arg) if arg.is_number: cst_table = { sqrt(3)/2 : 3, -sqrt(3)/2 : -3, sqrt(2)/2 : 4, -sqrt(2)/2 : -4, 1/sqrt(2) : 4, -1/sqrt(2) : -4, sqrt((5-sqrt(5))/8) : 5, -sqrt((5-sqrt(5))/8) : -5, S.Half : 6, -S.Half : -6, sqrt(2-sqrt(2))/2 : 8, -sqrt(2-sqrt(2))/2 : -8, (sqrt(5)-1)/4 : 10, (1-sqrt(5))/4 : -10, (sqrt(3)-1)/sqrt(2**3) : 12, (1-sqrt(3))/sqrt(2**3) : -12, (sqrt(5)+1)/4 : S(10)/3, -(sqrt(5)+1)/4 : -S(10)/3 } if arg in cst_table: return S.Pi / cst_table[arg] i_coeff = arg.as_coefficient(S.ImaginaryUnit) if i_coeff is not None: return S.ImaginaryUnit * C.asinh(i_coeff)
def eval(cls, arg): if arg.is_Number: if arg is S.NaN: return S.NaN elif arg is S.Infinity: return S.NegativeInfinity * S.ImaginaryUnit elif arg is S.NegativeInfinity: return S.Infinity * S.ImaginaryUnit elif arg is S.Zero: return S.Zero elif arg is S.One: return S.Pi / 2 elif arg is S.NegativeOne: return -S.Pi / 2 if arg.could_extract_minus_sign(): return -cls(-arg) if arg.is_number: cst_table = { sqrt(3) / 2: 3, -sqrt(3) / 2: -3, sqrt(2) / 2: 4, -sqrt(2) / 2: -4, 1 / sqrt(2): 4, -1 / sqrt(2): -4, sqrt((5 - sqrt(5)) / 8): 5, -sqrt((5 - sqrt(5)) / 8): -5, S.Half: 6, -S.Half: -6, sqrt(2 - sqrt(2)) / 2: 8, -sqrt(2 - sqrt(2)) / 2: -8, (sqrt(5) - 1) / 4: 10, (1 - sqrt(5)) / 4: -10, (sqrt(3) - 1) / sqrt(2**3): 12, (1 - sqrt(3)) / sqrt(2**3): -12, (sqrt(5) + 1) / 4: S(10) / 3, -(sqrt(5) + 1) / 4: -S(10) / 3 } if arg in cst_table: return S.Pi / cst_table[arg] i_coeff = arg.as_coefficient(S.ImaginaryUnit) if i_coeff is not None: return S.ImaginaryUnit * C.asinh(i_coeff)
def canonize(cls, arg): if arg.is_Number: if arg is S.NaN: return S.NaN elif arg is S.Infinity: return S.NegativeInfinity * S.ImaginaryUnit elif arg is S.NegativeInfinity: return S.Infinity * S.ImaginaryUnit elif arg is S.Zero: return S.Zero elif arg is S.One: return S.Pi / 2 elif arg is S.NegativeOne: return -S.Pi / 2 if arg.is_number: cst_table = { S.Half : 6, -S.Half : -6, sqrt(2)/2 : 4, -sqrt(2)/2 : -4, 1/sqrt(2) : 4, -1/sqrt(2) : -4, sqrt(3)/2 : 3, -sqrt(3)/2 : -3, } if arg in cst_table: return S.Pi / cst_table[arg] elif arg.is_negative: return -cls(-arg) else: i_coeff = arg.as_coefficient(S.ImaginaryUnit) if i_coeff is not None: return S.ImaginaryUnit * C.asinh(i_coeff) else: coeff, terms = arg.as_coeff_terms() if coeff.is_negative: return -cls(-arg)
def eval(cls, arg): if arg.is_Number: if arg is S.NaN: return S.NaN elif arg is S.Infinity: return S.NegativeInfinity * S.ImaginaryUnit elif arg is S.NegativeInfinity: return S.Infinity * S.ImaginaryUnit elif arg is S.Zero: return S.Zero elif arg is S.One: return S.Pi / 2 elif arg is S.NegativeOne: return -S.Pi / 2 if arg.is_number: cst_table = { S.Half: 6, -S.Half: -6, sqrt(2) / 2: 4, -sqrt(2) / 2: -4, 1 / sqrt(2): 4, -1 / sqrt(2): -4, sqrt(3) / 2: 3, -sqrt(3) / 2: -3, } if arg in cst_table: return S.Pi / cst_table[arg] elif arg.is_negative: return -cls(-arg) else: i_coeff = arg.as_coefficient(S.ImaginaryUnit) if i_coeff is not None: return S.ImaginaryUnit * C.asinh(i_coeff) else: coeff, terms = arg.as_coeff_terms() if coeff.is_negative: return -cls(-arg)
def eval(cls, arg): if arg.is_Number: if arg is S.NaN: return S.NaN elif arg is S.Infinity: return S.NegativeInfinity * S.ImaginaryUnit elif arg is S.NegativeInfinity: return S.Infinity * S.ImaginaryUnit elif arg is S.Zero: return S.Zero elif arg is S.One: return S.Pi / 2 elif arg is S.NegativeOne: return -S.Pi / 2 if arg.could_extract_minus_sign(): return -cls(-arg) if arg.is_number: cst_table = { S.Half : 6, -S.Half : -6, sqrt(2)/2 : 4, -sqrt(2)/2 : -4, 1/sqrt(2) : 4, -1/sqrt(2) : -4, sqrt(3)/2 : 3, -sqrt(3)/2 : -3, } if arg in cst_table: return S.Pi / cst_table[arg] i_coeff = arg.as_coefficient(S.ImaginaryUnit) if i_coeff is not None: return S.ImaginaryUnit * C.asinh(i_coeff)
def eval(cls, arg): if arg.is_Number: if arg is S.NaN: return S.NaN elif arg is S.Infinity: return S.NegativeInfinity * S.ImaginaryUnit elif arg is S.NegativeInfinity: return S.Infinity * S.ImaginaryUnit elif arg is S.Zero: return S.Zero elif arg is S.One: return S.Pi / 2 elif arg is S.NegativeOne: return -S.Pi / 2 if arg.could_extract_minus_sign(): return -cls(-arg) if arg.is_number: cst_table = { S.Half: 6, -S.Half: -6, sqrt(2) / 2: 4, -sqrt(2) / 2: -4, 1 / sqrt(2): 4, -1 / sqrt(2): -4, sqrt(3) / 2: 3, -sqrt(3) / 2: -3, } if arg in cst_table: return S.Pi / cst_table[arg] i_coeff = arg.as_coefficient(S.ImaginaryUnit) if i_coeff is not None: return S.ImaginaryUnit * C.asinh(i_coeff)