def test_cox_ross_rubinstein_binomial(self):

        # Test if the output is a float
        self.assertIsInstance(
            Pricer().price(option_method='crr_bin'), float)
        self.assertIsInstance(Pricer().price(option_method='crr_bin',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500,
            output_flag='all', option='put', american=True,
            timing=True)['Price'], float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().price(option_method='crr_bin'), 0)
        self.assertGreater(Pricer().price(option_method='crr_bin',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500,
            output_flag='all', option='put', american=True,
            timing=True)['Price'], 0)

        # Print the output from running the function
        print("Default cox_ross_rubinstein_binomial: ",
              Pricer().price(option_method='crr_bin'))
        print("Revalued cox_ross_rubinstein_binomial: ",
              Pricer().price(option_method='crr_bin',
                  S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500,
                  output_flag='all', option='put', american=True,
                  timing=True)['Price'])
    def test_black_76(self):

        # Test if the output is a float
        self.assertIsInstance(Pricer().price(option_method='black76'), float)
        self.assertIsInstance(Pricer().price(option_method='black76',
            F=50, K=55, T=1, r=0.05, sigma=0.3, option='put',
            timing=True), float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().price(option_method='black76'), 0)
        self.assertGreater(Pricer().price(option_method='black76',
            F=50, K=55, T=1, r=0.05, sigma=0.3, option='put',
            timing=True), 0)

        # Print the output from running the function
        print("Default black_76: ", Pricer().price(option_method='black76'))
        print("Revalued black_76: ", Pricer().price(option_method='black76',
            F=50, K=55, T=1, r=0.05, sigma=0.3, option='put',
            timing=True))
    def test_hull_white_87(self):

        # Test if the output is a float
        self.assertIsInstance(Pricer().price(option_method='hw87'), float)
        self.assertIsInstance(Pricer().price(option_method='hw87',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, vvol=0.3,
            option='put', timing=True), float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().price(option_method='hw87'), 0)
        self.assertGreater(Pricer().price(option_method='hw87',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, vvol=0.3,
            option='put', timing=True), 0)

        # Print the output from running the function
        print("Default hull_white_87: ", Pricer().price(option_method='hw87'))
        print("Revalued hull_white_87: ", Pricer().price(option_method='hw87',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, vvol=0.3,
            option='put', timing=True))
    def test_crank_nicolson(self):

        # Test if the output is a float
        self.assertIsInstance(
            Pricer().price(option_method='cn'), float)
        self.assertIsInstance(Pricer().price(option_method='cn',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500, nodes=50,
            option='put', american=True, timing=True), float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().price(option_method='cn'), 0)
        self.assertGreater(Pricer().price(option_method='cn',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500, nodes=50,
            option='put', american=True, timing=True), 0)

        # Print the output from running the function
        print("Default crank_nicolson: ", Pricer().price(option_method='cn'))
        print("Revalued crank_nicolson: ", Pricer().price(option_method='cn',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500, nodes=50,
            option='put', american=True, timing=True))
    def test_european_binomial(self):

        # Test if the output is a float
        self.assertIsInstance(Pricer().price(option_method='euro_bin'), float)
        self.assertIsInstance(Pricer().price(option_method='euro_bin',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500,
            option='put', timing=True), float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().price(option_method='euro_bin'), 0)
        self.assertGreater(Pricer().price(option_method='euro_bin',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500,
            option='put', timing=True), 0)

        # Print the output from running the function
        print("Default european_binomial: ",
              Pricer().price(option_method='euro_bin'))
        print("Revalued european_binomial: ",
              Pricer().price(option_method='euro_bin',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500,
            option='put', timing=True))
    def test_implied_vol_naive(self):

        # Test if the output is a float
        self.assertIsInstance(Pricer().impliedvol(vol_method='naive'), float)
        self.assertIsInstance(Pricer().impliedvol(vol_method='naive',
            S=50, K=55, T=1, r=0.05, q=0.01, cm=7.57, epsilon=0.001,
            option='put', timing=True), float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().impliedvol(vol_method='naive'), 0)
        self.assertGreater(Pricer().impliedvol(vol_method='naive',
            S=50, K=55, T=1, r=0.05, q=0.01, cm=7.57, epsilon=0.001,
            option='put', timing=True), 0)

        # Print the output from running the function
        print("Default implied_vol_naive: ",
              Pricer().impliedvol(vol_method='naive'))
        print("Revalued implied_vol_naive: ",
              Pricer().impliedvol(vol_method='naive',
                  S=50, K=55, T=1, r=0.05, q=0.01, cm=7.57, epsilon=0.001,
                  option='put', timing=True))
    def test_implicit_finite_difference(self):

        # Test if the output is a float
        self.assertIsInstance(Pricer().price(option_method='ifd'), float)
        self.assertIsInstance(Pricer().price(option_method='ifd',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500, nodes=50,
            option='put', american=True, timing=True), float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().price(option_method='ifd'), 0)
        self.assertGreater(Pricer().price(option_method='ifd',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500, nodes=50,
            option='put', american=True, timing=True), 0)

        # Print the output from running the function
        print("Default implicit_finite_difference: ",
              Pricer().price(option_method='ifd'))
        print("Revalued implicit_finite_difference: ",
              Pricer().price(option_method='ifd',
                  S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps=500,
                  nodes=50, option='put', american=True, timing=True))
    def test_european_monte_carlo_with_greeks(self):

        # Test if the output is a float
        self.assertIsInstance(
            Pricer().price(option_method='emc_greeks'), float)
        self.assertIsInstance(Pricer().price(option_method='emc_greeks',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, simulations=1000,
            option='put', output_flag='all', timing=True)['Price'], float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().price(option_method='emc_greeks'), 0)
        self.assertGreater(Pricer().price(option_method='emc_greeks',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, simulations=1000,
            option='put', output_flag='all', timing=True)['Price'], 0)

        # Print the output from running the function
        print("Default european_monte_carlo_with_greeks: ",
              Pricer().price(option_method='emc_greeks'))
        print("Revalued european_monte_carlo_with_greeks: ",
              Pricer().price(option_method='emc_greeks',
                  S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, simulations=1000,
                  option='put', output_flag='all', timing=True)['Price'])
    def test_implied_trinomial_tree(self):

        # Test if the output is a float
        self.assertIsInstance(Pricer().price(option_method='itt'), float)
        self.assertIsInstance(Pricer().price(option_method='itt',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps_itt=5, step=4,
            state=4, skew=0.0005, output_flag='price', option='put',
            timing=True), float)

        # Test if the value of the output is greater than zero
        self.assertGreater(Pricer().price(option_method='itt'), 0)
        self.assertGreater(Pricer().price(option_method='itt',
            S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps_itt=5, step=4,
            state=4, skew=0.0005, output_flag='price', option='put',
            timing=True), 0)

        # Print the output from running the function
        print("Default implied_trinomial_tree: ",
              Pricer().price(option_method='itt'))
        print("Revalued implied_trinomial_tree: ",
              Pricer().price(option_method='itt',
                  S=50, K=55, T=1, r=0.05, q=0.01, sigma=0.3, steps_itt=5,
                  step=4, state=4, skew=0.0005, output_flag='price',
                  option='put', timing=True))