Spaces:
Running
Running
| from sympy import * | |
| from sympy.abc import a, b, x | |
| from output_util import to_latex, sign2cmp, to_latexes | |
| from sgntools import lin_func_sgn | |
| from solution import * | |
| _data = { | |
| (1, 2): {"constant_term": a - 2 * b / 3, "pin_term": -a / 4 + b / 4}, | |
| (1, 4): {"constant_term": -2 * a / 3 + 13 * b / 15, "pin_term": a / 4 - b / 4}, | |
| (1, 6): {"constant_term": 13 * a / 15 - 76 * b / 105, "pin_term": -a / 4 + b / 4}, | |
| (1, 8): {"constant_term": -76 * a / 105 + 263 * b / 315, "pin_term": a / 4 - b / 4}, | |
| (1, 10): { | |
| "constant_term": 263 * a / 315 - 2578 * b / 3465, | |
| "pin_term": -a / 4 + b / 4, | |
| }, | |
| (1, 12): { | |
| "constant_term": -2578 * a / 3465 + 36979 * b / 45045, | |
| "pin_term": a / 4 - b / 4, | |
| }, | |
| (2, 3): {"constant_term": a / 4 - 3 * b / 16, "pin_term": -a / 48 + b / 48}, | |
| (2, 5): {"constant_term": -3 * a / 16 + 31 * b / 144, "pin_term": a / 48 - b / 48}, | |
| (2, 7): { | |
| "constant_term": 31 * a / 144 - 115 * b / 576, | |
| "pin_term": -a / 48 + b / 48, | |
| }, | |
| (2, 9): { | |
| "constant_term": -115 * a / 576 + 3019 * b / 14400, | |
| "pin_term": a / 48 - b / 48, | |
| }, | |
| (2, 11): { | |
| "constant_term": 3019 * a / 14400 - 973 * b / 4800, | |
| "pin_term": -a / 48 + b / 48, | |
| }, | |
| (2, 13): { | |
| "constant_term": -973 * a / 4800 + 48877 * b / 235200, | |
| "pin_term": a / 48 - b / 48, | |
| }, | |
| (3, 2): {"constant_term": 2 * a - 52 * b / 27, "pin_term": -a / 16 + b / 16}, | |
| (3, 4): { | |
| "constant_term": -52 * a / 27 + 6554 * b / 3375, | |
| "pin_term": a / 16 - b / 16, | |
| }, | |
| (3, 6): { | |
| "constant_term": 6554 * a / 3375 - 2241272 * b / 1157625, | |
| "pin_term": -a / 16 + b / 16, | |
| }, | |
| (3, 8): { | |
| "constant_term": -2241272 * a / 1157625 + 60600094 * b / 31255875, | |
| "pin_term": a / 16 - b / 16, | |
| }, | |
| (3, 10): { | |
| "constant_term": 60600094 * a / 31255875 - 80596213364 * b / 41601569625, | |
| "pin_term": -a / 16 + b / 16, | |
| }, | |
| (3, 12): { | |
| "constant_term": -80596213364 * a / 41601569625 | |
| + 177153083899958 * b / 91398648466125, | |
| "pin_term": a / 16 - b / 16, | |
| }, | |
| (4, 3): { | |
| "constant_term": 3 * a / 8 - 45 * b / 128, | |
| "pin_term": -7 * a / 1920 + 7 * b / 1920, | |
| }, | |
| (4, 5): { | |
| "constant_term": -45 * a / 128 + 1231 * b / 3456, | |
| "pin_term": 7 * a / 1920 - 7 * b / 1920, | |
| }, | |
| (4, 7): { | |
| "constant_term": 1231 * a / 3456 - 19615 * b / 55296, | |
| "pin_term": -7 * a / 1920 + 7 * b / 1920, | |
| }, | |
| (4, 9): { | |
| "constant_term": -19615 * a / 55296 + 12280111 * b / 34560000, | |
| "pin_term": 7 * a / 1920 - 7 * b / 1920, | |
| }, | |
| (4, 11): { | |
| "constant_term": 12280111 * a / 34560000 - 4090037 * b / 11520000, | |
| "pin_term": -7 * a / 1920 + 7 * b / 1920, | |
| }, | |
| (4, 13): { | |
| "constant_term": -4090037 * a / 11520000 + 9824498837 * b / 27659520000, | |
| "pin_term": 7 * a / 1920 - 7 * b / 1920, | |
| }, | |
| (5, 2): { | |
| "constant_term": 24 * a - 1936 * b / 81, | |
| "pin_term": -5 * a / 64 + 5 * b / 64, | |
| }, | |
| (5, 4): { | |
| "constant_term": -1936 * a / 81 + 6051944 * b / 253125, | |
| "pin_term": 5 * a / 64 - 5 * b / 64, | |
| }, | |
| (5, 6): { | |
| "constant_term": 6051944 * a / 253125 - 101708947808 * b / 4254271875, | |
| "pin_term": -5 * a / 64 + 5 * b / 64, | |
| }, | |
| (5, 8): { | |
| "constant_term": -101708947808 * a / 4254271875 | |
| + 24715694492344 * b / 1033788065625, | |
| "pin_term": 5 * a / 64 - 5 * b / 64, | |
| }, | |
| (5, 10): { | |
| "constant_term": 24715694492344 * a / 1033788065625 | |
| - 3980462502772918544 * b / 166492601756971875, | |
| "pin_term": -5 * a / 64 + 5 * b / 64, | |
| }, | |
| (5, 12): { | |
| "constant_term": -3980462502772918544 * a / 166492601756971875 | |
| + 1477921859864507412282392 * b / 61817537584151358384375, | |
| "pin_term": 5 * a / 64 - 5 * b / 64, | |
| }, | |
| (6, 3): { | |
| "constant_term": 15 * a / 8 - 945 * b / 512, | |
| "pin_term": -31 * a / 16128 + 31 * b / 16128, | |
| }, | |
| (6, 5): { | |
| "constant_term": -945 * a / 512 + 229955 * b / 124416, | |
| "pin_term": 31 * a / 16128 - 31 * b / 16128, | |
| }, | |
| (6, 7): { | |
| "constant_term": 229955 * a / 124416 - 14713475 * b / 7962624, | |
| "pin_term": -31 * a / 16128 + 31 * b / 16128, | |
| }, | |
| (6, 9): { | |
| "constant_term": -14713475 * a / 7962624 + 45982595359 * b / 24883200000, | |
| "pin_term": 31 * a / 16128 - 31 * b / 16128, | |
| }, | |
| (6, 11): { | |
| "constant_term": 45982595359 * a / 24883200000 - 5109066151 * b / 2764800000, | |
| "pin_term": -31 * a / 16128 + 31 * b / 16128, | |
| }, | |
| (6, 13): { | |
| "constant_term": -5109066151 * a / 2764800000 | |
| + 601081707598999 * b / 325275955200000, | |
| "pin_term": 31 * a / 16128 - 31 * b / 16128, | |
| }, | |
| } | |
| class PiNIntegrate(GetIntegrateFromData): | |
| data = _data | |
| def get_integrate_args(self, args): | |
| n, m = args | |
| return x**m * (a + b * x**2) * (log(1 / x)) ** (n - 1) / (1 + x**2), (x, 0, 1) | |
| class PiNSolution(Solution): | |
| def __init__(self, n, p, q): | |
| if n < 0: | |
| n = -n | |
| p, q = q, p | |
| self.n = n | |
| self.p = p | |
| self.q = q | |
| if self.q == 0: | |
| raise BadInput() | |
| self.get_integrate = PiNIntegrate() | |
| self.symbols = (a, b) | |
| self.integrate_result_classes_eq = { | |
| "pin_term": q, | |
| CONSTANT_TERM_KEY: -p, | |
| } | |
| # check | |
| self.check_sgn = lin_func_sgn | |
| def get_tries_args(self): | |
| for n, m in PiNIntegrate.data.keys(): | |
| if n == self.n: | |
| yield n, m | |
| def get_latex_ans(self): | |
| try_arg, symbol_val, sgn = self.try_times() | |
| print(f"{(try_arg, symbol_val, sgn)=}") | |
| if try_arg is None: | |
| return None | |
| p, n = to_latexes(self.p, self.n) | |
| q = to_latex(self.q, is_coeff=True) | |
| I = self.get_integrate.get_latex(try_arg, symbol_val) | |
| return rf"{q}\pi^{n}-{p} = {I} {sign2cmp[sgn]} 0" | |
| register("π^n", PiNSolution) | |
| if __name__ == "__main__": | |
| print(PiNSolution(3, 31, 1).get_latex_ans()) | |