From ebdc6c029a8bb9ed677497e26bcaa75ea42879ce Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 2 Jun 2024 17:27:30 -0700 Subject: [PATCH 001/143] Create recurrence.py - Feedback requested --- sumpy/recurrence.py | 296 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 296 insertions(+) create mode 100644 sumpy/recurrence.py diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py new file mode 100644 index 00000000..1bf0519f --- /dev/null +++ b/sumpy/recurrence.py @@ -0,0 +1,296 @@ +__copyright__ = """ +Copyright (C) 2024 Hirish Chandrasekaran +Copyright (C) 2024 Andreas Kloeckner +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +from collections import namedtuple +from pyrsistent import pmap +from pytools import memoize +from sumpy.tools import add_mi +from itertools import accumulate +import sumpy.symbolic as sym +import logging +from typing import List +import sympy as sp +from sumpy.expansion.diff_op import LinearPDESystemOperator +from pytools.obj_array import make_obj_array + +#A similar function exists in sumpy.symbolic +def make_sympy_vec(name, n): + return make_obj_array([sp.Symbol(f"{name}{i}") for i in range(n)]) + + +__doc__ = """ +.. autoclass:: Recurrence +.. automodule:: sumpy.recurrence +""" + +#CREATE LAPLACE_3D +DerivativeIdentifier = namedtuple("DerivativeIdentifier", ["mi", "vec_idx"]) +partial2_x = DerivativeIdentifier((2,0,0), 0) +partial2_y = DerivativeIdentifier((0,2,0), 0) +partial2_z = DerivativeIdentifier((0,0,2), 0) +#Coefficients +list_pde_dict_3d = {partial2_x: 1, partial2_y: 1, partial2_z: 1} +laplace_3d = LinearPDESystemOperator(3,list_pde_dict_3d) + +#CREATE LAPLACE_2D +partial2_x = DerivativeIdentifier((2,0), 0) +partial2_y = DerivativeIdentifier((0,2), 0) +#Coefficients +list_pde_dict = {partial2_x: 1, partial2_y: 1} +laplace_2d = LinearPDESystemOperator(2,list_pde_dict) + +#CREATE HELMHOLTZ_2D +func_val = DerivativeIdentifier((0,0), 0) +#Coefficients +list_pde_dict = {partial2_x: 1, partial2_y: 1, func_val: 1} +helmholtz_2d = LinearPDESystemOperator(2,list_pde_dict) + +''' +get_pde_in_recurrence_form +Input: + - pde, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` pde such that assert(len(pde.eqs) == 1) + is true. +Output: + - ode_in_r, an ode in r which the POINT-POTENTIAL (has radial symmetry) satisfies away from the origin. + Note: to represent f, f_r, f_{rr}, we use the sympy variables f_{r0}, f_{r1}, .... So ode_in_r is a linear + combination of the sympy variables f_{r0}, f_{r1}, .... + - var, represents the variables for the input space: [x0, x1, ...] + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present + (the reason this is called n_derivs since if we have a second order PDE for example + then we might see f, f_{r}, f_{rr} in our ODE in r, which is technically 3 terms since we count + the 0th order derivative f as a "derivative." If this doesn't make sense just know that n_derivs + is the order the of the input sumpy PDE + 1) + +Description: We assume we are handed a system of 1 sumpy PDE (pde) and output the +pde in a way that allows us to easily replace derivatives with respect to r. In other words we output +a linear combination of sympy variables f_{r0}, f_{r1}, ... (which represents f, f_r, f_{rr} respectively) +to represent our ODE in r for the point potential. +''' +def get_pde_in_recurrence_form(laplace): + dim = laplace.dim + n_derivs = laplace.order + assert(len(laplace.eqs) == 1) + ops = len(laplace.eqs[0]) + derivs = [] + coeffs = [] + for i in laplace.eqs[0]: + derivs.append(i.mi) + coeffs.append(laplace.eqs[0][i]) + var = make_sympy_vec("x", dim) + r = sp.sqrt(sum(var**2)) + + eps = sp.symbols("epsilon") + rval = r + eps + + f = sp.Function("f") + f_derivs = [sp.diff(f(rval),eps,i) for i in range(n_derivs+1)] + + def compute_term(a, t): + term = a + for i in range(len(t)): + term = term.diff(var[i], t[i]) + return term + + pde = 0 + for i in range(ops): + pde += coeffs[i] * compute_term(f(rval), derivs[i]) + + n_derivs = len(f_derivs) + f_r_derivs = make_sympy_vec("f_r", n_derivs) + + for i in range(n_derivs): + pde = pde.subs(f_derivs[i], f_r_derivs[i]) + + return pde, var, n_derivs + + +ode_in_r, var, n_derivs = get_pde_in_recurrence_form(laplace_2d) + + +''' +generate_ND_derivative_relations +Input: + - var, a sympy vector of variables called [x0, x1, ...] + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present +Output: + - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... using the chain rule + (f, f_x, f_{xx}, ... in code is represented as f_{x0}, f_{x1}, f_{x2} and + f, f_r, f_{rr}, ... in code is represented as f_{r0}, f_{r1}, f_{r2}) + +Description: Using the chain rule outputs a vector that tells us how to write f, f_r, f_{rr}, ... as a linear +combination of f, f_x, f_{xx}, ... +''' +def generate_ND_derivative_relations(var, n_derivs): + f_r_derivs = make_sympy_vec("f_r", n_derivs) + f_x_derivs = make_sympy_vec("f_x", n_derivs) + f = sp.Function("f") + eps = sp.symbols("epsilon") + rval = sp.sqrt(sum(var**2)) + eps + f_derivs_x = [sp.diff(f(rval),var[0],i) for i in range(n_derivs)] + f_derivs = [sp.diff(f(rval),eps,i) for i in range(n_derivs)] + for i in range(len(f_derivs_x)): + for j in range(len(f_derivs)): + f_derivs_x[i] = f_derivs_x[i].subs(f_derivs[j], f_r_derivs[j]) + system = [f_x_derivs[i] - f_derivs_x[i] for i in range(n_derivs)] + + return sp.solve(system, *f_r_derivs, dict=True)[0] + + +''' +ode_in_r_to_x +Input: + - ode_in_r, a linear combination of f, f_r, f_{rr}, ... (in code represented as f_{r0}, f_{r1}, f_{r2}) + with coefficients as RATIONAL functions in var[0], var[1], ... + - var, array of sympy variables [x_0, x_1, ...] + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present +Output: + - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as rational + functions in var[0], var[1], ... + +Description: Translates an ode in the variable r into an ode in the variable x by substituting f, f_r, f_{rr}, ... + as a linear combination of f, f_x, f_{xx}, ... using the chain rule +''' +def ode_in_r_to_x(ode_in_r, var, n_derivs): + subme = generate_ND_derivative_relations(var, n_derivs) + ode_in_x = ode_in_r + f_r_derivs = make_sympy_vec("f_r", n_derivs) + for i in range(n_derivs): + ode_in_x = ode_in_x.subs(f_r_derivs[i], subme[f_r_derivs[i]]) + return ode_in_x + + +ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() +ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() + +delta_x = sp.symbols("delta_x") +c_vec = make_sympy_vec("c", len(var)) + +''' +compute_poly_in_deriv +Input: + - ode_in_x_cleared, an ode in x, i.e. a linear combination of f, f_x, f_{xx}, ... + (in code represented as f_{x0}, f_{x1}, f_{x2}) with coefficients as POLYNOMIALS in var[0], var[1], ... + (i.e. not rational functions) + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present +Output: + - a polynomial in f, f_x, f_{xx}, ... (in code represented as f_{x0}, f_{x1}, f_{x2}) with coefficients + as polynomials in \delta_x where \delta_x = x_0 - c_0 that represents the ''shifted ODE'' - i.e. the ODE + where we substitute all occurences of \delta_x with x_0 - c_0 + +Description: Converts an ode in x, to a polynomial in f, f_x, f_{xx}, ..., with coefficients as polynomials +in \delta_x = x_0 - c_0. +''' +def compute_poly_in_deriv(ode_in_x_cleared, n_derivs): + #Note that generate_ND_derivative_relations will at worst put some power of $x_0^order$ in the denominator. To clear + #the denominator we can probably? just multiply by x_0^order. + ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() + + ode_in_x_shifted = ode_in_x_cleared.subs(var[0], delta_x + c_vec[0]).simplify() + + f_x_derivs = make_sympy_vec("f_x", n_derivs) + poly = sp.Poly(ode_in_x_shifted, *f_x_derivs) + + return poly + +poly = compute_poly_in_deriv(ode_in_x, n_derivs) + +''' +compute_coefficients_of_poly +Input: + - poly, a polynomial in sympy variables f_{x0}, f_{x1}, ..., + (recall that this corresponds to f_0, f_x, f_{xx}, ...) with coefficients that are polynomials in \delta_x + where poly represents the ''shifted ODE''- i.e. we substitute all occurences of \delta_x with x_0 - c_0 +Output: + - a 2d array, each row giving the coefficient of f_0, f_x, f_{xx}, ..., + each entry in the row giving the coefficients of the polynomial in \delta_x + +Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are polynomials in \delta_x +and outputs a 2d array for easy access to the coefficients based on their degree as a polynomial in \delta_x. +''' +def compute_coefficients_of_poly(poly, n_derivs): + #Returns coefficients in lexographic order. So lowest order first + def tup(i,n=n_derivs): + a = [] + for j in range(n): + if j != i: + a.append(0) + else: + a.append(1) + return tuple(a) + + coeffs = [] + for deriv_ind in range(n_derivs): + coeffs.append(sp.Poly(poly.coeff_monomial(tup(deriv_ind)), delta_x).all_coeffs()) + + return coeffs + +coeffs = compute_coefficients_of_poly(poly, n_derivs) + +i = sp.symbols("i") +s = sp.Function("s") + +''' +compute_recurrence_relation +Input: + - coeffs a 2d array that gives access to the coefficients of poly, where poly represents the coefficients of + the ''shifted ODE'' (''shifted ODE'' = we substitute all occurences of \delta_x with x_0 - c_0) + based on their degree as a polynomial in \delta_x + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present +Output: + - a recurrence statement that equals 0 where s(i) is the ith coefficient of the Taylor polynomial for + our point potential. + +Description: Takes in coeffs which represents our ``shifted ode in x" (i.e. ode_in_x with coefficients in \delta_x) +and outputs a recurrence relation for the point potential. +''' + +def compute_recurrence_relation(coeffs, n_derivs): + #Compute symbolic derivative + def hc_diff(i, n): + retMe = 1 + for j in range(n): + retMe *= (i-j) + return retMe + + #We are differentiating deriv_ind, which shifts down deriv_ind. Do this for one deriv_ind + r = 0 + for deriv_ind in range(n_derivs): + part_of_r = 0 + pow_delta = 0 + for j in range(len(coeffs[deriv_ind])-1, -1, -1): + shift = pow_delta - deriv_ind + 1 + pow_delta += 1 + temp = coeffs[deriv_ind][j] * s(i) * hc_diff(i, deriv_ind) + part_of_r += temp.subs(i, i-shift) + r += part_of_r + + for j in range(1, len(var)): + r = r.subs(var[j], c_vec[j]) + + return r.simplify() + +r = compute_recurrence_relation(coeffs, n_derivs) + + From d5aac5ec8d7bc53274682280213c8ac0c20cc3ee Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Mon, 3 Jun 2024 16:07:17 -0500 Subject: [PATCH 002/143] Hackin with Andreas --- sumpy/recurrence.py | 111 +++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 63 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 1bf0519f..7586cffa 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -24,13 +24,6 @@ """ from collections import namedtuple -from pyrsistent import pmap -from pytools import memoize -from sumpy.tools import add_mi -from itertools import accumulate -import sumpy.symbolic as sym -import logging -from typing import List import sympy as sp from sumpy.expansion.diff_op import LinearPDESystemOperator from pytools.obj_array import make_obj_array @@ -45,50 +38,29 @@ def make_sympy_vec(name, n): .. automodule:: sumpy.recurrence """ -#CREATE LAPLACE_3D -DerivativeIdentifier = namedtuple("DerivativeIdentifier", ["mi", "vec_idx"]) -partial2_x = DerivativeIdentifier((2,0,0), 0) -partial2_y = DerivativeIdentifier((0,2,0), 0) -partial2_z = DerivativeIdentifier((0,0,2), 0) -#Coefficients -list_pde_dict_3d = {partial2_x: 1, partial2_y: 1, partial2_z: 1} -laplace_3d = LinearPDESystemOperator(3,list_pde_dict_3d) - -#CREATE LAPLACE_2D -partial2_x = DerivativeIdentifier((2,0), 0) -partial2_y = DerivativeIdentifier((0,2), 0) -#Coefficients -list_pde_dict = {partial2_x: 1, partial2_y: 1} -laplace_2d = LinearPDESystemOperator(2,list_pde_dict) - -#CREATE HELMHOLTZ_2D -func_val = DerivativeIdentifier((0,0), 0) -#Coefficients -list_pde_dict = {partial2_x: 1, partial2_y: 1, func_val: 1} -helmholtz_2d = LinearPDESystemOperator(2,list_pde_dict) -''' -get_pde_in_recurrence_form -Input: - - pde, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` pde such that assert(len(pde.eqs) == 1) - is true. -Output: - - ode_in_r, an ode in r which the POINT-POTENTIAL (has radial symmetry) satisfies away from the origin. - Note: to represent f, f_r, f_{rr}, we use the sympy variables f_{r0}, f_{r1}, .... So ode_in_r is a linear - combination of the sympy variables f_{r0}, f_{r1}, .... - - var, represents the variables for the input space: [x0, x1, ...] - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present - (the reason this is called n_derivs since if we have a second order PDE for example - then we might see f, f_{r}, f_{rr} in our ODE in r, which is technically 3 terms since we count - the 0th order derivative f as a "derivative." If this doesn't make sense just know that n_derivs - is the order the of the input sumpy PDE + 1) - -Description: We assume we are handed a system of 1 sumpy PDE (pde) and output the -pde in a way that allows us to easily replace derivatives with respect to r. In other words we output -a linear combination of sympy variables f_{r0}, f_{r1}, ... (which represents f, f_r, f_{rr} respectively) -to represent our ODE in r for the point potential. -''' def get_pde_in_recurrence_form(laplace): + ''' + get_pde_in_recurrence_form + Input: + - pde, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` pde such that assert(len(pde.eqs) == 1) + is true. + Output: + - ode_in_r, an ode in r which the POINT-POTENTIAL (has radial symmetry) satisfies away from the origin. + Note: to represent f, f_r, f_{rr}, we use the sympy variables f_{r0}, f_{r1}, .... So ode_in_r is a linear + combination of the sympy variables f_{r0}, f_{r1}, .... + - var, represents the variables for the input space: [x0, x1, ...] + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present + (the reason this is called n_derivs since if we have a second order PDE for example + then we might see f, f_{r}, f_{rr} in our ODE in r, which is technically 3 terms since we count + the 0th order derivative f as a "derivative." If this doesn't make sense just know that n_derivs + is the order the of the input sumpy PDE + 1) + + Description: We assume we are handed a system of 1 sumpy PDE (pde) and output the + pde in a way that allows us to easily replace derivatives with respect to r. In other words we output + a linear combination of sympy variables f_{r0}, f_{r1}, ... (which represents f, f_r, f_{rr} respectively) + to represent our ODE in r for the point potential. + ''' dim = laplace.dim n_derivs = laplace.order assert(len(laplace.eqs) == 1) @@ -113,20 +85,33 @@ def compute_term(a, t): term = term.diff(var[i], t[i]) return term - pde = 0 + ode_in_r = 0 for i in range(ops): - pde += coeffs[i] * compute_term(f(rval), derivs[i]) + ode_in_r += coeffs[i] * compute_term(f(rval), derivs[i]) n_derivs = len(f_derivs) f_r_derivs = make_sympy_vec("f_r", n_derivs) for i in range(n_derivs): - pde = pde.subs(f_derivs[i], f_r_derivs[i]) + ode_in_r = ode_in_r.subs(f_derivs[i], f_r_derivs[i]) - return pde, var, n_derivs + return ode_in_r, var, n_derivs + + +def test_recurrence_finder(): + from sumpy.expansion.diff_op import make_identity_diff_op, laplacian + w = make_identity_diff_op(2) + laplace2d = laplacian(w) + print(get_pde_in_recurrence_form(laplace2d)) + + assert 1 == 1 + + + + -ode_in_r, var, n_derivs = get_pde_in_recurrence_form(laplace_2d) +# ode_in_r, var, n_derivs = get_pde_in_recurrence_form(laplace_2d) ''' @@ -181,11 +166,11 @@ def ode_in_r_to_x(ode_in_r, var, n_derivs): return ode_in_x -ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() -ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() +# ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() +# ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() -delta_x = sp.symbols("delta_x") -c_vec = make_sympy_vec("c", len(var)) +# delta_x = sp.symbols("delta_x") +# c_vec = make_sympy_vec("c", len(var)) ''' compute_poly_in_deriv @@ -214,7 +199,7 @@ def compute_poly_in_deriv(ode_in_x_cleared, n_derivs): return poly -poly = compute_poly_in_deriv(ode_in_x, n_derivs) +# poly = compute_poly_in_deriv(ode_in_x, n_derivs) ''' compute_coefficients_of_poly @@ -246,10 +231,10 @@ def tup(i,n=n_derivs): return coeffs -coeffs = compute_coefficients_of_poly(poly, n_derivs) +# coeffs = compute_coefficients_of_poly(poly, n_derivs) -i = sp.symbols("i") -s = sp.Function("s") +# i = sp.symbols("i") +# s = sp.Function("s") ''' compute_recurrence_relation @@ -291,6 +276,6 @@ def hc_diff(i, n): return r.simplify() -r = compute_recurrence_relation(coeffs, n_derivs) +# r = compute_recurrence_relation(coeffs, n_derivs) From da538df0817de98d4b8935662f40d5c6ee668a13 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 3 Jun 2024 20:01:16 -0700 Subject: [PATCH 003/143] Fix all flake8 issues --- sumpy/recurrence.py | 270 ++++++++++++++++++++++---------------------- 1 file changed, 133 insertions(+), 137 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 7586cffa..227ada25 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -23,12 +23,11 @@ THE SOFTWARE. """ -from collections import namedtuple import sympy as sp -from sumpy.expansion.diff_op import LinearPDESystemOperator from pytools.obj_array import make_obj_array -#A similar function exists in sumpy.symbolic + +#A similar function exists in sumpy.symbolic def make_sympy_vec(name, n): return make_obj_array([sp.Symbol(f"{name}{i}") for i in range(n)]) @@ -42,28 +41,33 @@ def make_sympy_vec(name, n): def get_pde_in_recurrence_form(laplace): ''' get_pde_in_recurrence_form - Input: - - pde, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` pde such that assert(len(pde.eqs) == 1) + Input: + - pde, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` pde such + that assert(len(pde.eqs) == 1) is true. - Output: - - ode_in_r, an ode in r which the POINT-POTENTIAL (has radial symmetry) satisfies away from the origin. - Note: to represent f, f_r, f_{rr}, we use the sympy variables f_{r0}, f_{r1}, .... So ode_in_r is a linear - combination of the sympy variables f_{r0}, f_{r1}, .... + Output: + - ode_in_r, an ode in r which the POINT-POTENTIAL (has radial symmetry) + satisfies away from the origin. + Note: to represent f, f_r, f_{rr}, we use the sympy variables + f_{r0}, f_{r1}, .... So ode_in_r is a linear combination of the sympy + variables f_{r0}, f_{r1}, .... - var, represents the variables for the input space: [x0, x1, ...] - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present - (the reason this is called n_derivs since if we have a second order PDE for example - then we might see f, f_{r}, f_{rr} in our ODE in r, which is technically 3 terms since we count - the 0th order derivative f as a "derivative." If this doesn't make sense just know that n_derivs - is the order the of the input sumpy PDE + 1) - - Description: We assume we are handed a system of 1 sumpy PDE (pde) and output the - pde in a way that allows us to easily replace derivatives with respect to r. In other words we output - a linear combination of sympy variables f_{r0}, f_{r1}, ... (which represents f, f_r, f_{rr} respectively) + - n_derivs, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present (the reason this is called n_derivs + since if we have a second order PDE for example then we might see f, f_{r}, + f_{rr} in our ODE in r, which is technically 3 terms since we count + the 0th order derivative f as a "derivative." If this doesn't make sense + just know that n_derivs is the order the of the input sumpy PDE + 1) + + Description: We assume we are handed a system of 1 sumpy PDE (pde) and output + the pde in a way that allows us to easily replace derivatives with respect to r. + In other words we output a linear combination of sympy variables + f_{r0}, f_{r1}, ... (which represents f, f_r, f_{rr} respectively) to represent our ODE in r for the point potential. ''' dim = laplace.dim n_derivs = laplace.order - assert(len(laplace.eqs) == 1) + assert (len(laplace.eqs) == 1) ops = len(laplace.eqs[0]) derivs = [] coeffs = [] @@ -75,10 +79,9 @@ def get_pde_in_recurrence_form(laplace): eps = sp.symbols("epsilon") rval = r + eps - f = sp.Function("f") - f_derivs = [sp.diff(f(rval),eps,i) for i in range(n_derivs+1)] - + f_derivs = [sp.diff(f(rval), eps, i) for i in range(n_derivs+1)] + def compute_term(a, t): term = a for i in range(len(t)): @@ -88,76 +91,63 @@ def compute_term(a, t): ode_in_r = 0 for i in range(ops): ode_in_r += coeffs[i] * compute_term(f(rval), derivs[i]) - n_derivs = len(f_derivs) f_r_derivs = make_sympy_vec("f_r", n_derivs) for i in range(n_derivs): ode_in_r = ode_in_r.subs(f_derivs[i], f_r_derivs[i]) - return ode_in_r, var, n_derivs -def test_recurrence_finder(): - from sumpy.expansion.diff_op import make_identity_diff_op, laplacian - w = make_identity_diff_op(2) - laplace2d = laplacian(w) - print(get_pde_in_recurrence_form(laplace2d)) - - assert 1 == 1 - - - - - - -# ode_in_r, var, n_derivs = get_pde_in_recurrence_form(laplace_2d) - - -''' -generate_ND_derivative_relations -Input: +def generate_ND_derivative_relations(var, n_derivs): + ''' + generate_ND_derivative_relations + Input: - var, a sympy vector of variables called [x0, x1, ...] - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present -Output: - - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... using the chain rule + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of + f that may be present + Output: + - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... + using the chain rule (f, f_x, f_{xx}, ... in code is represented as f_{x0}, f_{x1}, f_{x2} and f, f_r, f_{rr}, ... in code is represented as f_{r0}, f_{r1}, f_{r2}) -Description: Using the chain rule outputs a vector that tells us how to write f, f_r, f_{rr}, ... as a linear -combination of f, f_x, f_{xx}, ... -''' -def generate_ND_derivative_relations(var, n_derivs): + Description: Using the chain rule outputs a vector that tells us how to + write f, f_r, f_{rr}, ... as a linear + combination of f, f_x, f_{xx}, ... + ''' f_r_derivs = make_sympy_vec("f_r", n_derivs) f_x_derivs = make_sympy_vec("f_x", n_derivs) f = sp.Function("f") eps = sp.symbols("epsilon") rval = sp.sqrt(sum(var**2)) + eps - f_derivs_x = [sp.diff(f(rval),var[0],i) for i in range(n_derivs)] - f_derivs = [sp.diff(f(rval),eps,i) for i in range(n_derivs)] + f_derivs_x = [sp.diff(f(rval), var[0], i) for i in range(n_derivs)] + f_derivs = [sp.diff(f(rval), eps, i) for i in range(n_derivs)] for i in range(len(f_derivs_x)): for j in range(len(f_derivs)): f_derivs_x[i] = f_derivs_x[i].subs(f_derivs[j], f_r_derivs[j]) system = [f_x_derivs[i] - f_derivs_x[i] for i in range(n_derivs)] - return sp.solve(system, *f_r_derivs, dict=True)[0] -''' -ode_in_r_to_x -Input: - - ode_in_r, a linear combination of f, f_r, f_{rr}, ... (in code represented as f_{r0}, f_{r1}, f_{r2}) +def ode_in_r_to_x(ode_in_r, var, n_derivs): + ''' + ode_in_r_to_x + Input: + - ode_in_r, a linear combination of f, f_r, f_{rr}, ... + (in code represented as f_{r0}, f_{r1}, f_{r2}) with coefficients as RATIONAL functions in var[0], var[1], ... - var, array of sympy variables [x_0, x_1, ...] - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present -Output: - - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as rational - functions in var[0], var[1], ... - -Description: Translates an ode in the variable r into an ode in the variable x by substituting f, f_r, f_{rr}, ... - as a linear combination of f, f_x, f_{xx}, ... using the chain rule -''' -def ode_in_r_to_x(ode_in_r, var, n_derivs): + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of + f that may be present + Output: + - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as + rational functions in var[0], var[1], ... + + Description: Translates an ode in the variable r into an ode in the variable x + by substituting f, f_r, f_{rr}, ... as a linear combination of + f, f_x, f_{xx}, ... using the chain rule + ''' subme = generate_ND_derivative_relations(var, n_derivs) ode_in_x = ode_in_r f_r_derivs = make_sympy_vec("f_r", n_derivs) @@ -166,57 +156,54 @@ def ode_in_r_to_x(ode_in_r, var, n_derivs): return ode_in_x -# ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() -# ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() - -# delta_x = sp.symbols("delta_x") -# c_vec = make_sympy_vec("c", len(var)) - -''' -compute_poly_in_deriv -Input: - - ode_in_x_cleared, an ode in x, i.e. a linear combination of f, f_x, f_{xx}, ... - (in code represented as f_{x0}, f_{x1}, f_{x2}) with coefficients as POLYNOMIALS in var[0], var[1], ... - (i.e. not rational functions) - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present -Output: - - a polynomial in f, f_x, f_{xx}, ... (in code represented as f_{x0}, f_{x1}, f_{x2}) with coefficients - as polynomials in \delta_x where \delta_x = x_0 - c_0 that represents the ''shifted ODE'' - i.e. the ODE - where we substitute all occurences of \delta_x with x_0 - c_0 - -Description: Converts an ode in x, to a polynomial in f, f_x, f_{xx}, ..., with coefficients as polynomials -in \delta_x = x_0 - c_0. -''' -def compute_poly_in_deriv(ode_in_x_cleared, n_derivs): - #Note that generate_ND_derivative_relations will at worst put some power of $x_0^order$ in the denominator. To clear +def compute_poly_in_deriv(ode_in_x, n_derivs, var): + ''' + compute_poly_in_deriv + Input: + - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as + rational functions in var[0], var[1], ... + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives + of f that may be present + Output: + - a polynomial in f, f_x, f_{xx}, ... (in code represented as f_{x0}, f_{x1}, + f_{x2}) with coefficients as polynomials in delta_x where delta_x = x_0 - c_0 + that represents the ''shifted ODE'' - i.e. the ODE where we substitute all + occurences of delta_x with x_0 - c_0 + + Description: Converts an ode in x, to a polynomial in f, f_x, f_{xx}, ..., + with coefficients as polynomials in delta_x = x_0 - c_0. + ''' + #Note that generate_ND_derivative_relations will at worst put some power of + #$x_0^order$ in the denominator. To clear #the denominator we can probably? just multiply by x_0^order. + delta_x = sp.symbols("delta_x") + c_vec = make_sympy_vec("c", len(var)) ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() - ode_in_x_shifted = ode_in_x_cleared.subs(var[0], delta_x + c_vec[0]).simplify() - f_x_derivs = make_sympy_vec("f_x", n_derivs) poly = sp.Poly(ode_in_x_shifted, *f_x_derivs) - return poly -# poly = compute_poly_in_deriv(ode_in_x, n_derivs) - -''' -compute_coefficients_of_poly -Input: - - poly, a polynomial in sympy variables f_{x0}, f_{x1}, ..., - (recall that this corresponds to f_0, f_x, f_{xx}, ...) with coefficients that are polynomials in \delta_x - where poly represents the ''shifted ODE''- i.e. we substitute all occurences of \delta_x with x_0 - c_0 -Output: - - a 2d array, each row giving the coefficient of f_0, f_x, f_{xx}, ..., - each entry in the row giving the coefficients of the polynomial in \delta_x - -Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are polynomials in \delta_x -and outputs a 2d array for easy access to the coefficients based on their degree as a polynomial in \delta_x. -''' + def compute_coefficients_of_poly(poly, n_derivs): + ''' + compute_coefficients_of_poly + Input: + - poly, a polynomial in sympy variables f_{x0}, f_{x1}, ..., + (recall that this corresponds to f_0, f_x, f_{xx}, ...) with coefficients + that are polynomials in delta_x where poly represents the ''shifted ODE'' + - i.e. we substitute all occurences of delta_x with x_0 - c_0 + Output: + - a 2d array, each row giving the coefficient of f_0, f_x, f_{xx}, ..., + each entry in the row giving the coefficients of the polynomial in delta_x + Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are + polynomials in delta_x and outputs a 2d array for easy access to the + coefficients based on their degree as a polynomial in delta_x. + ''' + delta_x = sp.symbols("delta_x") + #Returns coefficients in lexographic order. So lowest order first - def tup(i,n=n_derivs): + def tup(i, n=n_derivs): a = [] for j in range(n): if j != i: @@ -224,42 +211,46 @@ def tup(i,n=n_derivs): else: a.append(1) return tuple(a) - + coeffs = [] for deriv_ind in range(n_derivs): - coeffs.append(sp.Poly(poly.coeff_monomial(tup(deriv_ind)), delta_x).all_coeffs()) - + coeffs.append( + sp.Poly(poly.coeff_monomial(tup(deriv_ind)), delta_x).all_coeffs()) + return coeffs -# coeffs = compute_coefficients_of_poly(poly, n_derivs) - -# i = sp.symbols("i") -# s = sp.Function("s") - -''' -compute_recurrence_relation -Input: - - coeffs a 2d array that gives access to the coefficients of poly, where poly represents the coefficients of - the ''shifted ODE'' (''shifted ODE'' = we substitute all occurences of \delta_x with x_0 - c_0) - based on their degree as a polynomial in \delta_x - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present -Output: - - a recurrence statement that equals 0 where s(i) is the ith coefficient of the Taylor polynomial for - our point potential. - -Description: Takes in coeffs which represents our ``shifted ode in x" (i.e. ode_in_x with coefficients in \delta_x) -and outputs a recurrence relation for the point potential. -''' - -def compute_recurrence_relation(coeffs, n_derivs): + +def compute_recurrence_relation(coeffs, n_derivs, var): + ''' + compute_recurrence_relation + Input: + - coeffs a 2d array that gives access to the coefficients of poly, where poly + represents the coefficients of the ''shifted ODE'' + (''shifted ODE'' = we substitute all occurences of delta_x with x_0 - c_0) + based on their degree as a polynomial in delta_x + - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives + of f that may be present + Output: + - a recurrence statement that equals 0 where s(i) is the ith coefficient of + the Taylor polynomial for our point potential. + + Description: Takes in coeffs which represents our ``shifted ode in x" + (i.e. ode_in_x with coefficients in delta_x) and outputs a recurrence relation + for the point potential. + ''' + i = sp.symbols("i") + s = sp.Function("s") + c_vec = make_sympy_vec("c", len(var)) + #Compute symbolic derivative def hc_diff(i, n): retMe = 1 for j in range(n): retMe *= (i-j) return retMe - - #We are differentiating deriv_ind, which shifts down deriv_ind. Do this for one deriv_ind + + #We are differentiating deriv_ind, which shifts down deriv_ind. + #Do this for one deriv_ind r = 0 for deriv_ind in range(n_derivs): part_of_r = 0 @@ -270,12 +261,17 @@ def hc_diff(i, n): temp = coeffs[deriv_ind][j] * s(i) * hc_diff(i, deriv_ind) part_of_r += temp.subs(i, i-shift) r += part_of_r - + for j in range(1, len(var)): r = r.subs(var[j], c_vec[j]) - + return r.simplify() -# r = compute_recurrence_relation(coeffs, n_derivs) +def test_recurrence_finder(): + from sumpy.expansion.diff_op import make_identity_diff_op, laplacian + w = make_identity_diff_op(2) + laplace2d = laplacian(w) + print(get_pde_in_recurrence_form(laplace2d)) + assert 1 == 1 From a172fb9628b37f294da41d8a7a98963dbc0b66ca Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 4 Jun 2024 10:14:27 -0700 Subject: [PATCH 004/143] Flake8 Issues --- sumpy/recurrence.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 227ada25..defcebf2 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -99,9 +99,9 @@ def compute_term(a, t): return ode_in_r, var, n_derivs -def generate_ND_derivative_relations(var, n_derivs): +def generate_nd_derivative_relations(var, n_derivs): ''' - generate_ND_derivative_relations + generate_nd_derivative_relations Input: - var, a sympy vector of variables called [x0, x1, ...] - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of @@ -148,7 +148,7 @@ def ode_in_r_to_x(ode_in_r, var, n_derivs): by substituting f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... using the chain rule ''' - subme = generate_ND_derivative_relations(var, n_derivs) + subme = generate_nd_derivative_relations(var, n_derivs) ode_in_x = ode_in_r f_r_derivs = make_sympy_vec("f_r", n_derivs) for i in range(n_derivs): @@ -173,7 +173,7 @@ def compute_poly_in_deriv(ode_in_x, n_derivs, var): Description: Converts an ode in x, to a polynomial in f, f_x, f_{xx}, ..., with coefficients as polynomials in delta_x = x_0 - c_0. ''' - #Note that generate_ND_derivative_relations will at worst put some power of + #Note that generate_nd_derivative_relations will at worst put some power of #$x_0^order$ in the denominator. To clear #the denominator we can probably? just multiply by x_0^order. delta_x = sp.symbols("delta_x") @@ -244,10 +244,10 @@ def compute_recurrence_relation(coeffs, n_derivs, var): #Compute symbolic derivative def hc_diff(i, n): - retMe = 1 + retme = 1 for j in range(n): - retMe *= (i-j) - return retMe + retme *= (i-j) + return retme #We are differentiating deriv_ind, which shifts down deriv_ind. #Do this for one deriv_ind From 1ef4f3ce54efcede8dda7b582cd68bd6f548807d Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 7 Jun 2024 11:58:31 -0700 Subject: [PATCH 005/143] Flake8 Docstring Issue --- sumpy/recurrence.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index defcebf2..47b247bc 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -39,7 +39,7 @@ def make_sympy_vec(name, n): def get_pde_in_recurrence_form(laplace): - ''' + """ get_pde_in_recurrence_form Input: - pde, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` pde such @@ -64,7 +64,7 @@ def get_pde_in_recurrence_form(laplace): In other words we output a linear combination of sympy variables f_{r0}, f_{r1}, ... (which represents f, f_r, f_{rr} respectively) to represent our ODE in r for the point potential. - ''' + """ dim = laplace.dim n_derivs = laplace.order assert (len(laplace.eqs) == 1) @@ -100,7 +100,7 @@ def compute_term(a, t): def generate_nd_derivative_relations(var, n_derivs): - ''' + """ generate_nd_derivative_relations Input: - var, a sympy vector of variables called [x0, x1, ...] @@ -115,7 +115,7 @@ def generate_nd_derivative_relations(var, n_derivs): Description: Using the chain rule outputs a vector that tells us how to write f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... - ''' + """ f_r_derivs = make_sympy_vec("f_r", n_derivs) f_x_derivs = make_sympy_vec("f_x", n_derivs) f = sp.Function("f") @@ -131,7 +131,7 @@ def generate_nd_derivative_relations(var, n_derivs): def ode_in_r_to_x(ode_in_r, var, n_derivs): - ''' + """ ode_in_r_to_x Input: - ode_in_r, a linear combination of f, f_r, f_{rr}, ... @@ -147,7 +147,7 @@ def ode_in_r_to_x(ode_in_r, var, n_derivs): Description: Translates an ode in the variable r into an ode in the variable x by substituting f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... using the chain rule - ''' + """ subme = generate_nd_derivative_relations(var, n_derivs) ode_in_x = ode_in_r f_r_derivs = make_sympy_vec("f_r", n_derivs) @@ -157,7 +157,7 @@ def ode_in_r_to_x(ode_in_r, var, n_derivs): def compute_poly_in_deriv(ode_in_x, n_derivs, var): - ''' + """ compute_poly_in_deriv Input: - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as @@ -172,7 +172,7 @@ def compute_poly_in_deriv(ode_in_x, n_derivs, var): Description: Converts an ode in x, to a polynomial in f, f_x, f_{xx}, ..., with coefficients as polynomials in delta_x = x_0 - c_0. - ''' + """ #Note that generate_nd_derivative_relations will at worst put some power of #$x_0^order$ in the denominator. To clear #the denominator we can probably? just multiply by x_0^order. @@ -186,7 +186,7 @@ def compute_poly_in_deriv(ode_in_x, n_derivs, var): def compute_coefficients_of_poly(poly, n_derivs): - ''' + """ compute_coefficients_of_poly Input: - poly, a polynomial in sympy variables f_{x0}, f_{x1}, ..., @@ -199,7 +199,7 @@ def compute_coefficients_of_poly(poly, n_derivs): Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are polynomials in delta_x and outputs a 2d array for easy access to the coefficients based on their degree as a polynomial in delta_x. - ''' + """ delta_x = sp.symbols("delta_x") #Returns coefficients in lexographic order. So lowest order first @@ -221,7 +221,7 @@ def tup(i, n=n_derivs): def compute_recurrence_relation(coeffs, n_derivs, var): - ''' + """ compute_recurrence_relation Input: - coeffs a 2d array that gives access to the coefficients of poly, where poly @@ -237,7 +237,7 @@ def compute_recurrence_relation(coeffs, n_derivs, var): Description: Takes in coeffs which represents our ``shifted ode in x" (i.e. ode_in_x with coefficients in delta_x) and outputs a recurrence relation for the point potential. - ''' + """ i = sp.symbols("i") s = sp.Function("s") c_vec = make_sympy_vec("c", len(var)) From 75be400c745f05890ccc5cd985620e74c95e0a68 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 7 Jun 2024 12:59:46 -0700 Subject: [PATCH 006/143] Fix pylint issues --- sumpy/recurrence.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 47b247bc..7befcb76 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -80,6 +80,7 @@ def get_pde_in_recurrence_form(laplace): eps = sp.symbols("epsilon") rval = r + eps f = sp.Function("f") + # pylint: disable=not-callable f_derivs = [sp.diff(f(rval), eps, i) for i in range(n_derivs+1)] def compute_term(a, t): @@ -121,8 +122,10 @@ def generate_nd_derivative_relations(var, n_derivs): f = sp.Function("f") eps = sp.symbols("epsilon") rval = sp.sqrt(sum(var**2)) + eps + # pylint: disable=not-callable f_derivs_x = [sp.diff(f(rval), var[0], i) for i in range(n_derivs)] f_derivs = [sp.diff(f(rval), eps, i) for i in range(n_derivs)] + # pylint: disable=not-callable for i in range(len(f_derivs_x)): for j in range(len(f_derivs)): f_derivs_x[i] = f_derivs_x[i].subs(f_derivs[j], f_r_derivs[j]) @@ -258,6 +261,7 @@ def hc_diff(i, n): for j in range(len(coeffs[deriv_ind])-1, -1, -1): shift = pow_delta - deriv_ind + 1 pow_delta += 1 + # pylint: disable=not-callable temp = coeffs[deriv_ind][j] * s(i) * hc_diff(i, deriv_ind) part_of_r += temp.subs(i, i-shift) r += part_of_r From 5116612abc3daeefe49a5169918683547c598e25 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 17 Jun 2024 15:41:09 -0700 Subject: [PATCH 007/143] Add test for Laplace2D --- sumpy/recurrence.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 7befcb76..f42208e8 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -25,7 +25,8 @@ import sympy as sp from pytools.obj_array import make_obj_array - +from sumpy.expansion.diff_op import make_identity_diff_op, laplacian +import math #A similar function exists in sumpy.symbolic def make_sympy_vec(name, n): @@ -272,10 +273,31 @@ def hc_diff(i, n): return r.simplify() -def test_recurrence_finder(): - from sumpy.expansion.diff_op import make_identity_diff_op, laplacian +def test_recurrence_finder_laplace(): + """ + test_recurrence_finder_laplace + Description: Checks that the recurrence finder works correctly for the Laplace + 2D point potential. + """ w = make_identity_diff_op(2) laplace2d = laplacian(w) - print(get_pde_in_recurrence_form(laplace2d)) - - assert 1 == 1 + ode_in_r, var, n_derivs = get_pde_in_recurrence_form(laplace2d) + ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() + poly = compute_poly_in_deriv(ode_in_x, n_derivs, var) + coeffs = compute_coefficients_of_poly(poly, n_derivs) + i = sp.symbols("i") + s = sp.Function("s") + r = compute_recurrence_relation(coeffs, n_derivs, var) + + def coeff_laplace(i): + x, y = sp.symbols("x,y") + c_vec = make_sympy_vec("c", 2) + true_f = sp.log(sp.sqrt(x**2 + y**2)) + return sp.diff(true_f, x, i).subs(x, c_vec[0]).subs( + y, c_vec[1])/math.factorial(i) + d = 6 + # pylint: disable=not-callable + val = r.subs(i, d).subs(s(d+1),coeff_laplace(d+1)).subs( + s(d), coeff_laplace(d)).subs(s(d-1), coeff_laplace(d-1)).subs( + s(d-2), coeff_laplace(d-2)).simplify() + assert val == 0 From 63531c0e609944f76e1f4a7fc4e41d9cf8c830ae Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 18 Jun 2024 08:54:51 -0700 Subject: [PATCH 008/143] Add test Laplace3D --- sumpy/recurrence.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index f42208e8..347737aa 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -301,3 +301,37 @@ def coeff_laplace(i): s(d), coeff_laplace(d)).subs(s(d-1), coeff_laplace(d-1)).subs( s(d-2), coeff_laplace(d-2)).simplify() assert val == 0 + + +def test_recurrence_finder_laplace_three_d(): + """ + test_recurrence_finder_laplace_three_d + Description: Checks that the recurrence finder works correctly for the Laplace + 3D point potential. + """ + w = make_identity_diff_op(3) + laplace3d = laplacian(w) + print(laplace3d) + ode_in_r, var, n_derivs = get_pde_in_recurrence_form(laplace3d) + ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() + poly = compute_poly_in_deriv(ode_in_x, n_derivs, var) + coeffs = compute_coefficients_of_poly(poly, n_derivs) + i = sp.symbols("i") + s = sp.Function("s") + r = compute_recurrence_relation(coeffs, n_derivs, var) + + def coeff_laplace_three_d(i): + x, y, z = sp.symbols("x,y,z") + c_vec = make_sympy_vec("c", 3) + true_f = 1/(sp.sqrt(x**2 + y**2 + z**2)) + return sp.diff(true_f, x, i).subs(x, c_vec[0]).subs( + y, c_vec[1]).subs(z, c_vec[2])/math.factorial(i) + + + d = 6 + # pylint: disable=not-callable + val = r.subs(i, d).subs(s(d+1),coeff_laplace_three_d(d+1)).subs( + s(d), coeff_laplace_three_d(d)).subs(s(d-1), coeff_laplace_three_d(d-1)).subs( + s(d-2), coeff_laplace_three_d(d-2)).simplify() + + assert val == 0 \ No newline at end of file From a85dade2e78cc27ed568d7b5bfc94171d5315e2a Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 18 Jun 2024 13:55:44 -0700 Subject: [PATCH 009/143] Flake8 --- sumpy/recurrence.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 347737aa..7ae522c2 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -23,10 +23,11 @@ THE SOFTWARE. """ +import math import sympy as sp from pytools.obj_array import make_obj_array from sumpy.expansion.diff_op import make_identity_diff_op, laplacian -import math + #A similar function exists in sumpy.symbolic def make_sympy_vec(name, n): @@ -297,7 +298,7 @@ def coeff_laplace(i): y, c_vec[1])/math.factorial(i) d = 6 # pylint: disable=not-callable - val = r.subs(i, d).subs(s(d+1),coeff_laplace(d+1)).subs( + val = r.subs(i, d).subs(s(d+1), coeff_laplace(d+1)).subs( s(d), coeff_laplace(d)).subs(s(d-1), coeff_laplace(d-1)).subs( s(d-2), coeff_laplace(d-2)).simplify() assert val == 0 @@ -327,11 +328,11 @@ def coeff_laplace_three_d(i): return sp.diff(true_f, x, i).subs(x, c_vec[0]).subs( y, c_vec[1]).subs(z, c_vec[2])/math.factorial(i) - d = 6 # pylint: disable=not-callable - val = r.subs(i, d).subs(s(d+1),coeff_laplace_three_d(d+1)).subs( - s(d), coeff_laplace_three_d(d)).subs(s(d-1), coeff_laplace_three_d(d-1)).subs( + val = r.subs(i, d).subs(s(d+1), coeff_laplace_three_d(d+1)).subs( + s(d), coeff_laplace_three_d(d)).subs(s(d-1), + coeff_laplace_three_d(d-1)).subs( s(d-2), coeff_laplace_three_d(d-2)).simplify() assert val == 0 \ No newline at end of file From 412e1febe49e6fdd99fd08bea8199fb7c512c185 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Mon, 24 Jun 2024 15:34:51 -0500 Subject: [PATCH 010/143] Work on improving docs --- doc/expansion.rst | 5 +++ sumpy/recurrence.py | 74 +++++++++++++++++++++++++-------------------- 2 files changed, 47 insertions(+), 32 deletions(-) diff --git a/doc/expansion.rst b/doc/expansion.rst index 5d72d735..ea268034 100644 --- a/doc/expansion.rst +++ b/doc/expansion.rst @@ -27,3 +27,8 @@ Estimating Expansion Orders --------------------------- .. automodule:: sumpy.expansion.level_to_order + +Recurrences +----------- + +.. automodule:: sumpy.recurrence diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 7ae522c2..7e0b8636 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -1,3 +1,12 @@ +""" +.. autofunction:: get_pde_in_recurrence_form +.. autofunction:: generate_nd_derivative_relations +.. autofunction:: ode_in_r_to_x +.. autofunction:: compute_poly_in_deriv +.. autofunction:: compute_coefficients_of_poly +.. autofunction:: compute_recurrence_relation +""" + __copyright__ = """ Copyright (C) 2024 Hirish Chandrasekaran Copyright (C) 2024 Andreas Kloeckner @@ -23,35 +32,32 @@ THE SOFTWARE. """ +import numpy as np import math import sympy as sp +from typing import Tuple from pytools.obj_array import make_obj_array -from sumpy.expansion.diff_op import make_identity_diff_op, laplacian +from sumpy.expansion.diff_op import ( + make_identity_diff_op, laplacian,LinearPDESystemOperator) -#A similar function exists in sumpy.symbolic -def make_sympy_vec(name, n): +# similar to make_sym_vector in sumpy.symbolic, but returns an object array +# instead of a sympy.Matrix. +def _make_sympy_vec(name, n): return make_obj_array([sp.Symbol(f"{name}{i}") for i in range(n)]) -__doc__ = """ -.. autoclass:: Recurrence -.. automodule:: sumpy.recurrence -""" - - -def get_pde_in_recurrence_form(laplace): +def get_pde_in_recurrence_form(pde: LinearPDESystemOperator) -> Tuple[ + sp.Expr, np.ndarray, int + ]: """ - get_pde_in_recurrence_form Input: - - pde, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` pde such - that assert(len(pde.eqs) == 1) - is true. + - *pde*, representing a scalar PDE. Output: - ode_in_r, an ode in r which the POINT-POTENTIAL (has radial symmetry) satisfies away from the origin. Note: to represent f, f_r, f_{rr}, we use the sympy variables - f_{r0}, f_{r1}, .... So ode_in_r is a linear combination of the sympy + :math:`f_{r0}`, f_{r1}, .... So ode_in_r is a linear combination of the sympy variables f_{r0}, f_{r1}, .... - var, represents the variables for the input space: [x0, x1, ...] - n_derivs, the order of the original PDE + 1, i.e. the number of @@ -67,16 +73,19 @@ def get_pde_in_recurrence_form(laplace): f_{r0}, f_{r1}, ... (which represents f, f_r, f_{rr} respectively) to represent our ODE in r for the point potential. """ - dim = laplace.dim - n_derivs = laplace.order - assert (len(laplace.eqs) == 1) - ops = len(laplace.eqs[0]) + if len(pde.eqs) != 1: + raise ValueError("PDE must be scalar") + + dim = pde.dim + n_derivs = pde.order + assert (len(pde.eqs) == 1) + ops = len(pde.eqs[0]) derivs = [] coeffs = [] - for i in laplace.eqs[0]: + for i in pde.eqs[0]: derivs.append(i.mi) - coeffs.append(laplace.eqs[0][i]) - var = make_sympy_vec("x", dim) + coeffs.append(pde.eqs[0][i]) + var = _make_sympy_vec("x", dim) r = sp.sqrt(sum(var**2)) eps = sp.symbols("epsilon") @@ -95,7 +104,7 @@ def compute_term(a, t): for i in range(ops): ode_in_r += coeffs[i] * compute_term(f(rval), derivs[i]) n_derivs = len(f_derivs) - f_r_derivs = make_sympy_vec("f_r", n_derivs) + f_r_derivs = _make_sympy_vec("f_r", n_derivs) for i in range(n_derivs): ode_in_r = ode_in_r.subs(f_derivs[i], f_r_derivs[i]) @@ -109,6 +118,7 @@ def generate_nd_derivative_relations(var, n_derivs): - var, a sympy vector of variables called [x0, x1, ...] - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present + Output: - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... using the chain rule @@ -119,8 +129,8 @@ def generate_nd_derivative_relations(var, n_derivs): write f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... """ - f_r_derivs = make_sympy_vec("f_r", n_derivs) - f_x_derivs = make_sympy_vec("f_x", n_derivs) + f_r_derivs = _make_sympy_vec("f_r", n_derivs) + f_x_derivs = _make_sympy_vec("f_x", n_derivs) f = sp.Function("f") eps = sp.symbols("epsilon") rval = sp.sqrt(sum(var**2)) + eps @@ -155,7 +165,7 @@ def ode_in_r_to_x(ode_in_r, var, n_derivs): """ subme = generate_nd_derivative_relations(var, n_derivs) ode_in_x = ode_in_r - f_r_derivs = make_sympy_vec("f_r", n_derivs) + f_r_derivs = _make_sympy_vec("f_r", n_derivs) for i in range(n_derivs): ode_in_x = ode_in_x.subs(f_r_derivs[i], subme[f_r_derivs[i]]) return ode_in_x @@ -182,10 +192,10 @@ def compute_poly_in_deriv(ode_in_x, n_derivs, var): #$x_0^order$ in the denominator. To clear #the denominator we can probably? just multiply by x_0^order. delta_x = sp.symbols("delta_x") - c_vec = make_sympy_vec("c", len(var)) + c_vec = _make_sympy_vec("c", len(var)) ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() ode_in_x_shifted = ode_in_x_cleared.subs(var[0], delta_x + c_vec[0]).simplify() - f_x_derivs = make_sympy_vec("f_x", n_derivs) + f_x_derivs = _make_sympy_vec("f_x", n_derivs) poly = sp.Poly(ode_in_x_shifted, *f_x_derivs) return poly @@ -245,7 +255,7 @@ def compute_recurrence_relation(coeffs, n_derivs, var): """ i = sp.symbols("i") s = sp.Function("s") - c_vec = make_sympy_vec("c", len(var)) + c_vec = _make_sympy_vec("c", len(var)) #Compute symbolic derivative def hc_diff(i, n): @@ -292,7 +302,7 @@ def test_recurrence_finder_laplace(): def coeff_laplace(i): x, y = sp.symbols("x,y") - c_vec = make_sympy_vec("c", 2) + c_vec = _make_sympy_vec("c", 2) true_f = sp.log(sp.sqrt(x**2 + y**2)) return sp.diff(true_f, x, i).subs(x, c_vec[0]).subs( y, c_vec[1])/math.factorial(i) @@ -323,7 +333,7 @@ def test_recurrence_finder_laplace_three_d(): def coeff_laplace_three_d(i): x, y, z = sp.symbols("x,y,z") - c_vec = make_sympy_vec("c", 3) + c_vec = _make_sympy_vec("c", 3) true_f = 1/(sp.sqrt(x**2 + y**2 + z**2)) return sp.diff(true_f, x, i).subs(x, c_vec[0]).subs( y, c_vec[1]).subs(z, c_vec[2])/math.factorial(i) @@ -335,4 +345,4 @@ def coeff_laplace_three_d(i): coeff_laplace_three_d(d-1)).subs( s(d-2), coeff_laplace_three_d(d-2)).simplify() - assert val == 0 \ No newline at end of file + assert val == 0 From 6476f0b01c18d7b616c4b46c32ee5aa95397e5fb Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 25 Jun 2024 13:48:13 -0700 Subject: [PATCH 011/143] Make function for producing recurrence from pde --- sumpy/recurrence.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 7e0b8636..476f3443 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -284,6 +284,24 @@ def hc_diff(i, n): return r.simplify() +def get_recurrence_from_pde(pde): + """ + Input: + - *pde*, representing a scalar PDE. + + Output: + - r, a recurrence relation for a Line-Taylor expansion. + + Description: Takes in a pde, outputs a recurrence. + """ + ode_in_r, var, n_derivs = get_pde_in_recurrence_form(pde) + ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() + poly = compute_poly_in_deriv(ode_in_x, n_derivs, var) + coeffs = compute_coefficients_of_poly(poly, n_derivs) + r = compute_recurrence_relation(coeffs, n_derivs, var) + return r + + def test_recurrence_finder_laplace(): """ test_recurrence_finder_laplace @@ -292,13 +310,9 @@ def test_recurrence_finder_laplace(): """ w = make_identity_diff_op(2) laplace2d = laplacian(w) - ode_in_r, var, n_derivs = get_pde_in_recurrence_form(laplace2d) - ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() - poly = compute_poly_in_deriv(ode_in_x, n_derivs, var) - coeffs = compute_coefficients_of_poly(poly, n_derivs) + r = get_recurrence_from_pde(laplace2d) i = sp.symbols("i") s = sp.Function("s") - r = compute_recurrence_relation(coeffs, n_derivs, var) def coeff_laplace(i): x, y = sp.symbols("x,y") @@ -323,13 +337,9 @@ def test_recurrence_finder_laplace_three_d(): w = make_identity_diff_op(3) laplace3d = laplacian(w) print(laplace3d) - ode_in_r, var, n_derivs = get_pde_in_recurrence_form(laplace3d) - ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() - poly = compute_poly_in_deriv(ode_in_x, n_derivs, var) - coeffs = compute_coefficients_of_poly(poly, n_derivs) + r = get_recurrence_from_pde(laplace3d) i = sp.symbols("i") s = sp.Function("s") - r = compute_recurrence_relation(coeffs, n_derivs, var) def coeff_laplace_three_d(i): x, y, z = sp.symbols("x,y,z") From 19b5a39fa893e36dc440e4b726804527a18a39d2 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 26 Jun 2024 16:00:24 -0700 Subject: [PATCH 012/143] Update documentation --- sumpy/recurrence.py | 137 +++++++++++++++++++++++--------------------- 1 file changed, 72 insertions(+), 65 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 476f3443..3aefab1f 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -31,14 +31,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ - -import numpy as np import math -import sympy as sp from typing import Tuple +import numpy as np +import sympy as sp from pytools.obj_array import make_obj_array from sumpy.expansion.diff_op import ( - make_identity_diff_op, laplacian,LinearPDESystemOperator) + make_identity_diff_op, laplacian, LinearPDESystemOperator) # similar to make_sym_vector in sumpy.symbolic, but returns an object array @@ -49,23 +48,26 @@ def _make_sympy_vec(name, n): def get_pde_in_recurrence_form(pde: LinearPDESystemOperator) -> Tuple[ sp.Expr, np.ndarray, int - ]: +]: """ Input: - *pde*, representing a scalar PDE. + Output: - - ode_in_r, an ode in r which the POINT-POTENTIAL (has radial symmetry) - satisfies away from the origin. - Note: to represent f, f_r, f_{rr}, we use the sympy variables - :math:`f_{r0}`, f_{r1}, .... So ode_in_r is a linear combination of the sympy - variables f_{r0}, f_{r1}, .... + - ode_in_r, an ode in r which the point-potential corresponding to the PDE + satisfies away from the origin. We assume that the point-potential has + radial symmetry. + Note: to represent :math:`f, f_r, f_{rr}`, we use the sympy variables + f_{r0}, f_{r1}, ... So ode_in_r is a linear combination of the + sympy variables f_{r0}, f_{r1}, ... - var, represents the variables for the input space: [x0, x1, ...] - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present (the reason this is called n_derivs - since if we have a second order PDE for example then we might see f, f_{r}, - f_{rr} in our ODE in r, which is technically 3 terms since we count - the 0th order derivative f as a "derivative." If this doesn't make sense - just know that n_derivs is the order the of the input sumpy PDE + 1) + since if we have a second order PDE for example then we might see + :math:`f, f_{r}, f_{rr}` in our ODE in r, which is technically 3 terms + since we count the 0th order derivative f as a "derivative." If this + doesn't make sense just know that n_derivs is the order the of the input + sumpy PDE + 1) Description: We assume we are handed a system of 1 sumpy PDE (pde) and output the pde in a way that allows us to easily replace derivatives with respect to r. @@ -111,23 +113,21 @@ def compute_term(a, t): return ode_in_r, var, n_derivs -def generate_nd_derivative_relations(var, n_derivs): +def generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: """ - generate_nd_derivative_relations Input: - - var, a sympy vector of variables called [x0, x1, ...] - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of - f that may be present + - *var*, a sympy vector of variables called [x0, x1, ...] + - *n_derivs*, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present Output: - - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... - using the chain rule - (f, f_x, f_{xx}, ... in code is represented as f_{x0}, f_{x1}, f_{x2} and - f, f_r, f_{rr}, ... in code is represented as f_{r0}, f_{r1}, f_{r2}) + - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... + using the chain rule + (f, f_x, f_{xx}, ... in code is represented as f_{x0}, f_{x1}, f_{x2} and + f, f_r, f_{rr}, ... in code is represented as f_{r0}, f_{r1}, f_{r2}) Description: Using the chain rule outputs a vector that tells us how to - write f, f_r, f_{rr}, ... as a linear - combination of f, f_x, f_{xx}, ... + write f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... """ f_r_derivs = _make_sympy_vec("f_r", n_derivs) f_x_derivs = _make_sympy_vec("f_x", n_derivs) @@ -145,19 +145,19 @@ def generate_nd_derivative_relations(var, n_derivs): return sp.solve(system, *f_r_derivs, dict=True)[0] -def ode_in_r_to_x(ode_in_r, var, n_derivs): +def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: """ - ode_in_r_to_x Input: - - ode_in_r, a linear combination of f, f_r, f_{rr}, ... - (in code represented as f_{r0}, f_{r1}, f_{r2}) - with coefficients as RATIONAL functions in var[0], var[1], ... - - var, array of sympy variables [x_0, x_1, ...] - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives of - f that may be present + - *ode_in_r*, a linear combination of f, f_r, f_{rr}, ... + (in code represented as f_{r0}, f_{r1}, f_{r2}) + with coefficients as RATIONAL functions in var[0], var[1], ... + - *var*, array of sympy variables [x_0, x_1, ...] + - *n_derivs*, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present + Output: - - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as - rational functions in var[0], var[1], ... + - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as + rational functions in var[0], var[1], ... Description: Translates an ode in the variable r into an ode in the variable x by substituting f, f_r, f_{rr}, ... as a linear combination of @@ -171,19 +171,22 @@ def ode_in_r_to_x(ode_in_r, var, n_derivs): return ode_in_x -def compute_poly_in_deriv(ode_in_x, n_derivs, var): +def compute_poly_in_deriv(ode_in_x: sp.Expr, n_derivs: int, var: + np.ndarray) -> sp.polys.polytools.Poly: """ - compute_poly_in_deriv Input: - - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as - rational functions in var[0], var[1], ... - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives - of f that may be present + - *ode_in_x*, a linear combination of f, f_x, f_{xx}, ... with coefficients + as rational functions in var[0], var[1], ... + - *n_derivs*, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present + Output: - - a polynomial in f, f_x, f_{xx}, ... (in code represented as f_{x0}, f_{x1}, - f_{x2}) with coefficients as polynomials in delta_x where delta_x = x_0 - c_0 - that represents the ''shifted ODE'' - i.e. the ODE where we substitute all - occurences of delta_x with x_0 - c_0 + - a polynomial in math:`f, f_x, f_{xx}, ...` (in code represented as + math:`f_{x0}, f_{x1}, f_{x2}`) with coefficients as polynomials in + math:`\\delta_x` where + ammath:`delta_x = x_0 - c_0` that represents the ''shifted ODE'' - i.e. + the ODE where we substitute all occurences of math:`delta_x` with + math:`x_0 - c_0` Description: Converts an ode in x, to a polynomial in f, f_x, f_{xx}, ..., with coefficients as polynomials in delta_x = x_0 - c_0. @@ -200,17 +203,21 @@ def compute_poly_in_deriv(ode_in_x, n_derivs, var): return poly -def compute_coefficients_of_poly(poly, n_derivs): +def compute_coefficients_of_poly(poly: sp.polys.polytools.Poly, + n_derivs: int) -> list: """ - compute_coefficients_of_poly Input: - - poly, a polynomial in sympy variables f_{x0}, f_{x1}, ..., - (recall that this corresponds to f_0, f_x, f_{xx}, ...) with coefficients - that are polynomials in delta_x where poly represents the ''shifted ODE'' - - i.e. we substitute all occurences of delta_x with x_0 - c_0 + - *poly*, a polynomial in sympy variables math:`f_{x0}, f_{x1}, ...`, + (recall that this corresponds to math:`f_0, f_x, f_{xx}, ...`) with + coefficients that are polynomials in delta_x where poly represents the + ''shifted ODE'' i.e. we substitute all occurences of math:`\\delta_x` + with math:`x_0 - c_0` + Output: - - a 2d array, each row giving the coefficient of f_0, f_x, f_{xx}, ..., - each entry in the row giving the coefficients of the polynomial in delta_x + - coeffs, a 2d array, each row giving the coefficient of + math:`f_0, f_x, f_{xx}, ...`, each entry in the row giving the + coefficients of the polynomial in math:`\\delta_x` + Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are polynomials in delta_x and outputs a 2d array for easy access to the coefficients based on their degree as a polynomial in delta_x. @@ -237,17 +244,17 @@ def tup(i, n=n_derivs): def compute_recurrence_relation(coeffs, n_derivs, var): """ - compute_recurrence_relation Input: - - coeffs a 2d array that gives access to the coefficients of poly, where poly - represents the coefficients of the ''shifted ODE'' - (''shifted ODE'' = we substitute all occurences of delta_x with x_0 - c_0) - based on their degree as a polynomial in delta_x - - n_derivs, the order of the original PDE + 1, i.e. the number of derivatives - of f that may be present + - *coeffs* a 2d array that gives access to the coefficients of poly, where + poly represents the coefficients of the ''shifted ODE'' + (''shifted ODE'' = we substitute all occurences of delta_x with x_0 - c_0) + based on their degree as a polynomial in delta_x) + - *n_derivs*, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present + Output: - - a recurrence statement that equals 0 where s(i) is the ith coefficient of - the Taylor polynomial for our point potential. + - r, a recurrence statement that equals 0 where s(i) is the ith coefficient + of the Taylor polynomial for our point potential. Description: Takes in coeffs which represents our ``shifted ode in x" (i.e. ode_in_x with coefficients in delta_x) and outputs a recurrence relation @@ -290,7 +297,8 @@ def get_recurrence_from_pde(pde): - *pde*, representing a scalar PDE. Output: - - r, a recurrence relation for a Line-Taylor expansion. + - r, a recurrence relation for a coefficients of a Line-Taylor expansion of + the point potential. Description: Takes in a pde, outputs a recurrence. """ @@ -336,7 +344,6 @@ def test_recurrence_finder_laplace_three_d(): """ w = make_identity_diff_op(3) laplace3d = laplacian(w) - print(laplace3d) r = get_recurrence_from_pde(laplace3d) i = sp.symbols("i") s = sp.Function("s") @@ -355,4 +362,4 @@ def coeff_laplace_three_d(i): coeff_laplace_three_d(d-1)).subs( s(d-2), coeff_laplace_three_d(d-2)).simplify() - assert val == 0 + assert val == 0 \ No newline at end of file From 3417a8d98a86f5319b05a7cdf1d7ef4adc346411 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 27 Jun 2024 13:17:15 -0700 Subject: [PATCH 013/143] List comprehension --- sumpy/recurrence.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 3aefab1f..f50a106a 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -234,10 +234,8 @@ def tup(i, n=n_derivs): a.append(1) return tuple(a) - coeffs = [] - for deriv_ind in range(n_derivs): - coeffs.append( - sp.Poly(poly.coeff_monomial(tup(deriv_ind)), delta_x).all_coeffs()) + coeffs = [sp.Poly(poly.coeff_monomial(tup(deriv_ind)), delta_x).all_coeffs() + for deriv_ind in range(n_derivs)] return coeffs From 2195ed0e357d308af1702c64bb42189c7c797a93 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 27 Jun 2024 14:02:08 -0700 Subject: [PATCH 014/143] From hardcode to loop --- sumpy/recurrence.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index f50a106a..c4fe6a73 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -355,9 +355,9 @@ def coeff_laplace_three_d(i): d = 6 # pylint: disable=not-callable - val = r.subs(i, d).subs(s(d+1), coeff_laplace_three_d(d+1)).subs( - s(d), coeff_laplace_three_d(d)).subs(s(d-1), - coeff_laplace_three_d(d-1)).subs( - s(d-2), coeff_laplace_three_d(d-2)).simplify() + r_sub = r.subs(i, d) + for i in range(d-2, d+2): + r_sub = r_sub.subs(s(i), coeff_laplace_three_d(i)) + r_sub = r_sub.simplify() - assert val == 0 \ No newline at end of file + assert r_sub == 0 From c0e3f30633c17bb804b59d529374dcddd77f9dbe Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 30 Jun 2024 17:31:00 -0700 Subject: [PATCH 015/143] Added get_recurrence_order --- sumpy/recurrence.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index c4fe6a73..3b58017f 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -289,6 +289,23 @@ def hc_diff(i, n): return r.simplify() +def get_recurrence_order(coeffs): + """ + Input: + - *coeffs*, represents coefficients of a scalar ODE. + + Output: + - true_order, the order of the recurrence relation that will be produced. + """ + orders = [] + for i in range(len(coeffs)): + for j in range(len(coeffs[i])): + if coeffs[i][j] != 0: + orders.append(i - j) + true_order = (max(orders)-min(orders)+1) + return true_order + + def get_recurrence_from_pde(pde): """ Input: From a8142840b8940b058caeb202b91becda831127cf Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 1 Jul 2024 10:49:35 -0700 Subject: [PATCH 016/143] Unit test for order --- sumpy/recurrence.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 3b58017f..05a21de6 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -322,7 +322,7 @@ def get_recurrence_from_pde(pde): poly = compute_poly_in_deriv(ode_in_x, n_derivs, var) coeffs = compute_coefficients_of_poly(poly, n_derivs) r = compute_recurrence_relation(coeffs, n_derivs, var) - return r + return r, get_recurrence_order(coeffs) def test_recurrence_finder_laplace(): @@ -333,7 +333,7 @@ def test_recurrence_finder_laplace(): """ w = make_identity_diff_op(2) laplace2d = laplacian(w) - r = get_recurrence_from_pde(laplace2d) + r, order = get_recurrence_from_pde(laplace2d) i = sp.symbols("i") s = sp.Function("s") @@ -348,6 +348,7 @@ def coeff_laplace(i): val = r.subs(i, d).subs(s(d+1), coeff_laplace(d+1)).subs( s(d), coeff_laplace(d)).subs(s(d-1), coeff_laplace(d-1)).subs( s(d-2), coeff_laplace(d-2)).simplify() + assert order == 4 assert val == 0 @@ -359,7 +360,7 @@ def test_recurrence_finder_laplace_three_d(): """ w = make_identity_diff_op(3) laplace3d = laplacian(w) - r = get_recurrence_from_pde(laplace3d) + r, order = get_recurrence_from_pde(laplace3d) i = sp.symbols("i") s = sp.Function("s") @@ -376,5 +377,5 @@ def coeff_laplace_three_d(i): for i in range(d-2, d+2): r_sub = r_sub.subs(s(i), coeff_laplace_three_d(i)) r_sub = r_sub.simplify() - - assert r_sub == 0 + assert order == 4 + assert r_sub == 0 \ No newline at end of file From c4dd7c9298d4bb0cd1f57ea751144e7dfde79a6d Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 1 Jul 2024 10:54:22 -0700 Subject: [PATCH 017/143] Flake8 --- sumpy/recurrence.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 05a21de6..ccf28095 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -117,7 +117,7 @@ def generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: """ Input: - *var*, a sympy vector of variables called [x0, x1, ...] - - *n_derivs*, the order of the original PDE + 1, i.e. the number of + - *n_derivs*, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present Output: @@ -214,8 +214,8 @@ def compute_coefficients_of_poly(poly: sp.polys.polytools.Poly, with math:`x_0 - c_0` Output: - - coeffs, a 2d array, each row giving the coefficient of - math:`f_0, f_x, f_{xx}, ...`, each entry in the row giving the + - coeffs, a 2d array, each row giving the coefficient of + math:`f_0, f_x, f_{xx}, ...`, each entry in the row giving the coefficients of the polynomial in math:`\\delta_x` Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are @@ -243,15 +243,15 @@ def tup(i, n=n_derivs): def compute_recurrence_relation(coeffs, n_derivs, var): """ Input: - - *coeffs* a 2d array that gives access to the coefficients of poly, where + - *coeffs* a 2d array that gives access to the coefficients of poly, where poly represents the coefficients of the ''shifted ODE'' (''shifted ODE'' = we substitute all occurences of delta_x with x_0 - c_0) based on their degree as a polynomial in delta_x) - - *n_derivs*, the order of the original PDE + 1, i.e. the number of + - *n_derivs*, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present Output: - - r, a recurrence statement that equals 0 where s(i) is the ith coefficient + - r, a recurrence statement that equals 0 where s(i) is the ith coefficient of the Taylor polynomial for our point potential. Description: Takes in coeffs which represents our ``shifted ode in x" @@ -312,7 +312,7 @@ def get_recurrence_from_pde(pde): - *pde*, representing a scalar PDE. Output: - - r, a recurrence relation for a coefficients of a Line-Taylor expansion of + - r, a recurrence relation for a coefficients of a Line-Taylor expansion of the point potential. Description: Takes in a pde, outputs a recurrence. @@ -327,9 +327,8 @@ def get_recurrence_from_pde(pde): def test_recurrence_finder_laplace(): """ - test_recurrence_finder_laplace - Description: Checks that the recurrence finder works correctly for the Laplace - 2D point potential. + Description: Test the recurrence relation produced for the Laplace 2D point + potential. """ w = make_identity_diff_op(2) laplace2d = laplacian(w) @@ -354,7 +353,6 @@ def coeff_laplace(i): def test_recurrence_finder_laplace_three_d(): """ - test_recurrence_finder_laplace_three_d Description: Checks that the recurrence finder works correctly for the Laplace 3D point potential. """ @@ -378,4 +376,4 @@ def coeff_laplace_three_d(i): r_sub = r_sub.subs(s(i), coeff_laplace_three_d(i)) r_sub = r_sub.simplify() assert order == 4 - assert r_sub == 0 \ No newline at end of file + assert r_sub == 0 From f095401b8b4741e1275a0d5fbabfef39fc70f1b2 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 1 Jul 2024 14:07:09 -0700 Subject: [PATCH 018/143] Update get_recurrence_order --- sumpy/recurrence.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index ccf28095..c77fec57 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -32,7 +32,7 @@ THE SOFTWARE. """ import math -from typing import Tuple +from typing import Sequence, Tuple import numpy as np import sympy as sp from pytools.obj_array import make_obj_array @@ -289,21 +289,24 @@ def hc_diff(i, n): return r.simplify() -def get_recurrence_order(coeffs): +def get_recurrence_order(coeffs: Sequence[Sequence[sp.Expr]]) -> int: """ Input: - - *coeffs*, represents coefficients of a scalar ODE. - + - *coeffs*, represents coefficients of the normalized, + center-shifted ODE (se above) + with the outer sequence reflecting the order of the derivative, + and the second expansion reflecting expansion in the shift + $\delta_x$ Output: - true_order, the order of the recurrence relation that will be produced. """ - orders = [] - for i in range(len(coeffs)): - for j in range(len(coeffs[i])): - if coeffs[i][j] != 0: - orders.append(i - j) - true_order = (max(orders)-min(orders)+1) - return true_order + orders = { + i - j + for i, deriv_order_coeff in enumerate(coeffs) + for j, shift_coeff in enumerate(deriv_order_coeff) + if shift_coeff + } + return max(orders)-min(orders)+1 def get_recurrence_from_pde(pde): From 77776f93a39cf8b56b87f9f29d2cd205be262e82 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 9 Jul 2024 21:10:30 -0700 Subject: [PATCH 019/143] Add parametric recurrence finder --- sumpy/recurrence.py | 107 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 103 insertions(+), 4 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index c77fec57..d4ce2d7a 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -5,6 +5,10 @@ .. autofunction:: compute_poly_in_deriv .. autofunction:: compute_coefficients_of_poly .. autofunction:: compute_recurrence_relation +.. autofunction:: get_recurrence_parametric_from_pde +.. autofunction:: get_recurrence_parametric_from_coeffs +.. autofunction:: auto_product_rule_single_term +.. autofunction:: compute_coefficients_of_poly_parametric """ __copyright__ = """ @@ -293,10 +297,10 @@ def get_recurrence_order(coeffs: Sequence[Sequence[sp.Expr]]) -> int: """ Input: - *coeffs*, represents coefficients of the normalized, - center-shifted ODE (se above) + center-shifted ODE (see above) with the outer sequence reflecting the order of the derivative, and the second expansion reflecting expansion in the shift - $\delta_x$ + math:`\\delta_x` Output: - true_order, the order of the recurrence relation that will be produced. """ @@ -328,6 +332,101 @@ def get_recurrence_from_pde(pde): return r, get_recurrence_order(coeffs) +def compute_coefficients_of_poly_parametric(poly, n_derivs, var): + """ + Input: + - *poly*, a polynomial in sympy variables math:`f_{x0}, f_{x1}, ...`, + (recall that this corresponds to math:`f_0, f_x, f_{xx}, ...`) with + coefficients that are polynomials in math:`x_0` where poly represents the + TRUE ODE. + - *n_derivs*, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present + - *var*, array of sympy variables [x_0, x_1, ...] + + Output: + - coeffs, a 2d array, each row giving the coefficient of + math:`f_0, f_x, f_{xx}, ...`, each entry in the row giving the + coefficients of the polynomial in math:`x_0` + + Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are + polynomials in math:`x_0` and outputs a 2d array for easy access to the + coefficients based on their degree as a polynomial in math:`x_0`. + """ + def tup(i, n=n_derivs): + a = [] + for j in range(n): + if j != i: + a.append(0) + else: + a.append(1) + return tuple(a) + + coeffs = [] + for deriv_ind in range(n_derivs): + coeffs.append(sp.Poly(poly.coeff_monomial(tup(deriv_ind)), + var[0]).all_coeffs()[::-1]) + + return coeffs + + +def auto_product_rule_single_term(p, m, var): + """ + Input: + - *p*, degree of monomial + - *m*, order of derivative + + Output: + - recurrence relation for ODE math:`x_0^p f^(m)(x_0)` + """ + n = sp.symbols("n") + s = sp.Function("s") + result = 0 + for i in range(p+1): + temp = 1 + for j in range(i): + temp *= (n - j) + # pylint: disable=not-callable + temp *= math.comb(p, i) * s(n-i+m) * var[0]**(p-i) + result += temp + return result + + +def get_recurrence_parametric_from_coeffs(coeffs, var): + """ + Input: + - *coeffs* + + Output: + - recurrence relation for full ODE + """ + final_recurrence = 0 + for m, _ in enumerate(coeffs): + for p, _ in enumerate(coeffs[m]): + final_recurrence += coeffs[m][p] * auto_product_rule_single_term(p, + m, var) + return final_recurrence + + +def get_recurrence_parametric_from_pde(pde): + """ + Input: + - *pde*, representing a scalar PDE. + + Output: + - r, a recurrence relation for a coefficients of a Line-Taylor expansion of + the point potential. + + Description: Takes in a pde, outputs a recurrence. + """ + ode_in_r, var, n_derivs = get_pde_in_recurrence_form(pde) + ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() + ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() + f_x_derivs = _make_sympy_vec("f_x", n_derivs) + poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) + coeffs = compute_coefficients_of_poly_parametric(poly, n_derivs, var) + return get_recurrence_parametric_from_coeffs(coeffs, var) + + def test_recurrence_finder_laplace(): """ Description: Test the recurrence relation produced for the Laplace 2D point @@ -361,7 +460,7 @@ def test_recurrence_finder_laplace_three_d(): """ w = make_identity_diff_op(3) laplace3d = laplacian(w) - r, order = get_recurrence_from_pde(laplace3d) + r, _ = get_recurrence_from_pde(laplace3d) i = sp.symbols("i") s = sp.Function("s") @@ -378,5 +477,5 @@ def coeff_laplace_three_d(i): for i in range(d-2, d+2): r_sub = r_sub.subs(s(i), coeff_laplace_three_d(i)) r_sub = r_sub.simplify() - assert order == 4 + #assert order == 4 assert r_sub == 0 From ba6d40840d14361af33400ee97f2087fa8518dfe Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 10 Jul 2024 09:30:45 -0700 Subject: [PATCH 020/143] Update recurrence.py --- sumpy/recurrence.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index d4ce2d7a..f4173da8 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -377,6 +377,7 @@ def auto_product_rule_single_term(p, m, var): Output: - recurrence relation for ODE math:`x_0^p f^(m)(x_0)` + s(i) """ n = sp.symbols("n") s = sp.Function("s") @@ -394,12 +395,14 @@ def auto_product_rule_single_term(p, m, var): def get_recurrence_parametric_from_coeffs(coeffs, var): """ Input: - - *coeffs* + - *coeffs*, take the ODE Output: - recurrence relation for full ODE """ final_recurrence = 0 + #Outer loop is derivative direction + #Inner is polynomial order of x_0 for m, _ in enumerate(coeffs): for p, _ in enumerate(coeffs[m]): final_recurrence += coeffs[m][p] * auto_product_rule_single_term(p, From 01a4d06f1d9a9f977603b11ca36d5b60a3293770 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 10 Jul 2024 10:09:04 -0700 Subject: [PATCH 021/143] Added tests for parametric --- sumpy/recurrence.py | 205 +++++--------------------------------------- 1 file changed, 23 insertions(+), 182 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index f4173da8..5a1383cb 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -2,9 +2,6 @@ .. autofunction:: get_pde_in_recurrence_form .. autofunction:: generate_nd_derivative_relations .. autofunction:: ode_in_r_to_x -.. autofunction:: compute_poly_in_deriv -.. autofunction:: compute_coefficients_of_poly -.. autofunction:: compute_recurrence_relation .. autofunction:: get_recurrence_parametric_from_pde .. autofunction:: get_recurrence_parametric_from_coeffs .. autofunction:: auto_product_rule_single_term @@ -36,7 +33,7 @@ THE SOFTWARE. """ import math -from typing import Sequence, Tuple +from typing import Tuple import numpy as np import sympy as sp from pytools.obj_array import make_obj_array @@ -175,163 +172,6 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: return ode_in_x -def compute_poly_in_deriv(ode_in_x: sp.Expr, n_derivs: int, var: - np.ndarray) -> sp.polys.polytools.Poly: - """ - Input: - - *ode_in_x*, a linear combination of f, f_x, f_{xx}, ... with coefficients - as rational functions in var[0], var[1], ... - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present - - Output: - - a polynomial in math:`f, f_x, f_{xx}, ...` (in code represented as - math:`f_{x0}, f_{x1}, f_{x2}`) with coefficients as polynomials in - math:`\\delta_x` where - ammath:`delta_x = x_0 - c_0` that represents the ''shifted ODE'' - i.e. - the ODE where we substitute all occurences of math:`delta_x` with - math:`x_0 - c_0` - - Description: Converts an ode in x, to a polynomial in f, f_x, f_{xx}, ..., - with coefficients as polynomials in delta_x = x_0 - c_0. - """ - #Note that generate_nd_derivative_relations will at worst put some power of - #$x_0^order$ in the denominator. To clear - #the denominator we can probably? just multiply by x_0^order. - delta_x = sp.symbols("delta_x") - c_vec = _make_sympy_vec("c", len(var)) - ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() - ode_in_x_shifted = ode_in_x_cleared.subs(var[0], delta_x + c_vec[0]).simplify() - f_x_derivs = _make_sympy_vec("f_x", n_derivs) - poly = sp.Poly(ode_in_x_shifted, *f_x_derivs) - return poly - - -def compute_coefficients_of_poly(poly: sp.polys.polytools.Poly, - n_derivs: int) -> list: - """ - Input: - - *poly*, a polynomial in sympy variables math:`f_{x0}, f_{x1}, ...`, - (recall that this corresponds to math:`f_0, f_x, f_{xx}, ...`) with - coefficients that are polynomials in delta_x where poly represents the - ''shifted ODE'' i.e. we substitute all occurences of math:`\\delta_x` - with math:`x_0 - c_0` - - Output: - - coeffs, a 2d array, each row giving the coefficient of - math:`f_0, f_x, f_{xx}, ...`, each entry in the row giving the - coefficients of the polynomial in math:`\\delta_x` - - Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are - polynomials in delta_x and outputs a 2d array for easy access to the - coefficients based on their degree as a polynomial in delta_x. - """ - delta_x = sp.symbols("delta_x") - - #Returns coefficients in lexographic order. So lowest order first - def tup(i, n=n_derivs): - a = [] - for j in range(n): - if j != i: - a.append(0) - else: - a.append(1) - return tuple(a) - - coeffs = [sp.Poly(poly.coeff_monomial(tup(deriv_ind)), delta_x).all_coeffs() - for deriv_ind in range(n_derivs)] - - return coeffs - - -def compute_recurrence_relation(coeffs, n_derivs, var): - """ - Input: - - *coeffs* a 2d array that gives access to the coefficients of poly, where - poly represents the coefficients of the ''shifted ODE'' - (''shifted ODE'' = we substitute all occurences of delta_x with x_0 - c_0) - based on their degree as a polynomial in delta_x) - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present - - Output: - - r, a recurrence statement that equals 0 where s(i) is the ith coefficient - of the Taylor polynomial for our point potential. - - Description: Takes in coeffs which represents our ``shifted ode in x" - (i.e. ode_in_x with coefficients in delta_x) and outputs a recurrence relation - for the point potential. - """ - i = sp.symbols("i") - s = sp.Function("s") - c_vec = _make_sympy_vec("c", len(var)) - - #Compute symbolic derivative - def hc_diff(i, n): - retme = 1 - for j in range(n): - retme *= (i-j) - return retme - - #We are differentiating deriv_ind, which shifts down deriv_ind. - #Do this for one deriv_ind - r = 0 - for deriv_ind in range(n_derivs): - part_of_r = 0 - pow_delta = 0 - for j in range(len(coeffs[deriv_ind])-1, -1, -1): - shift = pow_delta - deriv_ind + 1 - pow_delta += 1 - # pylint: disable=not-callable - temp = coeffs[deriv_ind][j] * s(i) * hc_diff(i, deriv_ind) - part_of_r += temp.subs(i, i-shift) - r += part_of_r - - for j in range(1, len(var)): - r = r.subs(var[j], c_vec[j]) - - return r.simplify() - - -def get_recurrence_order(coeffs: Sequence[Sequence[sp.Expr]]) -> int: - """ - Input: - - *coeffs*, represents coefficients of the normalized, - center-shifted ODE (see above) - with the outer sequence reflecting the order of the derivative, - and the second expansion reflecting expansion in the shift - math:`\\delta_x` - Output: - - true_order, the order of the recurrence relation that will be produced. - """ - orders = { - i - j - for i, deriv_order_coeff in enumerate(coeffs) - for j, shift_coeff in enumerate(deriv_order_coeff) - if shift_coeff - } - return max(orders)-min(orders)+1 - - -def get_recurrence_from_pde(pde): - """ - Input: - - *pde*, representing a scalar PDE. - - Output: - - r, a recurrence relation for a coefficients of a Line-Taylor expansion of - the point potential. - - Description: Takes in a pde, outputs a recurrence. - """ - ode_in_r, var, n_derivs = get_pde_in_recurrence_form(pde) - ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() - poly = compute_poly_in_deriv(ode_in_x, n_derivs, var) - coeffs = compute_coefficients_of_poly(poly, n_derivs) - r = compute_recurrence_relation(coeffs, n_derivs, var) - return r, get_recurrence_order(coeffs) - - def compute_coefficients_of_poly_parametric(poly, n_derivs, var): """ Input: @@ -437,23 +277,25 @@ def test_recurrence_finder_laplace(): """ w = make_identity_diff_op(2) laplace2d = laplacian(w) - r, order = get_recurrence_from_pde(laplace2d) - i = sp.symbols("i") + r = get_recurrence_parametric_from_pde(laplace2d) + n = sp.symbols("n") s = sp.Function("s") - def coeff_laplace(i): + def deriv_laplace(i): x, y = sp.symbols("x,y") - c_vec = _make_sympy_vec("c", 2) + var = _make_sympy_vec("x", 2) true_f = sp.log(sp.sqrt(x**2 + y**2)) - return sp.diff(true_f, x, i).subs(x, c_vec[0]).subs( - y, c_vec[1])/math.factorial(i) + return sp.diff(true_f, x, i).subs(x, var[0]).subs( + y, var[1]) d = 6 # pylint: disable=not-callable - val = r.subs(i, d).subs(s(d+1), coeff_laplace(d+1)).subs( - s(d), coeff_laplace(d)).subs(s(d-1), coeff_laplace(d-1)).subs( - s(d-2), coeff_laplace(d-2)).simplify() - assert order == 4 - assert val == 0 + + r_sub = r.subs(n, d) + for i in range(d-1, d+3): + r_sub = r_sub.subs(s(i), deriv_laplace(i)) + r_sub = r_sub.simplify() + + assert r_sub == 0 def test_recurrence_finder_laplace_three_d(): @@ -463,22 +305,21 @@ def test_recurrence_finder_laplace_three_d(): """ w = make_identity_diff_op(3) laplace3d = laplacian(w) - r, _ = get_recurrence_from_pde(laplace3d) - i = sp.symbols("i") + r = get_recurrence_parametric_from_pde(laplace3d) + n = sp.symbols("n") s = sp.Function("s") - def coeff_laplace_three_d(i): + def deriv_laplace_three_d(i): x, y, z = sp.symbols("x,y,z") - c_vec = _make_sympy_vec("c", 3) + var = _make_sympy_vec("x", 3) true_f = 1/(sp.sqrt(x**2 + y**2 + z**2)) - return sp.diff(true_f, x, i).subs(x, c_vec[0]).subs( - y, c_vec[1]).subs(z, c_vec[2])/math.factorial(i) + return sp.diff(true_f, x, i).subs(x, var[0]).subs( + y, var[1]).subs(z, var[2]) d = 6 # pylint: disable=not-callable - r_sub = r.subs(i, d) - for i in range(d-2, d+2): - r_sub = r_sub.subs(s(i), coeff_laplace_three_d(i)) + r_sub = r.subs(n, d) + for i in range(d-1, d+3): + r_sub = r_sub.subs(s(i), deriv_laplace_three_d(i)) r_sub = r_sub.simplify() - #assert order == 4 assert r_sub == 0 From 2c912b9d50545d48fdd70f6991d507839ee9dd6b Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 10 Jul 2024 10:22:27 -0700 Subject: [PATCH 022/143] Add function skeletons --- sumpy/recurrence.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 5a1383cb..34ba4129 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -172,7 +172,8 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: return ode_in_x -def compute_coefficients_of_poly_parametric(poly, n_derivs, var): +def compute_coefficients_of_poly_parametric(poly: sp.Poly, n_derivs: int, + var: np.ndarray) -> list: """ Input: - *poly*, a polynomial in sympy variables math:`f_{x0}, f_{x1}, ...`, @@ -209,7 +210,7 @@ def tup(i, n=n_derivs): return coeffs -def auto_product_rule_single_term(p, m, var): +def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: """ Input: - *p*, degree of monomial @@ -232,12 +233,12 @@ def auto_product_rule_single_term(p, m, var): return result -def get_recurrence_parametric_from_coeffs(coeffs, var): +def get_recurrence_parametric_from_coeffs(coeffs: list, var: np.ndarray) -> sp.Expr: """ - Input: + ## Input: - *coeffs*, take the ODE - Output: + ## Output: - recurrence relation for full ODE """ final_recurrence = 0 @@ -250,7 +251,7 @@ def get_recurrence_parametric_from_coeffs(coeffs, var): return final_recurrence -def get_recurrence_parametric_from_pde(pde): +def get_recurrence_parametric_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: """ Input: - *pde*, representing a scalar PDE. From 92d3bec0920a8a3e24c84f1c3e85c3d77f349c4f Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 10 Jul 2024 11:23:09 -0700 Subject: [PATCH 023/143] Remove all documentation --- sumpy/recurrence.py | 111 -------------------------------------------- 1 file changed, 111 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 34ba4129..561fa24c 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -50,32 +50,6 @@ def _make_sympy_vec(name, n): def get_pde_in_recurrence_form(pde: LinearPDESystemOperator) -> Tuple[ sp.Expr, np.ndarray, int ]: - """ - Input: - - *pde*, representing a scalar PDE. - - Output: - - ode_in_r, an ode in r which the point-potential corresponding to the PDE - satisfies away from the origin. We assume that the point-potential has - radial symmetry. - Note: to represent :math:`f, f_r, f_{rr}`, we use the sympy variables - f_{r0}, f_{r1}, ... So ode_in_r is a linear combination of the - sympy variables f_{r0}, f_{r1}, ... - - var, represents the variables for the input space: [x0, x1, ...] - - n_derivs, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present (the reason this is called n_derivs - since if we have a second order PDE for example then we might see - :math:`f, f_{r}, f_{rr}` in our ODE in r, which is technically 3 terms - since we count the 0th order derivative f as a "derivative." If this - doesn't make sense just know that n_derivs is the order the of the input - sumpy PDE + 1) - - Description: We assume we are handed a system of 1 sumpy PDE (pde) and output - the pde in a way that allows us to easily replace derivatives with respect to r. - In other words we output a linear combination of sympy variables - f_{r0}, f_{r1}, ... (which represents f, f_r, f_{rr} respectively) - to represent our ODE in r for the point potential. - """ if len(pde.eqs) != 1: raise ValueError("PDE must be scalar") @@ -115,21 +89,6 @@ def compute_term(a, t): def generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: - """ - Input: - - *var*, a sympy vector of variables called [x0, x1, ...] - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present - - Output: - - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... - using the chain rule - (f, f_x, f_{xx}, ... in code is represented as f_{x0}, f_{x1}, f_{x2} and - f, f_r, f_{rr}, ... in code is represented as f_{r0}, f_{r1}, f_{r2}) - - Description: Using the chain rule outputs a vector that tells us how to - write f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... - """ f_r_derivs = _make_sympy_vec("f_r", n_derivs) f_x_derivs = _make_sympy_vec("f_x", n_derivs) f = sp.Function("f") @@ -147,23 +106,6 @@ def generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: - """ - Input: - - *ode_in_r*, a linear combination of f, f_r, f_{rr}, ... - (in code represented as f_{r0}, f_{r1}, f_{r2}) - with coefficients as RATIONAL functions in var[0], var[1], ... - - *var*, array of sympy variables [x_0, x_1, ...] - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present - - Output: - - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as - rational functions in var[0], var[1], ... - - Description: Translates an ode in the variable r into an ode in the variable x - by substituting f, f_r, f_{rr}, ... as a linear combination of - f, f_x, f_{xx}, ... using the chain rule - """ subme = generate_nd_derivative_relations(var, n_derivs) ode_in_x = ode_in_r f_r_derivs = _make_sympy_vec("f_r", n_derivs) @@ -174,25 +116,6 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: def compute_coefficients_of_poly_parametric(poly: sp.Poly, n_derivs: int, var: np.ndarray) -> list: - """ - Input: - - *poly*, a polynomial in sympy variables math:`f_{x0}, f_{x1}, ...`, - (recall that this corresponds to math:`f_0, f_x, f_{xx}, ...`) with - coefficients that are polynomials in math:`x_0` where poly represents the - TRUE ODE. - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present - - *var*, array of sympy variables [x_0, x_1, ...] - - Output: - - coeffs, a 2d array, each row giving the coefficient of - math:`f_0, f_x, f_{xx}, ...`, each entry in the row giving the - coefficients of the polynomial in math:`x_0` - - Description: Takes in a polynomial in f_{x0}, f_{x1}, ..., w/coeffs that are - polynomials in math:`x_0` and outputs a 2d array for easy access to the - coefficients based on their degree as a polynomial in math:`x_0`. - """ def tup(i, n=n_derivs): a = [] for j in range(n): @@ -211,15 +134,6 @@ def tup(i, n=n_derivs): def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: - """ - Input: - - *p*, degree of monomial - - *m*, order of derivative - - Output: - - recurrence relation for ODE math:`x_0^p f^(m)(x_0)` - s(i) - """ n = sp.symbols("n") s = sp.Function("s") result = 0 @@ -234,13 +148,6 @@ def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: def get_recurrence_parametric_from_coeffs(coeffs: list, var: np.ndarray) -> sp.Expr: - """ - ## Input: - - *coeffs*, take the ODE - - ## Output: - - recurrence relation for full ODE - """ final_recurrence = 0 #Outer loop is derivative direction #Inner is polynomial order of x_0 @@ -252,16 +159,6 @@ def get_recurrence_parametric_from_coeffs(coeffs: list, var: np.ndarray) -> sp.E def get_recurrence_parametric_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: - """ - Input: - - *pde*, representing a scalar PDE. - - Output: - - r, a recurrence relation for a coefficients of a Line-Taylor expansion of - the point potential. - - Description: Takes in a pde, outputs a recurrence. - """ ode_in_r, var, n_derivs = get_pde_in_recurrence_form(pde) ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() @@ -272,10 +169,6 @@ def get_recurrence_parametric_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: def test_recurrence_finder_laplace(): - """ - Description: Test the recurrence relation produced for the Laplace 2D point - potential. - """ w = make_identity_diff_op(2) laplace2d = laplacian(w) r = get_recurrence_parametric_from_pde(laplace2d) @@ -300,10 +193,6 @@ def deriv_laplace(i): def test_recurrence_finder_laplace_three_d(): - """ - Description: Checks that the recurrence finder works correctly for the Laplace - 3D point potential. - """ w = make_identity_diff_op(3) laplace3d = laplacian(w) r = get_recurrence_parametric_from_pde(laplace3d) From 8f6e2487bfed9c9a2c0d752eb2688db65a10f424 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 10 Jul 2024 12:08:38 -0700 Subject: [PATCH 024/143] Added documentation --- sumpy/recurrence.py | 96 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 561fa24c..04d7f489 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -50,6 +50,27 @@ def _make_sympy_vec(name, n): def get_pde_in_recurrence_form(pde: LinearPDESystemOperator) -> Tuple[ sp.Expr, np.ndarray, int ]: + """ + ## Input + - *pde*, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` such that + pde.eqs == 1 + ## Output + - ode_in_r, an ODE that the point-potential satifies w/respect to radial variable + - var, an array representing the input coordinates + - n_derivs, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present (the reason this is called n_derivs + since if we have a second order PDE for example then we might see + :math:`f, f_{r}, f_{rr}` in our ODE in r, which is technically 3 terms + since we count the 0th order derivative f as a "derivative." If this + doesn't make sense just know that n_derivs is the order the of the input + sumpy PDE + 1) + ## Description + Takes as input a scalar pde represented as the type + :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator`. Assumes that the scalar + pde has coefficients that are polynomial in the input coordinates. Then assumes + that the PDE is satisfied by a point-potential with radial symmetry and comes up + with an ODE in the radial variable that the point-potential satisfies. + """ if len(pde.eqs) != 1: raise ValueError("PDE must be scalar") @@ -89,6 +110,20 @@ def compute_term(a, t): def generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: + """ + ## Input + - *var*, a sympy vector of variables called [x0, x1, ...] + - *n_derivs*, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present + ## Output + - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... + using the chain rule + (f, f_x, f_{xx}, ... in code is represented as f_{x0}, f_{x1}, f_{x2} and + f, f_r, f_{rr}, ... in code is represented as f_{r0}, f_{r1}, f_{r2}) + ## Description + Using the chain rule outputs a vector that tells us how to + write f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... + """ f_r_derivs = _make_sympy_vec("f_r", n_derivs) f_x_derivs = _make_sympy_vec("f_x", n_derivs) f = sp.Function("f") @@ -106,6 +141,22 @@ def generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: + """ + ## Input + - *ode_in_r*, a linear combination of f, f_r, f_{rr}, ... + (in code represented as f_{r0}, f_{r1}, f_{r2}) + with coefficients as RATIONAL functions in var[0], var[1], ... + - *var*, array of sympy variables [x_0, x_1, ...] + - *n_derivs*, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present + ## Output + - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as + rational functions in var[0], var[1], ... + ## Description + Translates an ode in the variable r into an ode in the variable x + by substituting f, f_r, f_{rr}, ... as a linear combination of + f, f_x, f_{xx}, ... using the chain rule. + """ subme = generate_nd_derivative_relations(var, n_derivs) ode_in_x = ode_in_r f_r_derivs = _make_sympy_vec("f_r", n_derivs) @@ -116,6 +167,21 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: def compute_coefficients_of_poly_parametric(poly: sp.Poly, n_derivs: int, var: np.ndarray) -> list: + """ + ## Input + - *poly*, the original ODE for our point-potential as a polynomial + in f_{x0}, f_{x1}, f_{x2}, etc. + - *n_derivs*, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present + - *var*, array of sympy variables [x_0, x_1, ...] + ## Output + - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as + rational functions in var[0], var[1], ... + ## Description + Translates an ode in the variable r into an ode in the variable x + by substituting f, f_r, f_{rr}, ... as a linear combination of + f, f_x, f_{xx}, ... using the chain rule. + """ def tup(i, n=n_derivs): a = [] for j in range(n): @@ -148,6 +214,20 @@ def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: def get_recurrence_parametric_from_coeffs(coeffs: list, var: np.ndarray) -> sp.Expr: + """ + ## Input + - *coeffs*, a 2D array with elements :math:`b_{ij}`. + If we write the coefficients of our ODE for the point-potential as a + polynomial w/respect to f_{x0}, f_{x1}, f_{x2}, ... we can call these + coefficients :math:`a_0, a_1, a_2, ...` Since each coefficient :math:`a_i` is a + polynomial in :math:`x_0`, we can write a_i as a polynomial in :math:`x_0^j`, + and call these coefficients :math:`b_{ij}`. + + - *var*, array of sympy variables [x_0, x_1, ...] + ## Output + - final_recurrence, the recurrence relation for derivatives of our + point-potential. + """ final_recurrence = 0 #Outer loop is derivative direction #Inner is polynomial order of x_0 @@ -159,6 +239,14 @@ def get_recurrence_parametric_from_coeffs(coeffs: list, var: np.ndarray) -> sp.E def get_recurrence_parametric_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: + """ + ## Input + - *pde*, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` such that + pde.eqs == 1 + ## Output + - final_recurrence, the recurrence relation for derivatives of our + point-potential. + """ ode_in_r, var, n_derivs = get_pde_in_recurrence_form(pde) ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() @@ -169,6 +257,10 @@ def get_recurrence_parametric_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: def test_recurrence_finder_laplace(): + """ + ## Description + Tests our recurrence relation generator for Lapalace 2D. + """ w = make_identity_diff_op(2) laplace2d = laplacian(w) r = get_recurrence_parametric_from_pde(laplace2d) @@ -193,6 +285,10 @@ def deriv_laplace(i): def test_recurrence_finder_laplace_three_d(): + """ + ## Description + Tests our recurrence relation generator for Laplace 3D. + """ w = make_identity_diff_op(3) laplace3d = laplacian(w) r = get_recurrence_parametric_from_pde(laplace3d) From d9b6777460c33e64488cee86ffa86d22faae3519 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 10 Jul 2024 12:28:16 -0700 Subject: [PATCH 025/143] Update recurrence.py --- sumpy/recurrence.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 04d7f489..2bccd7a4 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -216,17 +216,17 @@ def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: def get_recurrence_parametric_from_coeffs(coeffs: list, var: np.ndarray) -> sp.Expr: """ ## Input - - *coeffs*, a 2D array with elements :math:`b_{ij}`. - If we write the coefficients of our ODE for the point-potential as a - polynomial w/respect to f_{x0}, f_{x1}, f_{x2}, ... we can call these - coefficients :math:`a_0, a_1, a_2, ...` Since each coefficient :math:`a_i` is a - polynomial in :math:`x_0`, we can write a_i as a polynomial in :math:`x_0^j`, - and call these coefficients :math:`b_{ij}`. - + - *coeffs*, + Consider an ODE obeyed by a function f that can be expressed in the following + form: :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \\cdots) \\partial_{x_0}^0 f + + (b_{10} x_0^0 + b_{11} x_0^1 +\\cdots) \\partial_x^1 f`. coeffs is a sequence + of sequences, with the outer sequence iterating over derivative orders, and + each inner sequence iterating over powers of :math:`x_0`, so that, in terms of + the above form, coeffs is [[b_00, b_01, ...], [b_10, b_11, ...], ...] - *var*, array of sympy variables [x_0, x_1, ...] ## Output - - final_recurrence, the recurrence relation for derivatives of our - point-potential. + - final_recurrence, the recurrence relation for derivatives of our + point-potential. """ final_recurrence = 0 #Outer loop is derivative direction From 7102511da14defb5a4e71e2974b428f0767befd4 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 10 Jul 2024 12:40:37 -0700 Subject: [PATCH 026/143] Update recurrence.py --- sumpy/recurrence.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 2bccd7a4..f0f7b85d 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -200,6 +200,23 @@ def tup(i, n=n_derivs): def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: + """ + ## Description + We assume that we are given the expression :math:`x_0^p f^(m)(x_0)`. We then + output the nth order derivative of the expression where n is a symbolic variable. + We let :math:`s(i)` represent the ith order derivative of f when + we output the final result. + ## Input + - *p*, see description + - *m*, see description + - *var*, array of sympy variables [x_0, x_1, ...] + ## Output + - A sympy expression is output. + We let :math:`s(i)` represent the ith order derivative of f when + we output the final result. We let n represent a symbolic variable + corresponding to how many derivatives of the original expression were + taken. + """ n = sp.symbols("n") s = sp.Function("s") result = 0 From b3d74f892b060c39ccc7551d16fe3894b1b25e1d Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 10 Jul 2024 12:42:05 -0700 Subject: [PATCH 027/143] Update recurrence.py --- sumpy/recurrence.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index f0f7b85d..e45ea385 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -211,7 +211,8 @@ def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: - *m*, see description - *var*, array of sympy variables [x_0, x_1, ...] ## Output - - A sympy expression is output. + - A sympy expression is output corresponding to the nth order derivative of the + input expression. We let :math:`s(i)` represent the ith order derivative of f when we output the final result. We let n represent a symbolic variable corresponding to how many derivatives of the original expression were From c2432dd868354987bf11e978f971e51b37a180e8 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 12 Jul 2024 14:26:45 -0700 Subject: [PATCH 028/143] Slight mistake in documentation --- sumpy/recurrence.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index e45ea385..4788eabc 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -145,7 +145,8 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: ## Input - *ode_in_r*, a linear combination of f, f_r, f_{rr}, ... (in code represented as f_{r0}, f_{r1}, f_{r2}) - with coefficients as RATIONAL functions in var[0], var[1], ... + with coefficients that are polynomials in var[0], var[1], ... + divided by some power of var[0] - *var*, array of sympy variables [x_0, x_1, ...] - *n_derivs*, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present @@ -170,7 +171,8 @@ def compute_coefficients_of_poly_parametric(poly: sp.Poly, n_derivs: int, """ ## Input - *poly*, the original ODE for our point-potential as a polynomial - in f_{x0}, f_{x1}, f_{x2}, etc. + in f_{x0}, f_{x1}, f_{x2}, etc. with polynomial coefficients + in var[0], var[1], ... - *n_derivs*, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present - *var*, array of sympy variables [x_0, x_1, ...] From a174f462154124320174e4f5a5856b4d26bb3eda Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 14 Jul 2024 14:43:41 -0700 Subject: [PATCH 029/143] Added narrative --- sumpy/recurrence.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 4788eabc..3d233ba2 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -46,6 +46,20 @@ def _make_sympy_vec(name, n): return make_obj_array([sp.Symbol(f"{name}{i}") for i in range(n)]) +""" +Overall Narrative: +First we take an elliptic PDE represented as a sumpy +:class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` type. We then +use get_pde_in_recurrence_form to get an ODE in the radial variable +that the point-potential satisfies assuming radial symmetry of the point-potential. + +We then take the ODE in the radial variable that we get and use the chain-rule to +convert it into a ODE in a single spatial variable using ode_in_r_to_x. We then +collect the coefficients of the ODE using compute_coefficients_of_poly_parametric +and then use these coefficients to finally compute the recurrence relation via +get_recurrence_parametric_from_pde. +""" + def get_pde_in_recurrence_form(pde: LinearPDESystemOperator) -> Tuple[ sp.Expr, np.ndarray, int From 0d3728b0ca236a4dc4b5a3c5a1ead94d2c06779a Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 14 Jul 2024 14:44:42 -0700 Subject: [PATCH 030/143] Flake - narrative --- sumpy/recurrence.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 3d233ba2..f29d9fa9 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -46,16 +46,17 @@ def _make_sympy_vec(name, n): return make_obj_array([sp.Symbol(f"{name}{i}") for i in range(n)]) + """ Overall Narrative: -First we take an elliptic PDE represented as a sumpy +First we take an elliptic PDE represented as a sumpy :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` type. We then use get_pde_in_recurrence_form to get an ODE in the radial variable that the point-potential satisfies assuming radial symmetry of the point-potential. We then take the ODE in the radial variable that we get and use the chain-rule to convert it into a ODE in a single spatial variable using ode_in_r_to_x. We then -collect the coefficients of the ODE using compute_coefficients_of_poly_parametric +collect the coefficients of the ODE using compute_coefficients_of_poly_parametric and then use these coefficients to finally compute the recurrence relation via get_recurrence_parametric_from_pde. """ From 175cbe97aa243f56458521ff52098b56552fa200 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 14 Jul 2024 23:23:22 -0700 Subject: [PATCH 031/143] Added helmholtz unit test --- sumpy/recurrence.py | 55 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index f29d9fa9..608ba99d 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -344,3 +344,58 @@ def deriv_laplace_three_d(i): r_sub = r_sub.subs(s(i), deriv_laplace_three_d(i)) r_sub = r_sub.simplify() assert r_sub == 0 + + +def test_recurrence_finder_helmholtz_three_d(): + """ + ## Description + Tests our recurrence relation generator for Helmhotlz 3D. + """ + #We are creating the recurrence relation for helmholtz3d which + #seems to be an order 5 recurrence relation + w = make_identity_diff_op(3) + helmholtz3d = laplacian(w) + w + r = get_recurrence_parametric_from_pde(helmholtz3d) + + #We create that function that gives the derivatives of the point + # potential for helmholtz + #Remember! Our point-source was placed at the origin and we + # were performing a LT expansion at x_0 + def deriv_helmholtz_three_d(i, s_loc): + s_x = s_loc[0] + s_y = s_loc[1] + s_z = s_loc[2] + x, y, z = sp.symbols("x,y,z") + true_f = sp.exp(1j * sp.sqrt(x**2 + y**2 + z**2) + ) / (sp.sqrt(x**2 + y**2 + z**2)) + return sp.diff(true_f, x, i).subs(x, s_x).subs( + y, s_y).subs(z, s_z) + + #Create relevant symbols + var = _make_sympy_vec("x", 3) + n = sp.symbols("n") + s = sp.Function("s") + + #Create random source location + s_loc = np.random.rand(3) + + #Create random order to check + d = np.random.randint(0, 5) + + #Substitute random location into recurrence relation and value of n = d + r_loc = r.subs(var[0], s_loc[0]) + r_loc = r_loc.subs(var[1], s_loc[1]) + r_loc = r_loc.subs(var[2], s_loc[2]) + r_sub = r_loc.subs(n, d) + + #Checking that the recurrence holds to some machine epsilon + for i in range(max(d-3, 0), d+3): + # pylint: disable=not-callable + r_sub = r_sub.subs(s(i), deriv_helmholtz_three_d(i, s_loc)) + err = abs(abs(r_sub).evalf()) + print(err) + assert err <= 1e-10 + + + + From d35e3811a769df47d8a06786175648324fe52966 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Mon, 15 Jul 2024 16:05:02 -0500 Subject: [PATCH 032/143] Documentation tweaks --- sumpy/recurrence.py | 107 +++++++++++++++++++++++--------------------- 1 file changed, 56 insertions(+), 51 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 608ba99d..ba4fd461 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -1,13 +1,34 @@ -""" -.. autofunction:: get_pde_in_recurrence_form -.. autofunction:: generate_nd_derivative_relations +r""" +With the functionality in this module, we aim to compute a recurrence for +one-dimensional derivatives of functions :math:`f:\mathbb R^n \to \mathbb R` +for functions :math:`f` satisfying two assumptions: + +- :math:`f` satisfies a PDE is linear and has coefficients polynomial + in the coordinates. +- :math:`f` only depends on the radius :math:`r`, + i.e. :math:`f(\boldsymbol x)=f(|\boldsymbol x|_2)`. + +This process proceeds in multiple steps: + +- Convert from the PDE to an ODE in :math:`r`, using :func:`pde_to_ode_in_r`. +- Convert from an ODE in :math:`r` to one in :math:`x`, using :func:`ode_in_r_to_x`. +- Sort general-form ODE in :math:`x` into a coefficient array, using + :func:`ode_in_x_to_coeff_array`. +- Finally, get an expression for the recurrence, using + :func:`recurrence_from_coeff_array`. + +The whole process can be automated using :func:`recurrence_from_pde`. + +.. autofunction:: pde_to_ode_in_r .. autofunction:: ode_in_r_to_x -.. autofunction:: get_recurrence_parametric_from_pde -.. autofunction:: get_recurrence_parametric_from_coeffs -.. autofunction:: auto_product_rule_single_term -.. autofunction:: compute_coefficients_of_poly_parametric +.. autofunction:: ode_in_x_to_coeff_array +.. autofunction:: recurrence_from_coeff_array +.. autofunction:: recurrence_from_pde """ +from __future__ import annotations + + __copyright__ = """ Copyright (C) 2024 Hirish Chandrasekaran Copyright (C) 2024 Andreas Kloeckner @@ -33,7 +54,6 @@ THE SOFTWARE. """ import math -from typing import Tuple import numpy as np import sympy as sp from pytools.obj_array import make_obj_array @@ -47,44 +67,29 @@ def _make_sympy_vec(name, n): return make_obj_array([sp.Symbol(f"{name}{i}") for i in range(n)]) -""" -Overall Narrative: -First we take an elliptic PDE represented as a sumpy -:class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` type. We then -use get_pde_in_recurrence_form to get an ODE in the radial variable -that the point-potential satisfies assuming radial symmetry of the point-potential. - -We then take the ODE in the radial variable that we get and use the chain-rule to -convert it into a ODE in a single spatial variable using ode_in_r_to_x. We then -collect the coefficients of the ODE using compute_coefficients_of_poly_parametric -and then use these coefficients to finally compute the recurrence relation via -get_recurrence_parametric_from_pde. -""" - - -def get_pde_in_recurrence_form(pde: LinearPDESystemOperator) -> Tuple[ +def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ sp.Expr, np.ndarray, int ]: """ - ## Input - - *pde*, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` such that - pde.eqs == 1 - ## Output - - ode_in_r, an ODE that the point-potential satifies w/respect to radial variable - - var, an array representing the input coordinates - - n_derivs, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present (the reason this is called n_derivs - since if we have a second order PDE for example then we might see - :math:`f, f_{r}, f_{rr}` in our ODE in r, which is technically 3 terms - since we count the 0th order derivative f as a "derivative." If this - doesn't make sense just know that n_derivs is the order the of the input - sumpy PDE + 1) - ## Description Takes as input a scalar pde represented as the type :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator`. Assumes that the scalar pde has coefficients that are polynomial in the input coordinates. Then assumes that the PDE is satisfied by a point-potential with radial symmetry and comes up with an ODE in the radial variable that the point-potential satisfies. + + :arg pde: must satisfy ``pde.eqs == 1``` + + :returns: a tuple ``(ode_in_r, var, n_derivs)``, where + - *ode_in_r* is the ODE satisfied by :math:`f`. + - var, an array representing the input coordinates + (maybe give an example?) + - n_derivs, the order of the original PDE + 1, i.e. the number of + derivatives of f that may be present (the reason this is called n_derivs + since if we have a second order PDE for example then we might see + :math:`f, f_{r}, f_{rr}` in our ODE in r, which is technically 3 terms + since we count the 0th order derivative f as a "derivative." If this + doesn't make sense just know that n_derivs is the order the of the input + sumpy PDE + 1) """ if len(pde.eqs) != 1: raise ValueError("PDE must be scalar") @@ -124,7 +129,7 @@ def compute_term(a, t): return ode_in_r, var, n_derivs -def generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: +def _generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: """ ## Input - *var*, a sympy vector of variables called [x0, x1, ...] @@ -173,7 +178,7 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: by substituting f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... using the chain rule. """ - subme = generate_nd_derivative_relations(var, n_derivs) + subme = _generate_nd_derivative_relations(var, n_derivs) ode_in_x = ode_in_r f_r_derivs = _make_sympy_vec("f_r", n_derivs) for i in range(n_derivs): @@ -181,7 +186,7 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: return ode_in_x -def compute_coefficients_of_poly_parametric(poly: sp.Poly, n_derivs: int, +def ode_in_x_to_coeff_array(poly: sp.Poly, n_derivs: int, var: np.ndarray) -> list: """ ## Input @@ -216,7 +221,7 @@ def tup(i, n=n_derivs): return coeffs -def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: +def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: """ ## Description We assume that we are given the expression :math:`x_0^p f^(m)(x_0)`. We then @@ -248,7 +253,7 @@ def auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: return result -def get_recurrence_parametric_from_coeffs(coeffs: list, var: np.ndarray) -> sp.Expr: +def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: """ ## Input - *coeffs*, @@ -268,12 +273,12 @@ def get_recurrence_parametric_from_coeffs(coeffs: list, var: np.ndarray) -> sp.E #Inner is polynomial order of x_0 for m, _ in enumerate(coeffs): for p, _ in enumerate(coeffs[m]): - final_recurrence += coeffs[m][p] * auto_product_rule_single_term(p, + final_recurrence += coeffs[m][p] * _auto_product_rule_single_term(p, m, var) return final_recurrence -def get_recurrence_parametric_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: +def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: """ ## Input - *pde*, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` such that @@ -282,13 +287,13 @@ def get_recurrence_parametric_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: - final_recurrence, the recurrence relation for derivatives of our point-potential. """ - ode_in_r, var, n_derivs = get_pde_in_recurrence_form(pde) + ode_in_r, var, n_derivs = pde_to_ode_in_r(pde) ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() f_x_derivs = _make_sympy_vec("f_x", n_derivs) poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) - coeffs = compute_coefficients_of_poly_parametric(poly, n_derivs, var) - return get_recurrence_parametric_from_coeffs(coeffs, var) + coeffs = ode_in_x_to_coeff_array(poly, n_derivs, var) + return recurrence_from_coeff_array(coeffs, var) def test_recurrence_finder_laplace(): @@ -298,7 +303,7 @@ def test_recurrence_finder_laplace(): """ w = make_identity_diff_op(2) laplace2d = laplacian(w) - r = get_recurrence_parametric_from_pde(laplace2d) + r = recurrence_from_pde(laplace2d) n = sp.symbols("n") s = sp.Function("s") @@ -326,7 +331,7 @@ def test_recurrence_finder_laplace_three_d(): """ w = make_identity_diff_op(3) laplace3d = laplacian(w) - r = get_recurrence_parametric_from_pde(laplace3d) + r = recurrence_from_pde(laplace3d) n = sp.symbols("n") s = sp.Function("s") @@ -355,7 +360,7 @@ def test_recurrence_finder_helmholtz_three_d(): #seems to be an order 5 recurrence relation w = make_identity_diff_op(3) helmholtz3d = laplacian(w) + w - r = get_recurrence_parametric_from_pde(helmholtz3d) + r = recurrence_from_pde(helmholtz3d) #We create that function that gives the derivatives of the point # potential for helmholtz From c0ffbf78fd48703a2c5bbafd2960b32ff8428844 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 15 Jul 2024 16:12:39 -0700 Subject: [PATCH 033/143] Documentation --- sumpy/recurrence.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index ba4fd461..ac5136bf 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -81,9 +81,8 @@ def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ :returns: a tuple ``(ode_in_r, var, n_derivs)``, where - *ode_in_r* is the ODE satisfied by :math:`f`. - - var, an array representing the input coordinates - (maybe give an example?) - - n_derivs, the order of the original PDE + 1, i.e. the number of + - *var*, represents the sympy vec [x0, x1, ...] corresponding to coordinates + - *n_derivs*, the order of the original PDE + 1, i.e. the number of derivatives of f that may be present (the reason this is called n_derivs since if we have a second order PDE for example then we might see :math:`f, f_{r}, f_{rr}` in our ODE in r, which is technically 3 terms From c13027c4c99623c1215114ee458e547a03436a99 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 17 Jul 2024 10:52:08 -0500 Subject: [PATCH 034/143] Code clarity fixes --- sumpy/recurrence.py | 62 +++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index ac5136bf..e06000ee 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -58,7 +58,7 @@ import sympy as sp from pytools.obj_array import make_obj_array from sumpy.expansion.diff_op import ( - make_identity_diff_op, laplacian, LinearPDESystemOperator) + DerivativeIdentifier, make_identity_diff_op, laplacian, LinearPDESystemOperator) # similar to make_sym_vector in sumpy.symbolic, but returns an object array @@ -70,61 +70,51 @@ def _make_sympy_vec(name, n): def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ sp.Expr, np.ndarray, int ]: - """ - Takes as input a scalar pde represented as the type - :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator`. Assumes that the scalar - pde has coefficients that are polynomial in the input coordinates. Then assumes - that the PDE is satisfied by a point-potential with radial symmetry and comes up - with an ODE in the radial variable that the point-potential satisfies. + r""" + Returns an ODE satisfied by the radial derivatives of a function + :math:`f:\mathbb R^n \to \mathbb R` satisfying + :math:`f(\boldsymbol x)=f(|\boldsymbol x|_2)` and *pde*. - :arg pde: must satisfy ``pde.eqs == 1``` + :arg pde: must satisfy ``pde.eqs == 1``` and have polynomial coefficients. :returns: a tuple ``(ode_in_r, var, n_derivs)``, where - - *ode_in_r* is the ODE satisfied by :math:`f`. - - *var*, represents the sympy vec [x0, x1, ...] corresponding to coordinates - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present (the reason this is called n_derivs - since if we have a second order PDE for example then we might see - :math:`f, f_{r}, f_{rr}` in our ODE in r, which is technically 3 terms - since we count the 0th order derivative f as a "derivative." If this - doesn't make sense just know that n_derivs is the order the of the input - sumpy PDE + 1) + - *ode_in_r* with derivatives given as :class:`sympy.Derivative`. + - *var* is an object array of :class:`sympy.Symbol`, with successive + variables representing the Cartesian coordinate directions. """ if len(pde.eqs) != 1: raise ValueError("PDE must be scalar") + # FIXME remove n_derivs dim = pde.dim n_derivs = pde.order - assert (len(pde.eqs) == 1) - ops = len(pde.eqs[0]) - derivs = [] - coeffs = [] - for i in pde.eqs[0]: - derivs.append(i.mi) - coeffs.append(pde.eqs[0][i]) + pde_eqn, = pde.eqs + var = _make_sympy_vec("x", dim) r = sp.sqrt(sum(var**2)) - eps = sp.symbols("epsilon") rval = r + eps f = sp.Function("f") - # pylint: disable=not-callable - f_derivs = [sp.diff(f(rval), eps, i) for i in range(n_derivs+1)] - def compute_term(a, t): - term = a - for i in range(len(t)): - term = term.diff(var[i], t[i]) - return term + def apply_deriv_id(expr: sp.Expr, deriv_id: DerivativeIdentifier) -> sp.Expr: + for i, nderivs in enumerate(deriv_id.mi): + expr = expr.diff(var[i], nderivs) + return expr + + ode_in_r = sum( + coeff * apply_deriv_id(f(rval), deriv_id) + for deriv_id, coeff in pde_eqn.items() + ) - ode_in_r = 0 - for i in range(ops): - ode_in_r += coeffs[i] * compute_term(f(rval), derivs[i]) - n_derivs = len(f_derivs) f_r_derivs = _make_sympy_vec("f_r", n_derivs) + # pylint: disable-next=not-callable + f_derivs = [sp.diff(f(rval), eps, i) for i in range(n_derivs+1)] + n_derivs = len(f_derivs) + # FIXME: Is this bulletproof? I.e. can non-r derivatives survive? for i in range(n_derivs): ode_in_r = ode_in_r.subs(f_derivs[i], f_r_derivs[i]) + return ode_in_r, var, n_derivs From c7e2ac7de5abe35b1abc5c851f400043dd1030c6 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 17 Jul 2024 14:51:06 -0700 Subject: [PATCH 035/143] Replaced n_derivs with ode_order --- sumpy/recurrence.py | 69 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index e06000ee..4dfb38f7 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -77,17 +77,17 @@ def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ :arg pde: must satisfy ``pde.eqs == 1``` and have polynomial coefficients. - :returns: a tuple ``(ode_in_r, var, n_derivs)``, where + :returns: a tuple ``(ode_in_r, var, ode_order)``, where - *ode_in_r* with derivatives given as :class:`sympy.Derivative`. - *var* is an object array of :class:`sympy.Symbol`, with successive variables representing the Cartesian coordinate directions. + - *ode_order* the order of ODE that is returned """ if len(pde.eqs) != 1: raise ValueError("PDE must be scalar") - # FIXME remove n_derivs dim = pde.dim - n_derivs = pde.order + ode_order = pde.order pde_eqn, = pde.eqs var = _make_sympy_vec("x", dim) @@ -100,30 +100,28 @@ def apply_deriv_id(expr: sp.Expr, deriv_id: DerivativeIdentifier) -> sp.Expr: for i, nderivs in enumerate(deriv_id.mi): expr = expr.diff(var[i], nderivs) return expr - + # pylint: disable-next=not-callable ode_in_r = sum( coeff * apply_deriv_id(f(rval), deriv_id) for deriv_id, coeff in pde_eqn.items() ) - f_r_derivs = _make_sympy_vec("f_r", n_derivs) + f_r_derivs = _make_sympy_vec("f_r", ode_order+1) # pylint: disable-next=not-callable - f_derivs = [sp.diff(f(rval), eps, i) for i in range(n_derivs+1)] - n_derivs = len(f_derivs) + f_derivs = [sp.diff(f(rval), eps, i) for i in range(ode_order+1)] - # FIXME: Is this bulletproof? I.e. can non-r derivatives survive? - for i in range(n_derivs): + # PDE ORDER = ODE ORDER + for i in range(ode_order+1): ode_in_r = ode_in_r.subs(f_derivs[i], f_r_derivs[i]) - return ode_in_r, var, n_derivs + return ode_in_r, var, ode_order -def _generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: +def _generate_nd_derivative_relations(var: np.ndarray, ode_order: int) -> dict: """ ## Input - *var*, a sympy vector of variables called [x0, x1, ...] - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present + - *ode_order*, the order of the ODE that we will be translating ## Output - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... using the chain rule @@ -133,23 +131,23 @@ def _generate_nd_derivative_relations(var: np.ndarray, n_derivs: int) -> dict: Using the chain rule outputs a vector that tells us how to write f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... """ - f_r_derivs = _make_sympy_vec("f_r", n_derivs) - f_x_derivs = _make_sympy_vec("f_x", n_derivs) + f_r_derivs = _make_sympy_vec("f_r", ode_order+1) + f_x_derivs = _make_sympy_vec("f_x", ode_order+1) f = sp.Function("f") eps = sp.symbols("epsilon") rval = sp.sqrt(sum(var**2)) + eps # pylint: disable=not-callable - f_derivs_x = [sp.diff(f(rval), var[0], i) for i in range(n_derivs)] - f_derivs = [sp.diff(f(rval), eps, i) for i in range(n_derivs)] + f_derivs_x = [sp.diff(f(rval), var[0], i) for i in range(ode_order+1)] + f_derivs = [sp.diff(f(rval), eps, i) for i in range(ode_order+1)] # pylint: disable=not-callable for i in range(len(f_derivs_x)): for j in range(len(f_derivs)): f_derivs_x[i] = f_derivs_x[i].subs(f_derivs[j], f_r_derivs[j]) - system = [f_x_derivs[i] - f_derivs_x[i] for i in range(n_derivs)] + system = [f_x_derivs[i] - f_derivs_x[i] for i in range(ode_order+1)] return sp.solve(system, *f_r_derivs, dict=True)[0] -def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: +def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr: """ ## Input - *ode_in_r*, a linear combination of f, f_r, f_{rr}, ... @@ -157,8 +155,7 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: with coefficients that are polynomials in var[0], var[1], ... divided by some power of var[0] - *var*, array of sympy variables [x_0, x_1, ...] - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present + - *ode_order*, the order of the input ODE ## Output - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as rational functions in var[0], var[1], ... @@ -167,23 +164,22 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, n_derivs: int) -> sp.Expr: by substituting f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... using the chain rule. """ - subme = _generate_nd_derivative_relations(var, n_derivs) + subme = _generate_nd_derivative_relations(var, ode_order+1) ode_in_x = ode_in_r - f_r_derivs = _make_sympy_vec("f_r", n_derivs) - for i in range(n_derivs): + f_r_derivs = _make_sympy_vec("f_r", ode_order+1) + for i in range(ode_order+1): ode_in_x = ode_in_x.subs(f_r_derivs[i], subme[f_r_derivs[i]]) return ode_in_x -def ode_in_x_to_coeff_array(poly: sp.Poly, n_derivs: int, +def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, var: np.ndarray) -> list: """ ## Input - *poly*, the original ODE for our point-potential as a polynomial in f_{x0}, f_{x1}, f_{x2}, etc. with polynomial coefficients in var[0], var[1], ... - - *n_derivs*, the order of the original PDE + 1, i.e. the number of - derivatives of f that may be present + - *ode_order*, the order of input ODE - *var*, array of sympy variables [x_0, x_1, ...] ## Output - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as @@ -193,7 +189,7 @@ def ode_in_x_to_coeff_array(poly: sp.Poly, n_derivs: int, by substituting f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... using the chain rule. """ - def tup(i, n=n_derivs): + def tup(i, n=ode_order+1): a = [] for j in range(n): if j != i: @@ -203,7 +199,7 @@ def tup(i, n=n_derivs): return tuple(a) coeffs = [] - for deriv_ind in range(n_derivs): + for deriv_ind in range(ode_order+1): coeffs.append(sp.Poly(poly.coeff_monomial(tup(deriv_ind)), var[0]).all_coeffs()[::-1]) @@ -276,12 +272,12 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: - final_recurrence, the recurrence relation for derivatives of our point-potential. """ - ode_in_r, var, n_derivs = pde_to_ode_in_r(pde) - ode_in_x = ode_in_r_to_x(ode_in_r, var, n_derivs).simplify() - ode_in_x_cleared = (ode_in_x * var[0]**n_derivs).simplify() - f_x_derivs = _make_sympy_vec("f_x", n_derivs) + ode_in_r, var, ode_order = pde_to_ode_in_r(pde) + ode_in_x = ode_in_r_to_x(ode_in_r, var, ode_order).simplify() + ode_in_x_cleared = (ode_in_x * var[0]**(ode_order+1)).simplify() + f_x_derivs = _make_sympy_vec("f_x", ode_order+1) poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) - coeffs = ode_in_x_to_coeff_array(poly, n_derivs, var) + coeffs = ode_in_x_to_coeff_array(poly, ode_order, var) return recurrence_from_coeff_array(coeffs, var) @@ -390,6 +386,7 @@ def deriv_helmholtz_three_d(i, s_loc): print(err) assert err <= 1e-10 - - +test_recurrence_finder_laplace() +test_recurrence_finder_laplace_three_d() +test_recurrence_finder_helmholtz_three_d() From 99a658fcf24f8187839ee9abd22dd161efa36fa9 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 17 Jul 2024 15:31:38 -0700 Subject: [PATCH 036/143] Update documentation for sphinx --- sumpy/recurrence.py | 54 +++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 4dfb38f7..d8308e46 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -75,13 +75,13 @@ def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ :math:`f:\mathbb R^n \to \mathbb R` satisfying :math:`f(\boldsymbol x)=f(|\boldsymbol x|_2)` and *pde*. - :arg pde: must satisfy ``pde.eqs == 1``` and have polynomial coefficients. + :arg pde: must satisfy ``pde.eqs == 1`` and have polynomial coefficients. :returns: a tuple ``(ode_in_r, var, ode_order)``, where - - *ode_in_r* with derivatives given as :class:`sympy.Derivative`. - - *var* is an object array of :class:`sympy.Symbol`, with successive - variables representing the Cartesian coordinate directions. - - *ode_order* the order of ODE that is returned + - *ode_in_r* with derivatives given as :class:`sympy.Derivative`. + - *var* is an object array of :class:`sympy.Symbol`, with successive variables + representing the Cartesian coordinate directions. + - *ode_order* the order of ODE that is returned """ if len(pde.eqs) != 1: raise ValueError("PDE must be scalar") @@ -118,18 +118,13 @@ def apply_deriv_id(expr: sp.Expr, deriv_id: DerivativeIdentifier) -> sp.Expr: def _generate_nd_derivative_relations(var: np.ndarray, ode_order: int) -> dict: - """ - ## Input - - *var*, a sympy vector of variables called [x0, x1, ...] - - *ode_order*, the order of the ODE that we will be translating - ## Output - - a vector that gives [f, f_r, f_{rr}, ...] in terms of f, f_x, f_{xx}, ... - using the chain rule - (f, f_x, f_{xx}, ... in code is represented as f_{x0}, f_{x1}, f_{x2} and - f, f_r, f_{rr}, ... in code is represented as f_{r0}, f_{r1}, f_{r2}) - ## Description - Using the chain rule outputs a vector that tells us how to - write f, f_r, f_{rr}, ... as a linear combination of f, f_x, f_{xx}, ... + r""" + Using the chain rule outputs a vector that gives in each component respectively + :math:`[f(r), f'(r), \dots, f^{(ode_order)}(r)]` as a linear combination of + :math:`[f(x), f'(x), \dots, f^{(ode_order)}(x)]` + + :arg var: array of sympy variables math:`[x_0, x_1, \dots]` + :arg ode_order: the order of the ODE that we will be translating """ f_r_derivs = _make_sympy_vec("f_r", ode_order+1) f_x_derivs = _make_sympy_vec("f_x", ode_order+1) @@ -148,21 +143,18 @@ def _generate_nd_derivative_relations(var: np.ndarray, ode_order: int) -> dict: def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr: - """ - ## Input - - *ode_in_r*, a linear combination of f, f_r, f_{rr}, ... - (in code represented as f_{r0}, f_{r1}, f_{r2}) - with coefficients that are polynomials in var[0], var[1], ... - divided by some power of var[0] - - *var*, array of sympy variables [x_0, x_1, ...] - - *ode_order*, the order of the input ODE - ## Output - - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as - rational functions in var[0], var[1], ... - ## Description + r""" Translates an ode in the variable r into an ode in the variable x - by substituting f, f_r, f_{rr}, ... as a linear combination of - f, f_x, f_{xx}, ... using the chain rule. + by replcaing the terms :math:`f, f_r, f_{rr}, \dots` as a linear combinations of + :math:`f, f_x, f_{xx}, \dots` using the chain rule. + + :arg ode_in_r: a linear combination of :math:`f, f_r, f_{rr}, \dots` represented + by the sympy variables :math:`f_{r0}, f_{r1}, f_{r1}, f_{r2}, \dots` + :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` + :arg ode_order: the order of the input ODE + + :returns: *ode_in_x* a linear combination of :math:`f, f_x, f_{xx}, \dots` with + coefficients as rational functions in :math:`x_0, x_1, \dots` """ subme = _generate_nd_derivative_relations(var, ode_order+1) ode_in_x = ode_in_r From a6b03afd581bc378fc789677ae93b535854763c1 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 17 Jul 2024 20:53:21 -0700 Subject: [PATCH 037/143] Format documentation for ode_in_x_to_coeff_array --- sumpy/recurrence.py | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index d8308e46..52477c00 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -166,20 +166,18 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, var: np.ndarray) -> list: - """ - ## Input - - *poly*, the original ODE for our point-potential as a polynomial - in f_{x0}, f_{x1}, f_{x2}, etc. with polynomial coefficients - in var[0], var[1], ... - - *ode_order*, the order of input ODE - - *var*, array of sympy variables [x_0, x_1, ...] - ## Output - - ode_in_x, a linear combination of f, f_x, f_{xx}, ... with coefficients as - rational functions in var[0], var[1], ... - ## Description - Translates an ode in the variable r into an ode in the variable x - by substituting f, f_r, f_{rr}, ... as a linear combination of - f, f_x, f_{xx}, ... using the chain rule. + r""" + Organizes the coefficients of an ODE in the :math:`x_0` variable into a 2D array. + + :arg poly: :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \cdots) \partial_{x_0}^0 f + + (b_{10} x_0^0 + b_{11} x_0^1 +\cdots) \partial_x^1 f` + :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` + :arg ode_order: the order of the input ODE we return a sequence + + :returns: *coeffs* a sequence of of sequences, with the outer sequence iterating + over derivative orders, and each inner sequence iterating over powers of :math:`x_0`, + so that, in terms of the above form, coeffs is + :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` """ def tup(i, n=ode_order+1): a = [] From 66ce1601085e3f3ba02888227d4209bb4dd2e5cd Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 17 Jul 2024 21:12:20 -0700 Subject: [PATCH 038/143] Re-request tmrw mrning --- sumpy/recurrence.py | 75 +++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 44 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 52477c00..68969ba7 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -77,10 +77,10 @@ def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ :arg pde: must satisfy ``pde.eqs == 1`` and have polynomial coefficients. - :returns: a tuple ``(ode_in_r, var, ode_order)``, where - - *ode_in_r* with derivatives given as :class:`sympy.Derivative`. + :returns: a tuple ``(ode_in_r, var, ode_order)``, where + - *ode_in_r* with derivatives given as :class:`sympy.Derivative` - *var* is an object array of :class:`sympy.Symbol`, with successive variables - representing the Cartesian coordinate directions. + representing the Cartesian coordinate directions. - *ode_order* the order of ODE that is returned """ if len(pde.eqs) != 1: @@ -149,12 +149,13 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr :math:`f, f_x, f_{xx}, \dots` using the chain rule. :arg ode_in_r: a linear combination of :math:`f, f_r, f_{rr}, \dots` represented - by the sympy variables :math:`f_{r0}, f_{r1}, f_{r1}, f_{r2}, \dots` + by the sympy variables :math:`f_{r0}, f_{r1}, f_{r2}, \dots` :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` :arg ode_order: the order of the input ODE - :returns: *ode_in_x* a linear combination of :math:`f, f_x, f_{xx}, \dots` with - coefficients as rational functions in :math:`x_0, x_1, \dots` + :returns: *ode_in_x* a linear combination of :math:`f, f_x, f_{xx}, \dots` + represented by the sympy variables :math:`f_{x0}, f_{x1}, f_{x2}, \dots` + with coefficients as rational functions in :math:`x_0, x_1, \dots` """ subme = _generate_nd_derivative_relations(var, ode_order+1) ode_in_x = ode_in_r @@ -169,7 +170,9 @@ def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, r""" Organizes the coefficients of an ODE in the :math:`x_0` variable into a 2D array. - :arg poly: :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \cdots) \partial_{x_0}^0 f + + :arg poly: a sympy polynomial in + :math:`\partial_{x_0}^0 f, \partial_{x_0}^1 f,\cdots` of the form + :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \cdots) \partial_{x_0}^0 f + (b_{10} x_0^0 + b_{11} x_0^1 +\cdots) \partial_x^1 f` :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` :arg ode_order: the order of the input ODE we return a sequence @@ -197,23 +200,15 @@ def tup(i, n=ode_order+1): def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: - """ - ## Description + r""" We assume that we are given the expression :math:`x_0^p f^(m)(x_0)`. We then - output the nth order derivative of the expression where n is a symbolic variable. + output the nth order derivative of the expression where :math:`n` is a symbolic + variable. We let :math:`s(i)` represent the ith order derivative of f when we output the final result. - ## Input - - *p*, see description - - *m*, see description - - *var*, array of sympy variables [x_0, x_1, ...] - ## Output - - A sympy expression is output corresponding to the nth order derivative of the - input expression. - We let :math:`s(i)` represent the ith order derivative of f when - we output the final result. We let n represent a symbolic variable - corresponding to how many derivatives of the original expression were - taken. + :arg p: see description + :arg m: see description + :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ n = sp.symbols("n") s = sp.Function("s") @@ -229,19 +224,15 @@ def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: - """ - ## Input - - *coeffs*, - Consider an ODE obeyed by a function f that can be expressed in the following - form: :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \\cdots) \\partial_{x_0}^0 f + - (b_{10} x_0^0 + b_{11} x_0^1 +\\cdots) \\partial_x^1 f`. coeffs is a sequence - of sequences, with the outer sequence iterating over derivative orders, and - each inner sequence iterating over powers of :math:`x_0`, so that, in terms of - the above form, coeffs is [[b_00, b_01, ...], [b_10, b_11, ...], ...] - - *var*, array of sympy variables [x_0, x_1, ...] - ## Output - - final_recurrence, the recurrence relation for derivatives of our - point-potential. + r""" + A function that takes in as input an organized 2D coefficient array (see above) + and outputs a recurrence relation. + + :arg coeffs: a sequence of of sequences, with the outer sequence iterating + over derivative orders, and each inner sequence iterating over powers of + :math:`x_0`, so that, in terms of the above form, coeffs is + :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` + :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ final_recurrence = 0 #Outer loop is derivative direction @@ -254,13 +245,12 @@ def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: - """ - ## Input - - *pde*, a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` such that - pde.eqs == 1 - ## Output - - final_recurrence, the recurrence relation for derivatives of our - point-potential. + r""" + A function that takes in as input a sympy PDE and outputs a recurrence relation. + + :arg pde: a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` + that must satisfy ``pde.eqs == 1`` and have polynomial coefficients. + :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ ode_in_r, var, ode_order = pde_to_ode_in_r(pde) ode_in_x = ode_in_r_to_x(ode_in_r, var, ode_order).simplify() @@ -273,7 +263,6 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: def test_recurrence_finder_laplace(): """ - ## Description Tests our recurrence relation generator for Lapalace 2D. """ w = make_identity_diff_op(2) @@ -301,7 +290,6 @@ def deriv_laplace(i): def test_recurrence_finder_laplace_three_d(): """ - ## Description Tests our recurrence relation generator for Laplace 3D. """ w = make_identity_diff_op(3) @@ -328,7 +316,6 @@ def deriv_laplace_three_d(i): def test_recurrence_finder_helmholtz_three_d(): """ - ## Description Tests our recurrence relation generator for Helmhotlz 3D. """ #We are creating the recurrence relation for helmholtz3d which From 471342b2f923babddfbe5d5a944c9fd0642ca8c9 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 18 Jul 2024 17:20:05 -0700 Subject: [PATCH 039/143] Flake 8/pylint --- sumpy/recurrence.py | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 68969ba7..dd464f28 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -77,7 +77,7 @@ def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ :arg pde: must satisfy ``pde.eqs == 1`` and have polynomial coefficients. - :returns: a tuple ``(ode_in_r, var, ode_order)``, where + :returns: a tuple ``(ode_in_r, var, ode_order)``, where - *ode_in_r* with derivatives given as :class:`sympy.Derivative` - *var* is an object array of :class:`sympy.Symbol`, with successive variables representing the Cartesian coordinate directions. @@ -100,8 +100,9 @@ def apply_deriv_id(expr: sp.Expr, deriv_id: DerivativeIdentifier) -> sp.Expr: for i, nderivs in enumerate(deriv_id.mi): expr = expr.diff(var[i], nderivs) return expr - # pylint: disable-next=not-callable + ode_in_r = sum( + # pylint: disable-next=not-callable coeff * apply_deriv_id(f(rval), deriv_id) for deriv_id, coeff in pde_eqn.items() ) @@ -153,8 +154,8 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` :arg ode_order: the order of the input ODE - :returns: *ode_in_x* a linear combination of :math:`f, f_x, f_{xx}, \dots` - represented by the sympy variables :math:`f_{x0}, f_{x1}, f_{x2}, \dots` + :returns: *ode_in_x* a linear combination of :math:`f, f_x, f_{xx}, \dots` + represented by the sympy variables :math:`f_{x0}, f_{x1}, f_{x2}, \dots` with coefficients as rational functions in :math:`x_0, x_1, \dots` """ subme = _generate_nd_derivative_relations(var, ode_order+1) @@ -169,17 +170,16 @@ def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, var: np.ndarray) -> list: r""" Organizes the coefficients of an ODE in the :math:`x_0` variable into a 2D array. - - :arg poly: a sympy polynomial in + :arg poly: a sympy polynomial in :math:`\partial_{x_0}^0 f, \partial_{x_0}^1 f,\cdots` of the form :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \cdots) \partial_{x_0}^0 f + (b_{10} x_0^0 + b_{11} x_0^1 +\cdots) \partial_x^1 f` :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` :arg ode_order: the order of the input ODE we return a sequence - :returns: *coeffs* a sequence of of sequences, with the outer sequence iterating - over derivative orders, and each inner sequence iterating over powers of :math:`x_0`, - so that, in terms of the above form, coeffs is + :returns: *coeffs* a sequence of of sequences, with the outer sequence iterating + over derivative orders, and each inner sequence iterating over powers of + :math:`x_0`, so that, in terms of the above form, coeffs is :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` """ def tup(i, n=ode_order+1): @@ -248,7 +248,7 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: r""" A function that takes in as input a sympy PDE and outputs a recurrence relation. - :arg pde: a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` + :arg pde: a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` that must satisfy ``pde.eqs == 1`` and have polynomial coefficients. :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ @@ -318,16 +318,12 @@ def test_recurrence_finder_helmholtz_three_d(): """ Tests our recurrence relation generator for Helmhotlz 3D. """ - #We are creating the recurrence relation for helmholtz3d which + #We are creating the recurrence relation for helmholtz3d which #seems to be an order 5 recurrence relation w = make_identity_diff_op(3) helmholtz3d = laplacian(w) + w r = recurrence_from_pde(helmholtz3d) - #We create that function that gives the derivatives of the point - # potential for helmholtz - #Remember! Our point-source was placed at the origin and we - # were performing a LT expansion at x_0 def deriv_helmholtz_three_d(i, s_loc): s_x = s_loc[0] s_y = s_loc[1] @@ -337,7 +333,6 @@ def deriv_helmholtz_three_d(i, s_loc): ) / (sp.sqrt(x**2 + y**2 + z**2)) return sp.diff(true_f, x, i).subs(x, s_x).subs( y, s_y).subs(z, s_z) - #Create relevant symbols var = _make_sympy_vec("x", 3) n = sp.symbols("n") @@ -362,8 +357,3 @@ def deriv_helmholtz_three_d(i, s_loc): err = abs(abs(r_sub).evalf()) print(err) assert err <= 1e-10 - -test_recurrence_finder_laplace() -test_recurrence_finder_laplace_three_d() -test_recurrence_finder_helmholtz_three_d() - From ffff8658e6450077731b1f9da2d7733aa46718ec Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 21 Jul 2024 19:12:05 -0700 Subject: [PATCH 040/143] Typos and clarification to docs --- sumpy/recurrence.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index dd464f28..75c060b5 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -1,9 +1,9 @@ r""" With the functionality in this module, we aim to compute a recurrence for one-dimensional derivatives of functions :math:`f:\mathbb R^n \to \mathbb R` -for functions :math:`f` satisfying two assumptions: +for functions satisfying two assumptions: -- :math:`f` satisfies a PDE is linear and has coefficients polynomial +- :math:`f` satisfies a PDE that is linear and has coefficients polynomial in the coordinates. - :math:`f` only depends on the radius :math:`r`, i.e. :math:`f(\boldsymbol x)=f(|\boldsymbol x|_2)`. @@ -146,7 +146,7 @@ def _generate_nd_derivative_relations(var: np.ndarray, ode_order: int) -> dict: def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr: r""" Translates an ode in the variable r into an ode in the variable x - by replcaing the terms :math:`f, f_r, f_{rr}, \dots` as a linear combinations of + by replacing the terms :math:`f, f_r, f_{rr}, \dots` as a linear combinations of :math:`f, f_x, f_{xx}, \dots` using the chain rule. :arg ode_in_r: a linear combination of :math:`f, f_r, f_{rr}, \dots` represented @@ -170,10 +170,12 @@ def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, var: np.ndarray) -> list: r""" Organizes the coefficients of an ODE in the :math:`x_0` variable into a 2D array. + :arg poly: a sympy polynomial in - :math:`\partial_{x_0}^0 f, \partial_{x_0}^1 f,\cdots` of the form - :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \cdots) \partial_{x_0}^0 f + - (b_{10} x_0^0 + b_{11} x_0^1 +\cdots) \partial_x^1 f` + :math:`\partial_{x_0}^0 f, \partial_{x_0}^1 f,\cdots` of the form + :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \cdots) \partial_{x_0}^0 f + + (b_{10} x_0^0 + b_{11} x_0^1 +\cdots) \partial_x^1 f` + :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` :arg ode_order: the order of the input ODE we return a sequence @@ -228,10 +230,8 @@ def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: A function that takes in as input an organized 2D coefficient array (see above) and outputs a recurrence relation. - :arg coeffs: a sequence of of sequences, with the outer sequence iterating - over derivative orders, and each inner sequence iterating over powers of - :math:`x_0`, so that, in terms of the above form, coeffs is - :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` + :arg coeffs: a sequence of of sequences, described in + :func:`ode_in_x_to_coeff_array` :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ final_recurrence = 0 @@ -249,7 +249,8 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: A function that takes in as input a sympy PDE and outputs a recurrence relation. :arg pde: a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` - that must satisfy ``pde.eqs == 1`` and have polynomial coefficients. + that must satisfy ``pde.eqs == 1`` and have polynomial coefficients + in the coordinates. :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ ode_in_r, var, ode_order = pde_to_ode_in_r(pde) From 4e09ed09b7cb93a1e4cebf06a92a1c3b8f314619 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Mon, 22 Jul 2024 16:04:33 -0500 Subject: [PATCH 041/143] Review: code quality, denominator clearing --- sumpy/recurrence.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 75c060b5..9ae8eaa9 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -184,21 +184,12 @@ def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, :math:`x_0`, so that, in terms of the above form, coeffs is :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` """ - def tup(i, n=ode_order+1): - a = [] - for j in range(n): - if j != i: - a.append(0) - else: - a.append(1) - return tuple(a) + def kronecker(i, n=ode_order+1): + return tuple(1 if i == j else 0 for j in range(n)) - coeffs = [] - for deriv_ind in range(ode_order+1): - coeffs.append(sp.Poly(poly.coeff_monomial(tup(deriv_ind)), - var[0]).all_coeffs()[::-1]) - - return coeffs + return [ + sp.Poly(poly.coeff_monomial(kronecker(deriv_ind)), var[0]).all_coeffs()[::-1] + for deriv_ind in range(ode_order+1) def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: @@ -256,6 +247,9 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: ode_in_r, var, ode_order = pde_to_ode_in_r(pde) ode_in_x = ode_in_r_to_x(ode_in_r, var, ode_order).simplify() ode_in_x_cleared = (ode_in_x * var[0]**(ode_order+1)).simplify() + + assert is_actually_cleared() + f_x_derivs = _make_sympy_vec("f_x", ode_order+1) poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) coeffs = ode_in_x_to_coeff_array(poly, ode_order, var) From bfa8372c9ae75dba401cbe82dcc2244deb7300aa Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 23 Jul 2024 19:57:27 -0700 Subject: [PATCH 042/143] Check if ode_in_x is truly cleared --- sumpy/recurrence.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 9ae8eaa9..f422c09d 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -187,9 +187,8 @@ def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, def kronecker(i, n=ode_order+1): return tuple(1 if i == j else 0 for j in range(n)) - return [ - sp.Poly(poly.coeff_monomial(kronecker(deriv_ind)), var[0]).all_coeffs()[::-1] - for deriv_ind in range(ode_order+1) + return [sp.Poly(poly.coeff_monomial(kronecker(deriv_ind)), + var[0]).all_coeffs()[::-1] for deriv_ind in range(ode_order+1)] def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: @@ -247,9 +246,8 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: ode_in_r, var, ode_order = pde_to_ode_in_r(pde) ode_in_x = ode_in_r_to_x(ode_in_r, var, ode_order).simplify() ode_in_x_cleared = (ode_in_x * var[0]**(ode_order+1)).simplify() - - assert is_actually_cleared() - + #ode_in_x_cleared shouldn't have rational function coefficients in the coord. + assert sp.together(ode_in_x_cleared) == ode_in_x_cleared f_x_derivs = _make_sympy_vec("f_x", ode_order+1) poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) coeffs = ode_in_x_to_coeff_array(poly, ode_order, var) From e363248e23f8da05e1360b7eecc62b7e52be1b95 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Mon, 29 Jul 2024 16:05:49 -0500 Subject: [PATCH 043/143] Hacking during meeting --- sumpy/recurrence.py | 82 +++++++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 29 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index f422c09d..5bd5a9a3 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -28,6 +28,8 @@ from __future__ import annotations +from typing import TypeVar + __copyright__ = """ Copyright (C) 2024 Hirish Chandrasekaran @@ -54,11 +56,18 @@ THE SOFTWARE. """ import math + import numpy as np import sympy as sp + from pytools.obj_array import make_obj_array + from sumpy.expansion.diff_op import ( - DerivativeIdentifier, make_identity_diff_op, laplacian, LinearPDESystemOperator) + DerivativeIdentifier, + LinearPDESystemOperator, + laplacian, + make_identity_diff_op, +) # similar to make_sym_vector in sumpy.symbolic, but returns an object array @@ -166,8 +175,11 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr return ode_in_x +ODECoefficients = list[list[sp.Expr]] + + def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, - var: np.ndarray) -> list: + var: np.ndarray) -> ODECoefficients: r""" Organizes the coefficients of an ODE in the :math:`x_0` variable into a 2D array. @@ -184,11 +196,26 @@ def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, :math:`x_0`, so that, in terms of the above form, coeffs is :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` """ - def kronecker(i, n=ode_order+1): - return tuple(1 if i == j else 0 for j in range(n)) + return [ + # recast ODE coefficient obtained below as polynomial in x0 + sp.Poly( + # get coefficient of deriv_ind'th derivative + poly.coeff_monomial(poly.gens[deriv_ind]), + + var[0]) + # get poly coefficients in /ascending/ order + .all_coeffs()[::-1] + for deriv_ind in range(ode_order+1)] + - return [sp.Poly(poly.coeff_monomial(kronecker(deriv_ind)), - var[0]).all_coeffs()[::-1] for deriv_ind in range(ode_order+1)] +NumberT = TypeVar("NumberT", int, float, complex) + + +def _falling_factorial(arg: NumberT, num_terms: int) -> NumberT: + result = 1 + for i in range(num_terms): + result = result * (arg - i) + return result def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: @@ -198,21 +225,15 @@ def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: variable. We let :math:`s(i)` represent the ith order derivative of f when we output the final result. - :arg p: see description - :arg m: see description :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ n = sp.symbols("n") s = sp.Function("s") - result = 0 - for i in range(p+1): - temp = 1 - for j in range(i): - temp *= (n - j) - # pylint: disable=not-callable - temp *= math.comb(p, i) * s(n-i+m) * var[0]**(p-i) - result += temp - return result + return sum( + _falling_factorial(n, i) + * math.comb(p, i) * s(n-i+m) * var[0]**(p-i) + for i in range(p+1) + ) def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: @@ -225,8 +246,8 @@ def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ final_recurrence = 0 - #Outer loop is derivative direction - #Inner is polynomial order of x_0 + # Outer loop is derivative direction + # Inner is polynomial order of x_0 for m, _ in enumerate(coeffs): for p, _ in enumerate(coeffs[m]): final_recurrence += coeffs[m][p] * _auto_product_rule_single_term(p, @@ -246,7 +267,7 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: ode_in_r, var, ode_order = pde_to_ode_in_r(pde) ode_in_x = ode_in_r_to_x(ode_in_r, var, ode_order).simplify() ode_in_x_cleared = (ode_in_x * var[0]**(ode_order+1)).simplify() - #ode_in_x_cleared shouldn't have rational function coefficients in the coord. + # ode_in_x_cleared shouldn't have rational function coefficients in the coord. assert sp.together(ode_in_x_cleared) == ode_in_x_cleared f_x_derivs = _make_sympy_vec("f_x", ode_order+1) poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) @@ -311,8 +332,8 @@ def test_recurrence_finder_helmholtz_three_d(): """ Tests our recurrence relation generator for Helmhotlz 3D. """ - #We are creating the recurrence relation for helmholtz3d which - #seems to be an order 5 recurrence relation + # We are creating the recurrence relation for helmholtz3d which + # seems to be an order 5 recurrence relation w = make_identity_diff_op(3) helmholtz3d = laplacian(w) + w r = recurrence_from_pde(helmholtz3d) @@ -326,24 +347,27 @@ def deriv_helmholtz_three_d(i, s_loc): ) / (sp.sqrt(x**2 + y**2 + z**2)) return sp.diff(true_f, x, i).subs(x, s_x).subs( y, s_y).subs(z, s_z) - #Create relevant symbols + # Create relevant symbols var = _make_sympy_vec("x", 3) n = sp.symbols("n") s = sp.Function("s") - #Create random source location - s_loc = np.random.rand(3) + rng = np.random.default_rng() + + # Create random source location + s_loc = rng.uniform(size=3) - #Create random order to check - d = np.random.randint(0, 5) + # Create random order to check + from random import randrange + d = randrange(0, 5) - #Substitute random location into recurrence relation and value of n = d + # Substitute random location into recurrence relation and value of n = d r_loc = r.subs(var[0], s_loc[0]) r_loc = r_loc.subs(var[1], s_loc[1]) r_loc = r_loc.subs(var[2], s_loc[2]) r_sub = r_loc.subs(n, d) - #Checking that the recurrence holds to some machine epsilon + # Checking that the recurrence holds to some machine epsilon for i in range(max(d-3, 0), d+3): # pylint: disable=not-callable r_sub = r_sub.subs(s(i), deriv_helmholtz_three_d(i, s_loc)) From 1f305672379f66cd33fc6ec2a1a6ba4a54461257 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 6 Aug 2024 00:54:30 -0700 Subject: [PATCH 044/143] Flake8 --- sumpy/recurrence.py | 65 ++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 5bd5a9a3..81836c42 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -11,7 +11,8 @@ This process proceeds in multiple steps: - Convert from the PDE to an ODE in :math:`r`, using :func:`pde_to_ode_in_r`. -- Convert from an ODE in :math:`r` to one in :math:`x`, using :func:`ode_in_r_to_x`. +- Convert from an ODE in :math:`r` to one in :math:`x`, +using :func:`ode_in_r_to_x`. - Sort general-form ODE in :math:`x` into a coefficient array, using :func:`ode_in_x_to_coeff_array`. - Finally, get an expression for the recurrence, using @@ -88,7 +89,8 @@ def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ :returns: a tuple ``(ode_in_r, var, ode_order)``, where - *ode_in_r* with derivatives given as :class:`sympy.Derivative` - - *var* is an object array of :class:`sympy.Symbol`, with successive variables + - *var* is an object array of :class:`sympy.Symbol`, with successive + variables representing the Cartesian coordinate directions. - *ode_order* the order of ODE that is returned """ @@ -105,7 +107,8 @@ def pde_to_ode_in_r(pde: LinearPDESystemOperator) -> tuple[ rval = r + eps f = sp.Function("f") - def apply_deriv_id(expr: sp.Expr, deriv_id: DerivativeIdentifier) -> sp.Expr: + def apply_deriv_id(expr: sp.Expr, + deriv_id: DerivativeIdentifier) -> sp.Expr: for i, nderivs in enumerate(deriv_id.mi): expr = expr.diff(var[i], nderivs) return expr @@ -129,7 +132,8 @@ def apply_deriv_id(expr: sp.Expr, deriv_id: DerivativeIdentifier) -> sp.Expr: def _generate_nd_derivative_relations(var: np.ndarray, ode_order: int) -> dict: r""" - Using the chain rule outputs a vector that gives in each component respectively + Using the chain rule outputs a vector that gives in each component + respectively :math:`[f(r), f'(r), \dots, f^{(ode_order)}(r)]` as a linear combination of :math:`[f(x), f'(x), \dots, f^{(ode_order)}(x)]` @@ -152,20 +156,23 @@ def _generate_nd_derivative_relations(var: np.ndarray, ode_order: int) -> dict: return sp.solve(system, *f_r_derivs, dict=True)[0] -def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr: +def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, + ode_order: int) -> sp.Expr: r""" Translates an ode in the variable r into an ode in the variable x - by replacing the terms :math:`f, f_r, f_{rr}, \dots` as a linear combinations of + by replacing the terms :math:`f, f_r, f_{rr}, \dots` as a linear + combinations of :math:`f, f_x, f_{xx}, \dots` using the chain rule. - :arg ode_in_r: a linear combination of :math:`f, f_r, f_{rr}, \dots` represented - by the sympy variables :math:`f_{r0}, f_{r1}, f_{r2}, \dots` + :arg ode_in_r: a linear combination of :math:`f, f_r, f_{rr}, \dots` + represented by the sympy variables :math:`f_{r0}, f_{r1}, f_{r2}, \dots` :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` :arg ode_order: the order of the input ODE :returns: *ode_in_x* a linear combination of :math:`f, f_x, f_{xx}, \dots` - represented by the sympy variables :math:`f_{x0}, f_{x1}, f_{x2}, \dots` - with coefficients as rational functions in :math:`x_0, x_1, \dots` + represented by the sympy variables :math:`f_{x0}, f_{x1}, f_{x2}, + \dots` with coefficients as rational functions in + :math:`x_0, x_1, \dots` """ subme = _generate_nd_derivative_relations(var, ode_order+1) ode_in_x = ode_in_r @@ -178,10 +185,11 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ode_order: int) -> sp.Expr ODECoefficients = list[list[sp.Expr]] -def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, - var: np.ndarray) -> ODECoefficients: +def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, var: + np.ndarray) -> ODECoefficients: r""" - Organizes the coefficients of an ODE in the :math:`x_0` variable into a 2D array. + Organizes the coefficients of an ODE in the :math:`x_0` variable into a + 2D array. :arg poly: a sympy polynomial in :math:`\partial_{x_0}^0 f, \partial_{x_0}^1 f,\cdots` of the form @@ -191,10 +199,10 @@ def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` :arg ode_order: the order of the input ODE we return a sequence - :returns: *coeffs* a sequence of of sequences, with the outer sequence iterating - over derivative orders, and each inner sequence iterating over powers of - :math:`x_0`, so that, in terms of the above form, coeffs is - :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` + :returns: *coeffs* a sequence of of sequences, with the outer sequence + iterating over derivative orders, and each inner sequence iterating + over powers of :math:`x_0`, so that, in terms of the above form, + coeffs is :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` """ return [ # recast ODE coefficient obtained below as polynomial in x0 @@ -220,16 +228,18 @@ def _falling_factorial(arg: NumberT, num_terms: int) -> NumberT: def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: r""" - We assume that we are given the expression :math:`x_0^p f^(m)(x_0)`. We then - output the nth order derivative of the expression where :math:`n` is a symbolic - variable. + We assume that we are given the expression :math:`x_0^p f^(m)(x_0)`. We + then output the nth order derivative of the expression where :math:`n` is + a symbolic variable. We let :math:`s(i)` represent the ith order derivative of f when we output the final result. :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` """ n = sp.symbols("n") s = sp.Function("s") + return sum( + # pylint: disable=not-callable _falling_factorial(n, i) * math.comb(p, i) * s(n-i+m) * var[0]**(p-i) for i in range(p+1) @@ -238,8 +248,8 @@ def _auto_product_rule_single_term(p: int, m: int, var: np.ndarray) -> sp.Expr: def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: r""" - A function that takes in as input an organized 2D coefficient array (see above) - and outputs a recurrence relation. + A function that takes in as input an organized 2D coefficient array (see + above) and outputs a recurrence relation. :arg coeffs: a sequence of of sequences, described in :func:`ode_in_x_to_coeff_array` @@ -250,14 +260,15 @@ def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: # Inner is polynomial order of x_0 for m, _ in enumerate(coeffs): for p, _ in enumerate(coeffs[m]): - final_recurrence += coeffs[m][p] * _auto_product_rule_single_term(p, - m, var) + final_recurrence += coeffs[m][p] * _auto_product_rule_single_term( + p, m, var) return final_recurrence def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: r""" - A function that takes in as input a sympy PDE and outputs a recurrence relation. + A function that takes in as input a sympy PDE and outputs a recurrence + relation. :arg pde: a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` that must satisfy ``pde.eqs == 1`` and have polynomial coefficients @@ -267,7 +278,7 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: ode_in_r, var, ode_order = pde_to_ode_in_r(pde) ode_in_x = ode_in_r_to_x(ode_in_r, var, ode_order).simplify() ode_in_x_cleared = (ode_in_x * var[0]**(ode_order+1)).simplify() - # ode_in_x_cleared shouldn't have rational function coefficients in the coord. + # ode_in_x_cleared shouldn't have rational function coefficients assert sp.together(ode_in_x_cleared) == ode_in_x_cleared f_x_derivs = _make_sympy_vec("f_x", ode_order+1) poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) @@ -373,4 +384,4 @@ def deriv_helmholtz_three_d(i, s_loc): r_sub = r_sub.subs(s(i), deriv_helmholtz_three_d(i, s_loc)) err = abs(abs(r_sub).evalf()) print(err) - assert err <= 1e-10 + assert err <= 1e-10 \ No newline at end of file From eef4e78c53119f98802bf993b17eca06827f6304 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 6 Aug 2024 00:57:55 -0700 Subject: [PATCH 045/143] Pylint/Flake8 --- sumpy/recurrence.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 81836c42..722f7589 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -58,11 +58,13 @@ """ import math +from random import randrange import numpy as np import sympy as sp from pytools.obj_array import make_obj_array + from sumpy.expansion.diff_op import ( DerivativeIdentifier, LinearPDESystemOperator, @@ -369,7 +371,6 @@ def deriv_helmholtz_three_d(i, s_loc): s_loc = rng.uniform(size=3) # Create random order to check - from random import randrange d = randrange(0, 5) # Substitute random location into recurrence relation and value of n = d @@ -384,4 +385,4 @@ def deriv_helmholtz_three_d(i, s_loc): r_sub = r_sub.subs(s(i), deriv_helmholtz_three_d(i, s_loc)) err = abs(abs(r_sub).evalf()) print(err) - assert err <= 1e-10 \ No newline at end of file + assert err <= 1e-10 From 52b38526e9229af6275b0a61f566d043faab27e1 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 7 Aug 2024 13:58:54 -0700 Subject: [PATCH 046/143] Update recurrence.py --- sumpy/recurrence.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 722f7589..41e54dc2 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -386,3 +386,8 @@ def deriv_helmholtz_three_d(i, s_loc): err = abs(abs(r_sub).evalf()) print(err) assert err <= 1e-10 + +w = make_identity_diff_op(2) +laplace2d = laplacian(w) +r = recurrence_from_pde(laplace2d) +print(r) \ No newline at end of file From ee23f651c2602dc43f654aef594650928366e98a Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 7 Aug 2024 13:59:49 -0700 Subject: [PATCH 047/143] Update recurrence.py --- sumpy/recurrence.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 41e54dc2..722f7589 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -386,8 +386,3 @@ def deriv_helmholtz_three_d(i, s_loc): err = abs(abs(r_sub).evalf()) print(err) assert err <= 1e-10 - -w = make_identity_diff_op(2) -laplace2d = laplacian(w) -r = recurrence_from_pde(laplace2d) -print(r) \ No newline at end of file From 6df8870b07d15d3a736c90a2ecb32a55d9514a71 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 12 Aug 2024 12:42:46 -0700 Subject: [PATCH 048/143] Added function to process recurrence relation --- sumpy/recurrence.py | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 722f7589..ec4b93af 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -267,6 +267,58 @@ def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: return final_recurrence +def process_recurrence_relation(r: sp.Expr) -> tuple[int, sp.Expr]: + r""" + A function that takes in as input a recurrence and outputs a recurrence + relation that has the nth term in terms of the n-1th, n-2th etc. + Also returns the order of the recurrence relation. + + :arg recurrence: a recurrence relation in :math:`s(n)` + """ + terms = list(r.atoms(sp.Function)) + terms = np.array(terms) + + # Sort terms and create idx_l + idx_l = [] + for i in range(len(terms)): + tms = list(terms[i].atoms(sp.Number)) + if len(tms) == 1: + idx_l.append(tms[0]) + else: + idx_l.append(0) + idx_l = np.array(idx_l, dtype='int') + idx_sort = idx_l.argsort() + idx_l = idx_l[idx_sort] + terms = terms[idx_sort] + + # Order is the max difference between highest/lowest in idx_l + order = max(idx_l) - min(idx_l) + 1 + + # How much do we need to shift the recurrence relation + shift_idx = max(idx_l) + + # Get the respective coefficients in the recurrence relation from r + n = sp.symbols("n") + s = sp.Function("s") + coeffs = sp.poly(r, list(terms)).coeffs() + + # Re-arrange the recurrence relation so we get s(n) = ____ + # in terms of s(n-1), ... + true_recurrence = sum([coeffs[i]/coeffs[-1] * terms[i] + for i in range(0, len(terms)-1)]) + true_recurrence1 = true_recurrence.subs(n, n-shift_idx) + + # Replace s(n-1) with snm_1, s(n-2) with snm_2 etc. + # because pymbolic.substitute won't recognize it + last_syms = [sp.Symbol(f"snm{i+1}") for i in range(order-1)] + # pylint: disable=not-callable + true_recurrence2 = true_recurrence1.subs(s(n-1), last_syms[0]) + true_recurrence2 = true_recurrence2.subs(s(n-2), last_syms[1]) + true_recurrence2 = true_recurrence2.subs(s(n-3), last_syms[2]) + + return order, true_recurrence2 + + def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: r""" A function that takes in as input a sympy PDE and outputs a recurrence From 05a46abad947ee534c01e45d197dcca716cadc4e Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 2 Sep 2024 16:07:33 -0500 Subject: [PATCH 049/143] Shift recurrence so origin at expansion center --- sumpy/recurrence.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index ec4b93af..b19c1b6d 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -340,6 +340,19 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: return recurrence_from_coeff_array(coeffs, var) +def shift_recurrence(r: sp.Expr, var: np.ndarray) -> sp.Expr: + r""" + A function that "shifts" the recurrence so it's center is placed + at the origin and source is the input for the recurrence generated. + + :arg recurrence: a recurrence relation in :math:`s(n)` + """ + r0 = r + for i in range(len(var)): + r0 = r0.subs(var[i], -var[i]) + return r0 + + def test_recurrence_finder_laplace(): """ Tests our recurrence relation generator for Lapalace 2D. From 846983576f2b2fb6aaf7e3e6ce11dc8eecce21a7 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 9 Sep 2024 10:18:09 -0500 Subject: [PATCH 050/143] Added flag to process_recurrence_relation, removed hardcode --- sumpy/recurrence.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index b19c1b6d..06892fdc 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -267,7 +267,8 @@ def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: return final_recurrence -def process_recurrence_relation(r: sp.Expr) -> tuple[int, sp.Expr]: +def process_recurrence_relation(r: sp.Expr, + replace=True) -> tuple[int, sp.Expr]: r""" A function that takes in as input a recurrence and outputs a recurrence relation that has the nth term in terms of the n-1th, n-2th etc. @@ -308,15 +309,18 @@ def process_recurrence_relation(r: sp.Expr) -> tuple[int, sp.Expr]: for i in range(0, len(terms)-1)]) true_recurrence1 = true_recurrence.subs(n, n-shift_idx) - # Replace s(n-1) with snm_1, s(n-2) with snm_2 etc. - # because pymbolic.substitute won't recognize it - last_syms = [sp.Symbol(f"snm{i+1}") for i in range(order-1)] - # pylint: disable=not-callable - true_recurrence2 = true_recurrence1.subs(s(n-1), last_syms[0]) - true_recurrence2 = true_recurrence2.subs(s(n-2), last_syms[1]) - true_recurrence2 = true_recurrence2.subs(s(n-3), last_syms[2]) + if replace: + # Replace s(n-1) with snm_1, s(n-2) with snm_2 etc. + # because pymbolic.substitute won't recognize it + last_syms = [sp.Symbol(f"anm{i+1}") for i in range(order-1)] + # pylint: disable=not-callable + # Assumes order > 1 + true_recurrence2 = true_recurrence1.subs(s(n-1), last_syms[0]) + for i in range(2, order): + true_recurrence2 = true_recurrence2.subs(s(n-i), last_syms[i-1]) + return order, true_recurrence2 - return order, true_recurrence2 + return order, true_recurrence1 def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: From aa1b651258481414409be32ebfc9024f48a1edf5 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 9 Sep 2024 12:50:35 -0500 Subject: [PATCH 051/143] Added 2 additional functions for generating hardcoded expressions --- sumpy/recurrence.py | 93 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 80 insertions(+), 13 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 06892fdc..b53adabf 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -274,6 +274,10 @@ def process_recurrence_relation(r: sp.Expr, relation that has the nth term in terms of the n-1th, n-2th etc. Also returns the order of the recurrence relation. + If replace=True then the recurrence is output in a form that is ideal + for pymbolic processing. If replace=False then a standard recurrence + is output. + :arg recurrence: a recurrence relation in :math:`s(n)` """ terms = list(r.atoms(sp.Function)) @@ -322,6 +326,62 @@ def process_recurrence_relation(r: sp.Expr, return order, true_recurrence1 +def __check_neg_ind(r_n): + terms = list(r_n.atoms(sp.Function)) + terms = np.array(terms) + + idx_l = [] + for i in range(len(terms)): + tms = list(terms[i].atoms(sp.Number)) + if len(tms) == 1: + idx_l.append(tms[0]) + else: + idx_l.append(0) + idx_l = np.array(idx_l, dtype='int') + idx_sort = idx_l.argsort() + idx_l = idx_l[idx_sort] + terms = terms[idx_sort] + + return np.any(idx_l < 0) + + +def get_lower_order_expressions(p, recurrence): + r""" + A function that takes in as input an order of expansion + and a recurrence relation and outputs an array of hardcoded recurrence + expressions for each order. If an expression for a certain order + doesn't exist 0 is output. Also returns the number of initial conditions + needed. + + :arg recurrence: a recurrence relation in :math:`s(n)` + :arg p: number of orders needed for recurrence expressions + """ + p = 5 + initial_c = 0 + recur_arr = [0] * p + n = sp.symbols("n") + for i in range(p): + r_c = recurrence.subs(n, i) + if __check_neg_ind(r_c): + recur_arr[i] = 0 + initial_c = i + else: + recur_arr[i] = r_c + return initial_c, recur_arr + + +def shift_recurrence(r: sp.Expr, var: np.ndarray) -> sp.Expr: + r""" + A function that "shifts" the recurrence so it's center is placed + at the origin and source is the input for the recurrence generated. + + :arg recurrence: a recurrence relation in :math:`s(n)` + """ + r0 = r + for i in range(len(var)): + r0 = r0.subs(var[i], -var[i]) + return r0 + def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: r""" @@ -344,19 +404,6 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: return recurrence_from_coeff_array(coeffs, var) -def shift_recurrence(r: sp.Expr, var: np.ndarray) -> sp.Expr: - r""" - A function that "shifts" the recurrence so it's center is placed - at the origin and source is the input for the recurrence generated. - - :arg recurrence: a recurrence relation in :math:`s(n)` - """ - r0 = r - for i in range(len(var)): - r0 = r0.subs(var[i], -var[i]) - return r0 - - def test_recurrence_finder_laplace(): """ Tests our recurrence relation generator for Lapalace 2D. @@ -455,3 +502,23 @@ def deriv_helmholtz_three_d(i, s_loc): err = abs(abs(r_sub).evalf()) print(err) assert err <= 1e-10 + + +def test_get_lower_order_expressions_laplace_2D(): + """ + Tests our expression generator for Laplace 2D. + """ + + w = make_identity_diff_op(2) + laplace2d = laplacian(w) + r = recurrence_from_pde(laplace2d) + var = _make_sympy_vec("x", 2) + r = shift_recurrence(r, var) + _, r_processed = process_recurrence_relation(r, False) + + _, recur_arr = get_lower_order_expressions(5, r_processed) + + print(recur_arr) + + +test_get_lower_order_expressions_laplace_2D() \ No newline at end of file From 4ded696808e37903e2ba60ba91cbd71eb902449f Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 12 Sep 2024 15:57:48 -0500 Subject: [PATCH 052/143] sp.cancel --- sumpy/recurrence.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index b53adabf..c34247aa 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -366,7 +366,7 @@ def get_lower_order_expressions(p, recurrence): recur_arr[i] = 0 initial_c = i else: - recur_arr[i] = r_c + recur_arr[i] = sp.cancel(r_c) return initial_c, recur_arr From 2e615f0d73513fafff3c82a15335b98c0f40418e Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 28 Oct 2024 14:31:25 -0500 Subject: [PATCH 053/143] Added recurrence+qbx code --- sumpy/recurrence.py | 361 ++++++++++++++++++++++++---------------- test/test_recurrence.py | 83 +++++++++ 2 files changed, 305 insertions(+), 139 deletions(-) create mode 100644 test/test_recurrence.py diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index c34247aa..e75c1968 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -67,9 +67,7 @@ from sumpy.expansion.diff_op import ( DerivativeIdentifier, - LinearPDESystemOperator, - laplacian, - make_identity_diff_op, + LinearPDESystemOperator ) @@ -267,6 +265,27 @@ def recurrence_from_coeff_array(coeffs: list, var: np.ndarray) -> sp.Expr: return final_recurrence +def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: + r""" + A function that takes in as input a sympy PDE and outputs a recurrence + relation. + + :arg pde: a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` + that must satisfy ``pde.eqs == 1`` and have polynomial coefficients + in the coordinates. + :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` + """ + ode_in_r, var, ode_order = pde_to_ode_in_r(pde) + ode_in_x = ode_in_r_to_x(ode_in_r, var, ode_order).simplify() + ode_in_x_cleared = (ode_in_x * var[0]**(ode_order+1)).simplify() + # ode_in_x_cleared shouldn't have rational function coefficients + assert sp.together(ode_in_x_cleared) == ode_in_x_cleared + f_x_derivs = _make_sympy_vec("f_x", ode_order+1) + poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) + coeffs = ode_in_x_to_coeff_array(poly, ode_order, var) + return recurrence_from_coeff_array(coeffs, var) + + def process_recurrence_relation(r: sp.Expr, replace=True) -> tuple[int, sp.Expr]: r""" @@ -326,10 +345,19 @@ def process_recurrence_relation(r: sp.Expr, return order, true_recurrence1 -def __check_neg_ind(r_n): - terms = list(r_n.atoms(sp.Function)) + +def extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, + np.ndarray]: + r""" + Given a recurrence extracts the variables in the recurrence + as well as the indexes in sorted order. + + :arg r: recurrence to extract terms from + """ + terms = list(r.atoms(sp.Function)) terms = np.array(terms) + idx_l = [] for i in range(len(terms)): tms = list(terms[i].atoms(sp.Number)) @@ -342,32 +370,32 @@ def __check_neg_ind(r_n): idx_l = idx_l[idx_sort] terms = terms[idx_sort] - return np.any(idx_l < 0) + return idx_l, terms -def get_lower_order_expressions(p, recurrence): +def __check_neg_ind(r_n): r""" - A function that takes in as input an order of expansion - and a recurrence relation and outputs an array of hardcoded recurrence - expressions for each order. If an expression for a certain order - doesn't exist 0 is output. Also returns the number of initial conditions - needed. + Simply checks if a negative index exists in a recurrence relation. + """ - :arg recurrence: a recurrence relation in :math:`s(n)` - :arg p: number of orders needed for recurrence expressions + idx_l, _ = extract_idx_terms_from_recurrence(r_n) + + return np.any(idx_l < 0) + + +def __get_initial_c(recurrence): + r""" + For a given recurrence checks how many initial conditions by + checking for non-negative indexed terms. """ - p = 5 - initial_c = 0 - recur_arr = [0] * p n = sp.symbols("n") - for i in range(p): + + i = 0 + r_c = recurrence.subs(n, i) + while __check_neg_ind(r_c): + i += 1 r_c = recurrence.subs(n, i) - if __check_neg_ind(r_c): - recur_arr[i] = 0 - initial_c = i - else: - recur_arr[i] = sp.cancel(r_c) - return initial_c, recur_arr + return i def shift_recurrence(r: sp.Expr, var: np.ndarray) -> sp.Expr: @@ -377,148 +405,203 @@ def shift_recurrence(r: sp.Expr, var: np.ndarray) -> sp.Expr: :arg recurrence: a recurrence relation in :math:`s(n)` """ - r0 = r - for i in range(len(var)): - r0 = r0.subs(var[i], -var[i]) - return r0 + idx_l, terms = extract_idx_terms_from_recurrence(r) + r_ret = r -def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: + n = sp.symbols('n') + for i in range(len(idx_l)): + r_ret = r_ret.subs(terms[i], (-1)**(n+idx_l[i])*terms[i]) + + return r_ret*((-1)**(n+1)) + + +def get_processed_recurrence_from_pde_shift(pde, ndim) -> tuple[int, int, + sp.Expr]: r""" - A function that takes in as input a sympy PDE and outputs a recurrence - relation. + A function that "shifts" the recurrence so the expansion center is placed + at the origin and source is the input for the recurrence generated. - :arg pde: a :class:`sumpy.expansion.diff_op.LinearSystemPDEOperator` - that must satisfy ``pde.eqs == 1`` and have polynomial coefficients - in the coordinates. - :arg var: array of sympy variables :math:`[x_0, x_1, \dots]` + :arg recurrence: a recurrence relation in :math:`s(n)` """ - ode_in_r, var, ode_order = pde_to_ode_in_r(pde) - ode_in_x = ode_in_r_to_x(ode_in_r, var, ode_order).simplify() - ode_in_x_cleared = (ode_in_x * var[0]**(ode_order+1)).simplify() - # ode_in_x_cleared shouldn't have rational function coefficients - assert sp.together(ode_in_x_cleared) == ode_in_x_cleared - f_x_derivs = _make_sympy_vec("f_x", ode_order+1) - poly = sp.Poly(ode_in_x_cleared, *f_x_derivs) - coeffs = ode_in_x_to_coeff_array(poly, ode_order, var) - return recurrence_from_coeff_array(coeffs, var) + r = recurrence_from_pde(pde) + var = _make_sympy_vec("x", ndim) + order, r_p = process_recurrence_relation(r, False) + n_initial = __get_initial_c(r_p) + r_s = shift_recurrence(r_p, var) + return n_initial, order, r_s -def test_recurrence_finder_laplace(): - """ - Tests our recurrence relation generator for Lapalace 2D. - """ - w = make_identity_diff_op(2) - laplace2d = laplacian(w) - r = recurrence_from_pde(laplace2d) - n = sp.symbols("n") - s = sp.Function("s") +# ================ Transform/Rotate ================= +def __produce_orthogonal_basis(normals): + ndim, ncenters = normals.shape + orth_coordsys = [normals] + for i in range(1, ndim): + v = np.random.rand(ndim, ncenters) + v = v/np.linalg.norm(v, 2, axis=0) + for j in range(i): + v = v - np.einsum("dc,dc->c", v, orth_coordsys[j]) * orth_coordsys[j] + v = v/np.linalg.norm(v, 2, axis=0) + orth_coordsys.append(v) - def deriv_laplace(i): - x, y = sp.symbols("x,y") - var = _make_sympy_vec("x", 2) - true_f = sp.log(sp.sqrt(x**2 + y**2)) - return sp.diff(true_f, x, i).subs(x, var[0]).subs( - y, var[1]) - d = 6 - # pylint: disable=not-callable + return orth_coordsys - r_sub = r.subs(n, d) - for i in range(d-1, d+3): - r_sub = r_sub.subs(s(i), deriv_laplace(i)) - r_sub = r_sub.simplify() - assert r_sub == 0 +def __compute_rotated_shifted_coordinates(sources, centers, normals): + cts = sources[:, None] - centers[:, :, None] + orth_coordsys = __produce_orthogonal_basis(normals) + cts_rotated_shifted = np.einsum("idc,dcs->ics", orth_coordsys, cts) -def test_recurrence_finder_laplace_three_d(): - """ - Tests our recurrence relation generator for Laplace 3D. + return cts_rotated_shifted + + +# ================ Recurrence LP Eval ================= +def recurrence_qbx_lp(sources, centers, normals, strengths, radius, pde, g_x_y, + p) -> np.ndarray: + r""" + A function that computes a single-layer potential using a recurrence. + + :arg sources: a (ndim, nsources) array of source locations + :arg centers: a (ndim, ncenters) array of center locations + :arg normals: a (ndim, ncenters) array of normals + :arg strengths: array corresponding to quadrature weight multiplied by + density + :arg radius: expansion radius + :arg pde: pde that we are computing layer potential for + :arg g_x_y: a green's function in (x0, x1, ...) source and + (t0, t1, ...) target + :arg p: order of expansion computed """ - w = make_identity_diff_op(3) - laplace3d = laplacian(w) - r = recurrence_from_pde(laplace3d) - n = sp.symbols("n") - s = sp.Function("s") - def deriv_laplace_three_d(i): - x, y, z = sp.symbols("x,y,z") - var = _make_sympy_vec("x", 3) - true_f = 1/(sp.sqrt(x**2 + y**2 + z**2)) - return sp.diff(true_f, x, i).subs(x, var[0]).subs( - y, var[1]).subs(z, var[2]) + #------------- 2. Compute rotated/shifted coordinates + cts_r_s = __compute_rotated_shifted_coordinates(sources, centers, normals) - d = 6 - # pylint: disable=not-callable - r_sub = r.subs(n, d) - for i in range(d-1, d+3): - r_sub = r_sub.subs(s(i), deriv_laplace_three_d(i)) - r_sub = r_sub.simplify() - assert r_sub == 0 + #------------- 4. Compute green's function expression + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + + #------------ 5. Compute recurrence + n_initial, order, recurrence = get_processed_recurrence_from_pde_shift(pde, ndim=2) + + #------------ 6. Set order p = 5 + n_p = sources.shape[1] + storage = [np.zeros((n_p,n_p))] * order -def test_recurrence_finder_helmholtz_three_d(): - """ - Tests our recurrence relation generator for Helmhotlz 3D. - """ - # We are creating the recurrence relation for helmholtz3d which - # seems to be an order 5 recurrence relation - w = make_identity_diff_op(3) - helmholtz3d = laplacian(w) + w - r = recurrence_from_pde(helmholtz3d) - - def deriv_helmholtz_three_d(i, s_loc): - s_x = s_loc[0] - s_y = s_loc[1] - s_z = s_loc[2] - x, y, z = sp.symbols("x,y,z") - true_f = sp.exp(1j * sp.sqrt(x**2 + y**2 + z**2) - ) / (sp.sqrt(x**2 + y**2 + z**2)) - return sp.diff(true_f, x, i).subs(x, s_x).subs( - y, s_y).subs(z, s_z) - # Create relevant symbols - var = _make_sympy_vec("x", 3) - n = sp.symbols("n") s = sp.Function("s") + r,n = sp.symbols("r,n") + + def generate_lamb_expr(i, n_initial): + arg_list = [] + for j in range(order,0,-1): + arg_list.append(s(i-j)) + arg_list.append(var[0]) + arg_list.append(var[1]) + arg_list.append(r) + + if i < n_initial: + lamb_expr = sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) + else: + lamb_expr = recurrence.subs(n, i) + return sp.lambdify(arg_list, lamb_expr) - rng = np.random.default_rng() + interactions_2d = 0 + for i in range(p+1): + lamb_expr = generate_lamb_expr(i, n_initial) + a = storage[-4:] + [cts_r_s[0],cts_r_s[1],radius] + s_new = lamb_expr(*a) + interactions_2d += s_new * radius**i/math.factorial(i) - # Create random source location - s_loc = rng.uniform(size=3) + storage.pop(0) + storage.append(s_new) - # Create random order to check - d = randrange(0, 5) + exp_res = (interactions_2d * strengths[None, :]).sum(axis=1) - # Substitute random location into recurrence relation and value of n = d - r_loc = r.subs(var[0], s_loc[0]) - r_loc = r_loc.subs(var[1], s_loc[1]) - r_loc = r_loc.subs(var[2], s_loc[2]) - r_sub = r_loc.subs(n, d) + return exp_res - # Checking that the recurrence holds to some machine epsilon - for i in range(max(d-3, 0), d+3): - # pylint: disable=not-callable - r_sub = r_sub.subs(s(i), deriv_helmholtz_three_d(i, s_loc)) - err = abs(abs(r_sub).evalf()) - print(err) - assert err <= 1e-10 +# TEST CODE +from sumpy.expansion.diff_op import ( + laplacian, + make_identity_diff_op, +) -def test_get_lower_order_expressions_laplace_2D(): - """ - Tests our expression generator for Laplace 2D. - """ - +import numpy as np +from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion + + +actx_factory = _acf +expn_class = LineTaylorLocalExpansion + +actx = actx_factory() + +from sumpy.kernel import LaplaceKernel +lknl = LaplaceKernel(2) + +from sumpy.qbx import LayerPotential + +def qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): + lpot = LayerPotential(actx.context, + expansion=expn_class(lknl, order), + target_kernels=(lknl,), + source_kernels=(lknl,)) + + #print(lpot.get_kernel()) + expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) + sources = actx.from_numpy(sources) + targets = actx.from_numpy(targets) + centers = actx.from_numpy(centers) + + strengths = (strengths,) + + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii) + result_qbx = actx.to_numpy(result_qbx) + + return result_qbx + +def create_ellipse(n_p): + h = 9.688 / n_p + radius = 7*h + t = np.linspace(0, 2 * np.pi, n_p, endpoint=False) + + unit_circle_param = np.exp(1j * t) + unit_circle = np.array([2 * unit_circle_param.real, unit_circle_param.imag]) + + sources = unit_circle + normals = np.array([unit_circle_param.real, 2*unit_circle_param.imag]) + normals = normals / np.linalg.norm(normals, axis=0) + centers = sources - normals * radius + + mode_nr = 25 + density = np.cos(mode_nr * t) + + return sources, centers, normals, density, h, radius + +def test_recurrence_laplace_2d_ellipse(): + + #------------- 1. Define PDE, Green's Function w = make_identity_diff_op(2) laplace2d = laplacian(w) - r = recurrence_from_pde(laplace2d) - var = _make_sympy_vec("x", 2) - r = shift_recurrence(r, var) - _, r_processed = process_recurrence_relation(r, False) - _, recur_arr = get_lower_order_expressions(5, r_processed) - - print(recur_arr) + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + g_x_y = (-1/(2*np.pi)) * sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) + + p = 4 + err = [] + for n_p in range(200, 1001, 200): + sources, centers, normals, density, h, radius = create_ellipse(n_p) + strengths = h * density + exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, p) + qbx_res = qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) + #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) + err.append(np.max(exp_res - qbx_res)) + print(err) -test_get_lower_order_expressions_laplace_2D() \ No newline at end of file +test_recurrence_laplace_2d_ellipse() \ No newline at end of file diff --git a/test/test_recurrence.py b/test/test_recurrence.py new file mode 100644 index 00000000..aa9e0129 --- /dev/null +++ b/test/test_recurrence.py @@ -0,0 +1,83 @@ +from sumpy.expansion.diff_op import ( + laplacian, + make_identity_diff_op, +) + +import numpy as np +from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion + + +actx_factory = _acf +expn_class = LineTaylorLocalExpansion + +actx = actx_factory() + +from sumpy.kernel import LaplaceKernel +lknl = LaplaceKernel(2) + +from sumpy.qbx import LayerPotential +from sumpy.recurrence import recurrence_qbx_lp, _make_sympy_vec + +def qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): + lpot = LayerPotential(actx.context, + expansion=expn_class(lknl, order), + target_kernels=(lknl,), + source_kernels=(lknl,)) + + #print(lpot.get_kernel()) + expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) + sources = actx.from_numpy(sources) + targets = actx.from_numpy(targets) + centers = actx.from_numpy(centers) + + strengths = (strengths,) + + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii) + result_qbx = actx.to_numpy(result_qbx) + + return result_qbx + +def create_ellipse(n_p): + h = 9.688 / n_p + radius = 7*h + t = np.linspace(0, 2 * np.pi, n_p, endpoint=False) + + unit_circle_param = np.exp(1j * t) + unit_circle = np.array([2 * unit_circle_param.real, unit_circle_param.imag]) + + sources = unit_circle + normals = np.array([unit_circle_param.real, 2*unit_circle_param.imag]) + normals = normals / np.linalg.norm(normals, axis=0) + centers = sources - normals * radius + + mode_nr = 25 + density = np.cos(mode_nr * t) + + return sources, centers, normals, density, h, radius + +def test_recurrence_laplace_2d_ellipse(): + + #------------- 1. Define PDE, Green's Function + w = make_identity_diff_op(2) + laplace2d = laplacian(w) + + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + g_x_y = (-1/(2*np.pi)) * sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) + + p = 4 + err = [] + for n_p in range(200, 1001, 200): + sources, centers, normals, density, h, radius = create_ellipse(n_p) + strengths = h * density + exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, p) + qbx_res = qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) + #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) + err.append(np.max(exp_res - qbx_res)) + + print(err) + From ab46c104e95c1915e5cedc2525483181fb743100 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 30 Oct 2024 13:36:47 -0500 Subject: [PATCH 054/143] Separate file/move to test file --- sumpy/recurrence.py | 173 ---------------------------------------- sumpy/recurrenceqbx.py | 100 +++++++++++++++++++++++ test/test_recurrence.py | 3 +- 3 files changed, 102 insertions(+), 174 deletions(-) create mode 100644 sumpy/recurrenceqbx.py diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index e75c1968..d3d195ab 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -432,176 +432,3 @@ def get_processed_recurrence_from_pde_shift(pde, ndim) -> tuple[int, int, return n_initial, order, r_s -# ================ Transform/Rotate ================= -def __produce_orthogonal_basis(normals): - ndim, ncenters = normals.shape - orth_coordsys = [normals] - for i in range(1, ndim): - v = np.random.rand(ndim, ncenters) - v = v/np.linalg.norm(v, 2, axis=0) - for j in range(i): - v = v - np.einsum("dc,dc->c", v, orth_coordsys[j]) * orth_coordsys[j] - v = v/np.linalg.norm(v, 2, axis=0) - orth_coordsys.append(v) - - return orth_coordsys - - -def __compute_rotated_shifted_coordinates(sources, centers, normals): - - cts = sources[:, None] - centers[:, :, None] - orth_coordsys = __produce_orthogonal_basis(normals) - cts_rotated_shifted = np.einsum("idc,dcs->ics", orth_coordsys, cts) - - return cts_rotated_shifted - - -# ================ Recurrence LP Eval ================= -def recurrence_qbx_lp(sources, centers, normals, strengths, radius, pde, g_x_y, - p) -> np.ndarray: - r""" - A function that computes a single-layer potential using a recurrence. - - :arg sources: a (ndim, nsources) array of source locations - :arg centers: a (ndim, ncenters) array of center locations - :arg normals: a (ndim, ncenters) array of normals - :arg strengths: array corresponding to quadrature weight multiplied by - density - :arg radius: expansion radius - :arg pde: pde that we are computing layer potential for - :arg g_x_y: a green's function in (x0, x1, ...) source and - (t0, t1, ...) target - :arg p: order of expansion computed - """ - - #------------- 2. Compute rotated/shifted coordinates - cts_r_s = __compute_rotated_shifted_coordinates(sources, centers, normals) - - - #------------- 4. Compute green's function expression - var = _make_sympy_vec("x", 2) - var_t = _make_sympy_vec("t", 2) - - #------------ 5. Compute recurrence - n_initial, order, recurrence = get_processed_recurrence_from_pde_shift(pde, ndim=2) - - #------------ 6. Set order p = 5 - n_p = sources.shape[1] - storage = [np.zeros((n_p,n_p))] * order - - s = sp.Function("s") - r,n = sp.symbols("r,n") - - def generate_lamb_expr(i, n_initial): - arg_list = [] - for j in range(order,0,-1): - arg_list.append(s(i-j)) - arg_list.append(var[0]) - arg_list.append(var[1]) - arg_list.append(r) - - if i < n_initial: - lamb_expr = sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) - else: - lamb_expr = recurrence.subs(n, i) - return sp.lambdify(arg_list, lamb_expr) - - interactions_2d = 0 - for i in range(p+1): - lamb_expr = generate_lamb_expr(i, n_initial) - a = storage[-4:] + [cts_r_s[0],cts_r_s[1],radius] - s_new = lamb_expr(*a) - interactions_2d += s_new * radius**i/math.factorial(i) - - storage.pop(0) - storage.append(s_new) - - exp_res = (interactions_2d * strengths[None, :]).sum(axis=1) - - return exp_res - - -# TEST CODE -from sumpy.expansion.diff_op import ( - laplacian, - make_identity_diff_op, -) - -import numpy as np -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 -from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion - - -actx_factory = _acf -expn_class = LineTaylorLocalExpansion - -actx = actx_factory() - -from sumpy.kernel import LaplaceKernel -lknl = LaplaceKernel(2) - -from sumpy.qbx import LayerPotential - -def qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): - lpot = LayerPotential(actx.context, - expansion=expn_class(lknl, order), - target_kernels=(lknl,), - source_kernels=(lknl,)) - - #print(lpot.get_kernel()) - expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) - sources = actx.from_numpy(sources) - targets = actx.from_numpy(targets) - centers = actx.from_numpy(centers) - - strengths = (strengths,) - - _evt, (result_qbx,) = lpot( - actx.queue, - targets, sources, centers, strengths, - expansion_radii=expansion_radii) - result_qbx = actx.to_numpy(result_qbx) - - return result_qbx - -def create_ellipse(n_p): - h = 9.688 / n_p - radius = 7*h - t = np.linspace(0, 2 * np.pi, n_p, endpoint=False) - - unit_circle_param = np.exp(1j * t) - unit_circle = np.array([2 * unit_circle_param.real, unit_circle_param.imag]) - - sources = unit_circle - normals = np.array([unit_circle_param.real, 2*unit_circle_param.imag]) - normals = normals / np.linalg.norm(normals, axis=0) - centers = sources - normals * radius - - mode_nr = 25 - density = np.cos(mode_nr * t) - - return sources, centers, normals, density, h, radius - -def test_recurrence_laplace_2d_ellipse(): - - #------------- 1. Define PDE, Green's Function - w = make_identity_diff_op(2) - laplace2d = laplacian(w) - - var = _make_sympy_vec("x", 2) - var_t = _make_sympy_vec("t", 2) - g_x_y = (-1/(2*np.pi)) * sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) - - p = 4 - err = [] - for n_p in range(200, 1001, 200): - sources, centers, normals, density, h, radius = create_ellipse(n_p) - strengths = h * density - exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, p) - qbx_res = qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) - #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) - err.append(np.max(exp_res - qbx_res)) - - print(err) - -test_recurrence_laplace_2d_ellipse() \ No newline at end of file diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py new file mode 100644 index 00000000..800d18e0 --- /dev/null +++ b/sumpy/recurrenceqbx.py @@ -0,0 +1,100 @@ +r""" +With the functionality in this module, we aim to compute layer potentials +using a recurrence for one-dimensional derivatives of the corresponding +Green's function. See recurrence.py. + +.. autofunction:: recurrence_qbx_lp +""" +import numpy as np +import sympy as sp +from sumpy.recurrence import ( + _make_sympy_vec, + get_processed_recurrence_from_pde_shift) + +# ================ Transform/Rotate ================= +def __produce_orthogonal_basis(normals): + ndim, ncenters = normals.shape + orth_coordsys = [normals] + for i in range(1, ndim): + v = np.random.rand(ndim, ncenters) + v = v/np.linalg.norm(v, 2, axis=0) + for j in range(i): + v = v - np.einsum("dc,dc->c", v, orth_coordsys[j]) * orth_coordsys[j] + v = v/np.linalg.norm(v, 2, axis=0) + orth_coordsys.append(v) + + return orth_coordsys + + +def __compute_rotated_shifted_coordinates(sources, centers, normals): + + cts = sources[:, None] - centers[:, :, None] + orth_coordsys = __produce_orthogonal_basis(normals) + cts_rotated_shifted = np.einsum("idc,dcs->ics", orth_coordsys, cts) + + return cts_rotated_shifted + + +# ================ Recurrence LP Eval ================= +def recurrence_qbx_lp(sources, centers, normals, strengths, radius, pde, g_x_y, + p) -> np.ndarray: + r""" + A function that computes a single-layer potential using a recurrence. + + :arg sources: a (ndim, nsources) array of source locations + :arg centers: a (ndim, ncenters) array of center locations + :arg normals: a (ndim, ncenters) array of normals + :arg strengths: array corresponding to quadrature weight multiplied by + density + :arg radius: expansion radius + :arg pde: pde that we are computing layer potential for + :arg g_x_y: a green's function in (x0, x1, ...) source and + (t0, t1, ...) target + :arg p: order of expansion computed + """ + + #------------- 2. Compute rotated/shifted coordinates + cts_r_s = __compute_rotated_shifted_coordinates(sources, centers, normals) + + + #------------- 4. Compute green's function expression + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + + #------------ 5. Compute recurrence + n_initial, order, recurrence = get_processed_recurrence_from_pde_shift(pde, ndim=2) + + #------------ 6. Set order p = 5 + n_p = sources.shape[1] + storage = [np.zeros((n_p,n_p))] * order + + s = sp.Function("s") + r,n = sp.symbols("r,n") + + def generate_lamb_expr(i, n_initial): + arg_list = [] + for j in range(order,0,-1): + arg_list.append(s(i-j)) + arg_list.append(var[0]) + arg_list.append(var[1]) + arg_list.append(r) + + if i < n_initial: + lamb_expr = sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) + else: + lamb_expr = recurrence.subs(n, i) + return sp.lambdify(arg_list, lamb_expr) + + interactions_2d = 0 + for i in range(p+1): + lamb_expr = generate_lamb_expr(i, n_initial) + a = storage[-4:] + [cts_r_s[0],cts_r_s[1],radius] + s_new = lamb_expr(*a) + interactions_2d += s_new * radius**i/math.factorial(i) + + storage.pop(0) + storage.append(s_new) + + exp_res = (interactions_2d * strengths[None, :]).sum(axis=1) + + return exp_res \ No newline at end of file diff --git a/test/test_recurrence.py b/test/test_recurrence.py index aa9e0129..bff61694 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -2,6 +2,7 @@ laplacian, make_identity_diff_op, ) +from sumpy.recurrenceqbx import recurrence_qbx_lp, _make_sympy_vec import numpy as np from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 @@ -17,7 +18,7 @@ lknl = LaplaceKernel(2) from sumpy.qbx import LayerPotential -from sumpy.recurrence import recurrence_qbx_lp, _make_sympy_vec + def qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): lpot = LayerPotential(actx.context, From aa1dab02c9ce2230f2818a7fa7a5e88f5bd1dd67 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 31 Oct 2024 03:45:53 -0500 Subject: [PATCH 055/143] Remove outdated code recurrence --- sumpy/recurrence.py | 46 +++++++++------------------------------------ 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index d3d195ab..2f1cc0ff 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -25,6 +25,9 @@ .. autofunction:: ode_in_x_to_coeff_array .. autofunction:: recurrence_from_coeff_array .. autofunction:: recurrence_from_pde +.. autofunction:: process_recurrence_relation +.. autofunction:: shift_recurrence + """ from __future__ import annotations @@ -293,28 +296,9 @@ def process_recurrence_relation(r: sp.Expr, relation that has the nth term in terms of the n-1th, n-2th etc. Also returns the order of the recurrence relation. - If replace=True then the recurrence is output in a form that is ideal - for pymbolic processing. If replace=False then a standard recurrence - is output. - :arg recurrence: a recurrence relation in :math:`s(n)` """ - terms = list(r.atoms(sp.Function)) - terms = np.array(terms) - - # Sort terms and create idx_l - idx_l = [] - for i in range(len(terms)): - tms = list(terms[i].atoms(sp.Number)) - if len(tms) == 1: - idx_l.append(tms[0]) - else: - idx_l.append(0) - idx_l = np.array(idx_l, dtype='int') - idx_sort = idx_l.argsort() - idx_l = idx_l[idx_sort] - terms = terms[idx_sort] - + idx_l, terms = _extract_idx_terms_from_recurrence(r) # Order is the max difference between highest/lowest in idx_l order = max(idx_l) - min(idx_l) + 1 @@ -332,21 +316,10 @@ def process_recurrence_relation(r: sp.Expr, for i in range(0, len(terms)-1)]) true_recurrence1 = true_recurrence.subs(n, n-shift_idx) - if replace: - # Replace s(n-1) with snm_1, s(n-2) with snm_2 etc. - # because pymbolic.substitute won't recognize it - last_syms = [sp.Symbol(f"anm{i+1}") for i in range(order-1)] - # pylint: disable=not-callable - # Assumes order > 1 - true_recurrence2 = true_recurrence1.subs(s(n-1), last_syms[0]) - for i in range(2, order): - true_recurrence2 = true_recurrence2.subs(s(n-i), last_syms[i-1]) - return order, true_recurrence2 - return order, true_recurrence1 -def extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, +def _extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, np.ndarray]: r""" Given a recurrence extracts the variables in the recurrence @@ -398,7 +371,7 @@ def __get_initial_c(recurrence): return i -def shift_recurrence(r: sp.Expr, var: np.ndarray) -> sp.Expr: +def shift_recurrence(r: sp.Expr) -> sp.Expr: r""" A function that "shifts" the recurrence so it's center is placed at the origin and source is the input for the recurrence generated. @@ -416,7 +389,7 @@ def shift_recurrence(r: sp.Expr, var: np.ndarray) -> sp.Expr: return r_ret*((-1)**(n+1)) -def get_processed_recurrence_from_pde_shift(pde, ndim) -> tuple[int, int, +def get_processed_and_shifted_recurrence(pde) -> tuple[int, int, sp.Expr]: r""" A function that "shifts" the recurrence so the expansion center is placed @@ -425,10 +398,9 @@ def get_processed_recurrence_from_pde_shift(pde, ndim) -> tuple[int, int, :arg recurrence: a recurrence relation in :math:`s(n)` """ r = recurrence_from_pde(pde) - var = _make_sympy_vec("x", ndim) - order, r_p = process_recurrence_relation(r, False) + order, r_p = process_recurrence_relation(r) n_initial = __get_initial_c(r_p) - r_s = shift_recurrence(r_p, var) + r_s = shift_recurrence(r_p) return n_initial, order, r_s From 52a859d89f54a6f74bdb39c2a322c3b8eaba6b2f Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 31 Oct 2024 04:06:30 -0500 Subject: [PATCH 056/143] Renamed function for clarity --- sumpy/recurrence.py | 2 +- sumpy/recurrenceqbx.py | 6 +++--- test/test_recurrenceqbx.py | 0 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 test/test_recurrenceqbx.py diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 2f1cc0ff..0696ba36 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -27,7 +27,7 @@ .. autofunction:: recurrence_from_pde .. autofunction:: process_recurrence_relation .. autofunction:: shift_recurrence - +.. autofunction:: get_processed_and_shifted_recurrence """ from __future__ import annotations diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index 800d18e0..b620c6fb 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -9,7 +9,7 @@ import sympy as sp from sumpy.recurrence import ( _make_sympy_vec, - get_processed_recurrence_from_pde_shift) + get_processed_and_shifted_recurrence) # ================ Transform/Rotate ================= def __produce_orthogonal_basis(normals): @@ -57,12 +57,12 @@ def recurrence_qbx_lp(sources, centers, normals, strengths, radius, pde, g_x_y, cts_r_s = __compute_rotated_shifted_coordinates(sources, centers, normals) - #------------- 4. Compute green's function expression + #------------- 4. Define input variables for green's function expression var = _make_sympy_vec("x", 2) var_t = _make_sympy_vec("t", 2) #------------ 5. Compute recurrence - n_initial, order, recurrence = get_processed_recurrence_from_pde_shift(pde, ndim=2) + n_initial, order, recurrence = get_processed_and_shifted_recurrence(pde) #------------ 6. Set order p = 5 n_p = sources.shape[1] diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py new file mode 100644 index 00000000..e69de29b From 473d714722dc1fc5cc10e9dfa28196d5ac04e9bf Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 1 Nov 2024 18:13:42 -0500 Subject: [PATCH 057/143] Update recurrence.py --- sumpy/recurrence.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 0696ba36..e8a9c0fb 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -289,8 +289,7 @@ def recurrence_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: return recurrence_from_coeff_array(coeffs, var) -def process_recurrence_relation(r: sp.Expr, - replace=True) -> tuple[int, sp.Expr]: +def process_recurrence_relation(r: sp.Expr) -> tuple[int, sp.Expr]: r""" A function that takes in as input a recurrence and outputs a recurrence relation that has the nth term in terms of the n-1th, n-2th etc. @@ -307,7 +306,6 @@ def process_recurrence_relation(r: sp.Expr, # Get the respective coefficients in the recurrence relation from r n = sp.symbols("n") - s = sp.Function("s") coeffs = sp.poly(r, list(terms)).coeffs() # Re-arrange the recurrence relation so we get s(n) = ____ @@ -351,7 +349,7 @@ def __check_neg_ind(r_n): Simply checks if a negative index exists in a recurrence relation. """ - idx_l, _ = extract_idx_terms_from_recurrence(r_n) + idx_l, _ = _extract_idx_terms_from_recurrence(r_n) return np.any(idx_l < 0) @@ -378,7 +376,7 @@ def shift_recurrence(r: sp.Expr) -> sp.Expr: :arg recurrence: a recurrence relation in :math:`s(n)` """ - idx_l, terms = extract_idx_terms_from_recurrence(r) + idx_l, terms = _extract_idx_terms_from_recurrence(r) r_ret = r @@ -404,3 +402,4 @@ def get_processed_and_shifted_recurrence(pde) -> tuple[int, int, return n_initial, order, r_s +print(_generate_nd_derivative_relations(_make_sympy_vec("x", 2), 3)) \ No newline at end of file From cdd85adc0136c26b79aa4dad2793062739c60b4d Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 2 Nov 2024 20:52:13 -0500 Subject: [PATCH 058/143] Added 1 test --- sumpy/recurrence.py | 5 +-- test/playground.ipynb | 0 test/test_recurrence.py | 92 +++++++++----------------------------- test/test_recurrenceqbx.py | 84 ++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 75 deletions(-) create mode 100644 test/playground.ipynb diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index e8a9c0fb..6468a794 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -399,7 +399,4 @@ def get_processed_and_shifted_recurrence(pde) -> tuple[int, int, order, r_p = process_recurrence_relation(r) n_initial = __get_initial_c(r_p) r_s = shift_recurrence(r_p) - return n_initial, order, r_s - - -print(_generate_nd_derivative_relations(_make_sympy_vec("x", 2), 3)) \ No newline at end of file + return n_initial, order, r_s \ No newline at end of file diff --git a/test/playground.ipynb b/test/playground.ipynb new file mode 100644 index 00000000..e69de29b diff --git a/test/test_recurrence.py b/test/test_recurrence.py index bff61694..270314de 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -1,84 +1,34 @@ +from sumpy.recurrence import get_processed_and_shifted_recurrence, _make_sympy_vec +import sympy as sp +import numpy as np + from sumpy.expansion.diff_op import ( laplacian, make_identity_diff_op, ) -from sumpy.recurrenceqbx import recurrence_qbx_lp, _make_sympy_vec - -import numpy as np -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 -from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion - - -actx_factory = _acf -expn_class = LineTaylorLocalExpansion - -actx = actx_factory() - -from sumpy.kernel import LaplaceKernel -lknl = LaplaceKernel(2) - -from sumpy.qbx import LayerPotential - - -def qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): - lpot = LayerPotential(actx.context, - expansion=expn_class(lknl, order), - target_kernels=(lknl,), - source_kernels=(lknl,)) - - #print(lpot.get_kernel()) - expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) - sources = actx.from_numpy(sources) - targets = actx.from_numpy(targets) - centers = actx.from_numpy(centers) - strengths = (strengths,) - - _evt, (result_qbx,) = lpot( - actx.queue, - targets, sources, centers, strengths, - expansion_radii=expansion_radii) - result_qbx = actx.to_numpy(result_qbx) - - return result_qbx - -def create_ellipse(n_p): - h = 9.688 / n_p - radius = 7*h - t = np.linspace(0, 2 * np.pi, n_p, endpoint=False) - - unit_circle_param = np.exp(1j * t) - unit_circle = np.array([2 * unit_circle_param.real, unit_circle_param.imag]) - - sources = unit_circle - normals = np.array([unit_circle_param.real, 2*unit_circle_param.imag]) - normals = normals / np.linalg.norm(normals, axis=0) - centers = sources - normals * radius - - mode_nr = 25 - density = np.cos(mode_nr * t) - - return sources, centers, normals, density, h, radius - -def test_recurrence_laplace_2d_ellipse(): - - #------------- 1. Define PDE, Green's Function +def test_laplace_2D(): w = make_identity_diff_op(2) laplace2d = laplacian(w) + _,_, r = get_processed_and_shifted_recurrence(laplace2d) + + n = sp.symbols("n") + s = sp.Function("s") var = _make_sympy_vec("x", 2) var_t = _make_sympy_vec("t", 2) - g_x_y = (-1/(2*np.pi)) * sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) + g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) + derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) for i in range(6)] + + check_2_s = r.subs(n, 2).subs(s(1), derivs[1]) - derivs[2] + check_3_s = r.subs(n, 3).subs(s(1), derivs[1]).subs(s(2), derivs[2]) - derivs[3] + check_4_s = r.subs(n, 4).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]) - derivs[4] + check_5_s = r.subs(n, 5).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]).subs(s(4), derivs[4]) - derivs[5] - p = 4 - err = [] - for n_p in range(200, 1001, 200): - sources, centers, normals, density, h, radius = create_ellipse(n_p) - strengths = h * density - exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, p) - qbx_res = qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) - #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) - err.append(np.max(exp_res - qbx_res)) + assert abs(check_2_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-15 + assert abs(check_3_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-14 + assert abs(check_4_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-12 + assert abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-12 - print(err) +test_laplace_2D() \ No newline at end of file diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index e69de29b..bff61694 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -0,0 +1,84 @@ +from sumpy.expansion.diff_op import ( + laplacian, + make_identity_diff_op, +) +from sumpy.recurrenceqbx import recurrence_qbx_lp, _make_sympy_vec + +import numpy as np +from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion + + +actx_factory = _acf +expn_class = LineTaylorLocalExpansion + +actx = actx_factory() + +from sumpy.kernel import LaplaceKernel +lknl = LaplaceKernel(2) + +from sumpy.qbx import LayerPotential + + +def qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): + lpot = LayerPotential(actx.context, + expansion=expn_class(lknl, order), + target_kernels=(lknl,), + source_kernels=(lknl,)) + + #print(lpot.get_kernel()) + expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) + sources = actx.from_numpy(sources) + targets = actx.from_numpy(targets) + centers = actx.from_numpy(centers) + + strengths = (strengths,) + + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii) + result_qbx = actx.to_numpy(result_qbx) + + return result_qbx + +def create_ellipse(n_p): + h = 9.688 / n_p + radius = 7*h + t = np.linspace(0, 2 * np.pi, n_p, endpoint=False) + + unit_circle_param = np.exp(1j * t) + unit_circle = np.array([2 * unit_circle_param.real, unit_circle_param.imag]) + + sources = unit_circle + normals = np.array([unit_circle_param.real, 2*unit_circle_param.imag]) + normals = normals / np.linalg.norm(normals, axis=0) + centers = sources - normals * radius + + mode_nr = 25 + density = np.cos(mode_nr * t) + + return sources, centers, normals, density, h, radius + +def test_recurrence_laplace_2d_ellipse(): + + #------------- 1. Define PDE, Green's Function + w = make_identity_diff_op(2) + laplace2d = laplacian(w) + + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + g_x_y = (-1/(2*np.pi)) * sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) + + p = 4 + err = [] + for n_p in range(200, 1001, 200): + sources, centers, normals, density, h, radius = create_ellipse(n_p) + strengths = h * density + exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, p) + qbx_res = qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) + #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) + err.append(np.max(exp_res - qbx_res)) + + print(err) + From 8beb851c2274926cce8cdb0836b5338249ec0eb3 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 2 Nov 2024 20:52:37 -0500 Subject: [PATCH 059/143] Update playground.ipynb --- test/playground.ipynb | 47 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/test/playground.ipynb b/test/playground.ipynb index e69de29b..8b7fa717 100644 --- a/test/playground.ipynb +++ b/test/playground.ipynb @@ -0,0 +1,47 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy as sp\n", + "import numpy as np\n", + "\n", + "from sumpy.expansion.diff_op import (\n", + " laplacian,\n", + " make_identity_diff_op,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 47844754c9ab6a92ef036f32822219510c7861fd Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 2 Nov 2024 23:03:26 -0500 Subject: [PATCH 060/143] Added helmholtz3d test --- test/test_recurrence.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 270314de..1001d61b 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -7,6 +7,34 @@ make_identity_diff_op, ) + + +def test_helmholtz_3D(): + w = make_identity_diff_op(3) + helmholtz3d = laplacian(w) + w + _,_, r = get_processed_and_shifted_recurrence(helmholtz3d) + + n = sp.symbols("n") + s = sp.Function("s") + + var = _make_sympy_vec("x", 3) + var_t = _make_sympy_vec("t", 3) + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2 + (var[2]-var_t[2])**2) + g_x_y = sp.exp(1j * abs_dist) / abs_dist + derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0).subs(var_t[2], 0) for i in range(6)] + + + check_2_s = r.subs(n, 2).subs(s(1), derivs[1]).subs(s(0), derivs[0]) - derivs[2] + assert abs(check_2_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand())) <= 1e-12 + + +test_helmholtz_3D() + + + + + + def test_laplace_2D(): w = make_identity_diff_op(2) laplace2d = laplacian(w) @@ -31,4 +59,3 @@ def test_laplace_2D(): assert abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-12 -test_laplace_2D() \ No newline at end of file From c7f7be75b5a0c306d1ebd44666b8fb63ac1097cb Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 3 Nov 2024 13:16:12 -0600 Subject: [PATCH 061/143] Laplace3D test --- test/test_recurrence.py | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 1001d61b..048890b3 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -7,12 +7,35 @@ make_identity_diff_op, ) +def test_laplace_3D(): + w = make_identity_diff_op(3) + laplace3d = laplacian(w) + _, _, r = get_processed_and_shifted_recurrence(laplace3d) + n = sp.symbols("n") + s = sp.Function("s") + + var = _make_sympy_vec("x", 3) + var_t = _make_sympy_vec("t", 3) + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2 + (var[2]-var_t[2])**2) + g_x_y = 1/abs_dist + derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0).subs(var_t[2], 0) for i in range(6)] + + check_2_s = r.subs(n, 2).subs(s(0), derivs[0]).subs(s(1), derivs[1]) - derivs[2] + check_3_s = r.subs(n, 3).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]) - derivs[3] + check_4_s = r.subs(n, 4).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]) - derivs[4] + check_5_s = r.subs(n, 5).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]).subs(s(4), derivs[4]) - derivs[5] + + assert abs(abs(check_2_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-15 + assert abs(abs(check_3_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-14 + assert abs(abs(check_4_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-12 + #print(abs(abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand())))) + assert abs(abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-12 def test_helmholtz_3D(): w = make_identity_diff_op(3) helmholtz3d = laplacian(w) + w - _,_, r = get_processed_and_shifted_recurrence(helmholtz3d) + _, _, r = get_processed_and_shifted_recurrence(helmholtz3d) n = sp.symbols("n") s = sp.Function("s") @@ -24,11 +47,18 @@ def test_helmholtz_3D(): derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0).subs(var_t[2], 0) for i in range(6)] - check_2_s = r.subs(n, 2).subs(s(1), derivs[1]).subs(s(0), derivs[0]) - derivs[2] - assert abs(check_2_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand())) <= 1e-12 + check_2_s = r.subs(n, 2).subs(s(0), derivs[0]).subs(s(1), derivs[1]) - derivs[2] + check_3_s = r.subs(n, 3).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]) - derivs[3] + check_4_s = r.subs(n, 4).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]) - derivs[4] + check_5_s = r.subs(n, 5).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]).subs(s(4), derivs[4]) - derivs[5] + + assert abs(check_2_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand())) <= 1e-15 + assert abs(abs(check_3_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-14 + assert abs(abs(check_4_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-12 + assert abs(abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-12 -test_helmholtz_3D() + From 3bbd2f3a126482adddd8e842da218e0e121212df Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 3 Nov 2024 17:58:28 -0600 Subject: [PATCH 062/143] Check Helmholtz2D --- test/playground.ipynb | 112 +++++++++++++++++++++++++++++++++++++++- test/test_recurrence.py | 26 +++++++++- 2 files changed, 134 insertions(+), 4 deletions(-) diff --git a/test/playground.ipynb b/test/playground.ipynb index 8b7fa717..6fffa849 100644 --- a/test/playground.ipynb +++ b/test/playground.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -12,7 +12,115 @@ "from sumpy.expansion.diff_op import (\n", " laplacian,\n", " make_identity_diff_op,\n", - ")\n" + ")\n", + "\n", + "from sumpy.recurrence import _make_sympy_vec\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "#Create Hankel Function\n", + "\n", + "from sympy import hankel1\n", + "z = sp.symbols(\"z\")\n", + "f = hankel1(0, z)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{H^{(1)}_{-1}\\left(z\\right)}{2} - \\frac{H^{(1)}_{1}\\left(z\\right)}{2}$" + ], + "text/plain": [ + "hankel1(-1, z)/2 - hankel1(1, z)/2" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.diff(z)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "var = _make_sympy_vec(\"x\", 2)\n", + "var_t = _make_sympy_vec(\"t\", 2)\n", + "k = 1\n", + "abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)\n", + "g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 0.25 i H^{(1)}_{0}\\left(\\sqrt{\\left(- t_{0} + x_{0}\\right)^{2} + \\left(- t_{1} + x_{1}\\right)^{2}}\\right)$" + ], + "text/plain": [ + "0.25*I*hankel1(0, sqrt((-t0 + x0)**2 + (-t1 + x1)**2))" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g_x_y" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) for i in range(6)]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.25*I*hankel1(0, sqrt(x0**2 + x1**2)),\n", + " -0.25*I*x0*(hankel1(-1, sqrt(x0**2 + x1**2))/2 - hankel1(1, sqrt(x0**2 + x1**2))/2)/sqrt(x0**2 + x1**2),\n", + " 0.0625*I*(x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2)),\n", + " 0.03125*I*x0*(4*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 12*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - (x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 12*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2)),\n", + " -0.25*I*(-9*x0**4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(4*(x0**2 + x1**2)**3) + 15*x0**4*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(2*(x0**2 + x1**2)**(7/2)) + 9*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(4*(x0**2 + x1**2)**2) + x0**2*(4*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 4*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 12*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 12*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 4*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 4*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + (-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - (-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 12*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 12*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/(16*sqrt(x0**2 + x1**2)) + 3*x0**2*(x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(8*(x0**2 + x1**2)**(3/2)) - 9*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 3*(x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(8*sqrt(x0**2 + x1**2)) + 3*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(2*(x0**2 + x1**2)**(3/2))),\n", + " 0.0078125*I*x0*(480*x0**4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**4 - 1680*x0**4*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(9/2) - 576*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**3 - 8*x0**2*(4*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 4*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 12*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 12*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 4*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 4*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + (-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - (-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 12*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 12*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/(x0**2 + x1**2)**(3/2) - 72*x0**2*(x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(x0**2 + x1**2)**(5/2) + 2400*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(7/2) + 96*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 8*(4*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 4*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 12*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 12*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 4*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 4*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + (-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - (-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 12*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 12*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/sqrt(x0**2 + x1**2) - (36*x0**4*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**3 - 36*x0**4*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**3 - 120*x0**4*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(7/2) + 120*x0**4*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(7/2) - 36*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 36*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + x0**2*(-4*x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 4*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 12*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 12*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 4*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - (-x0**2*(hankel1(-5, sqrt(x0**2 + x1**2)) - 2*hankel1(-3, sqrt(x0**2 + x1**2)) + hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - hankel1(-2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-4, sqrt(x0**2 + x1**2)) - hankel1(-2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + (-x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - 12*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 12*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/sqrt(x0**2 + x1**2) - x0**2*(-4*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 4*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 12*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 12*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 4*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - (-x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + (-x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - 2*hankel1(3, sqrt(x0**2 + x1**2)) + hankel1(5, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(2, sqrt(x0**2 + x1**2)) - hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(2, sqrt(x0**2 + x1**2)) - hankel1(4, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - 12*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 12*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/sqrt(x0**2 + x1**2) + 6*x0**2*(-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(x0**2 + x1**2)**(3/2) - 6*x0**2*(-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(x0**2 + x1**2)**(3/2) + 144*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 144*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 6*(-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 6*(-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - 24*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 24*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/sqrt(x0**2 + x1**2) + 72*(x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(x0**2 + x1**2)**(3/2) - 720*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2))]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "derivs" ] }, { diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 048890b3..41051b27 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -1,7 +1,7 @@ from sumpy.recurrence import get_processed_and_shifted_recurrence, _make_sympy_vec import sympy as sp import numpy as np - +from sympy import hankel1 from sumpy.expansion.diff_op import ( laplacian, make_identity_diff_op, @@ -59,11 +59,33 @@ def test_helmholtz_3D(): +def test_helmholtz_2D(): + w = make_identity_diff_op(2) + laplace2d = laplacian(w) + w + _,_, r = get_processed_and_shifted_recurrence(laplace2d) + n = sp.symbols("n") + s = sp.Function("s") + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + k = 1 + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2) + g_x_y = (1j/4) * hankel1(0, k * abs_dist) + x_coord = np.random.rand() + y_coord = np.random.rand() + derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) for i in range(6)] + derivs = [derivs[i].subs(var[0], x_coord).subs(var[1], y_coord).evalf() for i in range(6)] + check_2_s = r.subs(n, 2).subs(s(0), derivs[0]).subs(s(1), derivs[1]) - derivs[2] + check_3_s = r.subs(n, 3).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]) - derivs[3] + check_4_s = r.subs(n, 4).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]) - derivs[4] + check_5_s = r.subs(n, 5).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]).subs(s(4), derivs[4]) - derivs[5] - + assert abs(check_2_s.subs(var[0],x_coord).subs(var[1],y_coord)) <= 1e-12 + assert abs(check_3_s.subs(var[0],x_coord).subs(var[1],y_coord)) <= 1e-12 + assert abs(check_4_s.subs(var[0],x_coord).subs(var[1],y_coord)) <= 1e-12 + assert abs(check_5_s.subs(var[0],x_coord).subs(var[1],y_coord)) <= 1e-12 def test_laplace_2D(): w = make_identity_diff_op(2) From a33bd51af49ded958c05f51e5994b6f7ee283568 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 3 Nov 2024 18:05:19 -0600 Subject: [PATCH 063/143] Added helmholtz2D test --- test/test_recurrenceqbx.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index bff61694..5fdeeebe 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -1,26 +1,22 @@ +import numpy as np + from sumpy.expansion.diff_op import ( laplacian, make_identity_diff_op, ) from sumpy.recurrenceqbx import recurrence_qbx_lp, _make_sympy_vec - -import numpy as np from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion - +from sumpy.kernel import LaplaceKernel +from sumpy.qbx import LayerPotential actx_factory = _acf expn_class = LineTaylorLocalExpansion actx = actx_factory() - -from sumpy.kernel import LaplaceKernel lknl = LaplaceKernel(2) -from sumpy.qbx import LayerPotential - - -def qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): +def _qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): lpot = LayerPotential(actx.context, expansion=expn_class(lknl, order), target_kernels=(lknl,), @@ -42,7 +38,7 @@ def qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): return result_qbx -def create_ellipse(n_p): +def _create_ellipse(n_p): h = 9.688 / n_p radius = 7*h t = np.linspace(0, 2 * np.pi, n_p, endpoint=False) @@ -73,10 +69,10 @@ def test_recurrence_laplace_2d_ellipse(): p = 4 err = [] for n_p in range(200, 1001, 200): - sources, centers, normals, density, h, radius = create_ellipse(n_p) + sources, centers, normals, density, h, radius = _create_ellipse(n_p) strengths = h * density exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, p) - qbx_res = qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) + qbx_res = _qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) err.append(np.max(exp_res - qbx_res)) From 310df005801775f3a1e2a080049b9743b9f61346 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 3 Nov 2024 18:30:24 -0600 Subject: [PATCH 064/143] Make recurrenceqbx general --- sumpy/recurrenceqbx.py | 29 +++++++++++++++++------------ test/test_recurrenceqbx.py | 9 +++++---- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index b620c6fb..a316f8a7 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -7,12 +7,14 @@ """ import numpy as np import sympy as sp +import math from sumpy.recurrence import ( _make_sympy_vec, get_processed_and_shifted_recurrence) + # ================ Transform/Rotate ================= -def __produce_orthogonal_basis(normals): +def _produce_orthogonal_basis(normals): ndim, ncenters = normals.shape orth_coordsys = [normals] for i in range(1, ndim): @@ -26,10 +28,10 @@ def __produce_orthogonal_basis(normals): return orth_coordsys -def __compute_rotated_shifted_coordinates(sources, centers, normals): +def _compute_rotated_shifted_coordinates(sources, centers, normals): cts = sources[:, None] - centers[:, :, None] - orth_coordsys = __produce_orthogonal_basis(normals) + orth_coordsys = _produce_orthogonal_basis(normals) cts_rotated_shifted = np.einsum("idc,dcs->ics", orth_coordsys, cts) return cts_rotated_shifted @@ -37,7 +39,7 @@ def __compute_rotated_shifted_coordinates(sources, centers, normals): # ================ Recurrence LP Eval ================= def recurrence_qbx_lp(sources, centers, normals, strengths, radius, pde, g_x_y, - p) -> np.ndarray: + ndim, p) -> np.ndarray: r""" A function that computes a single-layer potential using a recurrence. @@ -50,16 +52,17 @@ def recurrence_qbx_lp(sources, centers, normals, strengths, radius, pde, g_x_y, :arg pde: pde that we are computing layer potential for :arg g_x_y: a green's function in (x0, x1, ...) source and (t0, t1, ...) target + :arg ndim: number of spatial variables :arg p: order of expansion computed """ #------------- 2. Compute rotated/shifted coordinates - cts_r_s = __compute_rotated_shifted_coordinates(sources, centers, normals) + cts_r_s = _compute_rotated_shifted_coordinates(sources, centers, normals) #------------- 4. Define input variables for green's function expression - var = _make_sympy_vec("x", 2) - var_t = _make_sympy_vec("t", 2) + var = _make_sympy_vec("x", ndim) + var_t = _make_sympy_vec("t", ndim) #------------ 5. Compute recurrence n_initial, order, recurrence = get_processed_and_shifted_recurrence(pde) @@ -80,21 +83,23 @@ def generate_lamb_expr(i, n_initial): arg_list.append(r) if i < n_initial: - lamb_expr = sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) + lamb_expr = sp.diff(g_x_y, var_t[0], i) + for j in range(ndim): + lamb_expr = lamb_expr.subs(var_t[j], 0) else: lamb_expr = recurrence.subs(n, i) return sp.lambdify(arg_list, lamb_expr) - interactions_2d = 0 + interactions = 0 for i in range(p+1): lamb_expr = generate_lamb_expr(i, n_initial) - a = storage[-4:] + [cts_r_s[0],cts_r_s[1],radius] + a = storage + [cts_r_s[0],cts_r_s[1],radius] s_new = lamb_expr(*a) - interactions_2d += s_new * radius**i/math.factorial(i) + interactions += s_new * radius**i/math.factorial(i) storage.pop(0) storage.append(s_new) - exp_res = (interactions_2d * strengths[None, :]).sum(axis=1) + exp_res = (interactions * strengths[None, :]).sum(axis=1) return exp_res \ No newline at end of file diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 5fdeeebe..4d219cb8 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -1,4 +1,5 @@ import numpy as np +import sympy as sp from sumpy.expansion.diff_op import ( laplacian, @@ -71,10 +72,10 @@ def test_recurrence_laplace_2d_ellipse(): for n_p in range(200, 1001, 200): sources, centers, normals, density, h, radius = _create_ellipse(n_p) strengths = h * density - exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, p) + exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, 2, p) qbx_res = _qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) - err.append(np.max(exp_res - qbx_res)) - - print(err) + err.append(np.max(np.abs(exp_res - qbx_res))) + assert np.max(err) <= 1e-13 +test_recurrence_laplace_2d_ellipse() From e08fd824cb46408230d3ca7dc0ddf94eb8ddf5d2 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 3 Nov 2024 18:52:06 -0600 Subject: [PATCH 065/143] Helmholtz not checked --- test/test_recurrence.py | 4 +-- test/test_recurrenceqbx.py | 54 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 41051b27..1914ab54 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -61,8 +61,8 @@ def test_helmholtz_3D(): def test_helmholtz_2D(): w = make_identity_diff_op(2) - laplace2d = laplacian(w) + w - _,_, r = get_processed_and_shifted_recurrence(laplace2d) + helmholtz2d = laplacian(w) + w + _,_, r = get_processed_and_shifted_recurrence(helmholtz2d) n = sp.symbols("n") s = sp.Function("s") diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 4d219cb8..0e19faf3 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -1,5 +1,6 @@ import numpy as np import sympy as sp +from sympy import hankel1 from sumpy.expansion.diff_op import ( laplacian, @@ -8,7 +9,7 @@ from sumpy.recurrenceqbx import recurrence_qbx_lp, _make_sympy_vec from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion -from sumpy.kernel import LaplaceKernel +from sumpy.kernel import LaplaceKernel, HelmholtzKernel from sumpy.qbx import LayerPotential actx_factory = _acf @@ -16,6 +17,31 @@ actx = actx_factory() lknl = LaplaceKernel(2) +hlknl = HelmholtzKernel(2, "k") + +def _qbx_lp_helmholtz_general(sources,targets,centers,radius,strengths,order): + lpot = LayerPotential(actx.context, + expansion=expn_class(hlknl, order), + target_kernels=(hlknl,), + source_kernels=(hlknl,)) + + #print(lpot.get_kernel()) + expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) + sources = actx.from_numpy(sources) + targets = actx.from_numpy(targets) + centers = actx.from_numpy(centers) + + strengths = (strengths,) + extra_kernel_kwargs={"k": 1} + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii, + kwargs=extra_kernel_kwargs) + result_qbx = actx.to_numpy(result_qbx) + + return result_qbx + def _qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): lpot = LayerPotential(actx.context, @@ -78,4 +104,28 @@ def test_recurrence_laplace_2d_ellipse(): err.append(np.max(np.abs(exp_res - qbx_res))) assert np.max(err) <= 1e-13 -test_recurrence_laplace_2d_ellipse() + +def test_recurrence_helmholtz_2d_ellipse(): + + #------------- 1. Define PDE, Green's Function + w = make_identity_diff_op(2) + helmholtz2d = laplacian(w) + w + + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + k = 1 + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2) + g_x_y = (1j/4) * hankel1(0, k * abs_dist) + + p = 4 + err = [] + for n_p in range(200, 1001, 200): + sources, centers, normals, density, h, radius = _create_ellipse(n_p) + strengths = h * density + exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, helmholtz2d, g_x_y, 2, p) + #qbx_res = _qbx_lp_helmholtz_general(sources, sources, centers, radius, strengths, p) + #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) + #err.append(np.max(np.abs(exp_res - qbx_res))) + #assert np.max(err) <= 1e-13 + +test_recurrence_helmholtz_2d_ellipse() From dcd96e76052ea1ebd65777b8d62723b1658b2fef Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 3 Nov 2024 19:39:14 -0600 Subject: [PATCH 066/143] Ruff formatting --- sumpy/recurrence.py | 21 ++++++++---------- sumpy/recurrenceqbx.py | 48 ++++++++++++++++++++++++------------------ 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 6468a794..e77ad901 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -61,16 +61,14 @@ """ import math -from random import randrange import numpy as np import sympy as sp from pytools.obj_array import make_obj_array - from sumpy.expansion.diff_op import ( DerivativeIdentifier, - LinearPDESystemOperator + LinearPDESystemOperator, ) @@ -188,7 +186,7 @@ def ode_in_r_to_x(ode_in_r: sp.Expr, var: np.ndarray, ODECoefficients = list[list[sp.Expr]] -def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, var: +def ode_in_x_to_coeff_array(poly: sp.Poly, ode_order: int, var: np.ndarray) -> ODECoefficients: r""" Organizes the coefficients of an ODE in the :math:`x_0` variable into a @@ -310,15 +308,15 @@ def process_recurrence_relation(r: sp.Expr) -> tuple[int, sp.Expr]: # Re-arrange the recurrence relation so we get s(n) = ____ # in terms of s(n-1), ... - true_recurrence = sum([coeffs[i]/coeffs[-1] * terms[i] - for i in range(0, len(terms)-1)]) + true_recurrence = sum(coeffs[i]/coeffs[-1] * terms[i] + for i in range(0, len(terms)-1)) true_recurrence1 = true_recurrence.subs(n, n-shift_idx) return order, true_recurrence1 def _extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, - np.ndarray]: + np.ndarray]: r""" Given a recurrence extracts the variables in the recurrence as well as the indexes in sorted order. @@ -328,7 +326,6 @@ def _extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, terms = list(r.atoms(sp.Function)) terms = np.array(terms) - idx_l = [] for i in range(len(terms)): tms = list(terms[i].atoms(sp.Number)) @@ -336,7 +333,7 @@ def _extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, idx_l.append(tms[0]) else: idx_l.append(0) - idx_l = np.array(idx_l, dtype='int') + idx_l = np.array(idx_l, dtype="int") idx_sort = idx_l.argsort() idx_l = idx_l[idx_sort] terms = terms[idx_sort] @@ -380,7 +377,7 @@ def shift_recurrence(r: sp.Expr) -> sp.Expr: r_ret = r - n = sp.symbols('n') + n = sp.symbols("n") for i in range(len(idx_l)): r_ret = r_ret.subs(terms[i], (-1)**(n+idx_l[i])*terms[i]) @@ -388,7 +385,7 @@ def shift_recurrence(r: sp.Expr) -> sp.Expr: def get_processed_and_shifted_recurrence(pde) -> tuple[int, int, - sp.Expr]: + sp.Expr]: r""" A function that "shifts" the recurrence so the expansion center is placed at the origin and source is the input for the recurrence generated. @@ -399,4 +396,4 @@ def get_processed_and_shifted_recurrence(pde) -> tuple[int, int, order, r_p = process_recurrence_relation(r) n_initial = __get_initial_c(r_p) r_s = shift_recurrence(r_p) - return n_initial, order, r_s \ No newline at end of file + return n_initial, order, r_s diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index a316f8a7..083a28fb 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -1,16 +1,21 @@ r""" With the functionality in this module, we aim to compute layer potentials -using a recurrence for one-dimensional derivatives of the corresponding +using a recurrence for one-dimensional derivatives of the corresponding Green's function. See recurrence.py. .. autofunction:: recurrence_qbx_lp """ +from __future__ import annotations # noqa: I001 + +import math + import numpy as np import sympy as sp -import math + from sumpy.recurrence import ( - _make_sympy_vec, - get_processed_and_shifted_recurrence) + _make_sympy_vec, + get_processed_and_shifted_recurrence +) # ================ Transform/Rotate ================= @@ -18,10 +23,11 @@ def _produce_orthogonal_basis(normals): ndim, ncenters = normals.shape orth_coordsys = [normals] for i in range(1, ndim): - v = np.random.rand(ndim, ncenters) + v = np.random.rand(ndim, ncenters) # noqa: NPY002 v = v/np.linalg.norm(v, 2, axis=0) for j in range(i): - v = v - np.einsum("dc,dc->c", v, orth_coordsys[j]) * orth_coordsys[j] + v = v - np.einsum("dc,dc->c", v, + orth_coordsys[j]) * orth_coordsys[j] v = v/np.linalg.norm(v, 2, axis=0) orth_coordsys.append(v) @@ -39,61 +45,61 @@ def _compute_rotated_shifted_coordinates(sources, centers, normals): # ================ Recurrence LP Eval ================= def recurrence_qbx_lp(sources, centers, normals, strengths, radius, pde, g_x_y, - ndim, p) -> np.ndarray: + ndim, p) -> np.ndarray: r""" A function that computes a single-layer potential using a recurrence. :arg sources: a (ndim, nsources) array of source locations :arg centers: a (ndim, ncenters) array of center locations :arg normals: a (ndim, ncenters) array of normals - :arg strengths: array corresponding to quadrature weight multiplied by + :arg strengths: array corresponding to quadrature weight multiplied by density :arg radius: expansion radius :arg pde: pde that we are computing layer potential for - :arg g_x_y: a green's function in (x0, x1, ...) source and + :arg g_x_y: a green's function in (x0, x1, ...) source and (t0, t1, ...) target :arg ndim: number of spatial variables :arg p: order of expansion computed """ - #------------- 2. Compute rotated/shifted coordinates + # ------------- 2. Compute rotated/shifted coordinates cts_r_s = _compute_rotated_shifted_coordinates(sources, centers, normals) - - #------------- 4. Define input variables for green's function expression + # ------------- 4. Define input variables for green's function expression var = _make_sympy_vec("x", ndim) var_t = _make_sympy_vec("t", ndim) - #------------ 5. Compute recurrence + # ------------ 5. Compute recurrence n_initial, order, recurrence = get_processed_and_shifted_recurrence(pde) - #------------ 6. Set order p = 5 + # ------------ 6. Set order p = 5 n_p = sources.shape[1] - storage = [np.zeros((n_p,n_p))] * order + storage = [np.zeros((n_p, n_p))] * order s = sp.Function("s") - r,n = sp.symbols("r,n") + r, n = sp.symbols("r,n") def generate_lamb_expr(i, n_initial): arg_list = [] - for j in range(order,0,-1): + for j in range(order, 0, -1): + # pylint: disable-next=not-callable arg_list.append(s(i-j)) arg_list.append(var[0]) arg_list.append(var[1]) arg_list.append(r) - + if i < n_initial: lamb_expr = sp.diff(g_x_y, var_t[0], i) for j in range(ndim): lamb_expr = lamb_expr.subs(var_t[j], 0) else: lamb_expr = recurrence.subs(n, i) - return sp.lambdify(arg_list, lamb_expr) + return sp.lambdify(arg_list, lamb_expr) interactions = 0 for i in range(p+1): lamb_expr = generate_lamb_expr(i, n_initial) - a = storage + [cts_r_s[0],cts_r_s[1],radius] + a = [*storage, cts_r_s[0], cts_r_s[1], radius] s_new = lamb_expr(*a) interactions += s_new * radius**i/math.factorial(i) @@ -102,4 +108,4 @@ def generate_lamb_expr(i, n_initial): exp_res = (interactions * strengths[None, :]).sum(axis=1) - return exp_res \ No newline at end of file + return exp_res From f79b6d9220008748af552d902d8ea232576ac66f Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 12:10:26 -0600 Subject: [PATCH 067/143] Formatting --- test/test_recurrence.py | 194 ++++++++++++++++++++++++------------- test/test_recurrenceqbx.py | 128 +++++++++++++----------- 2 files changed, 202 insertions(+), 120 deletions(-) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 1914ab54..5331604e 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -1,13 +1,28 @@ -from sumpy.recurrence import get_processed_and_shifted_recurrence, _make_sympy_vec -import sympy as sp +r""" +With the functionality in this module, we aim to test recurrence +code. + +.. autofunction:: test_laplace3d +.. autofunction:: test_helmholtz3d +.. autofunction:: test_laplace2d +""" +from __future__ import annotations + import numpy as np -from sympy import hankel1 +import sympy as sp + +# from sympy import hankel1 from sumpy.expansion.diff_op import ( laplacian, make_identity_diff_op, ) +from sumpy.recurrence import _make_sympy_vec, get_processed_and_shifted_recurrence + -def test_laplace_3D(): +def test_laplace3d(): + r""" + Tests recurrence code for orders up to 6 laplace3d. + """ w = make_identity_diff_op(3) laplace3d = laplacian(w) _, _, r = get_processed_and_shifted_recurrence(laplace3d) @@ -16,23 +31,41 @@ def test_laplace_3D(): var = _make_sympy_vec("x", 3) var_t = _make_sympy_vec("t", 3) - abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2 + (var[2]-var_t[2])**2) + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + + (var[1]-var_t[1])**2 + (var[2]-var_t[2])**2) g_x_y = 1/abs_dist - derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0).subs(var_t[2], 0) for i in range(6)] - - check_2_s = r.subs(n, 2).subs(s(0), derivs[0]).subs(s(1), derivs[1]) - derivs[2] - check_3_s = r.subs(n, 3).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]) - derivs[3] - check_4_s = r.subs(n, 4).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]) - derivs[4] - check_5_s = r.subs(n, 5).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]).subs(s(4), derivs[4]) - derivs[5] - - assert abs(abs(check_2_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-15 - assert abs(abs(check_3_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-14 - assert abs(abs(check_4_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-12 - #print(abs(abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand())))) - assert abs(abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-12 - - -def test_helmholtz_3D(): + derivs = [sp.diff(g_x_y, + var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0).subs(var_t[2], 0) + for i in range(6)] + + # pylint: disable-next=not-callable + subs_dict = {s(0): derivs[0], s(1): derivs[1]} + check_2_s = r.subs(n, 2).subs(subs_dict) - derivs[2] + # pylint: disable-next=not-callable + subs_dict[s(2)] = derivs[2] + check_3_s = r.subs(n, 3).subs(subs_dict) - derivs[3] + # pylint: disable-next=not-callable + subs_dict[s(3)] = derivs[3] + check_4_s = r.subs(n, 4).subs(subs_dict) - derivs[4] + # pylint: disable-next=not-callable + subs_dict[s(4)] = derivs[4] + check_5_s = r.subs(n, 5).subs(subs_dict) - derivs[5] + + x_coord = np.random.rand() # noqa: NPY002 + y_coord = np.random.rand() # noqa: NPY002 + z_coord = np.random.rand() # noqa: NPY002 + coord_dict = {var[0]: x_coord, var[1]: y_coord, var[2]: z_coord} + + assert abs(check_2_s.subs(coord_dict)) <= 1e-15 + assert abs(check_3_s.subs(coord_dict)) <= 1e-14 + assert abs(check_4_s.subs(coord_dict)) <= 1e-12 + assert abs(check_5_s.subs(coord_dict)) <= 1e-12 + + +def test_helmholtz3d(): + r""" + Tests recurrence code for orders up to 6 helmholtz3d. + """ w = make_identity_diff_op(3) helmholtz3d = laplacian(w) + w _, _, r = get_processed_and_shifted_recurrence(helmholtz3d) @@ -42,27 +75,43 @@ def test_helmholtz_3D(): var = _make_sympy_vec("x", 3) var_t = _make_sympy_vec("t", 3) - abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2 + (var[2]-var_t[2])**2) + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + + (var[1]-var_t[1])**2 + (var[2]-var_t[2])**2) g_x_y = sp.exp(1j * abs_dist) / abs_dist - derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0).subs(var_t[2], 0) for i in range(6)] - - - check_2_s = r.subs(n, 2).subs(s(0), derivs[0]).subs(s(1), derivs[1]) - derivs[2] - check_3_s = r.subs(n, 3).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]) - derivs[3] - check_4_s = r.subs(n, 4).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]) - derivs[4] - check_5_s = r.subs(n, 5).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]).subs(s(4), derivs[4]) - derivs[5] - - assert abs(check_2_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand())) <= 1e-15 - assert abs(abs(check_3_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-14 - assert abs(abs(check_4_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-12 - assert abs(abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand()).subs(var[2], np.random.rand()))) <= 1e-12 - - - -def test_helmholtz_2D(): + derivs = [sp.diff(g_x_y, + var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0).subs(var_t[2], 0) + for i in range(6)] + + # pylint: disable-next=not-callable + subs_dict = {s(0): derivs[0], s(1): derivs[1]} + check_2_s = r.subs(n, 2).subs(subs_dict) - derivs[2] + # pylint: disable-next=not-callable + subs_dict[s(2)] = derivs[2] + check_3_s = r.subs(n, 3).subs(subs_dict) - derivs[3] + # pylint: disable-next=not-callable + subs_dict[s(3)] = derivs[3] + check_4_s = r.subs(n, 4).subs(subs_dict) - derivs[4] + # pylint: disable-next=not-callable + subs_dict[s(4)] = derivs[4] + check_5_s = r.subs(n, 5).subs(subs_dict) - derivs[5] + + x_coord = np.random.rand() # noqa: NPY002 + y_coord = np.random.rand() # noqa: NPY002 + z_coord = np.random.rand() # noqa: NPY002 + coord_dict = {var[0]: x_coord, var[1]: y_coord, var[2]: z_coord} + + assert abs(abs(check_2_s.subs(coord_dict))) <= 1e-15 + assert abs(abs(check_3_s.subs(coord_dict))) <= 1e-14 + assert abs(abs(check_4_s.subs(coord_dict))) <= 1e-12 + assert abs(abs(check_5_s.subs(coord_dict))) <= 1e-12 + + +def test_helmholtz2d(): + r""" + Tests recurrence code for orders up to 6 helmholtz2d. w = make_identity_diff_op(2) helmholtz2d = laplacian(w) + w - _,_, r = get_processed_and_shifted_recurrence(helmholtz2d) + _, _, r = get_processed_and_shifted_recurrence(helmholtz2d) n = sp.symbols("n") s = sp.Function("s") @@ -74,23 +123,21 @@ def test_helmholtz_2D(): g_x_y = (1j/4) * hankel1(0, k * abs_dist) x_coord = np.random.rand() y_coord = np.random.rand() - derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) for i in range(6)] - derivs = [derivs[i].subs(var[0], x_coord).subs(var[1], y_coord).evalf() for i in range(6)] - - check_2_s = r.subs(n, 2).subs(s(0), derivs[0]).subs(s(1), derivs[1]) - derivs[2] - check_3_s = r.subs(n, 3).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]) - derivs[3] - check_4_s = r.subs(n, 4).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]) - derivs[4] - check_5_s = r.subs(n, 5).subs(s(0), derivs[0]).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]).subs(s(4), derivs[4]) - derivs[5] - - assert abs(check_2_s.subs(var[0],x_coord).subs(var[1],y_coord)) <= 1e-12 - assert abs(check_3_s.subs(var[0],x_coord).subs(var[1],y_coord)) <= 1e-12 - assert abs(check_4_s.subs(var[0],x_coord).subs(var[1],y_coord)) <= 1e-12 - assert abs(check_5_s.subs(var[0],x_coord).subs(var[1],y_coord)) <= 1e-12 - -def test_laplace_2D(): + derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) + for i in range(6)] + derivs = [derivs[i].subs(var[0], x_coord).subs(var[1], y_coord).evalf() + for i in range(6)] + """ + print("HELLO!") + + +def test_laplace2d(): + r""" + Tests recurrence code for orders up to 6 laplace2d. + """ w = make_identity_diff_op(2) laplace2d = laplacian(w) - _,_, r = get_processed_and_shifted_recurrence(laplace2d) + _, _, r = get_processed_and_shifted_recurrence(laplace2d) n = sp.symbols("n") s = sp.Function("s") @@ -98,16 +145,31 @@ def test_laplace_2D(): var = _make_sympy_vec("x", 2) var_t = _make_sympy_vec("t", 2) g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) - derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) for i in range(6)] - - check_2_s = r.subs(n, 2).subs(s(1), derivs[1]) - derivs[2] - check_3_s = r.subs(n, 3).subs(s(1), derivs[1]).subs(s(2), derivs[2]) - derivs[3] - check_4_s = r.subs(n, 4).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]) - derivs[4] - check_5_s = r.subs(n, 5).subs(s(1), derivs[1]).subs(s(2), derivs[2]).subs(s(3), derivs[3]).subs(s(4), derivs[4]) - derivs[5] - - assert abs(check_2_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-15 - assert abs(check_3_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-14 - assert abs(check_4_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-12 - assert abs(check_5_s.subs(var[0], np.random.rand()).subs(var[1], np.random.rand())) <= 1e-12 - - + derivs = [sp.diff(g_x_y, + var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) + for i in range(6)] + + # pylint: disable-next=not-callable + subs_dict = {s(0): derivs[0], s(1): derivs[1]} + check_2_s = r.subs(n, 2).subs(subs_dict) - derivs[2] + # pylint: disable-next=not-callable + subs_dict[s(2)] = derivs[2] + check_3_s = r.subs(n, 3).subs(subs_dict) - derivs[3] + # pylint: disable-next=not-callable + subs_dict[s(3)] = derivs[3] + check_4_s = r.subs(n, 4).subs(subs_dict) - derivs[4] + # pylint: disable-next=not-callable + subs_dict[s(4)] = derivs[4] + check_5_s = r.subs(n, 5).subs(subs_dict) - derivs[5] + + x_coord = np.random.rand() # noqa: NPY002 + y_coord = np.random.rand() # noqa: NPY002 + coord_dict = {var[0]: x_coord, var[1]: y_coord} + + assert abs(abs(check_2_s.subs(coord_dict))) <= 1e-15 + assert abs(abs(check_3_s.subs(coord_dict))) <= 1e-14 + assert abs(abs(check_4_s.subs(coord_dict))) <= 1e-12 + assert abs(abs(check_5_s.subs(coord_dict))) <= 1e-12 + + +test_laplace2d() diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 0e19faf3..6ca09f2e 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -1,69 +1,78 @@ +r""" +With the functionality in this module, we aim to test recurrence +code. +""" +from __future__ import annotations + import numpy as np import sympy as sp -from sympy import hankel1 +# from sympy import hankel1 +from sumpy.array_context import _acf from sumpy.expansion.diff_op import ( laplacian, make_identity_diff_op, ) -from sumpy.recurrenceqbx import recurrence_qbx_lp, _make_sympy_vec -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 -from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion -from sumpy.kernel import LaplaceKernel, HelmholtzKernel +from sumpy.expansion.local import LineTaylorLocalExpansion +from sumpy.kernel import HelmholtzKernel, LaplaceKernel from sumpy.qbx import LayerPotential +from sumpy.recurrenceqbx import _make_sympy_vec, recurrence_qbx_lp + actx_factory = _acf -expn_class = LineTaylorLocalExpansion +ExpnClass = LineTaylorLocalExpansion actx = actx_factory() lknl = LaplaceKernel(2) hlknl = HelmholtzKernel(2, "k") -def _qbx_lp_helmholtz_general(sources,targets,centers,radius,strengths,order): - lpot = LayerPotential(actx.context, - expansion=expn_class(hlknl, order), - target_kernels=(hlknl,), - source_kernels=(hlknl,)) - #print(lpot.get_kernel()) - expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) - sources = actx.from_numpy(sources) - targets = actx.from_numpy(targets) - centers = actx.from_numpy(centers) +def _qbx_lp_helmholtz_general(sources, targets, centers, radius, strengths, order): + lpot = LayerPotential(actx.context, + expansion=ExpnClass(hlknl, order), + target_kernels=(hlknl,), + source_kernels=(hlknl,)) + + # print(lpot.get_kernel()) + expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) + sources = actx.from_numpy(sources) + targets = actx.from_numpy(targets) + centers = actx.from_numpy(centers) - strengths = (strengths,) - extra_kernel_kwargs={"k": 1} - _evt, (result_qbx,) = lpot( - actx.queue, - targets, sources, centers, strengths, - expansion_radii=expansion_radii, - kwargs=extra_kernel_kwargs) - result_qbx = actx.to_numpy(result_qbx) + strengths = (strengths,) + extra_kernel_kwargs = {"k": 1} + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii, + kwargs=extra_kernel_kwargs) + result_qbx = actx.to_numpy(result_qbx) - return result_qbx + return result_qbx -def _qbx_lp_laplace_general(sources,targets,centers,radius,strengths,order): - lpot = LayerPotential(actx.context, - expansion=expn_class(lknl, order), - target_kernels=(lknl,), - source_kernels=(lknl,)) +def _qbx_lp_laplace_general(sources, targets, centers, radius, strengths, order): + lpot = LayerPotential(actx.context, + expansion=ExpnClass(lknl, order), + target_kernels=(lknl,), + source_kernels=(lknl,)) - #print(lpot.get_kernel()) - expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) - sources = actx.from_numpy(sources) - targets = actx.from_numpy(targets) - centers = actx.from_numpy(centers) + # print(lpot.get_kernel()) + expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) + sources = actx.from_numpy(sources) + targets = actx.from_numpy(targets) + centers = actx.from_numpy(centers) - strengths = (strengths,) + strengths = (strengths,) - _evt, (result_qbx,) = lpot( - actx.queue, - targets, sources, centers, strengths, - expansion_radii=expansion_radii) - result_qbx = actx.to_numpy(result_qbx) + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii) + result_qbx = actx.to_numpy(result_qbx) + + return result_qbx - return result_qbx def _create_ellipse(n_p): h = 9.688 / n_p @@ -83,31 +92,40 @@ def _create_ellipse(n_p): return sources, centers, normals, density, h, radius + def test_recurrence_laplace_2d_ellipse(): + r""" + Tests recurrence code for orders up to 6 laplace3d. + """ - #------------- 1. Define PDE, Green's Function + # ------------- 1. Define PDE, Green's Function w = make_identity_diff_op(2) laplace2d = laplacian(w) var = _make_sympy_vec("x", 2) var_t = _make_sympy_vec("t", 2) - g_x_y = (-1/(2*np.pi)) * sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) + g_x_y = (-1/(2*np.pi)) * sp.log(sp.sqrt((var[0]-var_t[0])**2 + + (var[1]-var_t[1])**2)) p = 4 err = [] for n_p in range(200, 1001, 200): sources, centers, normals, density, h, radius = _create_ellipse(n_p) strengths = h * density - exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, 2, p) - qbx_res = _qbx_lp_laplace_general(sources, sources, centers, radius, strengths, p) - #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) + exp_res = recurrence_qbx_lp(sources, centers, normals, + strengths, radius, laplace2d, + g_x_y, 2, p) + qbx_res = _qbx_lp_laplace_general(sources, sources, centers, + radius, strengths, p) + # qbx_res,_ = lpot_eval_circle(sources.shape[1], p) err.append(np.max(np.abs(exp_res - qbx_res))) assert np.max(err) <= 1e-13 def test_recurrence_helmholtz_2d_ellipse(): - - #------------- 1. Define PDE, Green's Function + r""" + Tests recurrence code for orders up to 6 laplace3d. + # ------------- 1. Define PDE, Green's Function w = make_identity_diff_op(2) helmholtz2d = laplacian(w) + w @@ -118,14 +136,16 @@ def test_recurrence_helmholtz_2d_ellipse(): g_x_y = (1j/4) * hankel1(0, k * abs_dist) p = 4 - err = [] + # err = [] for n_p in range(200, 1001, 200): sources, centers, normals, density, h, radius = _create_ellipse(n_p) strengths = h * density - exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, helmholtz2d, g_x_y, 2, p) - #qbx_res = _qbx_lp_helmholtz_general(sources, sources, centers, radius, strengths, p) + exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, + radius, helmholtz2d, g_x_y, 2, p) + #qbx_res = _qbx_lp_helmholtz_general(sources, sources, centers, + # radius, strengths, p) #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) #err.append(np.max(np.abs(exp_res - qbx_res))) #assert np.max(err) <= 1e-13 - -test_recurrence_helmholtz_2d_ellipse() + """ + print("Hello") From b0a6c0fba98a7f533c65877d2d64d4623dafbe20 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 12:13:55 -0600 Subject: [PATCH 068/143] Delete playground.ipynb --- test/playground.ipynb | 155 ------------------------------------------ 1 file changed, 155 deletions(-) delete mode 100644 test/playground.ipynb diff --git a/test/playground.ipynb b/test/playground.ipynb deleted file mode 100644 index 6fffa849..00000000 --- a/test/playground.ipynb +++ /dev/null @@ -1,155 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "import sympy as sp\n", - "import numpy as np\n", - "\n", - "from sumpy.expansion.diff_op import (\n", - " laplacian,\n", - " make_identity_diff_op,\n", - ")\n", - "\n", - "from sumpy.recurrence import _make_sympy_vec\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "#Create Hankel Function\n", - "\n", - "from sympy import hankel1\n", - "z = sp.symbols(\"z\")\n", - "f = hankel1(0, z)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\frac{H^{(1)}_{-1}\\left(z\\right)}{2} - \\frac{H^{(1)}_{1}\\left(z\\right)}{2}$" - ], - "text/plain": [ - "hankel1(-1, z)/2 - hankel1(1, z)/2" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f.diff(z)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "var = _make_sympy_vec(\"x\", 2)\n", - "var_t = _make_sympy_vec(\"t\", 2)\n", - "k = 1\n", - "abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)\n", - "g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle 0.25 i H^{(1)}_{0}\\left(\\sqrt{\\left(- t_{0} + x_{0}\\right)^{2} + \\left(- t_{1} + x_{1}\\right)^{2}}\\right)$" - ], - "text/plain": [ - "0.25*I*hankel1(0, sqrt((-t0 + x0)**2 + (-t1 + x1)**2))" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "g_x_y" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) for i in range(6)]" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.25*I*hankel1(0, sqrt(x0**2 + x1**2)),\n", - " -0.25*I*x0*(hankel1(-1, sqrt(x0**2 + x1**2))/2 - hankel1(1, sqrt(x0**2 + x1**2))/2)/sqrt(x0**2 + x1**2),\n", - " 0.0625*I*(x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2)),\n", - " 0.03125*I*x0*(4*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 12*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - (x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 12*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2)),\n", - " -0.25*I*(-9*x0**4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(4*(x0**2 + x1**2)**3) + 15*x0**4*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(2*(x0**2 + x1**2)**(7/2)) + 9*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(4*(x0**2 + x1**2)**2) + x0**2*(4*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 4*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 12*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 12*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 4*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 4*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + (-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - (-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 12*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 12*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/(16*sqrt(x0**2 + x1**2)) + 3*x0**2*(x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(8*(x0**2 + x1**2)**(3/2)) - 9*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 3*(x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(8*sqrt(x0**2 + x1**2)) + 3*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(2*(x0**2 + x1**2)**(3/2))),\n", - " 0.0078125*I*x0*(480*x0**4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**4 - 1680*x0**4*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(9/2) - 576*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**3 - 8*x0**2*(4*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 4*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 12*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 12*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 4*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 4*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + (-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - (-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 12*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 12*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/(x0**2 + x1**2)**(3/2) - 72*x0**2*(x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(x0**2 + x1**2)**(5/2) + 2400*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(7/2) + 96*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 8*(4*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 4*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 - 12*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 12*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 4*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 4*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + (-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - (-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 12*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 12*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/sqrt(x0**2 + x1**2) - (36*x0**4*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**3 - 36*x0**4*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**3 - 120*x0**4*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(7/2) + 120*x0**4*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(7/2) - 36*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 36*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + x0**2*(-4*x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 4*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 12*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 12*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 4*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - (-x0**2*(hankel1(-5, sqrt(x0**2 + x1**2)) - 2*hankel1(-3, sqrt(x0**2 + x1**2)) + hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - hankel1(-2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-4, sqrt(x0**2 + x1**2)) - hankel1(-2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + (-x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - 12*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 12*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/sqrt(x0**2 + x1**2) - x0**2*(-4*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 4*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**2 + 12*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 12*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) + 4*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 4*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - (-x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + (-x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - 2*hankel1(3, sqrt(x0**2 + x1**2)) + hankel1(5, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(2, sqrt(x0**2 + x1**2)) - hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(2, sqrt(x0**2 + x1**2)) - hankel1(4, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - 12*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 12*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/sqrt(x0**2 + x1**2) + 6*x0**2*(-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(x0**2 + x1**2)**(3/2) - 6*x0**2*(-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(x0**2 + x1**2)**(3/2) + 144*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 144*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2) - 6*(-x0**2*(hankel1(-4, sqrt(x0**2 + x1**2)) - 2*hankel1(-2, sqrt(x0**2 + x1**2)) + hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-3, sqrt(x0**2 + x1**2)) - hankel1(-1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) + 6*(-x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - 2*hankel1(0, sqrt(x0**2 + x1**2)) + hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - 2*hankel1(2, sqrt(x0**2 + x1**2)) + hankel1(4, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) + 2*x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*x0**2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) - 2*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) + 2*(hankel1(1, sqrt(x0**2 + x1**2)) - hankel1(3, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/sqrt(x0**2 + x1**2) - 24*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 24*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2))/sqrt(x0**2 + x1**2) + 72*(x0**2*(hankel1(-3, sqrt(x0**2 + x1**2)) - 2*hankel1(-1, sqrt(x0**2 + x1**2)) + hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - x0**2*(hankel1(-1, sqrt(x0**2 + x1**2)) - 2*hankel1(1, sqrt(x0**2 + x1**2)) + hankel1(3, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2) - 2*x0**2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*x0**2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(3/2) + 2*(hankel1(-2, sqrt(x0**2 + x1**2)) - hankel1(0, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2) - 2*(hankel1(0, sqrt(x0**2 + x1**2)) - hankel1(2, sqrt(x0**2 + x1**2)))/sqrt(x0**2 + x1**2))/(x0**2 + x1**2)**(3/2) - 720*(hankel1(-1, sqrt(x0**2 + x1**2)) - hankel1(1, sqrt(x0**2 + x1**2)))/(x0**2 + x1**2)**(5/2))]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "derivs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From e4627fd6a1242e9509072e78cb9d93dd51f8be74 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 12:56:31 -0600 Subject: [PATCH 069/143] Updated helmholtz2d to deal with inefficiecy --- sumpy/recurrence.py | 1 + test/test_recurrence.py | 46 ++++++++++++++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index e77ad901..e2974e8b 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -323,6 +323,7 @@ def _extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, :arg r: recurrence to extract terms from """ + # We're assuming here that s(...) are the only function calls. terms = list(r.atoms(sp.Function)) terms = np.array(terms) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 5331604e..9845655a 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -10,8 +10,8 @@ import numpy as np import sympy as sp +from sympy import hankel1 -# from sympy import hankel1 from sumpy.expansion.diff_op import ( laplacian, make_identity_diff_op, @@ -109,6 +109,7 @@ def test_helmholtz3d(): def test_helmholtz2d(): r""" Tests recurrence code for orders up to 6 helmholtz2d. + """ w = make_identity_diff_op(2) helmholtz2d = laplacian(w) + w _, _, r = get_processed_and_shifted_recurrence(helmholtz2d) @@ -118,17 +119,39 @@ def test_helmholtz2d(): var = _make_sympy_vec("x", 2) var_t = _make_sympy_vec("t", 2) + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + + (var[1]-var_t[1])**2) k = 1 - abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2) g_x_y = (1j/4) * hankel1(0, k * abs_dist) - x_coord = np.random.rand() - y_coord = np.random.rand() - derivs = [sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) - for i in range(6)] - derivs = [derivs[i].subs(var[0], x_coord).subs(var[1], y_coord).evalf() - for i in range(6)] - """ - print("HELLO!") + derivs = [sp.diff(g_x_y, + var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) + for i in range(6)] + x_coord = np.random.rand() # noqa: NPY002 + y_coord = np.random.rand() # noqa: NPY002 + coord_dict = {var[0]: x_coord, var[1]: y_coord} + derivs = [derivs[i].subs(coord_dict) for i in range(6)] + + # pylint: disable-next=not-callable + subs_dict = {s(0): derivs[0], s(1): derivs[1]} + check_2_s = r.subs(n, 2).subs(subs_dict) - derivs[2] + # pylint: disable-next=not-callable + subs_dict[s(2)] = derivs[2] + check_3_s = r.subs(n, 3).subs(subs_dict) - derivs[3] + # pylint: disable-next=not-callable + subs_dict[s(3)] = derivs[3] + check_4_s = r.subs(n, 4).subs(subs_dict) - derivs[4] + # pylint: disable-next=not-callable + subs_dict[s(4)] = derivs[4] + check_5_s = r.subs(n, 5).subs(subs_dict) - derivs[5] + + f2 = sp.lambdify([var[0], var[1]], check_2_s) + assert abs(f2(x_coord, y_coord)) <= 1e-13 + f3 = sp.lambdify([var[0], var[1]], check_3_s) + assert abs(f3(x_coord, y_coord)) <= 1e-13 + f4 = sp.lambdify([var[0], var[1]], check_4_s) + assert abs(f4(x_coord, y_coord)) <= 1e-13 + f5 = sp.lambdify([var[0], var[1]], check_5_s) + assert abs(f5(x_coord, y_coord)) <= 1e-12 def test_laplace2d(): @@ -173,3 +196,6 @@ def test_laplace2d(): test_laplace2d() +test_helmholtz2d() +test_helmholtz3d() +test_laplace3d() From 81e1fb62696fb70c8f9359b05e00669d3fb6481b Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 13:56:09 -0600 Subject: [PATCH 070/143] Update recurrence.py --- sumpy/recurrence.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index e2974e8b..c553f019 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -319,7 +319,7 @@ def _extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, np.ndarray]: r""" Given a recurrence extracts the variables in the recurrence - as well as the indexes in sorted order. + as well as the indexes, both in sorted order. :arg r: recurrence to extract terms from """ @@ -342,7 +342,7 @@ def _extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, return idx_l, terms -def __check_neg_ind(r_n): +def _check_neg_ind(r_n): r""" Simply checks if a negative index exists in a recurrence relation. """ @@ -352,7 +352,7 @@ def __check_neg_ind(r_n): return np.any(idx_l < 0) -def __get_initial_c(recurrence): +def _get_initial_c(recurrence): r""" For a given recurrence checks how many initial conditions by checking for non-negative indexed terms. @@ -361,7 +361,7 @@ def __get_initial_c(recurrence): i = 0 r_c = recurrence.subs(n, i) - while __check_neg_ind(r_c): + while _check_neg_ind(r_c): i += 1 r_c = recurrence.subs(n, i) return i @@ -391,10 +391,12 @@ def get_processed_and_shifted_recurrence(pde) -> tuple[int, int, A function that "shifts" the recurrence so the expansion center is placed at the origin and source is the input for the recurrence generated. + Also processes the recurrence so s(n) is in terms of s(n-1), etc. + :arg recurrence: a recurrence relation in :math:`s(n)` """ r = recurrence_from_pde(pde) order, r_p = process_recurrence_relation(r) - n_initial = __get_initial_c(r_p) + n_initial = _get_initial_c(r_p) r_s = shift_recurrence(r_p) return n_initial, order, r_s From b3d17eb676c9fa06b1fb1e9fbf2abad48425dcde Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 14:01:29 -0600 Subject: [PATCH 071/143] Update test_recurrenceqbx.py --- test/test_recurrenceqbx.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 6ca09f2e..525d773c 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -1,6 +1,6 @@ r""" With the functionality in this module, we aim to test recurrence -code. ++ qbx code. """ from __future__ import annotations @@ -95,7 +95,7 @@ def _create_ellipse(n_p): def test_recurrence_laplace_2d_ellipse(): r""" - Tests recurrence code for orders up to 6 laplace3d. + Tests recurrence + qbx code for orders up to 6 laplace3d. """ # ------------- 1. Define PDE, Green's Function From 044bedee7ba6ac3daf5dffd1dcb50c8ad64adb79 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 15:09:01 -0600 Subject: [PATCH 072/143] Update test_recurrenceqbx.py --- test/test_recurrenceqbx.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 525d773c..603bd6da 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -7,7 +7,7 @@ import numpy as np import sympy as sp -# from sympy import hankel1 +from sympy import hankel1 from sumpy.array_context import _acf from sumpy.expansion.diff_op import ( laplacian, @@ -45,7 +45,7 @@ def _qbx_lp_helmholtz_general(sources, targets, centers, radius, strengths, orde actx.queue, targets, sources, centers, strengths, expansion_radii=expansion_radii, - kwargs=extra_kernel_kwargs) + k=1) result_qbx = actx.to_numpy(result_qbx) return result_qbx @@ -125,6 +125,7 @@ def test_recurrence_laplace_2d_ellipse(): def test_recurrence_helmholtz_2d_ellipse(): r""" Tests recurrence code for orders up to 6 laplace3d. + """ # ------------- 1. Define PDE, Green's Function w = make_identity_diff_op(2) helmholtz2d = laplacian(w) + w @@ -136,16 +137,15 @@ def test_recurrence_helmholtz_2d_ellipse(): g_x_y = (1j/4) * hankel1(0, k * abs_dist) p = 4 - # err = [] + err = [] for n_p in range(200, 1001, 200): sources, centers, normals, density, h, radius = _create_ellipse(n_p) strengths = h * density exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, helmholtz2d, g_x_y, 2, p) - #qbx_res = _qbx_lp_helmholtz_general(sources, sources, centers, - # radius, strengths, p) + qbx_res = _qbx_lp_helmholtz_general(sources, sources, centers, radius, strengths, p) #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) - #err.append(np.max(np.abs(exp_res - qbx_res))) - #assert np.max(err) <= 1e-13 - """ - print("Hello") + err.append(np.max(np.abs(exp_res - qbx_res))) + assert np.max(err) <= 1e-13 + +test_recurrence_helmholtz_2d_ellipse() \ No newline at end of file From ebb24222274ae77c6bc472178309f58af85add35 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 15:10:55 -0600 Subject: [PATCH 073/143] Update test_recurrenceqbx.py --- test/test_recurrenceqbx.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 603bd6da..b36d8e83 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -95,7 +95,7 @@ def _create_ellipse(n_p): def test_recurrence_laplace_2d_ellipse(): r""" - Tests recurrence + qbx code for orders up to 6 laplace3d. + Tests recurrence + qbx code. """ # ------------- 1. Define PDE, Green's Function @@ -124,7 +124,7 @@ def test_recurrence_laplace_2d_ellipse(): def test_recurrence_helmholtz_2d_ellipse(): r""" - Tests recurrence code for orders up to 6 laplace3d. + Tests recurrence + qbx code. """ # ------------- 1. Define PDE, Green's Function w = make_identity_diff_op(2) From 60fc51dc6952e276e1ddce039e1f15a540adee42 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Mon, 4 Nov 2024 15:44:26 -0600 Subject: [PATCH 074/143] Minor style fixes --- sumpy/recurrence.py | 3 +-- sumpy/recurrenceqbx.py | 10 +++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index c553f019..916b9d75 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -32,8 +32,6 @@ from __future__ import annotations -from typing import TypeVar - __copyright__ = """ Copyright (C) 2024 Hirish Chandrasekaran @@ -60,6 +58,7 @@ THE SOFTWARE. """ import math +from typing import TypeVar import numpy as np import sympy as sp diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index 083a28fb..0407ba02 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -8,6 +8,7 @@ from __future__ import annotations # noqa: I001 import math +from typing import Sequence import numpy as np import sympy as sp @@ -19,7 +20,7 @@ # ================ Transform/Rotate ================= -def _produce_orthogonal_basis(normals): +def _produce_orthogonal_basis(normals: np.ndarray) -> Sequence[np.ndarray]: ndim, ncenters = normals.shape orth_coordsys = [normals] for i in range(1, ndim): @@ -34,8 +35,11 @@ def _produce_orthogonal_basis(normals): return orth_coordsys -def _compute_rotated_shifted_coordinates(sources, centers, normals): - +def _compute_rotated_shifted_coordinates( + sources: np.ndarray, + centers: np.ndarray, + normals: np.ndarray + ) -> np.ndarray: cts = sources[:, None] - centers[:, :, None] orth_coordsys = _produce_orthogonal_basis(normals) cts_rotated_shifted = np.einsum("idc,dcs->ics", orth_coordsys, cts) From a7e685e2d4341fe1c27562c6543c790a3c91eafc Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Mon, 4 Nov 2024 16:03:43 -0600 Subject: [PATCH 075/143] Remove function invocations from test --- test/test_recurrence.py | 6 ------ test/test_recurrenceqbx.py | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 9845655a..8ad80f3d 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -193,9 +193,3 @@ def test_laplace2d(): assert abs(abs(check_3_s.subs(coord_dict))) <= 1e-14 assert abs(abs(check_4_s.subs(coord_dict))) <= 1e-12 assert abs(abs(check_5_s.subs(coord_dict))) <= 1e-12 - - -test_laplace2d() -test_helmholtz2d() -test_helmholtz3d() -test_laplace3d() diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index b36d8e83..788f4149 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -148,4 +148,4 @@ def test_recurrence_helmholtz_2d_ellipse(): err.append(np.max(np.abs(exp_res - qbx_res))) assert np.max(err) <= 1e-13 -test_recurrence_helmholtz_2d_ellipse() \ No newline at end of file +# test_recurrence_helmholtz_2d_ellipse() From e1a1c034012eba078e9892384b1bf8d5aaa8dbec Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 17:01:27 -0600 Subject: [PATCH 076/143] Added license/copyright --- test/test_recurrence.py | 52 +++++++++++++++++++++++++++----------- test/test_recurrenceqbx.py | 34 ++++++++++++++++++++----- 2 files changed, 65 insertions(+), 21 deletions(-) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 8ad80f3d..12b32f32 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -8,6 +8,31 @@ """ from __future__ import annotations + +__copyright__ = """ +Copyright (C) 2024 Hirish Chandrasekaran +Copyright (C) 2024 Andreas Kloeckner +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" import numpy as np import sympy as sp from sympy import hankel1 @@ -25,7 +50,7 @@ def test_laplace3d(): """ w = make_identity_diff_op(3) laplace3d = laplacian(w) - _, _, r = get_processed_and_shifted_recurrence(laplace3d) + n_init, _, r = get_processed_and_shifted_recurrence(laplace3d) n = sp.symbols("n") s = sp.Function("s") @@ -40,26 +65,23 @@ def test_laplace3d(): # pylint: disable-next=not-callable subs_dict = {s(0): derivs[0], s(1): derivs[1]} - check_2_s = r.subs(n, 2).subs(subs_dict) - derivs[2] - # pylint: disable-next=not-callable - subs_dict[s(2)] = derivs[2] - check_3_s = r.subs(n, 3).subs(subs_dict) - derivs[3] - # pylint: disable-next=not-callable - subs_dict[s(3)] = derivs[3] - check_4_s = r.subs(n, 4).subs(subs_dict) - derivs[4] - # pylint: disable-next=not-callable - subs_dict[s(4)] = derivs[4] - check_5_s = r.subs(n, 5).subs(subs_dict) - derivs[5] + check = [] + # Check that the lowest order recurrence that works is 2 + assert n_init == 2 + max_order_check = 6 + for i in range(n_init, max_order_check): + check.append(r.subs(n, i).subs(subs_dict) - derivs[i]) + # pylint: disable-next=not-callable + subs_dict[s(i)] = derivs[i] x_coord = np.random.rand() # noqa: NPY002 y_coord = np.random.rand() # noqa: NPY002 z_coord = np.random.rand() # noqa: NPY002 coord_dict = {var[0]: x_coord, var[1]: y_coord, var[2]: z_coord} - assert abs(check_2_s.subs(coord_dict)) <= 1e-15 - assert abs(check_3_s.subs(coord_dict)) <= 1e-14 - assert abs(check_4_s.subs(coord_dict)) <= 1e-12 - assert abs(check_5_s.subs(coord_dict)) <= 1e-12 + check = np.array([check[i].subs(coord_dict) for i in range(len(check))]) + + assert max(abs(check)) <= 1e-12 def test_helmholtz3d(): diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 788f4149..bc709459 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -4,10 +4,35 @@ """ from __future__ import annotations + +__copyright__ = """ +Copyright (C) 2024 Hirish Chandrasekaran +Copyright (C) 2024 Andreas Kloeckner +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" import numpy as np import sympy as sp - from sympy import hankel1 + from sumpy.array_context import _acf from sumpy.expansion.diff_op import ( laplacian, @@ -40,7 +65,6 @@ def _qbx_lp_helmholtz_general(sources, targets, centers, radius, strengths, orde centers = actx.from_numpy(centers) strengths = (strengths,) - extra_kernel_kwargs = {"k": 1} _evt, (result_qbx,) = lpot( actx.queue, targets, sources, centers, strengths, @@ -143,9 +167,7 @@ def test_recurrence_helmholtz_2d_ellipse(): strengths = h * density exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, helmholtz2d, g_x_y, 2, p) - qbx_res = _qbx_lp_helmholtz_general(sources, sources, centers, radius, strengths, p) - #qbx_res,_ = lpot_eval_circle(sources.shape[1], p) + qbx_res = _qbx_lp_helmholtz_general(sources, sources, + centers, radius, strengths, p) err.append(np.max(np.abs(exp_res - qbx_res))) assert np.max(err) <= 1e-13 - -# test_recurrence_helmholtz_2d_ellipse() From e52b79a9358d30aadd38a6c3f201ba17c2635d8e Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 17:07:24 -0600 Subject: [PATCH 077/143] Remove looping helmholtz3d --- sumpy/recurrence.py | 5 +++++ test/test_recurrence.py | 29 +++++++++++++---------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 916b9d75..0fa0fe88 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -393,6 +393,11 @@ def get_processed_and_shifted_recurrence(pde) -> tuple[int, int, Also processes the recurrence so s(n) is in terms of s(n-1), etc. :arg recurrence: a recurrence relation in :math:`s(n)` + + :returns: a tuple ``(n_initial, order, r_s)``, where + - *n_initial* is the number of initial derivatives needed + - *order* is the order of the recurrence r_s + - *r_s* is the shifted/processed recurrence """ r = recurrence_from_pde(pde) order, r_p = process_recurrence_relation(r) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 12b32f32..bd7c21ac 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -66,7 +66,7 @@ def test_laplace3d(): # pylint: disable-next=not-callable subs_dict = {s(0): derivs[0], s(1): derivs[1]} check = [] - # Check that the lowest order recurrence that works is 2 + assert n_init == 2 max_order_check = 6 for i in range(n_init, max_order_check): @@ -90,7 +90,7 @@ def test_helmholtz3d(): """ w = make_identity_diff_op(3) helmholtz3d = laplacian(w) + w - _, _, r = get_processed_and_shifted_recurrence(helmholtz3d) + n_init, _, r = get_processed_and_shifted_recurrence(helmholtz3d) n = sp.symbols("n") s = sp.Function("s") @@ -106,26 +106,23 @@ def test_helmholtz3d(): # pylint: disable-next=not-callable subs_dict = {s(0): derivs[0], s(1): derivs[1]} - check_2_s = r.subs(n, 2).subs(subs_dict) - derivs[2] - # pylint: disable-next=not-callable - subs_dict[s(2)] = derivs[2] - check_3_s = r.subs(n, 3).subs(subs_dict) - derivs[3] - # pylint: disable-next=not-callable - subs_dict[s(3)] = derivs[3] - check_4_s = r.subs(n, 4).subs(subs_dict) - derivs[4] - # pylint: disable-next=not-callable - subs_dict[s(4)] = derivs[4] - check_5_s = r.subs(n, 5).subs(subs_dict) - derivs[5] + check = [] + + assert n_init == 2 + max_order_check = 6 + for i in range(n_init, max_order_check): + check.append(r.subs(n, i).subs(subs_dict) - derivs[i]) + # pylint: disable-next=not-callable + subs_dict[s(i)] = derivs[i] x_coord = np.random.rand() # noqa: NPY002 y_coord = np.random.rand() # noqa: NPY002 z_coord = np.random.rand() # noqa: NPY002 coord_dict = {var[0]: x_coord, var[1]: y_coord, var[2]: z_coord} - assert abs(abs(check_2_s.subs(coord_dict))) <= 1e-15 - assert abs(abs(check_3_s.subs(coord_dict))) <= 1e-14 - assert abs(abs(check_4_s.subs(coord_dict))) <= 1e-12 - assert abs(abs(check_5_s.subs(coord_dict))) <= 1e-12 + check = np.array([check[i].subs(coord_dict) for i in range(len(check))]) + + assert max(abs(abs(check))) <= 1e-12 def test_helmholtz2d(): From a1f011f842875f29fdf48bcee9852e6d1d9bda0c Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 4 Nov 2024 17:13:57 -0600 Subject: [PATCH 078/143] Looped all test code --- test/test_recurrence.py | 54 ++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index bd7c21ac..adfcfd24 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -131,7 +131,7 @@ def test_helmholtz2d(): """ w = make_identity_diff_op(2) helmholtz2d = laplacian(w) + w - _, _, r = get_processed_and_shifted_recurrence(helmholtz2d) + n_init, _, r = get_processed_and_shifted_recurrence(helmholtz2d) n = sp.symbols("n") s = sp.Function("s") @@ -152,24 +152,22 @@ def test_helmholtz2d(): # pylint: disable-next=not-callable subs_dict = {s(0): derivs[0], s(1): derivs[1]} - check_2_s = r.subs(n, 2).subs(subs_dict) - derivs[2] - # pylint: disable-next=not-callable - subs_dict[s(2)] = derivs[2] - check_3_s = r.subs(n, 3).subs(subs_dict) - derivs[3] - # pylint: disable-next=not-callable - subs_dict[s(3)] = derivs[3] - check_4_s = r.subs(n, 4).subs(subs_dict) - derivs[4] - # pylint: disable-next=not-callable - subs_dict[s(4)] = derivs[4] - check_5_s = r.subs(n, 5).subs(subs_dict) - derivs[5] + check = [] + + assert n_init == 2 + max_order_check = 6 + for i in range(n_init, max_order_check): + check.append(r.subs(n, i).subs(subs_dict) - derivs[i]) + # pylint: disable-next=not-callable + subs_dict[s(i)] = derivs[i] - f2 = sp.lambdify([var[0], var[1]], check_2_s) + f2 = sp.lambdify([var[0], var[1]], check[0]) assert abs(f2(x_coord, y_coord)) <= 1e-13 - f3 = sp.lambdify([var[0], var[1]], check_3_s) + f3 = sp.lambdify([var[0], var[1]], check[1]) assert abs(f3(x_coord, y_coord)) <= 1e-13 - f4 = sp.lambdify([var[0], var[1]], check_4_s) + f4 = sp.lambdify([var[0], var[1]], check[2]) assert abs(f4(x_coord, y_coord)) <= 1e-13 - f5 = sp.lambdify([var[0], var[1]], check_5_s) + f5 = sp.lambdify([var[0], var[1]], check[3]) assert abs(f5(x_coord, y_coord)) <= 1e-12 @@ -179,7 +177,7 @@ def test_laplace2d(): """ w = make_identity_diff_op(2) laplace2d = laplacian(w) - _, _, r = get_processed_and_shifted_recurrence(laplace2d) + n_init, _, r = get_processed_and_shifted_recurrence(laplace2d) n = sp.symbols("n") s = sp.Function("s") @@ -193,22 +191,18 @@ def test_laplace2d(): # pylint: disable-next=not-callable subs_dict = {s(0): derivs[0], s(1): derivs[1]} - check_2_s = r.subs(n, 2).subs(subs_dict) - derivs[2] - # pylint: disable-next=not-callable - subs_dict[s(2)] = derivs[2] - check_3_s = r.subs(n, 3).subs(subs_dict) - derivs[3] - # pylint: disable-next=not-callable - subs_dict[s(3)] = derivs[3] - check_4_s = r.subs(n, 4).subs(subs_dict) - derivs[4] - # pylint: disable-next=not-callable - subs_dict[s(4)] = derivs[4] - check_5_s = r.subs(n, 5).subs(subs_dict) - derivs[5] + check = [] + + assert n_init == 2 + max_order_check = 6 + for i in range(n_init, max_order_check): + check.append(r.subs(n, i).subs(subs_dict) - derivs[i]) + # pylint: disable-next=not-callable + subs_dict[s(i)] = derivs[i] x_coord = np.random.rand() # noqa: NPY002 y_coord = np.random.rand() # noqa: NPY002 coord_dict = {var[0]: x_coord, var[1]: y_coord} - assert abs(abs(check_2_s.subs(coord_dict))) <= 1e-15 - assert abs(abs(check_3_s.subs(coord_dict))) <= 1e-14 - assert abs(abs(check_4_s.subs(coord_dict))) <= 1e-12 - assert abs(abs(check_5_s.subs(coord_dict))) <= 1e-12 + check = np.array([check[i].subs(coord_dict) for i in range(len(check))]) + assert max(abs(abs(check))) <= 1e-12 From 233d3e7e00e65cc63f5535eec270fd9e8697bca5 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 7 Nov 2024 12:44:37 -0600 Subject: [PATCH 079/143] Error --- test/playground.ipynb | 119 +++++++++++++++++++++++++++++++++++++ test/test_recurrenceqbx.py | 2 +- 2 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 test/playground.ipynb diff --git a/test/playground.ipynb b/test/playground.ipynb new file mode 100644 index 00000000..7688adf1 --- /dev/null +++ b/test/playground.ipynb @@ -0,0 +1,119 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from collections.abc import Callable, Sequence\n", + "from typing import Any\n", + "\n", + "import numpy as np\n", + "import numpy.linalg as la\n", + "\n", + "import modepy as mp\n", + "from pytools import deprecate_keyword, log_process\n", + "\n", + "from meshmode.mesh import Mesh, MeshElementGroup, make_mesh\n", + "from meshmode.mesh.refinement import Refiner\n", + "from meshmode.mesh.generation import generate_sphere\n", + "from meshmode.discretization import Discretization\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "meshy = generate_sphere(1.0, 2)\n", + "from sumpy.array_context import _acf\n", + "actx_factory = _acf\n", + "actx = actx_factory()\n", + "from meshmode.discretization.poly_element import (\n", + " default_simplex_group_factory\n", + " )\n", + "order = 4\n", + "discr = Discretization(actx, meshy, default_simplex_group_factory(order=4, base_dim=3))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "ename": "RuntimeError", + "evalue": "Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'j', 'e'})", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:281\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 281\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_loopy_transform_cache\u001b[49m\u001b[43m[\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n", + "\u001b[0;31mKeyError\u001b[0m: TranslationUnit(callables_table=immutables.Map({'einsum3to2_kernel': CallableKernel(arg_id_to_descr=None, arg_id_to_dtype=None, name='einsum3to2_kernel', subkernel=LoopKernel(domains=[BasicSet(\"[Ne, Ni, Nj] -> { [e, i, j] : 0 <= e < Ne and 0 <= i < Ni and 0 <= j < Nj }\")], instructions=[Assignment(assignee=Subscript(Variable('out'), (Variable('e'), Variable('i'))), atomicity=(), conflicts_with_groups=frozenset(), depends_on=frozenset(), depends_on_is_final=False, expression=Reduction(SumReductionOperation, ('j',), Product((Subscript(Variable('arg0'), (Variable('i'), Variable('j'))), Subscript(Variable('arg1'), (Variable('e'), Variable('j'))))), False), groups=frozenset(), id='insn', no_sync_with=frozenset(), predicates=frozenset(), priority=0, tags=frozenset(), temp_var_type=Optional(), within_inames=frozenset({'i', 'e'}), within_inames_is_final=False)], args=[>, >, >, , shape: (Ni, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Ni), dim_tags: (stride:auto, stride:auto), offset: out aspace: global>], assumptions=BasicSet(\"[Ne, Ni, Nj] -> { : }\"), temporary_variables={}, inames={'i': Iname(name='i', tags=frozenset()), 'j': Iname(name='j', tags=frozenset()), 'e': Iname(name='e', tags=frozenset())}, substitutions={}, options=Options(allow_fp_reordering=True, allow_terminal_colors=True, annotate_inames=False, build_options=[], check_dep_resolution=True, cl_exec_manage_array_events=True, disable_global_barriers=False, edit_code=False, enforce_array_accesses_within_bounds=True, enforce_variable_access_ordered=True, insert_gbarriers=False, no_numpy=True, return_dict=True, skip_arg_checks=False, trace_assignment_values=False, trace_assignments=False, write_code=False, write_wrapper=False), target=, tags=frozenset({FirstAxisIsElementsTag(), NameHint(name='nodes0_3d')}), state=, name='einsum3to2_kernel', preambles=(), preamble_generators=(), symbol_manglers=(), linearization=None, iname_slab_increments=immutables.Map({}), loop_priority=frozenset(), applied_iname_rewrites=(), index_dtype=np:dtype('int32'), silenced_warnings=[], overridden_get_grid_sizes_for_insn_ids=None))}), target=, entrypoints=frozenset({'einsum3to2_kernel'}))", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[25], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdiscr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:589\u001b[0m, in \u001b[0;36mDiscretization.nodes\u001b[0;34m(self, cached)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[0;32m--> 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array(\u001b[43m[\u001b[49m\n\u001b[1;32m 590\u001b[0m \u001b[43m \u001b[49m\u001b[43m_DOFArray\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtuple\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 593\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mambient_dim\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", + "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:590\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[0;32m--> 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", + "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:591\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[1;32m 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m([\n\u001b[0;32m--> 591\u001b[0m actx\u001b[38;5;241m.\u001b[39mfreeze(\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m) \u001b[38;5;28;01mfor\u001b[39;00m grp \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgroups\n\u001b[1;32m 592\u001b[0m ]))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", + "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:579\u001b[0m, in \u001b[0;36mDiscretization.nodes..resample_mesh_nodes\u001b[0;34m(grp, iaxis)\u001b[0m\n\u001b[1;32m 575\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (grp_unit_nodes\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;241m==\u001b[39m meg_unit_nodes\u001b[38;5;241m.\u001b[39mshape\n\u001b[1;32m 576\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m np\u001b[38;5;241m.\u001b[39mlinalg\u001b[38;5;241m.\u001b[39mnorm(grp_unit_nodes \u001b[38;5;241m-\u001b[39m meg_unit_nodes) \u001b[38;5;241m<\u001b[39m tol):\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[0;32m--> 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meinsum\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mij,ej->ei\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 580\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtag_axis\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 581\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 582\u001b[0m \u001b[43m \u001b[49m\u001b[43mDiscretizationDOFAxisTag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 583\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_numpy\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_mesh_interp_matrix\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 584\u001b[0m \u001b[43m \u001b[49m\u001b[43mnodes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 585\u001b[0m \u001b[43m \u001b[49m\u001b[43mtagged\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 586\u001b[0m \u001b[43m \u001b[49m\u001b[43mFirstAxisIsElementsTag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 587\u001b[0m \u001b[43m \u001b[49m\u001b[43mNameHint\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname_hint\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/source/src/arraycontext/arraycontext/context.py:495\u001b[0m, in \u001b[0;36mArrayContext.einsum\u001b[0;34m(self, spec, arg_names, tagged, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m arg_names \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marg\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(args))])\n\u001b[1;32m 494\u001b[0m prg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_einsum_prg(spec, arg_names, tagged)\n\u001b[0;32m--> 495\u001b[0m out_ary \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_loopy\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 496\u001b[0m \u001b[43m \u001b[49m\u001b[43mprg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m{\u001b[49m\u001b[43marg_names\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m}\u001b[49m\n\u001b[1;32m 497\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mout\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 498\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtag(tagged, out_ary)\n", + "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:284\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n\u001b[1;32m 283\u001b[0m orig_t_unit \u001b[38;5;241m=\u001b[39m t_unit\n\u001b[0;32m--> 284\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mexecutor(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcontext)\n\u001b[1;32m 285\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_loopy_transform_cache[orig_t_unit] \u001b[38;5;241m=\u001b[39m executor\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m orig_t_unit\n", + "File \u001b[0;32m~/Desktop/sumpy/sumpy/array_context.py:55\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 55\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/source/src/boxtree/boxtree/array_context.py:54\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 54\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:353\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m t_unit\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 353\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 354\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to reason what outer_iname and inner_iname \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 355\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mneeds to be; all_inames is given as: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mall_inames\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 356\u001b[0m )\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inner_iname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m t_unit \u001b[38;5;241m=\u001b[39m lp\u001b[38;5;241m.\u001b[39msplit_iname(t_unit, inner_iname, \u001b[38;5;241m16\u001b[39m, inner_tag\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ml.0\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mRuntimeError\u001b[0m: Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'j', 'e'})" + ] + } + ], + "source": [ + "discr.nodes()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index bc709459..d9cb04da 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -160,7 +160,7 @@ def test_recurrence_helmholtz_2d_ellipse(): abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2) g_x_y = (1j/4) * hankel1(0, k * abs_dist) - p = 4 + p = 5 err = [] for n_p in range(200, 1001, 200): sources, centers, normals, density, h, radius = _create_ellipse(n_p) From 2abe9980387db5bda023273c6b728707d8cf96b3 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 7 Nov 2024 12:50:10 -0600 Subject: [PATCH 080/143] Update playground.ipynb --- test/playground.ipynb | 67 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/test/playground.ipynb b/test/playground.ipynb index 7688adf1..6e75dce1 100644 --- a/test/playground.ipynb +++ b/test/playground.ipynb @@ -75,10 +75,71 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hirish/source/src/meshmode/meshmode/mesh/__init__.py:1086: UserWarning: Unimplemented: Cannot check element orientation for a mesh with mesh.dim != mesh.ambient_dim\n", + " check_mesh_consistency(\n", + "/Users/hirish/source/src/boxtree/boxtree/array_context.py:54: UntransformedCodeWarning: Using the base PyOpenCLArrayContext.transform_loopy_program to transform a translation unit. This is largely a no-op and unlikely to result in fast generated code.Instead, subclass PyOpenCLArrayContext and implement the specific transform logic required to transform the program for your package or application. Check higher-level packages (e.g. meshmode), which may already have subclasses you may want to build on.\n", + " return super().transform_loopy_program(t_unit)\n" + ] + }, + { + "ename": "RuntimeError", + "evalue": "Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'j', 'e'})", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:281\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 281\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_loopy_transform_cache\u001b[49m\u001b[43m[\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n", + "\u001b[0;31mKeyError\u001b[0m: TranslationUnit(callables_table=immutables.Map({'einsum3to2_kernel': CallableKernel(arg_id_to_descr=None, arg_id_to_dtype=None, name='einsum3to2_kernel', subkernel=LoopKernel(domains=[BasicSet(\"[Ne, Ni, Nj] -> { [e, i, j] : 0 <= e < Ne and 0 <= i < Ni and 0 <= j < Nj }\")], instructions=[Assignment(assignee=Subscript(Variable('out'), (Variable('e'), Variable('i'))), atomicity=(), conflicts_with_groups=frozenset(), depends_on=frozenset(), depends_on_is_final=False, expression=Reduction(SumReductionOperation, ('j',), Product((Subscript(Variable('arg0'), (Variable('i'), Variable('j'))), Subscript(Variable('arg1'), (Variable('e'), Variable('j'))))), False), groups=frozenset(), id='insn', no_sync_with=frozenset(), predicates=frozenset(), priority=0, tags=frozenset(), temp_var_type=Optional(), within_inames=frozenset({'i', 'e'}), within_inames_is_final=False)], args=[>, >, >, , shape: (Ni, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Ni), dim_tags: (stride:auto, stride:auto), offset: out aspace: global>], assumptions=BasicSet(\"[Ne, Ni, Nj] -> { : }\"), temporary_variables={}, inames={'i': Iname(name='i', tags=frozenset()), 'j': Iname(name='j', tags=frozenset()), 'e': Iname(name='e', tags=frozenset())}, substitutions={}, options=Options(allow_fp_reordering=True, allow_terminal_colors=True, annotate_inames=False, build_options=[], check_dep_resolution=True, cl_exec_manage_array_events=True, disable_global_barriers=False, edit_code=False, enforce_array_accesses_within_bounds=True, enforce_variable_access_ordered=True, insert_gbarriers=False, no_numpy=True, return_dict=True, skip_arg_checks=False, trace_assignment_values=False, trace_assignments=False, write_code=False, write_wrapper=False), target=, tags=frozenset({FirstAxisIsElementsTag(), NameHint(name='nodes0_3d')}), state=, name='einsum3to2_kernel', preambles=(), preamble_generators=(), symbol_manglers=(), linearization=None, iname_slab_increments=immutables.Map({}), loop_priority=frozenset(), applied_iname_rewrites=(), index_dtype=np:dtype('int32'), silenced_warnings=[], overridden_get_grid_sizes_for_insn_ids=None))}), target=, entrypoints=frozenset({'einsum3to2_kernel'}))", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[28], line 24\u001b[0m\n\u001b[1;32m 22\u001b[0m grp_factory \u001b[38;5;241m=\u001b[39m default_simplex_group_factory(\u001b[38;5;241m3\u001b[39m,target_order)\n\u001b[1;32m 23\u001b[0m discr \u001b[38;5;241m=\u001b[39m Discretization(actx, mesh, grp_factory)\n\u001b[0;32m---> 24\u001b[0m \u001b[43mdiscr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 25\u001b[0m actx\u001b[38;5;241m.\u001b[39mto_numpy(discr\u001b[38;5;241m.\u001b[39mnodes())\n", + "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:589\u001b[0m, in \u001b[0;36mDiscretization.nodes\u001b[0;34m(self, cached)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[0;32m--> 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array(\u001b[43m[\u001b[49m\n\u001b[1;32m 590\u001b[0m \u001b[43m \u001b[49m\u001b[43m_DOFArray\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtuple\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 593\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mambient_dim\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", + "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:590\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[0;32m--> 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", + "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:591\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[1;32m 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m([\n\u001b[0;32m--> 591\u001b[0m actx\u001b[38;5;241m.\u001b[39mfreeze(\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m) \u001b[38;5;28;01mfor\u001b[39;00m grp \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgroups\n\u001b[1;32m 592\u001b[0m ]))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", + "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:579\u001b[0m, in \u001b[0;36mDiscretization.nodes..resample_mesh_nodes\u001b[0;34m(grp, iaxis)\u001b[0m\n\u001b[1;32m 575\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (grp_unit_nodes\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;241m==\u001b[39m meg_unit_nodes\u001b[38;5;241m.\u001b[39mshape\n\u001b[1;32m 576\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m np\u001b[38;5;241m.\u001b[39mlinalg\u001b[38;5;241m.\u001b[39mnorm(grp_unit_nodes \u001b[38;5;241m-\u001b[39m meg_unit_nodes) \u001b[38;5;241m<\u001b[39m tol):\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[0;32m--> 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meinsum\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mij,ej->ei\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 580\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtag_axis\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 581\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 582\u001b[0m \u001b[43m \u001b[49m\u001b[43mDiscretizationDOFAxisTag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 583\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_numpy\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_mesh_interp_matrix\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 584\u001b[0m \u001b[43m \u001b[49m\u001b[43mnodes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 585\u001b[0m \u001b[43m \u001b[49m\u001b[43mtagged\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 586\u001b[0m \u001b[43m \u001b[49m\u001b[43mFirstAxisIsElementsTag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 587\u001b[0m \u001b[43m \u001b[49m\u001b[43mNameHint\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname_hint\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/source/src/arraycontext/arraycontext/context.py:495\u001b[0m, in \u001b[0;36mArrayContext.einsum\u001b[0;34m(self, spec, arg_names, tagged, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m arg_names \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marg\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(args))])\n\u001b[1;32m 494\u001b[0m prg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_einsum_prg(spec, arg_names, tagged)\n\u001b[0;32m--> 495\u001b[0m out_ary \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_loopy\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 496\u001b[0m \u001b[43m \u001b[49m\u001b[43mprg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m{\u001b[49m\u001b[43marg_names\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m}\u001b[49m\n\u001b[1;32m 497\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mout\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 498\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtag(tagged, out_ary)\n", + "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:284\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n\u001b[1;32m 283\u001b[0m orig_t_unit \u001b[38;5;241m=\u001b[39m t_unit\n\u001b[0;32m--> 284\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mexecutor(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcontext)\n\u001b[1;32m 285\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_loopy_transform_cache[orig_t_unit] \u001b[38;5;241m=\u001b[39m executor\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m orig_t_unit\n", + "File \u001b[0;32m~/Desktop/sumpy/sumpy/array_context.py:55\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 55\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/source/src/boxtree/boxtree/array_context.py:54\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 54\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:353\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m t_unit\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 353\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 354\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to reason what outer_iname and inner_iname \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 355\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mneeds to be; all_inames is given as: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mall_inames\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 356\u001b[0m )\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inner_iname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m t_unit \u001b[38;5;241m=\u001b[39m lp\u001b[38;5;241m.\u001b[39msplit_iname(t_unit, inner_iname, \u001b[38;5;241m16\u001b[39m, inner_tag\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ml.0\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mRuntimeError\u001b[0m: Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'j', 'e'})" + ] + } + ], + "source": [ + "from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf\n", + "import meshmode.mesh.generation as mgen\n", + "\n", + "actx_factory = _acf\n", + "actx = actx_factory()\n", + "\n", + "nelements = 64\n", + "target_order = 4\n", + "\n", + "mesh = mgen.generate_sphere(1.0, target_order,\n", + " uniform_refinement_rounds=0)\n", + "\n", + "\n", + "from meshmode.discretization import Discretization\n", + "from meshmode.discretization.poly_element import (\n", + " InterpolatoryQuadratureSimplexGroupFactory,\n", + " LegendreGaussLobattoTensorProductGroupFactory,\n", + " default_simplex_group_factory,\n", + ")\n", + "\n", + "\n", + "grp_factory = default_simplex_group_factory(3,target_order)\n", + "discr = Discretization(actx, mesh, grp_factory)\n", + "discr.nodes()\n", + "actx.to_numpy(discr.nodes())" + ] }, { "cell_type": "code", From d7fd6ba995d6f7ff45c5d16635093d48434ecbcd Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 8 Nov 2024 18:48:06 -0600 Subject: [PATCH 081/143] Added normals, need center --- test/playground.ipynb | 127 +++---------------------------------- test/test_recurrenceqbx.py | 63 ++++++++++++++++-- 2 files changed, 67 insertions(+), 123 deletions(-) diff --git a/test/playground.ipynb b/test/playground.ipynb index 6e75dce1..62dae615 100644 --- a/test/playground.ipynb +++ b/test/playground.ipynb @@ -2,104 +2,22 @@ "cells": [ { "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from collections.abc import Callable, Sequence\n", - "from typing import Any\n", - "\n", - "import numpy as np\n", - "import numpy.linalg as la\n", - "\n", - "import modepy as mp\n", - "from pytools import deprecate_keyword, log_process\n", - "\n", - "from meshmode.mesh import Mesh, MeshElementGroup, make_mesh\n", - "from meshmode.mesh.refinement import Refiner\n", - "from meshmode.mesh.generation import generate_sphere\n", - "from meshmode.discretization import Discretization\n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "meshy = generate_sphere(1.0, 2)\n", - "from sumpy.array_context import _acf\n", - "actx_factory = _acf\n", - "actx = actx_factory()\n", - "from meshmode.discretization.poly_element import (\n", - " default_simplex_group_factory\n", - " )\n", - "order = 4\n", - "discr = Discretization(actx, meshy, default_simplex_group_factory(order=4, base_dim=3))" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "ename": "RuntimeError", - "evalue": "Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'j', 'e'})", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:281\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 281\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_loopy_transform_cache\u001b[49m\u001b[43m[\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n", - "\u001b[0;31mKeyError\u001b[0m: TranslationUnit(callables_table=immutables.Map({'einsum3to2_kernel': CallableKernel(arg_id_to_descr=None, arg_id_to_dtype=None, name='einsum3to2_kernel', subkernel=LoopKernel(domains=[BasicSet(\"[Ne, Ni, Nj] -> { [e, i, j] : 0 <= e < Ne and 0 <= i < Ni and 0 <= j < Nj }\")], instructions=[Assignment(assignee=Subscript(Variable('out'), (Variable('e'), Variable('i'))), atomicity=(), conflicts_with_groups=frozenset(), depends_on=frozenset(), depends_on_is_final=False, expression=Reduction(SumReductionOperation, ('j',), Product((Subscript(Variable('arg0'), (Variable('i'), Variable('j'))), Subscript(Variable('arg1'), (Variable('e'), Variable('j'))))), False), groups=frozenset(), id='insn', no_sync_with=frozenset(), predicates=frozenset(), priority=0, tags=frozenset(), temp_var_type=Optional(), within_inames=frozenset({'i', 'e'}), within_inames_is_final=False)], args=[>, >, >, , shape: (Ni, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Ni), dim_tags: (stride:auto, stride:auto), offset: out aspace: global>], assumptions=BasicSet(\"[Ne, Ni, Nj] -> { : }\"), temporary_variables={}, inames={'i': Iname(name='i', tags=frozenset()), 'j': Iname(name='j', tags=frozenset()), 'e': Iname(name='e', tags=frozenset())}, substitutions={}, options=Options(allow_fp_reordering=True, allow_terminal_colors=True, annotate_inames=False, build_options=[], check_dep_resolution=True, cl_exec_manage_array_events=True, disable_global_barriers=False, edit_code=False, enforce_array_accesses_within_bounds=True, enforce_variable_access_ordered=True, insert_gbarriers=False, no_numpy=True, return_dict=True, skip_arg_checks=False, trace_assignment_values=False, trace_assignments=False, write_code=False, write_wrapper=False), target=, tags=frozenset({FirstAxisIsElementsTag(), NameHint(name='nodes0_3d')}), state=, name='einsum3to2_kernel', preambles=(), preamble_generators=(), symbol_manglers=(), linearization=None, iname_slab_increments=immutables.Map({}), loop_priority=frozenset(), applied_iname_rewrites=(), index_dtype=np:dtype('int32'), silenced_warnings=[], overridden_get_grid_sizes_for_insn_ids=None))}), target=, entrypoints=frozenset({'einsum3to2_kernel'}))", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[25], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdiscr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:589\u001b[0m, in \u001b[0;36mDiscretization.nodes\u001b[0;34m(self, cached)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[0;32m--> 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array(\u001b[43m[\u001b[49m\n\u001b[1;32m 590\u001b[0m \u001b[43m \u001b[49m\u001b[43m_DOFArray\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtuple\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 593\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mambient_dim\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", - "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:590\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[0;32m--> 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", - "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:591\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[1;32m 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m([\n\u001b[0;32m--> 591\u001b[0m actx\u001b[38;5;241m.\u001b[39mfreeze(\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m) \u001b[38;5;28;01mfor\u001b[39;00m grp \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgroups\n\u001b[1;32m 592\u001b[0m ]))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", - "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:579\u001b[0m, in \u001b[0;36mDiscretization.nodes..resample_mesh_nodes\u001b[0;34m(grp, iaxis)\u001b[0m\n\u001b[1;32m 575\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (grp_unit_nodes\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;241m==\u001b[39m meg_unit_nodes\u001b[38;5;241m.\u001b[39mshape\n\u001b[1;32m 576\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m np\u001b[38;5;241m.\u001b[39mlinalg\u001b[38;5;241m.\u001b[39mnorm(grp_unit_nodes \u001b[38;5;241m-\u001b[39m meg_unit_nodes) \u001b[38;5;241m<\u001b[39m tol):\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[0;32m--> 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meinsum\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mij,ej->ei\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 580\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtag_axis\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 581\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 582\u001b[0m \u001b[43m \u001b[49m\u001b[43mDiscretizationDOFAxisTag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 583\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_numpy\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_mesh_interp_matrix\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 584\u001b[0m \u001b[43m \u001b[49m\u001b[43mnodes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 585\u001b[0m \u001b[43m \u001b[49m\u001b[43mtagged\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 586\u001b[0m \u001b[43m \u001b[49m\u001b[43mFirstAxisIsElementsTag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 587\u001b[0m \u001b[43m \u001b[49m\u001b[43mNameHint\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname_hint\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/source/src/arraycontext/arraycontext/context.py:495\u001b[0m, in \u001b[0;36mArrayContext.einsum\u001b[0;34m(self, spec, arg_names, tagged, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m arg_names \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marg\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(args))])\n\u001b[1;32m 494\u001b[0m prg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_einsum_prg(spec, arg_names, tagged)\n\u001b[0;32m--> 495\u001b[0m out_ary \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_loopy\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 496\u001b[0m \u001b[43m \u001b[49m\u001b[43mprg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m{\u001b[49m\u001b[43marg_names\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m}\u001b[49m\n\u001b[1;32m 497\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mout\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 498\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtag(tagged, out_ary)\n", - "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:284\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n\u001b[1;32m 283\u001b[0m orig_t_unit \u001b[38;5;241m=\u001b[39m t_unit\n\u001b[0;32m--> 284\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mexecutor(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcontext)\n\u001b[1;32m 285\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_loopy_transform_cache[orig_t_unit] \u001b[38;5;241m=\u001b[39m executor\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m orig_t_unit\n", - "File \u001b[0;32m~/Desktop/sumpy/sumpy/array_context.py:55\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 55\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/source/src/boxtree/boxtree/array_context.py:54\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 54\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:353\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m t_unit\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 353\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 354\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to reason what outer_iname and inner_iname \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 355\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mneeds to be; all_inames is given as: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mall_inames\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 356\u001b[0m )\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inner_iname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m t_unit \u001b[38;5;241m=\u001b[39m lp\u001b[38;5;241m.\u001b[39msplit_iname(t_unit, inner_iname, \u001b[38;5;241m16\u001b[39m, inner_tag\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ml.0\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mRuntimeError\u001b[0m: Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'j', 'e'})" - ] - } - ], - "source": [ - "discr.nodes()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, + "execution_count": 5, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/hirish/source/src/meshmode/meshmode/mesh/__init__.py:1086: UserWarning: Unimplemented: Cannot check element orientation for a mesh with mesh.dim != mesh.ambient_dim\n", - " check_mesh_consistency(\n", - "/Users/hirish/source/src/boxtree/boxtree/array_context.py:54: UntransformedCodeWarning: Using the base PyOpenCLArrayContext.transform_loopy_program to transform a translation unit. This is largely a no-op and unlikely to result in fast generated code.Instead, subclass PyOpenCLArrayContext and implement the specific transform logic required to transform the program for your package or application. Check higher-level packages (e.g. meshmode), which may already have subclasses you may want to build on.\n", - " return super().transform_loopy_program(t_unit)\n" - ] - }, { "ename": "RuntimeError", - "evalue": "Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'j', 'e'})", + "evalue": "Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'e', 'j'})", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:281\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 281\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_loopy_transform_cache\u001b[49m\u001b[43m[\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n", - "\u001b[0;31mKeyError\u001b[0m: TranslationUnit(callables_table=immutables.Map({'einsum3to2_kernel': CallableKernel(arg_id_to_descr=None, arg_id_to_dtype=None, name='einsum3to2_kernel', subkernel=LoopKernel(domains=[BasicSet(\"[Ne, Ni, Nj] -> { [e, i, j] : 0 <= e < Ne and 0 <= i < Ni and 0 <= j < Nj }\")], instructions=[Assignment(assignee=Subscript(Variable('out'), (Variable('e'), Variable('i'))), atomicity=(), conflicts_with_groups=frozenset(), depends_on=frozenset(), depends_on_is_final=False, expression=Reduction(SumReductionOperation, ('j',), Product((Subscript(Variable('arg0'), (Variable('i'), Variable('j'))), Subscript(Variable('arg1'), (Variable('e'), Variable('j'))))), False), groups=frozenset(), id='insn', no_sync_with=frozenset(), predicates=frozenset(), priority=0, tags=frozenset(), temp_var_type=Optional(), within_inames=frozenset({'i', 'e'}), within_inames_is_final=False)], args=[>, >, >, , shape: (Ni, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Ni), dim_tags: (stride:auto, stride:auto), offset: out aspace: global>], assumptions=BasicSet(\"[Ne, Ni, Nj] -> { : }\"), temporary_variables={}, inames={'i': Iname(name='i', tags=frozenset()), 'j': Iname(name='j', tags=frozenset()), 'e': Iname(name='e', tags=frozenset())}, substitutions={}, options=Options(allow_fp_reordering=True, allow_terminal_colors=True, annotate_inames=False, build_options=[], check_dep_resolution=True, cl_exec_manage_array_events=True, disable_global_barriers=False, edit_code=False, enforce_array_accesses_within_bounds=True, enforce_variable_access_ordered=True, insert_gbarriers=False, no_numpy=True, return_dict=True, skip_arg_checks=False, trace_assignment_values=False, trace_assignments=False, write_code=False, write_wrapper=False), target=, tags=frozenset({FirstAxisIsElementsTag(), NameHint(name='nodes0_3d')}), state=, name='einsum3to2_kernel', preambles=(), preamble_generators=(), symbol_manglers=(), linearization=None, iname_slab_increments=immutables.Map({}), loop_priority=frozenset(), applied_iname_rewrites=(), index_dtype=np:dtype('int32'), silenced_warnings=[], overridden_get_grid_sizes_for_insn_ids=None))}), target=, entrypoints=frozenset({'einsum3to2_kernel'}))", + "\u001b[0;31mKeyError\u001b[0m: TranslationUnit(callables_table=immutables.Map({'einsum3to2_kernel': CallableKernel(arg_id_to_descr=None, arg_id_to_dtype=None, name='einsum3to2_kernel', subkernel=LoopKernel(domains=[BasicSet(\"[Ne, Ni, Nj] -> { [e, i, j] : 0 <= e < Ne and 0 <= i < Ni and 0 <= j < Nj }\")], instructions=[Assignment(assignee=Subscript(Variable('out'), (Variable('e'), Variable('i'))), atomicity=(), conflicts_with_groups=frozenset(), depends_on=frozenset(), depends_on_is_final=False, expression=Reduction(SumReductionOperation, ('j',), Product((Subscript(Variable('arg0'), (Variable('i'), Variable('j'))), Subscript(Variable('arg1'), (Variable('e'), Variable('j'))))), False), groups=frozenset(), id='insn', no_sync_with=frozenset(), predicates=frozenset(), priority=0, tags=frozenset(), temp_var_type=Optional(), within_inames=frozenset({'i', 'e'}), within_inames_is_final=False)], args=[>, >, >, , shape: (Ni, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Ni), dim_tags: (stride:auto, stride:auto), offset: out aspace: global>], assumptions=BasicSet(\"[Ne, Ni, Nj] -> { : }\"), temporary_variables={}, inames={'i': Iname(name='i', tags=frozenset()), 'e': Iname(name='e', tags=frozenset()), 'j': Iname(name='j', tags=frozenset())}, substitutions={}, options=Options(allow_fp_reordering=True, allow_terminal_colors=True, annotate_inames=False, build_options=[], check_dep_resolution=True, cl_exec_manage_array_events=True, disable_global_barriers=False, edit_code=False, enforce_array_accesses_within_bounds=True, enforce_variable_access_ordered=True, insert_gbarriers=False, no_numpy=True, return_dict=True, skip_arg_checks=False, trace_assignment_values=False, trace_assignments=False, write_code=False, write_wrapper=False), target=, tags=frozenset({FirstAxisIsElementsTag(), NameHint(name='nodes0_3d')}), state=, name='einsum3to2_kernel', preambles=(), preamble_generators=(), symbol_manglers=(), linearization=None, iname_slab_increments=immutables.Map({}), loop_priority=frozenset(), applied_iname_rewrites=(), index_dtype=np:dtype('int32'), silenced_warnings=[], overridden_get_grid_sizes_for_insn_ids=None))}), target=, entrypoints=frozenset({'einsum3to2_kernel'}))", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[28], line 24\u001b[0m\n\u001b[1;32m 22\u001b[0m grp_factory \u001b[38;5;241m=\u001b[39m default_simplex_group_factory(\u001b[38;5;241m3\u001b[39m,target_order)\n\u001b[1;32m 23\u001b[0m discr \u001b[38;5;241m=\u001b[39m Discretization(actx, mesh, grp_factory)\n\u001b[0;32m---> 24\u001b[0m \u001b[43mdiscr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 25\u001b[0m actx\u001b[38;5;241m.\u001b[39mto_numpy(discr\u001b[38;5;241m.\u001b[39mnodes())\n", + "Cell \u001b[0;32mIn[5], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtest_recurrenceqbx\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _create_sphere\n\u001b[0;32m----> 3\u001b[0m \u001b[43m_create_sphere\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Desktop/sumpy/test/test_recurrenceqbx.py:161\u001b[0m, in \u001b[0;36m_create_sphere\u001b[0;34m(refinement_rounds)\u001b[0m\n\u001b[1;32m 159\u001b[0m grp_factory \u001b[38;5;241m=\u001b[39m default_simplex_group_factory(\u001b[38;5;241m3\u001b[39m, target_order)\n\u001b[1;32m 160\u001b[0m discr \u001b[38;5;241m=\u001b[39m Discretization(actx, mesh, grp_factory)\n\u001b[0;32m--> 161\u001b[0m nodes \u001b[38;5;241m=\u001b[39m actx_m\u001b[38;5;241m.\u001b[39mto_numpy(\u001b[43mdiscr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 163\u001b[0m area_weight_a \u001b[38;5;241m=\u001b[39m bind(discr, sym\u001b[38;5;241m.\u001b[39mQWeight()\u001b[38;5;241m*\u001b[39msym\u001b[38;5;241m.\u001b[39marea_element(\u001b[38;5;241m3\u001b[39m))(actx_m)\n\u001b[1;32m 164\u001b[0m area_weight \u001b[38;5;241m=\u001b[39m actx_m\u001b[38;5;241m.\u001b[39mto_numpy(area_weight_a)[\u001b[38;5;241m0\u001b[39m]\n", "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:589\u001b[0m, in \u001b[0;36mDiscretization.nodes\u001b[0;34m(self, cached)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[0;32m--> 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array(\u001b[43m[\u001b[49m\n\u001b[1;32m 590\u001b[0m \u001b[43m \u001b[49m\u001b[43m_DOFArray\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtuple\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 593\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mambient_dim\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:590\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[0;32m--> 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:591\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[1;32m 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m([\n\u001b[0;32m--> 591\u001b[0m actx\u001b[38;5;241m.\u001b[39mfreeze(\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m) \u001b[38;5;28;01mfor\u001b[39;00m grp \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgroups\n\u001b[1;32m 592\u001b[0m ]))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", @@ -109,45 +27,16 @@ "File \u001b[0;32m~/Desktop/sumpy/sumpy/array_context.py:55\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 55\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/source/src/boxtree/boxtree/array_context.py:54\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 54\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:353\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m t_unit\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 353\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 354\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to reason what outer_iname and inner_iname \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 355\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mneeds to be; all_inames is given as: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mall_inames\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 356\u001b[0m )\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inner_iname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m t_unit \u001b[38;5;241m=\u001b[39m lp\u001b[38;5;241m.\u001b[39msplit_iname(t_unit, inner_iname, \u001b[38;5;241m16\u001b[39m, inner_tag\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ml.0\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mRuntimeError\u001b[0m: Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'j', 'e'})" + "\u001b[0;31mRuntimeError\u001b[0m: Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'e', 'j'})" ] } ], "source": [ - "from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf\n", - "import meshmode.mesh.generation as mgen\n", - "\n", - "actx_factory = _acf\n", - "actx = actx_factory()\n", - "\n", - "nelements = 64\n", - "target_order = 4\n", - "\n", - "mesh = mgen.generate_sphere(1.0, target_order,\n", - " uniform_refinement_rounds=0)\n", - "\n", - "\n", - "from meshmode.discretization import Discretization\n", - "from meshmode.discretization.poly_element import (\n", - " InterpolatoryQuadratureSimplexGroupFactory,\n", - " LegendreGaussLobattoTensorProductGroupFactory,\n", - " default_simplex_group_factory,\n", - ")\n", - "\n", + "from test_recurrenceqbx import _create_sphere\n", "\n", - "grp_factory = default_simplex_group_factory(3,target_order)\n", - "discr = Discretization(actx, mesh, grp_factory)\n", - "discr.nodes()\n", - "actx.to_numpy(discr.nodes())" + "_create_sphere()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index d9cb04da..1949d45b 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -29,8 +29,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +import meshmode.mesh.generation as mgen import numpy as np import sympy as sp +from meshmode import _acf as _acf_meshmode +from meshmode.discretization import Discretization +from meshmode.discretization.poly_element import ( + default_simplex_group_factory, +) +from pytential import bind, sym from sympy import hankel1 from sumpy.array_context import _acf @@ -50,9 +57,35 @@ actx = actx_factory() lknl = LaplaceKernel(2) hlknl = HelmholtzKernel(2, "k") +lnkl3d = LaplaceKernel(3) + -def _qbx_lp_helmholtz_general(sources, targets, centers, radius, strengths, order): + +def _qbx_lp_laplace_general3d(sources, targets, centers, radius, strengths, order): + lpot = LayerPotential(actx.context, + expansion=ExpnClass(lnkl3d, order), + target_kernels=(lnkl3d,), + source_kernels=(lnkl3d,)) + + # print(lpot.get_kernel()) + expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) + sources = actx.from_numpy(sources) + targets = actx.from_numpy(targets) + centers = actx.from_numpy(centers) + + strengths = (strengths,) + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii, + k=1) + result_qbx = actx.to_numpy(result_qbx) + + return result_qbx + + +def _qbx_lp_helmholtz_general2d(sources, targets, centers, radius, strengths, order): lpot = LayerPotential(actx.context, expansion=ExpnClass(hlknl, order), target_kernels=(hlknl,), @@ -75,7 +108,7 @@ def _qbx_lp_helmholtz_general(sources, targets, centers, radius, strengths, orde return result_qbx -def _qbx_lp_laplace_general(sources, targets, centers, radius, strengths, order): +def _qbx_lp_laplace_general2d(sources, targets, centers, radius, strengths, order): lpot = LayerPotential(actx.context, expansion=ExpnClass(lknl, order), target_kernels=(lknl,), @@ -117,6 +150,28 @@ def _create_ellipse(n_p): return sources, centers, normals, density, h, radius + +target_order = 4 + +actx_m = _acf_meshmode() +mesh = mgen.generate_sphere(1.0, target_order, + uniform_refinement_rounds=1) +grp_factory = default_simplex_group_factory(3, target_order) +discr = Discretization(actx_m, mesh, grp_factory) +nodes = actx_m.to_numpy(discr.nodes())[0] + +area_weight_a = bind(discr, sym.QWeight()*sym.area_element(3))(actx_m) +area_weight = actx_m.to_numpy(area_weight_a)[0] + +normals_a = bind(discr, sym.normal(3))(actx_m).as_vector(dtype=object) +normals = actx_m.to_numpy(normals_a) + +print(area_weight.shape) +print(normals.shape) + + + + def test_recurrence_laplace_2d_ellipse(): r""" Tests recurrence + qbx code. @@ -139,7 +194,7 @@ def test_recurrence_laplace_2d_ellipse(): exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, 2, p) - qbx_res = _qbx_lp_laplace_general(sources, sources, centers, + qbx_res = _qbx_lp_laplace_general2d(sources, sources, centers, radius, strengths, p) # qbx_res,_ = lpot_eval_circle(sources.shape[1], p) err.append(np.max(np.abs(exp_res - qbx_res))) @@ -167,7 +222,7 @@ def test_recurrence_helmholtz_2d_ellipse(): strengths = h * density exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, helmholtz2d, g_x_y, 2, p) - qbx_res = _qbx_lp_helmholtz_general(sources, sources, + qbx_res = _qbx_lp_helmholtz_general2d(sources, sources, centers, radius, strengths, p) err.append(np.max(np.abs(exp_res - qbx_res))) assert np.max(err) <= 1e-13 From f0e91020b2e6eee0efe184ec6df0298d46f25f31 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 8 Nov 2024 19:49:21 -0600 Subject: [PATCH 082/143] Added 3d code for sphere generation --- test/playground.ipynb | 133 ++++++++++++++++++++++++++++++------- test/test_recurrenceqbx.py | 31 +++++---- 2 files changed, 125 insertions(+), 39 deletions(-) diff --git a/test/playground.ipynb b/test/playground.ipynb index 62dae615..b4b8f556 100644 --- a/test/playground.ipynb +++ b/test/playground.ipynb @@ -2,39 +2,122 @@ "cells": [ { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import meshmode.mesh.generation as mgen\n", + "import numpy as np\n", + "import sympy as sp\n", + "from meshmode import _acf as _acf_meshmode\n", + "from meshmode.discretization import Discretization\n", + "from meshmode.discretization.poly_element import (\n", + " default_simplex_group_factory,\n", + ")\n", + "from pytential import bind, sym\n", + "from sympy import hankel1\n", + "\n", + "from sumpy.array_context import _acf\n", + "from sumpy.expansion.diff_op import (\n", + " laplacian,\n", + " make_identity_diff_op,\n", + ")\n", + "from sumpy.expansion.local import LineTaylorLocalExpansion\n", + "from sumpy.kernel import HelmholtzKernel, LaplaceKernel\n", + "from sumpy.qbx import LayerPotential\n", + "from sumpy.recurrenceqbx import _make_sympy_vec, recurrence_qbx_lp" + ] + }, + { + "cell_type": "code", + "execution_count": 48, "metadata": {}, "outputs": [ { - "ename": "RuntimeError", - "evalue": "Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'e', 'j'})", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:281\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 281\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_loopy_transform_cache\u001b[49m\u001b[43m[\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n", - "\u001b[0;31mKeyError\u001b[0m: TranslationUnit(callables_table=immutables.Map({'einsum3to2_kernel': CallableKernel(arg_id_to_descr=None, arg_id_to_dtype=None, name='einsum3to2_kernel', subkernel=LoopKernel(domains=[BasicSet(\"[Ne, Ni, Nj] -> { [e, i, j] : 0 <= e < Ne and 0 <= i < Ni and 0 <= j < Nj }\")], instructions=[Assignment(assignee=Subscript(Variable('out'), (Variable('e'), Variable('i'))), atomicity=(), conflicts_with_groups=frozenset(), depends_on=frozenset(), depends_on_is_final=False, expression=Reduction(SumReductionOperation, ('j',), Product((Subscript(Variable('arg0'), (Variable('i'), Variable('j'))), Subscript(Variable('arg1'), (Variable('e'), Variable('j'))))), False), groups=frozenset(), id='insn', no_sync_with=frozenset(), predicates=frozenset(), priority=0, tags=frozenset(), temp_var_type=Optional(), within_inames=frozenset({'i', 'e'}), within_inames_is_final=False)], args=[>, >, >, , shape: (Ni, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Nj), dim_tags: (stride:auto, stride:auto), offset: in aspace: global>, , shape: (Ne, Ni), dim_tags: (stride:auto, stride:auto), offset: out aspace: global>], assumptions=BasicSet(\"[Ne, Ni, Nj] -> { : }\"), temporary_variables={}, inames={'i': Iname(name='i', tags=frozenset()), 'e': Iname(name='e', tags=frozenset()), 'j': Iname(name='j', tags=frozenset())}, substitutions={}, options=Options(allow_fp_reordering=True, allow_terminal_colors=True, annotate_inames=False, build_options=[], check_dep_resolution=True, cl_exec_manage_array_events=True, disable_global_barriers=False, edit_code=False, enforce_array_accesses_within_bounds=True, enforce_variable_access_ordered=True, insert_gbarriers=False, no_numpy=True, return_dict=True, skip_arg_checks=False, trace_assignment_values=False, trace_assignments=False, write_code=False, write_wrapper=False), target=, tags=frozenset({FirstAxisIsElementsTag(), NameHint(name='nodes0_3d')}), state=, name='einsum3to2_kernel', preambles=(), preamble_generators=(), symbol_manglers=(), linearization=None, iname_slab_increments=immutables.Map({}), loop_priority=frozenset(), applied_iname_rewrites=(), index_dtype=np:dtype('int32'), silenced_warnings=[], overridden_get_grid_sizes_for_insn_ids=None))}), target=, entrypoints=frozenset({'einsum3to2_kernel'}))", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[5], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtest_recurrenceqbx\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _create_sphere\n\u001b[0;32m----> 3\u001b[0m \u001b[43m_create_sphere\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/Desktop/sumpy/test/test_recurrenceqbx.py:161\u001b[0m, in \u001b[0;36m_create_sphere\u001b[0;34m(refinement_rounds)\u001b[0m\n\u001b[1;32m 159\u001b[0m grp_factory \u001b[38;5;241m=\u001b[39m default_simplex_group_factory(\u001b[38;5;241m3\u001b[39m, target_order)\n\u001b[1;32m 160\u001b[0m discr \u001b[38;5;241m=\u001b[39m Discretization(actx, mesh, grp_factory)\n\u001b[0;32m--> 161\u001b[0m nodes \u001b[38;5;241m=\u001b[39m actx_m\u001b[38;5;241m.\u001b[39mto_numpy(\u001b[43mdiscr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 163\u001b[0m area_weight_a \u001b[38;5;241m=\u001b[39m bind(discr, sym\u001b[38;5;241m.\u001b[39mQWeight()\u001b[38;5;241m*\u001b[39msym\u001b[38;5;241m.\u001b[39marea_element(\u001b[38;5;241m3\u001b[39m))(actx_m)\n\u001b[1;32m 164\u001b[0m area_weight \u001b[38;5;241m=\u001b[39m actx_m\u001b[38;5;241m.\u001b[39mto_numpy(area_weight_a)[\u001b[38;5;241m0\u001b[39m]\n", - "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:589\u001b[0m, in \u001b[0;36mDiscretization.nodes\u001b[0;34m(self, cached)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[0;32m--> 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array(\u001b[43m[\u001b[49m\n\u001b[1;32m 590\u001b[0m \u001b[43m \u001b[49m\u001b[43m_DOFArray\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtuple\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 593\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mambient_dim\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", - "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:590\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[0;32m--> 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfreeze\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", - "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:591\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mij,ej->ei\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 580\u001b[0m actx\u001b[38;5;241m.\u001b[39mtag_axis(\n\u001b[1;32m 581\u001b[0m \u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 586\u001b[0m FirstAxisIsElementsTag(),\n\u001b[1;32m 587\u001b[0m NameHint(name_hint)))\n\u001b[1;32m 589\u001b[0m result \u001b[38;5;241m=\u001b[39m make_obj_array([\n\u001b[1;32m 590\u001b[0m _DOFArray(\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mtuple\u001b[39m([\n\u001b[0;32m--> 591\u001b[0m actx\u001b[38;5;241m.\u001b[39mfreeze(\u001b[43mresample_mesh_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miaxis\u001b[49m\u001b[43m)\u001b[49m) \u001b[38;5;28;01mfor\u001b[39;00m grp \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgroups\n\u001b[1;32m 592\u001b[0m ]))\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iaxis \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mambient_dim)])\n\u001b[1;32m 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cached:\n\u001b[1;32m 595\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cached_nodes \u001b[38;5;241m=\u001b[39m result\n", - "File \u001b[0;32m~/source/src/meshmode/meshmode/discretization/__init__.py:579\u001b[0m, in \u001b[0;36mDiscretization.nodes..resample_mesh_nodes\u001b[0;34m(grp, iaxis)\u001b[0m\n\u001b[1;32m 575\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (grp_unit_nodes\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;241m==\u001b[39m meg_unit_nodes\u001b[38;5;241m.\u001b[39mshape\n\u001b[1;32m 576\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m np\u001b[38;5;241m.\u001b[39mlinalg\u001b[38;5;241m.\u001b[39mnorm(grp_unit_nodes \u001b[38;5;241m-\u001b[39m meg_unit_nodes) \u001b[38;5;241m<\u001b[39m tol):\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m actx\u001b[38;5;241m.\u001b[39mtag(NameHint(name_hint), nodes)\n\u001b[0;32m--> 579\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meinsum\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mij,ej->ei\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 580\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtag_axis\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 581\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 582\u001b[0m \u001b[43m \u001b[49m\u001b[43mDiscretizationDOFAxisTag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 583\u001b[0m \u001b[43m \u001b[49m\u001b[43mactx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_numpy\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_mesh_interp_matrix\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 584\u001b[0m \u001b[43m \u001b[49m\u001b[43mnodes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 585\u001b[0m \u001b[43m \u001b[49m\u001b[43mtagged\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 586\u001b[0m \u001b[43m \u001b[49m\u001b[43mFirstAxisIsElementsTag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 587\u001b[0m \u001b[43m \u001b[49m\u001b[43mNameHint\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname_hint\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/source/src/arraycontext/arraycontext/context.py:495\u001b[0m, in \u001b[0;36mArrayContext.einsum\u001b[0;34m(self, spec, arg_names, tagged, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m arg_names \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marg\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(args))])\n\u001b[1;32m 494\u001b[0m prg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_einsum_prg(spec, arg_names, tagged)\n\u001b[0;32m--> 495\u001b[0m out_ary \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_loopy\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 496\u001b[0m \u001b[43m \u001b[49m\u001b[43mprg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m{\u001b[49m\u001b[43marg_names\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m}\u001b[49m\n\u001b[1;32m 497\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mout\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 498\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtag(tagged, out_ary)\n", - "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:284\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.call_loopy\u001b[0;34m(self, t_unit, **kwargs)\u001b[0m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n\u001b[1;32m 283\u001b[0m orig_t_unit \u001b[38;5;241m=\u001b[39m t_unit\n\u001b[0;32m--> 284\u001b[0m executor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mexecutor(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcontext)\n\u001b[1;32m 285\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_loopy_transform_cache[orig_t_unit] \u001b[38;5;241m=\u001b[39m executor\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m orig_t_unit\n", - "File \u001b[0;32m~/Desktop/sumpy/sumpy/array_context.py:55\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 55\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/source/src/boxtree/boxtree/array_context.py:54\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (options\u001b[38;5;241m.\u001b[39mreturn_dict \u001b[38;5;129;01mand\u001b[39;00m options\u001b[38;5;241m.\u001b[39mno_numpy):\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLoopy kernel passed to call_loopy must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave return_dict and no_numpy options set. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDid you use arraycontext.make_loopy_program \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto create this kernel?\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 54\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_loopy_program\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt_unit\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/source/src/arraycontext/arraycontext/impl/pyopencl/__init__.py:353\u001b[0m, in \u001b[0;36mPyOpenCLArrayContext.transform_loopy_program\u001b[0;34m(self, t_unit)\u001b[0m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m t_unit\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 353\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 354\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to reason what outer_iname and inner_iname \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 355\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mneeds to be; all_inames is given as: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mall_inames\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 356\u001b[0m )\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inner_iname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m t_unit \u001b[38;5;241m=\u001b[39m lp\u001b[38;5;241m.\u001b[39msplit_iname(t_unit, inner_iname, \u001b[38;5;241m16\u001b[39m, inner_tag\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ml.0\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mRuntimeError\u001b[0m: Unable to reason what outer_iname and inner_iname needs to be; all_inames is given as: frozenset({'i', 'e', 'j'})" + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hirish/source/src/meshmode/meshmode/mesh/__init__.py:1086: UserWarning: Unimplemented: Cannot check element orientation for a mesh with mesh.dim != mesh.ambient_dim\n", + " check_mesh_consistency(\n" ] } ], "source": [ - "from test_recurrenceqbx import _create_sphere\n", + "target_order = 4\n", + "\n", + "actx_m = _acf_meshmode()\n", + "mesh = mgen.generate_sphere(1.0, target_order,\n", + " uniform_refinement_rounds=1)\n", + "grp_factory = default_simplex_group_factory(3, target_order)\n", + "discr = Discretization(actx_m, mesh, grp_factory)\n", + "nodes = actx_m.to_numpy(discr.nodes())\n", + "sources = np.array([nodes[0][0].reshape(-1),nodes[1][0].reshape(-1),nodes[2][0].reshape(-1)])\n", + "\n", + "area_weight_a = bind(discr, sym.QWeight()*sym.area_element(3))(actx_m)\n", + "area_weight = actx_m.to_numpy(area_weight_a)[0]\n", + "strengths = area_weight.reshape(-1)\n", + "\n", + "normals_a = bind(discr, sym.normal(3))(actx_m).as_vector(dtype=object)\n", + "normals_a = actx_m.to_numpy(normals_a)\n", + "normals = np.array([normals_a[0][0].reshape(-1), normals_a[1][0].reshape(-1), normals_a[2][0].reshape(-1)])\n", + "\n", + "radius = 0.01\n", + "centers = sources - radius * normals" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1200,)" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "strengths.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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4lvm9V/zio7NZiMiIkJxJRjMcu3zwTvA62JxnYZzFXUpKSkkJycrNwcmk0n5nrzFBN1VsH322WfcfvvtvP7669x0001DeASeccuzZs3i+eefVx7zegt2Nm75oYceYsuWLeTn5yuPrVu3jkOHDrF///4h2eeRim/ePp4HlZWVAB0uALGxsZw9e/ZC7NKwQhAE0tLS+MUvfsHPf/5zCgoK2LhxI2+//TYPPPAACxcuVMJrv/rVr/D39+ePf/zjgPiWCYJAcHAwwcHBjB07VplOWVxczLFjxwbFf+18qaioID8/v18DvIYbXpFJTk5WwmWhoaGEhoYyfvx45XsqLS0lPz+/ywq2L774gjvuuIOXXnqJ7373u0N6DE6nk6ysLH72s5+1eXzRokXs27ev0+fs37+fRYsWtXls8eLFvPrqq7hcLp+58RmODInQPProo/zmN7/pdpsDBw4we/bsPr9H+1CPLMsjtrR2sBAEgXHjxvHQQw/x4IMPUlxczMaNG3nvvff46U9/il6v58c//rHSsDnQn29gYCCpqamkpqZis9moqqqivLyc48ePKxezmJiYQS3Xbk1paSknT568aEYbwLkG1KSkpC7Ltlt/T3a7XSkmOHnyJDt27MDtdjNu3DgeeeQR/va3v3HrrbcO+W+xpqYGURQ7vQH13py2p7KystPtvX1jF0PIdLAYEqG59957ueWWW7rdpq+JRq9bbGVlZZsTobq6+qIJcwwGgiCQnJzM2rVr2bp1K9OmTePmm29m+/bt/OUvf2HGjBnKeIMxY8YM+IXE399fGfXc2lDy5MmThISEKKIz0OXaXoqLiykoKCA9PZ3w8PBBeQ9fwysyo0eP7rVFv9FoZPTo0YwePRqXy0VlZSXPP/88zz33HDExMRw7doz9+/czf/78C1JpeL43oJ1t39njKufHkAhNVFQUUVFRg/LaqampxMXFsX37diVH43Q62b17N08++eSgvOfFxAMPPIDL5eLLL78kJCSEhx9+mKqqKjZv3symTZv47W9/22amzmB4fRmNRpKSkkhKSsLpdCqic/r06TY9IAM1hqCoqIjCwkLS09MJCwsbkNf0dSwWC1lZWYwaNYqxY8f26TX0ej0TJkygsLCQP/3pT6SmprJ582aWL1/OypUr2bBhw8DudDd4LXfar166uwGNi4vrdHudTnfRrGgHC5/L0RQX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0qUUFxd3+7wTJ05QUVGh/Bs/fvwQ7bGKikp3qMUAKj7HvHnzmDVrFs8//7zy2KRJk1i1ahW///3vO2y/a9currzySurr67udLa+ionJhUFc0Kj5FX8YbeElPTyc+Pp6rr76anTt3DuZuqqionAeq0Kj4FH0ZbxAfH89LL73Exo0b2bRpExMnTuTqq69mz549Q7HLKioqPaCaaqr4JOcz3mDixIltbOQXLFhASUkJf/zjH7nssssGdT9VVFR6Rl3RqPgUfRlv0Bnz589XJyyqqPgIqtCo+BStxxu0Zvv27ec1ZTEnJ0edsKii4iOoQqPiczzwwAO88sorvPbaa+Tn53P//fdTXFzMunXrAHj44Ye54447lO2fffZZNm/ezKlTp8jLy+Phhx9m48aN3HvvvRfqEEYkjz/+OAsXLiQgIKDX1X2yLPPoo4+SkJCAv78/V1xxBXl5eYO7oyo+h5qjUfE5br75Zmpra/ntb39LRUUFU6dO5ZNPPiE5ORmAioqKNj01TqeTn/zkJ5SVleHv78+UKVP4+OOPWbZs2YU6hBGJ0+nku9/9LgsWLODVV1/t1XOeeuop/vznP7NhwwYmTJjAY489xrXXXsuJEyfUCZgXEWofjYqKynmxYcMG7rvvPhoaGrrdTpZlEhISuO+++3jooYcAcDgcxMbG8uSTT7J27doh2FsVX0ANnamoqAwKhYWFVFZWtumJ8vPz4/LLL++xJ0plZKEKjYqKyqDgrRw8n54olZGJKjQqKhcxjz76aKeGpK3/HTx4sF/vcT49USojE7UYQEXlIubee+/llltu6XablJSUPr12XFwc4FnZtC41P9+eKJXhjyo0KioXMVFRUURFRQ3Ka6emphIXF8f27dtJT08HPJVru3fv5sknnxyU91TxTdTQmYrKALJnzx5WrFhBQkICgiCwefPmHp+ze/duMjIyMBqNjBkzhhdeeGHwd7QPFBcXk5ubS3FxMaIokpubS25uLmazWdkmLS2N999/H/CEzO677z6eeOIJ3n//fY4ePcpdd91FQEAAt95664U6DJULgLqiUVEZQCwWCzNmzGDNmjXccMMNPW5fWFjIsmXLuPvuu3nrrbfYu3cv99xzD9HR0b16/lDyq1/9ijfeeEP5b+8qZefOnVxxxRWAZyZQY2Ojss2DDz6IzWbjnnvuob6+nnnz5rFt2za1h+YiQ+2jUVEZJARB4P3332fVqlVdbvPQQw+xZcsW8vPzlcfWrVvHoUOH2L9//xDspYrK4KOGzlRULiD79+/vMHtn8eLFHDx4EJfLdYH2SkVlYFGFRkXlAlJZWdlpn4nb7aampuYC7ZWKysCiCo2KygWmsz6Tzh5XURmuqEKjonIBiYuL63T2jk6nIzIy8gLtlYrKwKIKjYrKBWTBggUdZu9s27aN2bNno9frL9BeqagMLKrQqKgMIGazWekvAU/5srf3BDrO0lm3bh1nz57lgQceID8/n9dee41XX32Vn/zkJxdi91VUBgW1vFlFZQDZtWsXV155ZYfH77zzTjZs2MBdd91FUVERu3btUv62e/du7r//fvLy8khISOChhx5ShrypqIwEVKFRUVFRURlU1NCZioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqg8v8BYPjsaU6L4s4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", "\n", - "_create_sphere()" + "ax.scatter(sources[0], sources[1], sources[2])" ] }, { diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 1949d45b..c34f02d4 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -150,25 +150,28 @@ def _create_ellipse(n_p): return sources, centers, normals, density, h, radius +def _create_sphere(refinment_rounds=1, exp_radius=0.01): + target_order = 4 -target_order = 4 + actx_m = _acf_meshmode() + mesh = mgen.generate_sphere(1.0, target_order, uniform_refinement_rounds=refinment_rounds) + grp_factory = default_simplex_group_factory(3, target_order) + discr = Discretization(actx_m, mesh, grp_factory) + nodes = actx_m.to_numpy(discr.nodes()) + sources = np.array([nodes[0][0].reshape(-1),nodes[1][0].reshape(-1),nodes[2][0].reshape(-1)]) -actx_m = _acf_meshmode() -mesh = mgen.generate_sphere(1.0, target_order, - uniform_refinement_rounds=1) -grp_factory = default_simplex_group_factory(3, target_order) -discr = Discretization(actx_m, mesh, grp_factory) -nodes = actx_m.to_numpy(discr.nodes())[0] + area_weight_a = bind(discr, sym.QWeight()*sym.area_element(3))(actx_m) + area_weight = actx_m.to_numpy(area_weight_a)[0] + area_weight = area_weight.reshape(-1) -area_weight_a = bind(discr, sym.QWeight()*sym.area_element(3))(actx_m) -area_weight = actx_m.to_numpy(area_weight_a)[0] + normals_a = bind(discr, sym.normal(3))(actx_m).as_vector(dtype=object) + normals_a = actx_m.to_numpy(normals_a) + normals = np.array([normals_a[0][0].reshape(-1), normals_a[1][0].reshape(-1), normals_a[2][0].reshape(-1)]) -normals_a = bind(discr, sym.normal(3))(actx_m).as_vector(dtype=object) -normals = actx_m.to_numpy(normals_a) - -print(area_weight.shape) -print(normals.shape) + radius = exp_radius + centers = sources - radius * normals + return sources, centers, normals, area_weight, radius From 99c48fc9b91033779a6fc0107c1477975e17a689 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 8 Nov 2024 20:19:54 -0600 Subject: [PATCH 083/143] Delete playground.ipynb --- test/playground.ipynb | 152 ------------------------------------------ 1 file changed, 152 deletions(-) delete mode 100644 test/playground.ipynb diff --git a/test/playground.ipynb b/test/playground.ipynb deleted file mode 100644 index b4b8f556..00000000 --- a/test/playground.ipynb +++ /dev/null @@ -1,152 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "import meshmode.mesh.generation as mgen\n", - "import numpy as np\n", - "import sympy as sp\n", - "from meshmode import _acf as _acf_meshmode\n", - "from meshmode.discretization import Discretization\n", - "from meshmode.discretization.poly_element import (\n", - " default_simplex_group_factory,\n", - ")\n", - "from pytential import bind, sym\n", - "from sympy import hankel1\n", - "\n", - "from sumpy.array_context import _acf\n", - "from sumpy.expansion.diff_op import (\n", - " laplacian,\n", - " make_identity_diff_op,\n", - ")\n", - "from sumpy.expansion.local import LineTaylorLocalExpansion\n", - "from sumpy.kernel import HelmholtzKernel, LaplaceKernel\n", - "from sumpy.qbx import LayerPotential\n", - "from sumpy.recurrenceqbx import _make_sympy_vec, recurrence_qbx_lp" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/hirish/source/src/meshmode/meshmode/mesh/__init__.py:1086: UserWarning: Unimplemented: Cannot check element orientation for a mesh with mesh.dim != mesh.ambient_dim\n", - " check_mesh_consistency(\n" - ] - } - ], - "source": [ - "target_order = 4\n", - "\n", - "actx_m = _acf_meshmode()\n", - "mesh = mgen.generate_sphere(1.0, target_order,\n", - " uniform_refinement_rounds=1)\n", - "grp_factory = default_simplex_group_factory(3, target_order)\n", - "discr = Discretization(actx_m, mesh, grp_factory)\n", - "nodes = actx_m.to_numpy(discr.nodes())\n", - "sources = np.array([nodes[0][0].reshape(-1),nodes[1][0].reshape(-1),nodes[2][0].reshape(-1)])\n", - "\n", - "area_weight_a = bind(discr, sym.QWeight()*sym.area_element(3))(actx_m)\n", - "area_weight = actx_m.to_numpy(area_weight_a)[0]\n", - "strengths = area_weight.reshape(-1)\n", - "\n", - "normals_a = bind(discr, sym.normal(3))(actx_m).as_vector(dtype=object)\n", - "normals_a = actx_m.to_numpy(normals_a)\n", - "normals = np.array([normals_a[0][0].reshape(-1), normals_a[1][0].reshape(-1), normals_a[2][0].reshape(-1)])\n", - "\n", - "radius = 0.01\n", - "centers = sources - radius * normals" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1200,)" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "strengths.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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4lvm9V/zio7NZiMiIkJxJRjMcu3zwTvA62JxnYZzFXUpKSkkJycrNwcmk0n5nrzFBN1VsH322WfcfvvtvP7669x0001DeASeccuzZs3i+eefVx7zegt2Nm75oYceYsuWLeTn5yuPrVu3jkOHDrF///4h2eeRim/ePp4HlZWVAB0uALGxsZw9e/ZC7NKwQhAE0tLS+MUvfsHPf/5zCgoK2LhxI2+//TYPPPAACxcuVMJrv/rVr/D39+ePf/zjgPiWCYJAcHAwwcHBjB07VplOWVxczLFjxwbFf+18qaioID8/v18DvIYbXpFJTk5WwmWhoaGEhoYyfvx45XsqLS0lPz+/ywq2L774gjvuuIOXXnqJ7373u0N6DE6nk6ysLH72s5+1eXzRokXs27ev0+fs37+fRYsWtXls8eLFvPrqq7hcLp+58RmODInQPProo/zmN7/pdpsDBw4we/bsPr9H+1CPLMsjtrR2sBAEgXHjxvHQQw/x4IMPUlxczMaNG3nvvff46U9/il6v58c//rHSsDnQn29gYCCpqamkpqZis9moqqqivLyc48ePKxezmJiYQS3Xbk1paSknT568aEYbwLkG1KSkpC7Ltlt/T3a7XSkmOHnyJDt27MDtdjNu3DgeeeQR/va3v3HrrbcO+W+xpqYGURQ7vQH13py2p7KystPtvX1jF0PIdLAYEqG59957ueWWW7rdpq+JRq9bbGVlZZsTobq6+qIJcwwGgiCQnJzM2rVr2bp1K9OmTePmm29m+/bt/OUvf2HGjBnKeIMxY8YM+IXE399fGfXc2lDy5MmThISEKKIz0OXaXoqLiykoKCA9PZ3w8PBBeQ9fwysyo0eP7rVFv9FoZPTo0YwePRqXy0VlZSXPP/88zz33HDExMRw7doz9+/czf/78C1JpeL43oJ1t39njKufHkAhNVFQUUVFRg/LaqampxMXFsX37diVH43Q62b17N08++eSgvOfFxAMPPIDL5eLLL78kJCSEhx9+mKqqKjZv3symTZv47W9/22amzmB4fRmNRpKSkkhKSsLpdCqic/r06TY9IAM1hqCoqIjCwkLS09MJCwsbkNf0dSwWC1lZWYwaNYqxY8f26TX0ej0TJkygsLCQP/3pT6SmprJ582aWL1/OypUr2bBhw8DudDd4LXfar166uwGNi4vrdHudTnfRrGgHC5/L0RQX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0qUUFxd3+7wTJ05QUVGh/Bs/fvwQ7bGKikp3qMUAKj7HvHnzmDVrFs8//7zy2KRJk1i1ahW///3vO2y/a9currzySurr67udLa+ionJhUFc0Kj5FX8YbeElPTyc+Pp6rr76anTt3DuZuqqionAeq0Kj4FH0ZbxAfH89LL73Exo0b2bRpExMnTuTqq69mz549Q7HLKioqPaCaaqr4JOcz3mDixIltbOQXLFhASUkJf/zjH7nssssGdT9VVFR6Rl3RqPgUfRlv0Bnz589XJyyqqPgIqtCo+BStxxu0Zvv27ec1ZTEnJ0edsKii4iOoQqPiczzwwAO88sorvPbaa+Tn53P//fdTXFzMunXrAHj44Ye54447lO2fffZZNm/ezKlTp8jLy+Phhx9m48aN3HvvvRfqEEYkjz/+OAsXLiQgIKDX1X2yLPPoo4+SkJCAv78/V1xxBXl5eYO7oyo+h5qjUfE5br75Zmpra/ntb39LRUUFU6dO5ZNPPiE5ORmAioqKNj01TqeTn/zkJ5SVleHv78+UKVP4+OOPWbZs2YU6hBGJ0+nku9/9LgsWLODVV1/t1XOeeuop/vznP7NhwwYmTJjAY489xrXXXsuJEyfUCZgXEWofjYqKynmxYcMG7rvvPhoaGrrdTpZlEhISuO+++3jooYcAcDgcxMbG8uSTT7J27doh2FsVX0ANnamoqAwKhYWFVFZWtumJ8vPz4/LLL++xJ0plZKEKjYqKyqDgrRw8n54olZGJKjQqKhcxjz76aKeGpK3/HTx4sF/vcT49USojE7UYQEXlIubee+/llltu6XablJSUPr12XFwc4FnZtC41P9+eKJXhjyo0KioXMVFRUURFRQ3Ka6emphIXF8f27dtJT08HPJVru3fv5sknnxyU91TxTdTQmYrKALJnzx5WrFhBQkICgiCwefPmHp+ze/duMjIyMBqNjBkzhhdeeGHwd7QPFBcXk5ubS3FxMaIokpubS25uLmazWdkmLS2N999/H/CEzO677z6eeOIJ3n//fY4ePcpdd91FQEAAt95664U6DJULgLqiUVEZQCwWCzNmzGDNmjXccMMNPW5fWFjIsmXLuPvuu3nrrbfYu3cv99xzD9HR0b16/lDyq1/9ijfeeEP5b+8qZefOnVxxxRWAZyZQY2Ojss2DDz6IzWbjnnvuob6+nnnz5rFt2za1h+YiQ+2jUVEZJARB4P3332fVqlVdbvPQQw+xZcsW8vPzlcfWrVvHoUOH2L9//xDspYrK4KOGzlRULiD79+/vMHtn8eLFHDx4EJfLdYH2SkVlYFGFRkXlAlJZWdlpn4nb7aampuYC7ZWKysCiCo2KygWmsz6Tzh5XURmuqEKjonIBiYuL63T2jk6nIzIy8gLtlYrKwKIKjYrKBWTBggUdZu9s27aN2bNno9frL9BeqagMLKrQqKgMIGazWekvAU/5srf3BDrO0lm3bh1nz57lgQceID8/n9dee41XX32Vn/zkJxdi91VUBgW1vFlFZQDZtWsXV155ZYfH77zzTjZs2MBdd91FUVERu3btUv62e/du7r//fvLy8khISOChhx5ShrypqIwEVKFRUVFRURlU1NCZioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqgogqNioqKisqg8v8BYPjsaU6L4s4AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "from mpl_toolkits.mplot3d import Axes3D\n", - "fig = plt.figure()\n", - "ax = fig.add_subplot(111, projection='3d')\n", - "\n", - "ax.scatter(sources[0], sources[1], sources[2])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From 5c0c45b31ca0ee90e3236a31175ae1e8f4084b75 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 8 Nov 2024 20:44:09 -0600 Subject: [PATCH 084/143] Formatted code --- test/test_recurrenceqbx.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index c34f02d4..5348a6e5 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -29,15 +29,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ -import meshmode.mesh.generation as mgen +import meshmode.mesh.generation as mgen # type: ignore import numpy as np import sympy as sp -from meshmode import _acf as _acf_meshmode -from meshmode.discretization import Discretization -from meshmode.discretization.poly_element import ( +from meshmode import _acf as _acf_meshmode # type: ignore +from meshmode.discretization import Discretization # type: ignore +from meshmode.discretization.poly_element import ( # type: ignore default_simplex_group_factory, ) -from pytential import bind, sym +from pytential import bind, sym # type: ignore from sympy import hankel1 from sumpy.array_context import _acf @@ -60,8 +60,6 @@ lnkl3d = LaplaceKernel(3) - - def _qbx_lp_laplace_general3d(sources, targets, centers, radius, strengths, order): lpot = LayerPotential(actx.context, expansion=ExpnClass(lnkl3d, order), @@ -154,11 +152,13 @@ def _create_sphere(refinment_rounds=1, exp_radius=0.01): target_order = 4 actx_m = _acf_meshmode() - mesh = mgen.generate_sphere(1.0, target_order, uniform_refinement_rounds=refinment_rounds) + mesh = mgen.generate_sphere(1.0, target_order, + uniform_refinement_rounds=refinment_rounds) grp_factory = default_simplex_group_factory(3, target_order) discr = Discretization(actx_m, mesh, grp_factory) nodes = actx_m.to_numpy(discr.nodes()) - sources = np.array([nodes[0][0].reshape(-1),nodes[1][0].reshape(-1),nodes[2][0].reshape(-1)]) + sources = np.array([nodes[0][0].reshape(-1), + nodes[1][0].reshape(-1), nodes[2][0].reshape(-1)]) area_weight_a = bind(discr, sym.QWeight()*sym.area_element(3))(actx_m) area_weight = actx_m.to_numpy(area_weight_a)[0] @@ -166,7 +166,8 @@ def _create_sphere(refinment_rounds=1, exp_radius=0.01): normals_a = bind(discr, sym.normal(3))(actx_m).as_vector(dtype=object) normals_a = actx_m.to_numpy(normals_a) - normals = np.array([normals_a[0][0].reshape(-1), normals_a[1][0].reshape(-1), normals_a[2][0].reshape(-1)]) + normals = np.array([normals_a[0][0].reshape(-1), normals_a[1][0].reshape(-1), + normals_a[2][0].reshape(-1)]) radius = exp_radius centers = sources - radius * normals @@ -174,7 +175,6 @@ def _create_sphere(refinment_rounds=1, exp_radius=0.01): return sources, centers, normals, area_weight, radius - def test_recurrence_laplace_2d_ellipse(): r""" Tests recurrence + qbx code. From 4249d8b7b333706e5837175247ca0e40836573fe Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 9 Nov 2024 11:28:48 -0600 Subject: [PATCH 085/143] Debug why laplace3d doesn't agree past order 0 --- sumpy/recurrenceqbx.py | 7 ++++--- test/test_recurrenceqbx.py | 30 ++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index 0407ba02..b0e1e874 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -88,8 +88,8 @@ def generate_lamb_expr(i, n_initial): for j in range(order, 0, -1): # pylint: disable-next=not-callable arg_list.append(s(i-j)) - arg_list.append(var[0]) - arg_list.append(var[1]) + for j in range(ndim): + arg_list.append(var[j]) arg_list.append(r) if i < n_initial: @@ -103,7 +103,8 @@ def generate_lamb_expr(i, n_initial): interactions = 0 for i in range(p+1): lamb_expr = generate_lamb_expr(i, n_initial) - a = [*storage, cts_r_s[0], cts_r_s[1], radius] + coord = [cts_r_s[i] for i in range(ndim)] + a = [*storage, *coord, radius] s_new = lamb_expr(*a) interactions += s_new * radius**i/math.factorial(i) diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 5348a6e5..ead9d05c 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -76,8 +76,7 @@ def _qbx_lp_laplace_general3d(sources, targets, centers, radius, strengths, orde _evt, (result_qbx,) = lpot( actx.queue, targets, sources, centers, strengths, - expansion_radii=expansion_radii, - k=1) + expansion_radii=expansion_radii) result_qbx = actx.to_numpy(result_qbx) return result_qbx @@ -175,6 +174,33 @@ def _create_sphere(refinment_rounds=1, exp_radius=0.01): return sources, centers, normals, area_weight, radius +def test_recurrence_laplace_3d_ellipse(): + sources, centers, normals, area_weight, radius = _create_sphere(1) + radius = 0.001 + out =_qbx_lp_laplace_general3d(sources, sources, centers, radius, + np.ones(area_weight.shape), 0) + + w = make_identity_diff_op(3) + laplace3d = laplacian(w) + var = _make_sympy_vec("x", 3) + var_t = _make_sympy_vec("t", 3) + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2 + + (var[2]-var_t[2])**2) + g_x_y = 1/(4*np.pi) * 1/abs_dist + + exp_res = recurrence_qbx_lp(sources, centers, normals, np.ones(area_weight.shape), + radius, laplace3d, g_x_y, 3, 0) + + print(exp_res) + print(out) + print(sources[:,0],centers[:,0]) + print(1/(4*np.pi) * 1/np.linalg.norm(sources[:,0] - centers[:,0])) + #print(np.max(abs(exp_res-out))) + + +test_recurrence_laplace_3d_ellipse() + + def test_recurrence_laplace_2d_ellipse(): r""" Tests recurrence + qbx code. From 16a2b17ae473885157f969f5db0202b3b52f34e5 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 9 Nov 2024 12:14:57 -0600 Subject: [PATCH 086/143] Damn bug still persists --- sumpy/recurrenceqbx.py | 13 ++++++------- test/test_recurrenceqbx.py | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index b0e1e874..5205defc 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -90,21 +90,20 @@ def generate_lamb_expr(i, n_initial): arg_list.append(s(i-j)) for j in range(ndim): arg_list.append(var[j]) - arg_list.append(r) if i < n_initial: - lamb_expr = sp.diff(g_x_y, var_t[0], i) + lamb_expr_symb = sp.diff(g_x_y, var_t[0], i) for j in range(ndim): - lamb_expr = lamb_expr.subs(var_t[j], 0) + lamb_expr_symb = lamb_expr_symb.subs(var_t[j], 0) else: - lamb_expr = recurrence.subs(n, i) - return sp.lambdify(arg_list, lamb_expr) + lamb_expr_symb = recurrence.subs(n, i) + return sp.lambdify(arg_list, lamb_expr_symb) interactions = 0 for i in range(p+1): lamb_expr = generate_lamb_expr(i, n_initial) - coord = [cts_r_s[i] for i in range(ndim)] - a = [*storage, *coord, radius] + coord = [cts_r_s[j] for j in range(ndim)] + a = [*storage, *coord] s_new = lamb_expr(*a) interactions += s_new * radius**i/math.factorial(i) diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index ead9d05c..814c199b 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -193,8 +193,8 @@ def test_recurrence_laplace_3d_ellipse(): print(exp_res) print(out) - print(sources[:,0],centers[:,0]) - print(1/(4*np.pi) * 1/np.linalg.norm(sources[:,0] - centers[:,0])) + #print(sources[:,0], centers[:,0]) + #print(1/(4*np.pi) * 1/np.linalg.norm(sources[:,0] - centers[:,0])) #print(np.max(abs(exp_res-out))) From df499709e0dd72469531eeb1ce55e306134d8b96 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 10 Nov 2024 14:16:12 -0600 Subject: [PATCH 087/143] Issue is not with my code --- sumpy/recurrenceqbx.py | 2 +- test/test_recurrenceqbx.py | 41 ++++++++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index 5205defc..6302f04f 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -100,9 +100,9 @@ def generate_lamb_expr(i, n_initial): return sp.lambdify(arg_list, lamb_expr_symb) interactions = 0 + coord = [cts_r_s[j] for j in range(ndim)] for i in range(p+1): lamb_expr = generate_lamb_expr(i, n_initial) - coord = [cts_r_s[j] for j in range(ndim)] a = [*storage, *coord] s_new = lamb_expr(*a) interactions += s_new * radius**i/math.factorial(i) diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 814c199b..04d83e1e 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -48,7 +48,7 @@ from sumpy.expansion.local import LineTaylorLocalExpansion from sumpy.kernel import HelmholtzKernel, LaplaceKernel from sumpy.qbx import LayerPotential -from sumpy.recurrenceqbx import _make_sympy_vec, recurrence_qbx_lp +from sumpy.recurrenceqbx import _make_sympy_vec, recurrence_qbx_lp, _compute_rotated_shifted_coordinates actx_factory = _acf @@ -174,11 +174,22 @@ def _create_sphere(refinment_rounds=1, exp_radius=0.01): return sources, centers, normals, area_weight, radius +def test_compute_rotated_shifted_coordinates(): + r""" + Tests rotated shifted code. + """ + sources = np.array([[1], [2], [2]]) + centers = np.array([[0], [0], [0]]) + normals = np.array([[1], [0], [0]]) + cts = _compute_rotated_shifted_coordinates(sources, centers, normals) + assert np.sqrt(cts[1]**2 + cts[2]**2) - np.sqrt(8) <= 1e-12 + + def test_recurrence_laplace_3d_ellipse(): sources, centers, normals, area_weight, radius = _create_sphere(1) - radius = 0.001 + radius = 0.0001 out =_qbx_lp_laplace_general3d(sources, sources, centers, radius, - np.ones(area_weight.shape), 0) + np.ones(area_weight.shape), 1) w = make_identity_diff_op(3) laplace3d = laplacian(w) @@ -189,14 +200,22 @@ def test_recurrence_laplace_3d_ellipse(): g_x_y = 1/(4*np.pi) * 1/abs_dist exp_res = recurrence_qbx_lp(sources, centers, normals, np.ones(area_weight.shape), - radius, laplace3d, g_x_y, 3, 0) - - print(exp_res) - print(out) - #print(sources[:,0], centers[:,0]) - #print(1/(4*np.pi) * 1/np.linalg.norm(sources[:,0] - centers[:,0])) - #print(np.max(abs(exp_res-out))) - + radius, laplace3d, g_x_y, 3, 1) + + + res = 0 + for i in range(sources.shape[1]): + #c2s = sources[:,i] - centers[:,0] + #res += 1/(4*np.pi) * 1/np.linalg.norm(c2s) + subs_dict = {var_t[0]:centers[0,0], var_t[1]:centers[1,0], var_t[2]:centers[2,0], + var[0]:sources[0,i], var[1]:sources[1,i], var[2]:sources[2,i]} + res += g_x_y.subs(subs_dict) + grad = sp.diff(g_x_y, var_t[0], 1) * normals[0,0] + sp.diff(g_x_y, var_t[1], 1) * normals[1,0] + sp.diff(g_x_y, var_t[2], 1) * normals[2,0] + res += grad.subs(subs_dict) * radius + + print(exp_res[0]) + print(out[0]) + print(res) test_recurrence_laplace_3d_ellipse() From db671353b85033bcca2633efa6fcfa12fa611c68 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 11 Nov 2024 14:39:06 -0600 Subject: [PATCH 088/143] Passing Laplace3D --- sumpy/recurrenceqbx.py | 2 ++ test/test_recurrenceqbx.py | 29 +++++++++++++---------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index 6302f04f..bd4a5baa 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -112,4 +112,6 @@ def generate_lamb_expr(i, n_initial): exp_res = (interactions * strengths[None, :]).sum(axis=1) + + return exp_res diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 04d83e1e..2114e99e 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -147,7 +147,7 @@ def _create_ellipse(n_p): return sources, centers, normals, density, h, radius -def _create_sphere(refinment_rounds=1, exp_radius=0.01): +def _create_sphere(refinment_rounds, exp_radius): target_order = 4 actx_m = _acf_meshmode() @@ -186,9 +186,10 @@ def test_compute_rotated_shifted_coordinates(): def test_recurrence_laplace_3d_ellipse(): - sources, centers, normals, area_weight, radius = _create_sphere(1) radius = 0.0001 - out =_qbx_lp_laplace_general3d(sources, sources, centers, radius, + sources, centers, normals, area_weight, radius = _create_sphere(1, radius) + + out = _qbx_lp_laplace_general3d(sources, sources, centers, radius, np.ones(area_weight.shape), 1) w = make_identity_diff_op(3) @@ -199,23 +200,19 @@ def test_recurrence_laplace_3d_ellipse(): + (var[2]-var_t[2])**2) g_x_y = 1/(4*np.pi) * 1/abs_dist + exp_res = recurrence_qbx_lp(sources, centers, normals, np.ones(area_weight.shape), radius, laplace3d, g_x_y, 3, 1) + + assert(np.max(exp_res-out) <= 1e-8) + +def test_recurrence_helmholtz_3d_ellipse(): + radius = 0.0001 + sources, centers, normals, area_weight, radius = _create_sphere(1, radius) + - res = 0 - for i in range(sources.shape[1]): - #c2s = sources[:,i] - centers[:,0] - #res += 1/(4*np.pi) * 1/np.linalg.norm(c2s) - subs_dict = {var_t[0]:centers[0,0], var_t[1]:centers[1,0], var_t[2]:centers[2,0], - var[0]:sources[0,i], var[1]:sources[1,i], var[2]:sources[2,i]} - res += g_x_y.subs(subs_dict) - grad = sp.diff(g_x_y, var_t[0], 1) * normals[0,0] + sp.diff(g_x_y, var_t[1], 1) * normals[1,0] + sp.diff(g_x_y, var_t[2], 1) * normals[2,0] - res += grad.subs(subs_dict) * radius - - print(exp_res[0]) - print(out[0]) - print(res) + test_recurrence_laplace_3d_ellipse() From 6364e531221a4210d5df99dce92dfda07464886c Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 11 Nov 2024 15:18:32 -0600 Subject: [PATCH 089/143] Added helmholtz3d tests, formatted --- sumpy/recurrenceqbx.py | 4 +- test/test_recurrenceqbx.py | 118 ++++++++++++++++--------------------- 2 files changed, 52 insertions(+), 70 deletions(-) diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrenceqbx.py index bd4a5baa..87161440 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrenceqbx.py @@ -81,7 +81,7 @@ def recurrence_qbx_lp(sources, centers, normals, strengths, radius, pde, g_x_y, storage = [np.zeros((n_p, n_p))] * order s = sp.Function("s") - r, n = sp.symbols("r,n") + n = sp.symbols("n") def generate_lamb_expr(i, n_initial): arg_list = [] @@ -112,6 +112,4 @@ def generate_lamb_expr(i, n_initial): exp_res = (interactions * strengths[None, :]).sum(axis=1) - - return exp_res diff --git a/test/test_recurrenceqbx.py b/test/test_recurrenceqbx.py index 2114e99e..cd76b464 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrenceqbx.py @@ -48,23 +48,29 @@ from sumpy.expansion.local import LineTaylorLocalExpansion from sumpy.kernel import HelmholtzKernel, LaplaceKernel from sumpy.qbx import LayerPotential -from sumpy.recurrenceqbx import _make_sympy_vec, recurrence_qbx_lp, _compute_rotated_shifted_coordinates +from sumpy.recurrenceqbx import ( + _compute_rotated_shifted_coordinates, + _make_sympy_vec, + recurrence_qbx_lp, +) actx_factory = _acf ExpnClass = LineTaylorLocalExpansion actx = actx_factory() -lknl = LaplaceKernel(2) -hlknl = HelmholtzKernel(2, "k") -lnkl3d = LaplaceKernel(3) +lknl2d = LaplaceKernel(2) +hknl2d = HelmholtzKernel(2) +lknl3d = LaplaceKernel(3) +hknl3d = HelmholtzKernel(3) -def _qbx_lp_laplace_general3d(sources, targets, centers, radius, strengths, order): +def _qbx_lp_general(knl, sources, targets, centers, radius, + strengths, order, k=0): lpot = LayerPotential(actx.context, - expansion=ExpnClass(lnkl3d, order), - target_kernels=(lnkl3d,), - source_kernels=(lnkl3d,)) + expansion=ExpnClass(knl, order), + target_kernels=(knl,), + source_kernels=(knl,)) # print(lpot.get_kernel()) expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) @@ -73,56 +79,18 @@ def _qbx_lp_laplace_general3d(sources, targets, centers, radius, strengths, orde centers = actx.from_numpy(centers) strengths = (strengths,) - _evt, (result_qbx,) = lpot( - actx.queue, - targets, sources, centers, strengths, - expansion_radii=expansion_radii) - result_qbx = actx.to_numpy(result_qbx) - - return result_qbx - + if k == 0: + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii) + else: + _evt, (result_qbx,) = lpot( + actx.queue, + targets, sources, centers, strengths, + expansion_radii=expansion_radii, + k=1) -def _qbx_lp_helmholtz_general2d(sources, targets, centers, radius, strengths, order): - lpot = LayerPotential(actx.context, - expansion=ExpnClass(hlknl, order), - target_kernels=(hlknl,), - source_kernels=(hlknl,)) - - # print(lpot.get_kernel()) - expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) - sources = actx.from_numpy(sources) - targets = actx.from_numpy(targets) - centers = actx.from_numpy(centers) - - strengths = (strengths,) - _evt, (result_qbx,) = lpot( - actx.queue, - targets, sources, centers, strengths, - expansion_radii=expansion_radii, - k=1) - result_qbx = actx.to_numpy(result_qbx) - - return result_qbx - - -def _qbx_lp_laplace_general2d(sources, targets, centers, radius, strengths, order): - lpot = LayerPotential(actx.context, - expansion=ExpnClass(lknl, order), - target_kernels=(lknl,), - source_kernels=(lknl,)) - - # print(lpot.get_kernel()) - expansion_radii = actx.from_numpy(radius * np.ones(sources.shape[1])) - sources = actx.from_numpy(sources) - targets = actx.from_numpy(targets) - centers = actx.from_numpy(centers) - - strengths = (strengths,) - - _evt, (result_qbx,) = lpot( - actx.queue, - targets, sources, centers, strengths, - expansion_radii=expansion_radii) result_qbx = actx.to_numpy(result_qbx) return result_qbx @@ -185,11 +153,14 @@ def test_compute_rotated_shifted_coordinates(): assert np.sqrt(cts[1]**2 + cts[2]**2) - np.sqrt(8) <= 1e-12 -def test_recurrence_laplace_3d_ellipse(): +def test_recurrence_laplace_3d_sphere(): + r""" + Tests reccurrence + qbx laplace 3d on sphere + """ radius = 0.0001 sources, centers, normals, area_weight, radius = _create_sphere(1, radius) - out = _qbx_lp_laplace_general3d(sources, sources, centers, radius, + out = _qbx_lp_general(lknl3d, sources, sources, centers, radius, np.ones(area_weight.shape), 1) w = make_identity_diff_op(3) @@ -200,21 +171,34 @@ def test_recurrence_laplace_3d_ellipse(): + (var[2]-var_t[2])**2) g_x_y = 1/(4*np.pi) * 1/abs_dist - exp_res = recurrence_qbx_lp(sources, centers, normals, np.ones(area_weight.shape), radius, laplace3d, g_x_y, 3, 1) + assert np.max(exp_res-out) <= 1e-8 - assert(np.max(exp_res-out) <= 1e-8) -def test_recurrence_helmholtz_3d_ellipse(): +def test_recurrence_helmholtz_3d_sphere(): + r""" + Tests reccurrence + qbx helmholtz 3d on sphere + """ radius = 0.0001 sources, centers, normals, area_weight, radius = _create_sphere(1, radius) - + out = _qbx_lp_general(hknl3d, sources, sources, centers, radius, + np.ones(area_weight.shape), 1, 1) + + w = make_identity_diff_op(3) + helmholtz3d = laplacian(w) + w + var = _make_sympy_vec("x", 3) + var_t = _make_sympy_vec("t", 3) + abs_dist = sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2 + + (var[2]-var_t[2])**2) + g_x_y = (1/(4*np.pi)) * sp.exp(1j * abs_dist) / abs_dist + exp_res = recurrence_qbx_lp(sources, centers, normals, np.ones(area_weight.shape), + radius, helmholtz3d, g_x_y, 3, 1) -test_recurrence_laplace_3d_ellipse() + assert np.max(abs(out - exp_res)) <= 1e-8 def test_recurrence_laplace_2d_ellipse(): @@ -239,7 +223,7 @@ def test_recurrence_laplace_2d_ellipse(): exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, laplace2d, g_x_y, 2, p) - qbx_res = _qbx_lp_laplace_general2d(sources, sources, centers, + qbx_res = _qbx_lp_general(lknl2d, sources, sources, centers, radius, strengths, p) # qbx_res,_ = lpot_eval_circle(sources.shape[1], p) err.append(np.max(np.abs(exp_res - qbx_res))) @@ -267,7 +251,7 @@ def test_recurrence_helmholtz_2d_ellipse(): strengths = h * density exp_res = recurrence_qbx_lp(sources, centers, normals, strengths, radius, helmholtz2d, g_x_y, 2, p) - qbx_res = _qbx_lp_helmholtz_general2d(sources, sources, - centers, radius, strengths, p) + qbx_res = _qbx_lp_general(hknl2d, sources, sources, + centers, radius, strengths, p, 1) err.append(np.max(np.abs(exp_res - qbx_res))) assert np.max(err) <= 1e-13 From 3c4845bca211ad5d9a0a9483c3d2163c3ab02a13 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 13 Nov 2024 14:06:16 -0600 Subject: [PATCH 090/143] Update based on suggestions --- sumpy/{recurrenceqbx.py => recurrence_qbx.py} | 33 ++++++++++++++++--- test/test_recurrence.py | 2 +- ...ecurrenceqbx.py => test_recurrence_qbx.py} | 22 +++++++++---- 3 files changed, 44 insertions(+), 13 deletions(-) rename sumpy/{recurrenceqbx.py => recurrence_qbx.py} (73%) rename test/{test_recurrenceqbx.py => test_recurrence_qbx.py} (93%) diff --git a/sumpy/recurrenceqbx.py b/sumpy/recurrence_qbx.py similarity index 73% rename from sumpy/recurrenceqbx.py rename to sumpy/recurrence_qbx.py index 87161440..4dbc2442 100644 --- a/sumpy/recurrenceqbx.py +++ b/sumpy/recurrence_qbx.py @@ -5,7 +5,33 @@ .. autofunction:: recurrence_qbx_lp """ -from __future__ import annotations # noqa: I001 +from __future__ import annotations + + +__copyright__ = """ +Copyright (C) 2024 Hirish Chandrasekaran +Copyright (C) 2024 Andreas Kloeckner +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" import math from typing import Sequence @@ -13,10 +39,7 @@ import numpy as np import sympy as sp -from sumpy.recurrence import ( - _make_sympy_vec, - get_processed_and_shifted_recurrence -) +from sumpy.recurrence import _make_sympy_vec, get_processed_and_shifted_recurrence # ================ Transform/Rotate ================= diff --git a/test/test_recurrence.py b/test/test_recurrence.py index adfcfd24..72ff63a6 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -148,7 +148,7 @@ def test_helmholtz2d(): x_coord = np.random.rand() # noqa: NPY002 y_coord = np.random.rand() # noqa: NPY002 coord_dict = {var[0]: x_coord, var[1]: y_coord} - derivs = [derivs[i].subs(coord_dict) for i in range(6)] + derivs = [d.subs(coord_dict) for d in derivs] # pylint: disable-next=not-callable subs_dict = {s(0): derivs[0], s(1): derivs[1]} diff --git a/test/test_recurrenceqbx.py b/test/test_recurrence_qbx.py similarity index 93% rename from test/test_recurrenceqbx.py rename to test/test_recurrence_qbx.py index cd76b464..69efc7f4 100644 --- a/test/test_recurrenceqbx.py +++ b/test/test_recurrence_qbx.py @@ -1,5 +1,5 @@ r""" -With the functionality in this module, we aim to test recurrence +With the functionality in this module, we test recurrence + qbx code. """ from __future__ import annotations @@ -48,7 +48,7 @@ from sumpy.expansion.local import LineTaylorLocalExpansion from sumpy.kernel import HelmholtzKernel, LaplaceKernel from sumpy.qbx import LayerPotential -from sumpy.recurrenceqbx import ( +from sumpy.recurrence_qbx import ( _compute_rotated_shifted_coordinates, _make_sympy_vec, recurrence_qbx_lp, @@ -161,7 +161,7 @@ def test_recurrence_laplace_3d_sphere(): sources, centers, normals, area_weight, radius = _create_sphere(1, radius) out = _qbx_lp_general(lknl3d, sources, sources, centers, radius, - np.ones(area_weight.shape), 1) + area_weight, 4) w = make_identity_diff_op(3) laplace3d = laplacian(w) @@ -171,21 +171,25 @@ def test_recurrence_laplace_3d_sphere(): + (var[2]-var_t[2])**2) g_x_y = 1/(4*np.pi) * 1/abs_dist - exp_res = recurrence_qbx_lp(sources, centers, normals, np.ones(area_weight.shape), - radius, laplace3d, g_x_y, 3, 1) + exp_res = recurrence_qbx_lp(sources, centers, normals, area_weight, + radius, laplace3d, g_x_y, 3, 4) - assert np.max(exp_res-out) <= 1e-8 + assert (np.max(exp_res-out)/np.max(abs(exp_res))) <= 1e-12 def test_recurrence_helmholtz_3d_sphere(): r""" Tests reccurrence + qbx helmholtz 3d on sphere """ + # import time radius = 0.0001 - sources, centers, normals, area_weight, radius = _create_sphere(1, radius) + sources, centers, normals, area_weight, radius = _create_sphere(2, radius) + # start = time.time() out = _qbx_lp_general(hknl3d, sources, sources, centers, radius, np.ones(area_weight.shape), 1, 1) + # end = time.time() + # length1 = end - start w = make_identity_diff_op(3) helmholtz3d = laplacian(w) + w @@ -195,8 +199,12 @@ def test_recurrence_helmholtz_3d_sphere(): + (var[2]-var_t[2])**2) g_x_y = (1/(4*np.pi)) * sp.exp(1j * abs_dist) / abs_dist + # start = time.time() exp_res = recurrence_qbx_lp(sources, centers, normals, np.ones(area_weight.shape), radius, helmholtz3d, g_x_y, 3, 1) + # end = time.time() + # length2 = end - start + # print(sources.shape[1], length1, length2) assert np.max(abs(out - exp_res)) <= 1e-8 From 2f34622602ddfa1e39ecb9a99d2ee9779c575ca6 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 16 Nov 2024 22:11:43 -0600 Subject: [PATCH 091/143] Experiments show the recurrence falls apart when the source is close to the target --- sumpy/recurrence_qbx.py | 2 ++ test/test_recurrence.py | 40 +++++++++++++++++++++++++++++++++ test/test_recurrence_qbx.py | 44 +++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/sumpy/recurrence_qbx.py b/sumpy/recurrence_qbx.py index 4dbc2442..ebdd0322 100644 --- a/sumpy/recurrence_qbx.py +++ b/sumpy/recurrence_qbx.py @@ -120,6 +120,8 @@ def generate_lamb_expr(i, n_initial): lamb_expr_symb = lamb_expr_symb.subs(var_t[j], 0) else: lamb_expr_symb = recurrence.subs(n, i) + print("=============== ORDER = " + str(i)) + print(lamb_expr_symb) return sp.lambdify(arg_list, lamb_expr_symb) interactions = 0 diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 72ff63a6..2c4d82a4 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -206,3 +206,43 @@ def test_laplace2d(): check = np.array([check[i].subs(coord_dict) for i in range(len(check))]) assert max(abs(abs(check))) <= 1e-12 + + +import matplotlib.pyplot as plt +def _plot_laplace_2d(max_order_check, max_abs): + w = make_identity_diff_op(2) + laplace2d = laplacian(w) + n_init, _, r = get_processed_and_shifted_recurrence(laplace2d) + + n = sp.symbols("n") + s = sp.Function("s") + + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2)) + derivs = [sp.diff(g_x_y, + var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0) + for i in range(max_order_check)] + + # pylint: disable-next=not-callable + subs_dict = {s(0): derivs[0], s(1): derivs[1]} + check = [] + + assert n_init == 2 + for i in range(n_init, max_order_check): + check.append(abs(r.subs(n, i).subs(subs_dict) - derivs[i])) + # pylint: disable-next=not-callable + subs_dict[s(i)] = derivs[i] + + x_coord = np.random.rand()*max_abs # noqa: NPY002 + y_coord = np.random.rand()*max_abs # noqa: NPY002 + coord_dict = {var[0]: x_coord, var[1]: y_coord} + + return np.array([check[i].subs(coord_dict) for i in range(len(check))]) + +plot_me = _plot_laplace_2d(6, 0.001) +plt.title("Recurrence Accuracy, Random Source Point") +plt.scatter([i+2 for i in range(len(plot_me))], plot_me) +plt.ylabel("Error") +plt.xlabel("Order") +plt.show() \ No newline at end of file diff --git a/test/test_recurrence_qbx.py b/test/test_recurrence_qbx.py index 69efc7f4..0dce6829 100644 --- a/test/test_recurrence_qbx.py +++ b/test/test_recurrence_qbx.py @@ -263,3 +263,47 @@ def test_recurrence_helmholtz_2d_ellipse(): centers, radius, strengths, p, 1) err.append(np.max(np.abs(exp_res - qbx_res))) assert np.max(err) <= 1e-13 + + +# ============ Plotting Functionality +def _construct_laplace_axis_2d(orders, resolutions): + w = make_identity_diff_op(2) + laplace2d = laplacian(w) + + var = _make_sympy_vec("x", 2) + var_t = _make_sympy_vec("t", 2) + g_x_y = (-1/(2*np.pi)) * sp.log(sp.sqrt((var[0]-var_t[0])**2 + + (var[1]-var_t[1])**2)) + + err = [] + for p in orders: + err_per_order = [] + for n_p in resolutions: + sources, centers, normals, density, h, radius = _create_ellipse(n_p) + strengths = h * density + exp_res = recurrence_qbx_lp(sources, centers, normals, + strengths, radius, laplace2d, + g_x_y, 2, p) + qbx_res = _qbx_lp_general(lknl2d, sources, sources, centers, + radius, strengths, p) + # qbx_res,_ = lpot_eval_circle(sources.shape[1], p) + err_per_order.append(np.max(np.abs(exp_res - qbx_res)/ + np.max(np.abs(qbx_res)))) + err.append(err_per_order) + + return err + +import matplotlib.pyplot as plt +orders = [7] +resolutions = range(400, 1401, 200) +err_mat = _construct_laplace_axis_2d(orders, resolutions) +for i in range(len(orders)): + plt.plot(resolutions, err_mat[i], label="order ="+str(orders[i])) +plt.xlabel("Number of Nodes") +plt.ylabel("Error") +plt.title("2D Ellipse LP Eval Error") +plt.legend() +plt.show() + + + From 19703047e2eb4cf97575953b63cd44ca147b5807 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 16 Nov 2024 23:07:50 -0600 Subject: [PATCH 092/143] Push source away from center --- test/test_recurrence.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 2c4d82a4..8d16b827 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -213,6 +213,7 @@ def _plot_laplace_2d(max_order_check, max_abs): w = make_identity_diff_op(2) laplace2d = laplacian(w) n_init, _, r = get_processed_and_shifted_recurrence(laplace2d) + print(r) n = sp.symbols("n") s = sp.Function("s") @@ -234,15 +235,18 @@ def _plot_laplace_2d(max_order_check, max_abs): # pylint: disable-next=not-callable subs_dict[s(i)] = derivs[i] - x_coord = np.random.rand()*max_abs # noqa: NPY002 - y_coord = np.random.rand()*max_abs # noqa: NPY002 + x_coord = abs(np.random.rand()*max_abs) + 3 # noqa: NPY002 + y_coord = abs(np.random.rand()*max_abs) + 3 # noqa: NPY002 coord_dict = {var[0]: x_coord, var[1]: y_coord} return np.array([check[i].subs(coord_dict) for i in range(len(check))]) -plot_me = _plot_laplace_2d(6, 0.001) -plt.title("Recurrence Accuracy, Random Source Point") -plt.scatter([i+2 for i in range(len(plot_me))], plot_me) +plot_me = _plot_laplace_2d(20, 1) + +fig = plt.figure() +ax = fig.add_subplot(1, 1, 1) +line, = ax.plot([i+2 for i in range(len(plot_me))], plot_me) +ax.set_yscale('log') plt.ylabel("Error") plt.xlabel("Order") plt.show() \ No newline at end of file From b06d2dccc8a57af931421f5a63865bb068a19654 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 20 Nov 2024 16:03:55 -0800 Subject: [PATCH 093/143] Recurrence by itself is fine --- sumpy/recurrence.py | 2 +- test/modified_recur.ipynb | 201 ++++++++++++++++++++++++++++++++++++ test/test_recurrence.py | 9 +- test/test_recurrence_qbx.py | 6 +- 4 files changed, 209 insertions(+), 9 deletions(-) create mode 100644 test/modified_recur.ipynb diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 0fa0fe88..2a764204 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -307,7 +307,7 @@ def process_recurrence_relation(r: sp.Expr) -> tuple[int, sp.Expr]: # Re-arrange the recurrence relation so we get s(n) = ____ # in terms of s(n-1), ... - true_recurrence = sum(coeffs[i]/coeffs[-1] * terms[i] + true_recurrence = sum(sp.cancel(coeffs[i]/coeffs[-1]) * terms[i] for i in range(0, len(terms)-1)) true_recurrence1 = true_recurrence.subs(n, n-shift_idx) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb new file mode 100644 index 00000000..58c06fb2 --- /dev/null +++ b/test/modified_recur.ipynb @@ -0,0 +1,201 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 233, + "metadata": {}, + "outputs": [], + "source": [ + "from sumpy.recurrence import _make_sympy_vec, get_processed_and_shifted_recurrence\n", + "\n", + "from sumpy.expansion.diff_op import (\n", + " laplacian,\n", + " make_identity_diff_op,\n", + ")\n", + "\n", + "import sympy as sp\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 234, + "metadata": {}, + "outputs": [], + "source": [ + "w = make_identity_diff_op(2)\n", + "laplace2d = laplacian(w)\n", + "n_init, order, r = get_processed_and_shifted_recurrence(laplace2d)" + ] + }, + { + "cell_type": "code", + "execution_count": 235, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left(-1\\right)^{n + 1} \\left(\\frac{\\left(-1\\right)^{n - 3} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) s{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) s{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) s{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" + ], + "text/plain": [ + "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*s(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*s(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*s(n - 1)/(x0**3 + x0*x1**2))" + ] + }, + "execution_count": 235, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r" + ] + }, + { + "cell_type": "code", + "execution_count": 285, + "metadata": {}, + "outputs": [], + "source": [ + "#We want to subsitute s(i) r^i_{ct} = g(i)\n", + "g = sp.Function(\"g\")\n", + "s = sp.Function(\"s\")\n", + "n = sp.symbols(\"n\")\n", + "rct = sp.symbols(\"r_{ct}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 286, + "metadata": {}, + "outputs": [], + "source": [ + "r_new = r*rct**n\n", + "for i in range(order):\n", + " r_new = r_new.subs(s(n-i),g(n-i)/(rct**(n-i)))" + ] + }, + { + "cell_type": "code", + "execution_count": 287, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left(-1\\right)^{n + 1} r_{ct}^{n} \\left(\\frac{\\left(-1\\right)^{n - 3} r_{ct}^{3 - n} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) g{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} r_{ct}^{2 - n} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) g{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} r_{ct}^{1 - n} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) g{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" + ], + "text/plain": [ + "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" + ] + }, + "execution_count": 287, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r_new" + ] + }, + { + "cell_type": "code", + "execution_count": 303, + "metadata": {}, + "outputs": [], + "source": [ + "var = _make_sympy_vec(\"x\", 2)\n", + "var_t = _make_sympy_vec(\"t\", 2)\n", + "g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))\n", + "derivs = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(15)]\n", + "max_abs = .0000001\n", + "x_coord = np.random.rand()*max_abs # noqa: NPY002\n", + "y_coord = np.random.rand()*max_abs\n", + "coord_dict = {var[0]: x_coord, var[1]: y_coord}" + ] + }, + { + "cell_type": "code", + "execution_count": 304, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_recurrence(coord_dict, rct_val, recur, p):\n", + " subs_dict = {}\n", + " subs_dict[g(0)] = derivs[0].subs(coord_dict).subs(rct, rct_val)\n", + " subs_dict[g(1)] = derivs[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", + " for i in range(2, p):\n", + " subs_dict[g(i)] = recur.subs(n, i).subs(subs_dict).subs(coord_dict).subs(rct, rct_val)\n", + " return np.array(list(subs_dict.values()))" + ] + }, + { + "cell_type": "code", + "execution_count": 305, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_true(coord_dict, rct_val, p):\n", + " retMe = []\n", + " for i in range(p):\n", + " retMe.append(derivs[i].subs(coord_dict).subs(rct, rct_val)*rct_val**i)\n", + " return np.array(retMe)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 2.51782700048972e-16, 4.95906080244864e-16,\n", + " 3.99749493419410e-16, 1.25768654288579e-15, 1.72518029710139e-14,\n", + " 4.46968552937884e-15, 3.38121217373531e-14, 5.13481400668422e-14],\n", + " dtype=object)" + ] + }, + "execution_count": 308, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exp = evaluate_recurrence(coord_dict, np.sqrt(x_coord**2 + y_coord**2), r_new, 14) \n", + "true = evaluate_true(coord_dict, np.sqrt(x_coord**2 + y_coord**2), 14)\n", + "np.abs(exp-true)/np.abs(true)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/test_recurrence.py b/test/test_recurrence.py index 8d16b827..57ebbae3 100644 --- a/test/test_recurrence.py +++ b/test/test_recurrence.py @@ -213,7 +213,6 @@ def _plot_laplace_2d(max_order_check, max_abs): w = make_identity_diff_op(2) laplace2d = laplacian(w) n_init, _, r = get_processed_and_shifted_recurrence(laplace2d) - print(r) n = sp.symbols("n") s = sp.Function("s") @@ -231,17 +230,17 @@ def _plot_laplace_2d(max_order_check, max_abs): assert n_init == 2 for i in range(n_init, max_order_check): - check.append(abs(r.subs(n, i).subs(subs_dict) - derivs[i])) + check.append(abs(r.subs(n, i).subs(subs_dict) - derivs[i])/abs(derivs[i])) # pylint: disable-next=not-callable subs_dict[s(i)] = derivs[i] - x_coord = abs(np.random.rand()*max_abs) + 3 # noqa: NPY002 - y_coord = abs(np.random.rand()*max_abs) + 3 # noqa: NPY002 + x_coord = abs(np.random.rand()*max_abs) # noqa: NPY002 + y_coord = abs(np.random.rand()*max_abs) # noqa: NPY002 coord_dict = {var[0]: x_coord, var[1]: y_coord} return np.array([check[i].subs(coord_dict) for i in range(len(check))]) -plot_me = _plot_laplace_2d(20, 1) +plot_me = _plot_laplace_2d(13, 1) fig = plt.figure() ax = fig.add_subplot(1, 1, 1) diff --git a/test/test_recurrence_qbx.py b/test/test_recurrence_qbx.py index 0dce6829..a3a76cc4 100644 --- a/test/test_recurrence_qbx.py +++ b/test/test_recurrence_qbx.py @@ -234,7 +234,7 @@ def test_recurrence_laplace_2d_ellipse(): qbx_res = _qbx_lp_general(lknl2d, sources, sources, centers, radius, strengths, p) # qbx_res,_ = lpot_eval_circle(sources.shape[1], p) - err.append(np.max(np.abs(exp_res - qbx_res))) + err.append(np.max(np.abs(exp_res - qbx_res))/np.max(np.abs(qbx_res))) assert np.max(err) <= 1e-13 @@ -294,8 +294,8 @@ def _construct_laplace_axis_2d(orders, resolutions): return err import matplotlib.pyplot as plt -orders = [7] -resolutions = range(400, 1401, 200) +orders = [6,7] +resolutions = range(2000, 3001, 200) err_mat = _construct_laplace_axis_2d(orders, resolutions) for i in range(len(orders)): plt.plot(resolutions, err_mat[i], label="order ="+str(orders[i])) From efc4793069fb1aacea0fe41f5d47f75bd308968a Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 20 Nov 2024 16:29:40 -0800 Subject: [PATCH 094/143] Recurrence doesn't perform poorly when r->0, but rather ratio. of coordinates is large??? --- test/modified_recur.ipynb | 132 +++++++++++++++++++------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 58c06fb2..34231b23 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 233, + "execution_count": 321, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 234, + "execution_count": 322, "metadata": {}, "outputs": [], "source": [ @@ -30,95 +30,66 @@ }, { "cell_type": "code", - "execution_count": 235, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\left(-1\\right)^{n + 1} \\left(\\frac{\\left(-1\\right)^{n - 3} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) s{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) s{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) s{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" - ], - "text/plain": [ - "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*s(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*s(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*s(n - 1)/(x0**3 + x0*x1**2))" - ] - }, - "execution_count": 235, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "r" - ] - }, - { - "cell_type": "code", - "execution_count": 285, + "execution_count": 323, "metadata": {}, "outputs": [], "source": [ - "#We want to subsitute s(i) r^i_{ct} = g(i)\n", - "g = sp.Function(\"g\")\n", - "s = sp.Function(\"s\")\n", - "n = sp.symbols(\"n\")\n", - "rct = sp.symbols(\"r_{ct}\")" + "def scale_recurrence(r):\n", + " #We want to subsitute s(i) r^i_{ct} = g(i)\n", + " g = sp.Function(\"g\")\n", + " s = sp.Function(\"s\")\n", + " n = sp.symbols(\"n\")\n", + " rct = sp.symbols(\"r_{ct}\")\n", + "\n", + " r_new = r*rct**n\n", + " for i in range(order):\n", + " r_new = r_new.subs(s(n-i),g(n-i)/(rct**(n-i)))\n", + "\n", + " return r_new" ] }, { "cell_type": "code", - "execution_count": 286, + "execution_count": 324, "metadata": {}, "outputs": [], "source": [ - "r_new = r*rct**n\n", - "for i in range(order):\n", - " r_new = r_new.subs(s(n-i),g(n-i)/(rct**(n-i)))" + "r_new = scale_recurrence(r)" ] }, { "cell_type": "code", - "execution_count": 287, + "execution_count": 325, "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\left(-1\\right)^{n + 1} r_{ct}^{n} \\left(\\frac{\\left(-1\\right)^{n - 3} r_{ct}^{3 - n} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) g{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} r_{ct}^{2 - n} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) g{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} r_{ct}^{1 - n} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) g{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" - ], - "text/plain": [ - "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" - ] - }, - "execution_count": 287, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "r_new" + "def compute_derivatives(p):\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " var_t = _make_sympy_vec(\"t\", 2)\n", + " g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))\n", + " derivs = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(p)]\n", + " return derivs\n", + "derivs = compute_derivatives(15)" ] }, { "cell_type": "code", - "execution_count": 303, + "execution_count": 326, "metadata": {}, "outputs": [], "source": [ - "var = _make_sympy_vec(\"x\", 2)\n", - "var_t = _make_sympy_vec(\"t\", 2)\n", - "g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))\n", - "derivs = [sp.diff(g_x_y,\n", - " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", - " for i in range(15)]\n", "max_abs = .0000001\n", "x_coord = np.random.rand()*max_abs # noqa: NPY002\n", "y_coord = np.random.rand()*max_abs\n", + "var = _make_sympy_vec(\"x\", 2)\n", "coord_dict = {var[0]: x_coord, var[1]: y_coord}" ] }, { "cell_type": "code", - "execution_count": 304, + "execution_count": 327, "metadata": {}, "outputs": [], "source": [ @@ -133,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 305, + "execution_count": 328, "metadata": {}, "outputs": [], "source": [ @@ -146,29 +117,58 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 363, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([0, 0, 2.51782700048972e-16, 4.95906080244864e-16,\n", - " 3.99749493419410e-16, 1.25768654288579e-15, 1.72518029710139e-14,\n", - " 4.46968552937884e-15, 3.38121217373531e-14, 5.13481400668422e-14],\n", + "array([0, 0, 0, 2.12051654501851e-16, 3.46279757635162e-16,\n", + " 1.22455096522596e-9, 3.67365384856080e-9, 0.0349871755639749,\n", + " 0.174935920154367, 1457799.07853295, 10204597.2972477,\n", + " 74215231574971.8, 667937431661260., 4.28164836256055e+21],\n", " dtype=object)" ] }, - "execution_count": 308, + "execution_count": 363, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "coord_dict = {var[0]: .0001, var[1]: 1}\n", "exp = evaluate_recurrence(coord_dict, np.sqrt(x_coord**2 + y_coord**2), r_new, 14) \n", "true = evaluate_true(coord_dict, np.sqrt(x_coord**2 + y_coord**2), 14)\n", "np.abs(exp-true)/np.abs(true)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 3.63907034626755e-16, 0, 3.97761921240578e-16,\n", + " 2.30632677901825e-13, 6.92729901941019e-13, 6.59135170193698e-10,\n", + " 3.30367124192758e-9, 2.74821958755983e-6, 1.93084640776258e-5,\n", + " 0.0140018021588909, 0.126675562113591, 80.8527473439207],\n", + " dtype=object)" + ] + }, + "execution_count": 362, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord_dict = {var[0]: .0001, var[1]: 1}\n", + "exp = evaluate_recurrence(coord_dict, 1, r_new, 14) \n", + "true = evaluate_true(coord_dict, 1, 14)\n", + "np.abs(exp-true)/np.abs(true)" + ] + }, { "cell_type": "code", "execution_count": null, From 0ffef66cd999b3cb91f8eccb808bbb757dbf8a78 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 20 Nov 2024 19:52:12 -0800 Subject: [PATCH 095/143] Extremely odd error behavior for close source-target points --- test/modified_recur.ipynb | 65 +++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 34231b23..395059e5 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -117,56 +117,75 @@ }, { "cell_type": "code", - "execution_count": 363, + "execution_count": 401, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_error(pw):\n", + " x_coord = -10**(-pw) * 1\n", + " y_coord = 1\n", + " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", + "\n", + " exp = evaluate_recurrence(coord_dict, np.sqrt(x_coord**2 + y_coord**2), r_new, 14)\n", + " true = evaluate_true(coord_dict, np.sqrt(x_coord**2 + y_coord**2), 14)\n", + " return np.abs(exp-true)/np.abs(true)" + ] + }, + { + "cell_type": "code", + "execution_count": 402, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 403, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([0, 0, 0, 2.12051654501851e-16, 3.46279757635162e-16,\n", - " 1.22455096522596e-9, 3.67365384856080e-9, 0.0349871755639749,\n", - " 0.174935920154367, 1457799.07853295, 10204597.2972477,\n", - " 74215231574971.8, 667937431661260., 4.28164836256055e+21],\n", - " dtype=object)" + "array([0, 0, 1.11022302484720e-16, 2.25875452642557e-16,\n", + " 1.48029736735111e-16, 2.42222987653352e-7, 7.26668965361568e-7,\n", + " 692.065680462667, 3460.32841068733, 2883607003840.57,\n", + " 20185249101011.9, 1.46801811218522e+22, 1.32121630784017e+23,\n", + " 8.46933527026372e+31], dtype=object)" ] }, - "execution_count": 363, + "execution_count": 403, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "coord_dict = {var[0]: .0001, var[1]: 1}\n", - "exp = evaluate_recurrence(coord_dict, np.sqrt(x_coord**2 + y_coord**2), r_new, 14) \n", - "true = evaluate_true(coord_dict, np.sqrt(x_coord**2 + y_coord**2), 14)\n", - "np.abs(exp-true)/np.abs(true)" + "compute_error(5)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 409, "metadata": {}, "outputs": [ { "data": { + "image/png": "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", "text/plain": [ - "array([0, 0, 3.63907034626755e-16, 0, 3.97761921240578e-16,\n", - " 2.30632677901825e-13, 6.92729901941019e-13, 6.59135170193698e-10,\n", - " 3.30367124192758e-9, 2.74821958755983e-6, 1.93084640776258e-5,\n", - " 0.0140018021588909, 0.126675562113591, 80.8527473439207],\n", - " dtype=object)" + "
" ] }, - "execution_count": 362, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "coord_dict = {var[0]: .0001, var[1]: 1}\n", - "exp = evaluate_recurrence(coord_dict, 1, r_new, 14) \n", - "true = evaluate_true(coord_dict, 1, 14)\n", - "np.abs(exp-true)/np.abs(true)" + "x_plot = [i for i in range(len(compute_error(0)))]\n", + "for i in range(5,6):\n", + " plt.semilogy(x_plot, compute_error(i),label=str(i))\n", + "plt.legend()\n", + "plt.show()" ] }, { From 9768c900d1daa080bb80354ae48ff8ed09ee7d3c Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 20 Nov 2024 23:30:13 -0800 Subject: [PATCH 096/143] Update modified_recur.ipynb --- test/modified_recur.ipynb | 154 +++++++++++++++++++++++++++++++------- 1 file changed, 128 insertions(+), 26 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 395059e5..587d98ce 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 321, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 322, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 323, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -50,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": 324, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -59,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 325, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 326, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -84,12 +84,15 @@ "x_coord = np.random.rand()*max_abs # noqa: NPY002\n", "y_coord = np.random.rand()*max_abs\n", "var = _make_sympy_vec(\"x\", 2)\n", + "rct = sp.symbols(\"r_{ct}\")\n", + "g = sp.Function(\"g\")\n", + "n = sp.symbols(\"n\")\n", "coord_dict = {var[0]: x_coord, var[1]: y_coord}" ] }, { "cell_type": "code", - "execution_count": 327, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -98,42 +101,46 @@ " subs_dict[g(0)] = derivs[0].subs(coord_dict).subs(rct, rct_val)\n", " subs_dict[g(1)] = derivs[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", " for i in range(2, p):\n", + " print(recur.subs(n, i).subs(rct, rct_val).subs(coord_dict))\n", " subs_dict[g(i)] = recur.subs(n, i).subs(subs_dict).subs(coord_dict).subs(rct, rct_val)\n", " return np.array(list(subs_dict.values()))" ] }, { "cell_type": "code", - "execution_count": 328, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "def evaluate_true(coord_dict, rct_val, p):\n", " retMe = []\n", " for i in range(p):\n", - " retMe.append(derivs[i].subs(coord_dict).subs(rct, rct_val)*rct_val**i)\n", + " retMe.append((derivs[i]*rct_val**i).subs(coord_dict))\n", " return np.array(retMe)" ] }, { "cell_type": "code", - "execution_count": 401, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "def compute_error(pw):\n", - " x_coord = -10**(-pw) * 1\n", + " if pw == 0:\n", + " x_coord = 0\n", + " else:\n", + " x_coord = -10**(-pw) * 1\n", " y_coord = 1\n", " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", - " exp = evaluate_recurrence(coord_dict, np.sqrt(x_coord**2 + y_coord**2), r_new, 14)\n", - " true = evaluate_true(coord_dict, np.sqrt(x_coord**2 + y_coord**2), 14)\n", + " exp = evaluate_recurrence(coord_dict, np.sqrt(x_coord**2), r_new, 14)\n", + " true = evaluate_true(coord_dict, np.sqrt(x_coord**2), 14)\n", " return np.abs(exp-true)/np.abs(true)" ] }, { "cell_type": "code", - "execution_count": 402, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -142,20 +149,38 @@ }, { "cell_type": "code", - "execution_count": 403, + "execution_count": 39, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9999999998*g(1)\n", + "-1.9999999998e-10*g(1) - 3.9999999996e-10*g(2)\n", + "-1.9999999998e-10*g(1) - 9.999999999e-10*g(2) - 1.0000000006*g(3)\n", + "-1.19999999988e-9*g(2) - 2.39999999976e-9*g(3) - 2.0000000008*g(4)\n", + "-3.59999999964e-9*g(3) - 4.39999999956e-9*g(4) - 3.000000001*g(5)\n", + "-7.9999999992e-9*g(4) - 6.9999999993e-9*g(5) - 4.0000000012*g(6)\n", + "-1.49999999985e-8*g(5) - 1.019999999898e-8*g(6) - 5.0000000014*g(7)\n", + "-2.519999999748e-8*g(6) - 1.39999999986e-8*g(7) - 6.0000000016*g(8)\n", + "-3.919999999608e-8*g(7) - 1.839999999816e-8*g(8) - 7.0000000018*g(9)\n", + "-5.759999999424e-8*g(8) - 2.339999999766e-8*g(9) - 8.000000002*g(10)\n", + "-8.09999999919e-8*g(9) - 2.89999999971e-8*g(10) - 9.0000000022*g(11)\n", + "-1.09999999989e-7*g(10) - 3.519999999648e-8*g(11) - 10.0000000024*g(12)\n" + ] + }, { "data": { "text/plain": [ - "array([0, 0, 1.11022302484720e-16, 2.25875452642557e-16,\n", - " 1.48029736735111e-16, 2.42222987653352e-7, 7.26668965361568e-7,\n", - " 692.065680462667, 3460.32841068733, 2883607003840.57,\n", - " 20185249101011.9, 1.46801811218522e+22, 1.32121630784017e+23,\n", - " 8.46933527026372e+31], dtype=object)" + "array([0, 0, 2.58493941500369e-16, 4.01235405214419e-16,\n", + " 2.00617702740955e-16, 6.30274060973159e-7, 1.89082218631399e-6,\n", + " 1800.78303280285, 9003.91518580374, 7503262641655.71,\n", + " 52522838684473.9, 3.81984280235238e+22, 3.43785854000219e+23,\n", + " 2.20375546488790e+32], dtype=object)" ] }, - "execution_count": 403, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -166,12 +191,66 @@ }, { "cell_type": "code", - "execution_count": 409, + "execution_count": 19, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0*(x0**2 - x1**2)*g(1)/(x0**3 + x0*x1**2)\n", + "4.0*x0**2*g(2)/(x0**3 + x0*x1**2) - 2.0*g(1)/(x0**2 + x1**2)\n", + "1.0*(7*x0**2 + x1**2)*g(3)/(x0**3 + x0*x1**2) + 2.0*g(1)/(x0**3 + x0*x1**2) - 10.0*g(2)/(x0**2 + x1**2)\n", + "1.0*(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12.0*g(2)/(x0**3 + x0*x1**2) - 24.0*g(3)/(x0**2 + x1**2)\n", + "1.0*(13*x0**2 + 3*x1**2)*g(5)/(x0**3 + x0*x1**2) + 36.0*g(3)/(x0**3 + x0*x1**2) - 44.0*g(4)/(x0**2 + x1**2)\n", + "1.0*(16*x0**2 + 4*x1**2)*g(6)/(x0**3 + x0*x1**2) + 80.0*g(4)/(x0**3 + x0*x1**2) - 70.0*g(5)/(x0**2 + x1**2)\n", + "1.0*(19*x0**2 + 5*x1**2)*g(7)/(x0**3 + x0*x1**2) + 150.0*g(5)/(x0**3 + x0*x1**2) - 102.0*g(6)/(x0**2 + x1**2)\n", + "1.0*(22*x0**2 + 6*x1**2)*g(8)/(x0**3 + x0*x1**2) + 252.0*g(6)/(x0**3 + x0*x1**2) - 140.0*g(7)/(x0**2 + x1**2)\n", + "1.0*(25*x0**2 + 7*x1**2)*g(9)/(x0**3 + x0*x1**2) + 392.0*g(7)/(x0**3 + x0*x1**2) - 184.0*g(8)/(x0**2 + x1**2)\n", + "1.0*(28*x0**2 + 8*x1**2)*g(10)/(x0**3 + x0*x1**2) + 576.0*g(8)/(x0**3 + x0*x1**2) - 234.0*g(9)/(x0**2 + x1**2)\n", + "1.0*(31*x0**2 + 9*x1**2)*g(11)/(x0**3 + x0*x1**2) + 810.0*g(9)/(x0**3 + x0*x1**2) - 290.0*g(10)/(x0**2 + x1**2)\n", + "1.0*(34*x0**2 + 10*x1**2)*g(12)/(x0**3 + x0*x1**2) + 1100.0*g(10)/(x0**3 + x0*x1**2) - 352.0*g(11)/(x0**2 + x1**2)\n", + "1.00498756211209*(x0**2 - x1**2)*g(1)/(x0**3 + x0*x1**2)\n", + "4.01995024844836*x0**2*g(2)/(x0**3 + x0*x1**2) - 2.02*g(1)/(x0**2 + x1**2)\n", + "1.00498756211209*(7*x0**2 + x1**2)*g(3)/(x0**3 + x0*x1**2) + 2.03007487546642*g(1)/(x0**3 + x0*x1**2) - 10.1*g(2)/(x0**2 + x1**2)\n", + "1.00498756211209*(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12.1804492527985*g(2)/(x0**3 + x0*x1**2) - 24.24*g(3)/(x0**2 + x1**2)\n", + "1.00498756211209*(13*x0**2 + 3*x1**2)*g(5)/(x0**3 + x0*x1**2) + 36.5413477583955*g(3)/(x0**3 + x0*x1**2) - 44.44*g(4)/(x0**2 + x1**2)\n", + "1.00498756211209*(16*x0**2 + 4*x1**2)*g(6)/(x0**3 + x0*x1**2) + 81.2029950186568*g(4)/(x0**3 + x0*x1**2) - 70.7*g(5)/(x0**2 + x1**2)\n", + "1.00498756211209*(19*x0**2 + 5*x1**2)*g(7)/(x0**3 + x0*x1**2) + 152.255615659981*g(5)/(x0**3 + x0*x1**2) - 103.02*g(6)/(x0**2 + x1**2)\n", + "1.00498756211209*(22*x0**2 + 6*x1**2)*g(8)/(x0**3 + x0*x1**2) + 255.789434308769*g(6)/(x0**3 + x0*x1**2) - 141.4*g(7)/(x0**2 + x1**2)\n", + "1.00498756211209*(25*x0**2 + 7*x1**2)*g(9)/(x0**3 + x0*x1**2) + 397.894675591418*g(7)/(x0**3 + x0*x1**2) - 185.84*g(8)/(x0**2 + x1**2)\n", + "1.00498756211209*(28*x0**2 + 8*x1**2)*g(10)/(x0**3 + x0*x1**2) + 584.661564134329*g(8)/(x0**3 + x0*x1**2) - 236.34*g(9)/(x0**2 + x1**2)\n", + "1.00498756211209*(31*x0**2 + 9*x1**2)*g(11)/(x0**3 + x0*x1**2) + 822.1803245639*g(9)/(x0**3 + x0*x1**2) - 292.9*g(10)/(x0**2 + x1**2)\n", + "1.00498756211209*(34*x0**2 + 10*x1**2)*g(12)/(x0**3 + x0*x1**2) + 1116.54118150653*g(10)/(x0**3 + x0*x1**2) - 355.52*g(11)/(x0**2 + x1**2)\n", + "1.00004999875006*(x0**2 - x1**2)*g(1)/(x0**3 + x0*x1**2)\n", + "4.00019999500025*x0**2*g(2)/(x0**3 + x0*x1**2) - 2.0002*g(1)/(x0**2 + x1**2)\n", + "1.00004999875006*(7*x0**2 + x1**2)*g(3)/(x0**3 + x0*x1**2) + 2.00030000749987*g(1)/(x0**3 + x0*x1**2) - 10.001*g(2)/(x0**2 + x1**2)\n", + "1.00004999875006*(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12.0018000449992*g(2)/(x0**3 + x0*x1**2) - 24.0024*g(3)/(x0**2 + x1**2)\n", + "1.00004999875006*(13*x0**2 + 3*x1**2)*g(5)/(x0**3 + x0*x1**2) + 36.0054001349977*g(3)/(x0**3 + x0*x1**2) - 44.0044*g(4)/(x0**2 + x1**2)\n", + "1.00004999875006*(16*x0**2 + 4*x1**2)*g(6)/(x0**3 + x0*x1**2) + 80.012000299995*g(4)/(x0**3 + x0*x1**2) - 70.007*g(5)/(x0**2 + x1**2)\n", + "1.00004999875006*(19*x0**2 + 5*x1**2)*g(7)/(x0**3 + x0*x1**2) + 150.022500562491*g(5)/(x0**3 + x0*x1**2) - 102.0102*g(6)/(x0**2 + x1**2)\n", + "1.00004999875006*(22*x0**2 + 6*x1**2)*g(8)/(x0**3 + x0*x1**2) + 252.037800944984*g(6)/(x0**3 + x0*x1**2) - 140.014*g(7)/(x0**2 + x1**2)\n", + "1.00004999875006*(25*x0**2 + 7*x1**2)*g(9)/(x0**3 + x0*x1**2) + 392.058801469975*g(7)/(x0**3 + x0*x1**2) - 184.0184*g(8)/(x0**2 + x1**2)\n", + "1.00004999875006*(28*x0**2 + 8*x1**2)*g(10)/(x0**3 + x0*x1**2) + 576.086402159964*g(8)/(x0**3 + x0*x1**2) - 234.0234*g(9)/(x0**2 + x1**2)\n", + "1.00004999875006*(31*x0**2 + 9*x1**2)*g(11)/(x0**3 + x0*x1**2) + 810.121503037449*g(9)/(x0**3 + x0*x1**2) - 290.029*g(10)/(x0**2 + x1**2)\n", + "1.00004999875006*(34*x0**2 + 10*x1**2)*g(12)/(x0**3 + x0*x1**2) + 1100.16500412493*g(10)/(x0**3 + x0*x1**2) - 352.0352*g(11)/(x0**2 + x1**2)\n", + "1.00000049999988*(x0**2 - x1**2)*g(1)/(x0**3 + x0*x1**2)\n", + "4.0000019999995*x0**2*g(2)/(x0**3 + x0*x1**2) - 2.000002*g(1)/(x0**2 + x1**2)\n", + "1.00000049999988*(7*x0**2 + x1**2)*g(3)/(x0**3 + x0*x1**2) + 2.00000300000075*g(1)/(x0**3 + x0*x1**2) - 10.00001*g(2)/(x0**2 + x1**2)\n", + "1.00000049999988*(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12.0000180000045*g(2)/(x0**3 + x0*x1**2) - 24.000024*g(3)/(x0**2 + x1**2)\n", + "1.00000049999988*(13*x0**2 + 3*x1**2)*g(5)/(x0**3 + x0*x1**2) + 36.0000540000135*g(3)/(x0**3 + x0*x1**2) - 44.000044*g(4)/(x0**2 + x1**2)\n", + "1.00000049999988*(16*x0**2 + 4*x1**2)*g(6)/(x0**3 + x0*x1**2) + 80.00012000003*g(4)/(x0**3 + x0*x1**2) - 70.00007*g(5)/(x0**2 + x1**2)\n", + "1.00000049999988*(19*x0**2 + 5*x1**2)*g(7)/(x0**3 + x0*x1**2) + 150.000225000056*g(5)/(x0**3 + x0*x1**2) - 102.000102*g(6)/(x0**2 + x1**2)\n", + "1.00000049999988*(22*x0**2 + 6*x1**2)*g(8)/(x0**3 + x0*x1**2) + 252.000378000095*g(6)/(x0**3 + x0*x1**2) - 140.00014*g(7)/(x0**2 + x1**2)\n", + "1.00000049999988*(25*x0**2 + 7*x1**2)*g(9)/(x0**3 + x0*x1**2) + 392.000588000147*g(7)/(x0**3 + x0*x1**2) - 184.000184*g(8)/(x0**2 + x1**2)\n", + "1.00000049999988*(28*x0**2 + 8*x1**2)*g(10)/(x0**3 + x0*x1**2) + 576.000864000216*g(8)/(x0**3 + x0*x1**2) - 234.000234*g(9)/(x0**2 + x1**2)\n", + "1.00000049999987*(31*x0**2 + 9*x1**2)*g(11)/(x0**3 + x0*x1**2) + 810.001215000304*g(9)/(x0**3 + x0*x1**2) - 290.00029*g(10)/(x0**2 + x1**2)\n", + "1.00000049999988*(34*x0**2 + 10*x1**2)*g(12)/(x0**3 + x0*x1**2) + 1100.00165000041*g(10)/(x0**3 + x0*x1**2) - 352.000352*g(11)/(x0**2 + x1**2)\n" + ] + }, { "data": { - "image/png": "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", + "image/png": "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N1W7dm313//+V23atElt2bJFxcbGKj8/P+Xp6anmzZun1q1bp1588UUFqOeff75Yr3dhPvvsMwWokydPmixfu3atAtTq1auVUkr9+OOPClAvvfSS2rBhg/rzzz/VvHnz1Msvv3zH1yQjI0O1atVK2dvbq48//lht2LBBvfXWW8rCwkL17t3bpG1+3a1atVI//PCD2rhxozp8+LA6cuSIsrOzU82aNVM//vij+vXXX1WvXr1UnTp1FGBybB988IHS6XRq1KhRas2aNeqXX35RnTp1Uvb29urIkSPGdiNGjFCWlpaqbt26avr06eqvv/5S69evL/QYTp8+rb788ksFqGnTpqmdO3cat/X9998rQPXs2VOtWrVKLV26VAUFBSkrKyu1bds24zbu9F4vTEmO+dbfxaSkJLVz507l4+OjunTponbu3Kl27typYmJi1M6dOxWgBg8ebFyulFLR0dGqdu3aKiAgQM2fP1/9+eef6j//+Y+ytrZWI0eONO7nTu+tkr73AwMD1UsvvaTWr1+vFi5cqFxdXVVoaKix3b59+1RgYKBq27atsdZ9+/YV+Xrt2LFD6XQ69fjjj6u1a9eqjRs3qm+++UYNGzbM2Ka4v0ObNm1SgNq0aZPJPvKP/9bjKep9lJOTo0JDQ5WFhYWaOHGiWrt2rVq9erV644031I8//mh8fnE/54qS/7661bPPPqsA9eKLL6p169apefPmKU9PT1W7dm0VFxdnbFecz/nly5ert99+W61cuVJt2bJF/fTTT6pbt27K09PTuK3Y2Fg1bdo0Bagvv/zS+POKjY01vka3/k3Q6/WqV69eysLCQr311ltqw4YN6uOPP1b29vaqbdu2KjMz09g2ICBA+fv7q2bNmqklS5ao9evXq0cffVQBasuWLcZ2zz33nLKzs1OzZs1SmzZtUmvWrFEffvih+u9//3vX17C8SECqhPJ/Yd5++22T5fkfjp988onJ8kuXLilbW1v1+uuvK6WUSklJUU5OTur+++9Xer2+yP2UNCDVr19fZWdnl2mt+XUAavfu3SZtmzVrpnr16mV8PHXqVAWo8PDwIo8pPwSsWLHCZPnevXsVoObMmVPkc5VSqkmTJqpt27YqJyfHZHmfPn2Ur6+vysvLU0rd/CMxfPjwAtvIP56//vrLZPnkyZMLPc7nn39e6XQ6deLECaXUnV/vwly/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", "text/plain": [ "
" ] @@ -182,12 +261,35 @@ ], "source": [ "x_plot = [i for i in range(len(compute_error(0)))]\n", - "for i in range(5,6):\n", - " plt.semilogy(x_plot, compute_error(i),label=str(i))\n", - "plt.legend()\n", + "for i in range(1, 4):\n", + " plt.semilogy(x_plot, compute_error(i), label=str(10**(-i)))\n", + "plt.xlabel(\"order of derivative being computed\")\n", + "plt.ylabel(\"error\")\n", + "plt.title(\"recurrence error vs order for different source-locations\")\n", + "plt.legend(title='ratio of y_{coord_src}/x_{coord_src}')\n", "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.0" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(1.0/4.4**10) * 4.4**10 - 1" + ] + }, { "cell_type": "code", "execution_count": null, From f6a31f6501c45f897589e4e896657824891d042c Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 21 Nov 2024 19:42:49 -0800 Subject: [PATCH 097/143] Isolated floating point computation that leads to steep error --- sumpy/recurrence.py | 24 +++++ test/modified_recur.ipynb | 178 ++++++++++++++++++++++++++++---------- 2 files changed, 157 insertions(+), 45 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 2a764204..ef2b081d 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -314,6 +314,30 @@ def process_recurrence_relation(r: sp.Expr) -> tuple[int, sp.Expr]: return order, true_recurrence1 +def get_recurrence(r: sp.Expr, n_val) -> tuple[int, sp.Expr]: + r""" + A function that takes in as input a recurrence and outputs a recurrence + relation that has the nth term in terms of the n-1th, n-2th etc. + Also returns the order of the recurrence relation. + + :arg recurrence: a recurrence relation in :math:`s(n)` + """ + n = sp.symbols("n") + _, terms = _extract_idx_terms_from_recurrence(r.subs(n, n_val)) + # Order is the max difference between highest/lowest in idx_l + + # Get the respective coefficients in the recurrence relation from r + + coeffs = sp.poly(r.subs(n, n_val), list(terms)).coeffs() + + # Re-arrange the recurrence relation so we get s(n) = ____ + # in terms of s(n-1), ... + true_recurrence = sum(sp.cancel(coeffs[i]) * terms[i] + for i in range(0, len(terms))) + + return true_recurrence + + def _extract_idx_terms_from_recurrence(r: sp.Expr) -> tuple[np.ndarray, np.ndarray]: r""" diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 587d98ce..502351ba 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -62,6 +62,95 @@ "execution_count": 5, "metadata": {}, "outputs": [], + "source": [ + "max_abs = .0000001\n", + "var = _make_sympy_vec(\"x\", 2)\n", + "rct = sp.symbols(\"r_{ct}\")\n", + "g = sp.Function(\"g\")\n", + "n = sp.symbols(\"n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left(-1\\right)^{n + 1} r_{ct}^{n} \\left(\\frac{\\left(-1\\right)^{n - 3} r_{ct}^{3 - n} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) g{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} r_{ct}^{2 - n} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) g{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} r_{ct}^{1 - n} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) g{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" + ], + "text/plain": [ + "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r_new" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 3.59999999964 \\cdot 10^{-9} g{\\left(3 \\right)} - 4.39999999956 \\cdot 10^{-9} g{\\left(4 \\right)} + 3.000000001 g{\\left(5 \\right)}$" + ], + "text/plain": [ + "3.59999999964e-9*g(3) - 4.39999999956e-9*g(4) + 3.000000001*g(5)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sumpy.recurrence import get_recurrence, _extract_idx_terms_from_recurrence\n", + "pw = 5\n", + "x_coord = -10**(-pw) * 1\n", + "y_coord = 1\n", + "var = _make_sympy_vec(\"x\", 2)\n", + "coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", + "\n", + "get_recurrence(r_new.subs(rct, var[0]).subs(coord_dict), 6)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - 7999999.9992 g{\\left(4 \\right)} - 69.999999993 g{\\left(5 \\right)} - 400000.00012 g{\\left(6 \\right)}$" + ], + "text/plain": [ + "-7999999.9992*g(4) - 69.999999993*g(5) - 400000.00012*g(6)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_recurrence(r_new.subs(rct, 1).subs(coord_dict), 7)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], "source": [ "def compute_derivatives(p):\n", " var = _make_sympy_vec(\"x\", 2)\n", @@ -76,23 +165,7 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "max_abs = .0000001\n", - "x_coord = np.random.rand()*max_abs # noqa: NPY002\n", - "y_coord = np.random.rand()*max_abs\n", - "var = _make_sympy_vec(\"x\", 2)\n", - "rct = sp.symbols(\"r_{ct}\")\n", - "g = sp.Function(\"g\")\n", - "n = sp.symbols(\"n\")\n", - "coord_dict = {var[0]: x_coord, var[1]: y_coord}" - ] - }, - { - "cell_type": "code", - "execution_count": 25, + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ @@ -100,15 +173,16 @@ " subs_dict = {}\n", " subs_dict[g(0)] = derivs[0].subs(coord_dict).subs(rct, rct_val)\n", " subs_dict[g(1)] = derivs[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", + " var = _make_sympy_vec(\"x\", 2)\n", " for i in range(2, p):\n", - " print(recur.subs(n, i).subs(rct, rct_val).subs(coord_dict))\n", - " subs_dict[g(i)] = recur.subs(n, i).subs(subs_dict).subs(coord_dict).subs(rct, rct_val)\n", + " subs_dict[g(i)] = get_recurrence(recur.subs(rct, var[0]), i).subs(subs_dict).subs(coord_dict).subs(rct, rct_val)\n", + " print((get_recurrence(recur.subs(rct, var[0]), i).subs(coord_dict).subs(rct, rct_val)))\n", " return np.array(list(subs_dict.values()))" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 66, "metadata": {}, "outputs": [], "source": [ @@ -121,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ @@ -131,16 +205,20 @@ " else:\n", " x_coord = -10**(-pw) * 1\n", " y_coord = 1\n", + " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", - " exp = evaluate_recurrence(coord_dict, np.sqrt(x_coord**2), r_new, 14)\n", - " true = evaluate_true(coord_dict, np.sqrt(x_coord**2), 14)\n", + " rct_val = x_coord\n", + " exp = evaluate_recurrence(coord_dict, rct_val, r_new, 14)\n", + " true = evaluate_true(coord_dict, rct_val, 14)\n", + " print(exp)\n", + " print(true)\n", " return np.abs(exp-true)/np.abs(true)" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ @@ -149,38 +227,48 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0.9999999998*g(1)\n", - "-1.9999999998e-10*g(1) - 3.9999999996e-10*g(2)\n", - "-1.9999999998e-10*g(1) - 9.999999999e-10*g(2) - 1.0000000006*g(3)\n", - "-1.19999999988e-9*g(2) - 2.39999999976e-9*g(3) - 2.0000000008*g(4)\n", - "-3.59999999964e-9*g(3) - 4.39999999956e-9*g(4) - 3.000000001*g(5)\n", - "-7.9999999992e-9*g(4) - 6.9999999993e-9*g(5) - 4.0000000012*g(6)\n", - "-1.49999999985e-8*g(5) - 1.019999999898e-8*g(6) - 5.0000000014*g(7)\n", - "-2.519999999748e-8*g(6) - 1.39999999986e-8*g(7) - 6.0000000016*g(8)\n", - "-3.919999999608e-8*g(7) - 1.839999999816e-8*g(8) - 7.0000000018*g(9)\n", - "-5.759999999424e-8*g(8) - 2.339999999766e-8*g(9) - 8.000000002*g(10)\n", - "-8.09999999919e-8*g(9) - 2.89999999971e-8*g(10) - 9.0000000022*g(11)\n", - "-1.09999999989e-7*g(10) - 3.519999999648e-8*g(11) - 10.0000000024*g(12)\n" + "-0.9999999998*g(1)\n", + "-1.9999999998e-10*g(1) + 3.9999999996e-10*g(2)\n", + "1.9999999998e-10*g(1) - 9.999999999e-10*g(2) + 1.0000000006*g(3)\n", + "1.19999999988e-9*g(2) - 2.39999999976e-9*g(3) + 2.0000000008*g(4)\n", + "3.59999999964e-9*g(3) - 4.39999999956e-9*g(4) + 3.000000001*g(5)\n", + "7.9999999992e-9*g(4) - 6.9999999993e-9*g(5) + 4.0000000012*g(6)\n", + "1.49999999985e-8*g(5) - 1.019999999898e-8*g(6) + 5.0000000014*g(7)\n", + "2.519999999748e-8*g(6) - 1.39999999986e-8*g(7) + 6.0000000016*g(8)\n", + "3.919999999608e-8*g(7) - 1.839999999816e-8*g(8) + 7.0000000018*g(9)\n", + "5.759999999424e-8*g(8) - 2.339999999766e-8*g(9) + 8.000000002*g(10)\n", + "8.09999999919e-8*g(9) - 2.89999999971e-8*g(10) + 9.0000000022*g(11)\n", + "1.09999999989e-7*g(10) - 3.519999999648e-8*g(11) + 10.0000000024*g(12)\n", + "[5.00000041357686e-11 -9.99999999900000e-11 9.99999999700000e-11\n", + " 5.99999999800000e-20 -5.99999999400000e-20 -1.19999976306405e-28\n", + " 1.20000070576785e-28 2.83819141183544e-34 1.41607170595089e-33\n", + " 8.49945423577581e-33 5.94961796507997e-32 4.75969437208068e-31\n", + " 4.28372493488282e-30 4.28372493488995e-29]\n", + "[5.00000041357686e-11 -9.99999999900000e-11 9.99999999700000e-11\n", + " 5.99999999800000e-20 -5.99999999400000e-20 -1.19999999916000e-28\n", + " 1.19999999748000e-28 5.03999999395200e-37 -5.03999998185600e-37\n", + " -3.62879999334720e-45 3.62879998004160e-45 3.99167998962164e-53\n", + " -3.99167996886490e-53 -6.22702077820543e-61]\n" ] }, { "data": { "text/plain": [ - "array([0, 0, 2.58493941500369e-16, 4.01235405214419e-16,\n", - " 2.00617702740955e-16, 6.30274060973159e-7, 1.89082218631399e-6,\n", - " 1800.78303280285, 9003.91518580374, 7503262641655.71,\n", - " 52522838684473.9, 3.81984280235238e+22, 3.43785854000219e+23,\n", - " 2.20375546488790e+32], dtype=object)" + "array([0, 0, 1.29246970750185e-16, 2.00617702607210e-16,\n", + " 4.01235405481909e-16, 1.96746626133391e-7, 5.90239878479149e-7,\n", + " 562.133217309775, 2810.66609335069, 2342221740344.40,\n", + " 16395552242621.5, 1.19240379600967e+22, 1.07316342199171e+23,\n", + " 6.87925267550574e+31], dtype=object)" ] }, - "execution_count": 39, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -191,7 +279,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -272,7 +360,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": {}, "outputs": [ { From eb2eb657a0dc277c6fb5725f7138e7844b67237f Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 21 Nov 2024 19:54:07 -0800 Subject: [PATCH 098/143] Catastrophic cancellation source of error --- test/modified_recur.ipynb | 114 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 502351ba..d5f3d015 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -277,6 +277,120 @@ "compute_error(5)" ] }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "# Error is caused by 5th order expression\n", + "# 1.19999999988e-9*g(2) - 2.39999999976e-9*g(3) + 2.0000000008*g(4)\n", + "g_2_recur = 9.99999999700000e-11 #no digit loss\n", + "g_3_recur = 5.99999999800000e-20 #no digit loss\n", + "g_4_recur = -5.99999999400000e-20 #no digit loss\n", + "g_5_recur = 1.19999999988e-9 * 9.99999999700000e-11 - 2.39999999976e-9*5.99999999800000e-20 + 2.0000000008 * -5.99999999400000e-20" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.2000000038052922e-28" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g_5_recur" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.19999999952e-19" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "abs(1.19999999988e-9 * 9.99999999700000e-11)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.4399999993760001e-28" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-abs(2.39999999976e-9*5.99999999800000e-20)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.19999999928e-19" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-abs(2.0000000008 * -5.99999999400000e-20)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.2000000038052922e-28" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(abs(2.0000000008 * -5.99999999400000e-20) + abs(2.39999999976e-9*5.99999999800000e-20)) - abs(1.19999999988e-9 * 9.99999999700000e-11)" + ] + }, { "cell_type": "code", "execution_count": null, From ef8f0f6dba1f65950e714c7c9b231432c5b1bccb Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 23 Nov 2024 14:52:29 -0800 Subject: [PATCH 099/143] Lambdification not the issue --- test/modified_recur.ipynb | 347 ++++++++++-------------------------- test/test_recurrence_qbx.py | 4 +- 2 files changed, 99 insertions(+), 252 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index d5f3d015..f3788e9a 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -13,13 +13,15 @@ " make_identity_diff_op,\n", ")\n", "\n", + "from sumpy.recurrence import get_recurrence\n", + "\n", "import sympy as sp\n", "import numpy as np" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -30,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -50,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -59,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -72,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -84,7 +86,7 @@ "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -95,60 +97,7 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle 3.59999999964 \\cdot 10^{-9} g{\\left(3 \\right)} - 4.39999999956 \\cdot 10^{-9} g{\\left(4 \\right)} + 3.000000001 g{\\left(5 \\right)}$" - ], - "text/plain": [ - "3.59999999964e-9*g(3) - 4.39999999956e-9*g(4) + 3.000000001*g(5)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sumpy.recurrence import get_recurrence, _extract_idx_terms_from_recurrence\n", - "pw = 5\n", - "x_coord = -10**(-pw) * 1\n", - "y_coord = 1\n", - "var = _make_sympy_vec(\"x\", 2)\n", - "coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", - "\n", - "get_recurrence(r_new.subs(rct, var[0]).subs(coord_dict), 6)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle - 7999999.9992 g{\\left(4 \\right)} - 69.999999993 g{\\left(5 \\right)} - 400000.00012 g{\\left(6 \\right)}$" - ], - "text/plain": [ - "-7999999.9992*g(4) - 69.999999993*g(5) - 400000.00012*g(6)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_recurrence(r_new.subs(rct, 1).subs(coord_dict), 7)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -165,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -175,41 +124,63 @@ " subs_dict[g(1)] = derivs[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", " var = _make_sympy_vec(\"x\", 2)\n", " for i in range(2, p):\n", - " subs_dict[g(i)] = get_recurrence(recur.subs(rct, var[0]), i).subs(subs_dict).subs(coord_dict).subs(rct, rct_val)\n", - " print((get_recurrence(recur.subs(rct, var[0]), i).subs(coord_dict).subs(rct, rct_val)))\n", + " subs_dict[g(i)] = get_recurrence(recur.subs(rct, rct_val), i).subs(subs_dict).subs(coord_dict)\n", + " print(get_recurrence(recur.subs(rct, 1),i))\n", " return np.array(list(subs_dict.values()))" ] }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 97, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_recurrence_lamb(coord_dict, rct_val, recur, p):\n", + " subs_dict = {}\n", + " subs_dict[g(-2)] = 0\n", + " subs_dict[g(-1)] = 0\n", + " subs_dict[g(0)] = derivs[0].subs(coord_dict).subs(rct, rct_val)\n", + " subs_dict[g(1)] = derivs[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " for i in range(2, p):\n", + " exp = get_recurrence(recur.subs(rct, rct_val), i)\n", + " f = sp.lambdify([var[0], var[1], g(i-1), g(i-2), g(i-3)], exp)\n", + " subs_dict[g(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[g(i-1)],\n", + " subs_dict[g(i-2)], subs_dict[g(i-3)])\n", + " subs_dict.pop(g(-2))\n", + " subs_dict.pop(g(-1))\n", + " return np.array(list(subs_dict.values()))" + ] + }, + { + "cell_type": "code", + "execution_count": 98, "metadata": {}, "outputs": [], "source": [ "def evaluate_true(coord_dict, rct_val, p):\n", " retMe = []\n", " for i in range(p):\n", - " retMe.append((derivs[i]*rct_val**i).subs(coord_dict))\n", + " exp = (derivs[i]*rct_val**i)\n", + " f = sp.lambdify(var, exp)\n", + " retMe.append(f(coord_dict[var[0]], coord_dict[var[1]]))\n", " return np.array(retMe)" ] }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 103, "metadata": {}, "outputs": [], "source": [ "def compute_error(pw):\n", - " if pw == 0:\n", - " x_coord = 0\n", - " else:\n", - " x_coord = -10**(-pw) * 1\n", - " y_coord = 1\n", + " x_coord = 10**-pw * np.random.rand()\n", + " y_coord = 10**-pw * np.random.rand()\n", " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", - " rct_val = x_coord\n", - " exp = evaluate_recurrence(coord_dict, rct_val, r_new, 14)\n", + " rct_val = 1\n", + " exp = evaluate_recurrence_lamb(coord_dict, rct_val, r_new, 14)\n", " true = evaluate_true(coord_dict, rct_val, 14)\n", " print(exp)\n", " print(true)\n", @@ -218,286 +189,162 @@ }, { "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 72, + "execution_count": 106, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "-0.9999999998*g(1)\n", - "-1.9999999998e-10*g(1) + 3.9999999996e-10*g(2)\n", - "1.9999999998e-10*g(1) - 9.999999999e-10*g(2) + 1.0000000006*g(3)\n", - "1.19999999988e-9*g(2) - 2.39999999976e-9*g(3) + 2.0000000008*g(4)\n", - "3.59999999964e-9*g(3) - 4.39999999956e-9*g(4) + 3.000000001*g(5)\n", - "7.9999999992e-9*g(4) - 6.9999999993e-9*g(5) + 4.0000000012*g(6)\n", - "1.49999999985e-8*g(5) - 1.019999999898e-8*g(6) + 5.0000000014*g(7)\n", - "2.519999999748e-8*g(6) - 1.39999999986e-8*g(7) + 6.0000000016*g(8)\n", - "3.919999999608e-8*g(7) - 1.839999999816e-8*g(8) + 7.0000000018*g(9)\n", - "5.759999999424e-8*g(8) - 2.339999999766e-8*g(9) + 8.000000002*g(10)\n", - "8.09999999919e-8*g(9) - 2.89999999971e-8*g(10) + 9.0000000022*g(11)\n", - "1.09999999989e-7*g(10) - 3.519999999648e-8*g(11) + 10.0000000024*g(12)\n", - "[5.00000041357686e-11 -9.99999999900000e-11 9.99999999700000e-11\n", - " 5.99999999800000e-20 -5.99999999400000e-20 -1.19999976306405e-28\n", - " 1.20000070576785e-28 2.83819141183544e-34 1.41607170595089e-33\n", - " 8.49945423577581e-33 5.94961796507997e-32 4.75969437208068e-31\n", - " 4.28372493488282e-30 4.28372493488995e-29]\n", - "[5.00000041357686e-11 -9.99999999900000e-11 9.99999999700000e-11\n", - " 5.99999999800000e-20 -5.99999999400000e-20 -1.19999999916000e-28\n", - " 1.19999999748000e-28 5.03999999395200e-37 -5.03999998185600e-37\n", - " -3.62879999334720e-45 3.62879998004160e-45 3.99167998962164e-53\n", - " -3.99167996886490e-53 -6.22702077820543e-61]\n" + "[-16.4793912653345 -7446016.24208662 95090046267340.2 5.89957479007560e+21\n", + " 1.46052167481843e+29 -5.88202094275608e+36 -1.03964211722783e+45\n", + " -5.65475868362143e+52 3.09919194622245e+60 1.02148424529142e+69\n", + " 9.09458487415835e+76 -5.39245944612498e+84 -2.94394795078325e+93\n", + " -3.79481490540789e+101]\n", + "[-1.64793913e+001 -7.44601624e+006 9.50900463e+013 5.89957479e+021\n", + " 1.46052167e+029 -5.88202094e+036 -1.03964212e+045 -5.65475868e+052\n", + " 3.09919195e+060 1.02148425e+069 9.09458487e+076 -5.39245945e+084\n", + " -2.94394795e+093 -3.79481491e+101]\n" ] }, { "data": { "text/plain": [ - "array([0, 0, 1.29246970750185e-16, 2.00617702607210e-16,\n", - " 4.01235405481909e-16, 1.96746626133391e-7, 5.90239878479149e-7,\n", - " 562.133217309775, 2810.66609335069, 2342221740344.40,\n", - " 16395552242621.5, 1.19240379600967e+22, 1.07316342199171e+23,\n", - " 6.87925267550574e+31], dtype=object)" + "array([0, 1.25076624108262e-16, 1.64317934561428e-16,\n", + " 1.77737555215664e-16, 1.08406247664505e-15, 2.20783094012695e-15,\n", + " 1.06690009650372e-15, 7.52203555358031e-16, 1.09374099087612e-14,\n", + " 6.56365286316817e-15, 1.83759411688817e-15, 3.15172520976218e-14,\n", + " 2.34420194715335e-14, 2.98146389490554e-14], dtype=object)" ] }, - "execution_count": 72, + "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "compute_error(5)" + "compute_error(7)" ] }, { "cell_type": "code", - "execution_count": 73, - "metadata": {}, - "outputs": [], - "source": [ - "# Error is caused by 5th order expression\n", - "# 1.19999999988e-9*g(2) - 2.39999999976e-9*g(3) + 2.0000000008*g(4)\n", - "g_2_recur = 9.99999999700000e-11 #no digit loss\n", - "g_3_recur = 5.99999999800000e-20 #no digit loss\n", - "g_4_recur = -5.99999999400000e-20 #no digit loss\n", - "g_5_recur = 1.19999999988e-9 * 9.99999999700000e-11 - 2.39999999976e-9*5.99999999800000e-20 + 2.0000000008 * -5.99999999400000e-20" - ] - }, - { - "cell_type": "code", - "execution_count": 78, + "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "-1.2000000038052922e-28" + "-0.0" ] }, - "execution_count": 78, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "g_5_recur" + "pw = 8\n", + "x0 = 1\n", + "x1 = 10**(-pw)\n", + "g_1 = -5000000000.00000\n", + "g_2 = (x0**2 - x1**2)*g_1/(x0**3 + x0*x1**2)\n", + "g_2" ] }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 72, "metadata": {}, "outputs": [ { "data": { + "text/latex": [ + "$\\displaystyle - \\frac{720 x_{0} \\left(\\frac{64 x_{0}^{6}}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{3}} - \\frac{112 x_{0}^{4}}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{2}} + \\frac{56 x_{0}^{2}}{x_{0}^{2} + x_{1}^{2}} - 7\\right)}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{4}}$" + ], "text/plain": [ - "1.19999999952e-19" + "-720*x0*(64*x0**6/(x0**2 + x1**2)**3 - 112*x0**4/(x0**2 + x1**2)**2 + 56*x0**2/(x0**2 + x1**2) - 7)/(x0**2 + x1**2)**4" ] }, - "execution_count": 79, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "abs(1.19999999988e-9 * 9.99999999700000e-11)" + "derivs[7]" ] }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 71, "metadata": {}, "outputs": [ { "data": { + "text/latex": [ + "$\\displaystyle 0.555111512312578$" + ], "text/plain": [ - "-1.4399999993760001e-28" + "0.555111512312578" ] }, - "execution_count": 80, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "-abs(2.39999999976e-9*5.99999999800000e-20)" + "derivs[2].subs(var[0], 10**(-8)).subs(var[1], 10**(-8))" ] }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "-1.19999999928e-19" + "-0.0" ] }, - "execution_count": 81, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "-abs(2.0000000008 * -5.99999999400000e-20)" + "g_2" ] }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1.2000000038052922e-28" + "'\\nx_plot = [i for i in range(len(compute_error(0)))]\\nfor i in range(1, 4):\\n plt.semilogy(x_plot, compute_error(i), label=str(10**(-i)))\\nplt.xlabel(\"order of derivative being computed\")\\nplt.ylabel(\"absolute error\")\\nplt.title(\"recurrence error vs order for different source-locations\")\\nplt.legend(title=\\'ratio of x_{coord_src}/y_{coord_src}\\')\\nplt.show()\\n'" ] }, - "execution_count": 83, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(abs(2.0000000008 * -5.99999999400000e-20) + abs(2.39999999976e-9*5.99999999800000e-20)) - abs(1.19999999988e-9 * 9.99999999700000e-11)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0*(x0**2 - x1**2)*g(1)/(x0**3 + x0*x1**2)\n", - "4.0*x0**2*g(2)/(x0**3 + x0*x1**2) - 2.0*g(1)/(x0**2 + x1**2)\n", - "1.0*(7*x0**2 + x1**2)*g(3)/(x0**3 + x0*x1**2) + 2.0*g(1)/(x0**3 + x0*x1**2) - 10.0*g(2)/(x0**2 + x1**2)\n", - "1.0*(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12.0*g(2)/(x0**3 + x0*x1**2) - 24.0*g(3)/(x0**2 + x1**2)\n", - "1.0*(13*x0**2 + 3*x1**2)*g(5)/(x0**3 + x0*x1**2) + 36.0*g(3)/(x0**3 + x0*x1**2) - 44.0*g(4)/(x0**2 + x1**2)\n", - "1.0*(16*x0**2 + 4*x1**2)*g(6)/(x0**3 + x0*x1**2) + 80.0*g(4)/(x0**3 + x0*x1**2) - 70.0*g(5)/(x0**2 + x1**2)\n", - "1.0*(19*x0**2 + 5*x1**2)*g(7)/(x0**3 + x0*x1**2) + 150.0*g(5)/(x0**3 + x0*x1**2) - 102.0*g(6)/(x0**2 + x1**2)\n", - "1.0*(22*x0**2 + 6*x1**2)*g(8)/(x0**3 + x0*x1**2) + 252.0*g(6)/(x0**3 + x0*x1**2) - 140.0*g(7)/(x0**2 + x1**2)\n", - "1.0*(25*x0**2 + 7*x1**2)*g(9)/(x0**3 + x0*x1**2) + 392.0*g(7)/(x0**3 + x0*x1**2) - 184.0*g(8)/(x0**2 + x1**2)\n", - "1.0*(28*x0**2 + 8*x1**2)*g(10)/(x0**3 + x0*x1**2) + 576.0*g(8)/(x0**3 + x0*x1**2) - 234.0*g(9)/(x0**2 + x1**2)\n", - "1.0*(31*x0**2 + 9*x1**2)*g(11)/(x0**3 + x0*x1**2) + 810.0*g(9)/(x0**3 + x0*x1**2) - 290.0*g(10)/(x0**2 + x1**2)\n", - "1.0*(34*x0**2 + 10*x1**2)*g(12)/(x0**3 + x0*x1**2) + 1100.0*g(10)/(x0**3 + x0*x1**2) - 352.0*g(11)/(x0**2 + x1**2)\n", - "1.00498756211209*(x0**2 - x1**2)*g(1)/(x0**3 + x0*x1**2)\n", - "4.01995024844836*x0**2*g(2)/(x0**3 + x0*x1**2) - 2.02*g(1)/(x0**2 + x1**2)\n", - "1.00498756211209*(7*x0**2 + x1**2)*g(3)/(x0**3 + x0*x1**2) + 2.03007487546642*g(1)/(x0**3 + x0*x1**2) - 10.1*g(2)/(x0**2 + x1**2)\n", - "1.00498756211209*(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12.1804492527985*g(2)/(x0**3 + x0*x1**2) - 24.24*g(3)/(x0**2 + x1**2)\n", - "1.00498756211209*(13*x0**2 + 3*x1**2)*g(5)/(x0**3 + x0*x1**2) + 36.5413477583955*g(3)/(x0**3 + x0*x1**2) - 44.44*g(4)/(x0**2 + x1**2)\n", - "1.00498756211209*(16*x0**2 + 4*x1**2)*g(6)/(x0**3 + x0*x1**2) + 81.2029950186568*g(4)/(x0**3 + x0*x1**2) - 70.7*g(5)/(x0**2 + x1**2)\n", - "1.00498756211209*(19*x0**2 + 5*x1**2)*g(7)/(x0**3 + x0*x1**2) + 152.255615659981*g(5)/(x0**3 + x0*x1**2) - 103.02*g(6)/(x0**2 + x1**2)\n", - "1.00498756211209*(22*x0**2 + 6*x1**2)*g(8)/(x0**3 + x0*x1**2) + 255.789434308769*g(6)/(x0**3 + x0*x1**2) - 141.4*g(7)/(x0**2 + x1**2)\n", - "1.00498756211209*(25*x0**2 + 7*x1**2)*g(9)/(x0**3 + x0*x1**2) + 397.894675591418*g(7)/(x0**3 + x0*x1**2) - 185.84*g(8)/(x0**2 + x1**2)\n", - "1.00498756211209*(28*x0**2 + 8*x1**2)*g(10)/(x0**3 + x0*x1**2) + 584.661564134329*g(8)/(x0**3 + x0*x1**2) - 236.34*g(9)/(x0**2 + x1**2)\n", - "1.00498756211209*(31*x0**2 + 9*x1**2)*g(11)/(x0**3 + x0*x1**2) + 822.1803245639*g(9)/(x0**3 + x0*x1**2) - 292.9*g(10)/(x0**2 + x1**2)\n", - "1.00498756211209*(34*x0**2 + 10*x1**2)*g(12)/(x0**3 + x0*x1**2) + 1116.54118150653*g(10)/(x0**3 + x0*x1**2) - 355.52*g(11)/(x0**2 + x1**2)\n", - "1.00004999875006*(x0**2 - x1**2)*g(1)/(x0**3 + x0*x1**2)\n", - "4.00019999500025*x0**2*g(2)/(x0**3 + x0*x1**2) - 2.0002*g(1)/(x0**2 + x1**2)\n", - "1.00004999875006*(7*x0**2 + x1**2)*g(3)/(x0**3 + x0*x1**2) + 2.00030000749987*g(1)/(x0**3 + x0*x1**2) - 10.001*g(2)/(x0**2 + x1**2)\n", - "1.00004999875006*(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12.0018000449992*g(2)/(x0**3 + x0*x1**2) - 24.0024*g(3)/(x0**2 + x1**2)\n", - "1.00004999875006*(13*x0**2 + 3*x1**2)*g(5)/(x0**3 + x0*x1**2) + 36.0054001349977*g(3)/(x0**3 + x0*x1**2) - 44.0044*g(4)/(x0**2 + x1**2)\n", - "1.00004999875006*(16*x0**2 + 4*x1**2)*g(6)/(x0**3 + x0*x1**2) + 80.012000299995*g(4)/(x0**3 + x0*x1**2) - 70.007*g(5)/(x0**2 + x1**2)\n", - "1.00004999875006*(19*x0**2 + 5*x1**2)*g(7)/(x0**3 + x0*x1**2) + 150.022500562491*g(5)/(x0**3 + x0*x1**2) - 102.0102*g(6)/(x0**2 + x1**2)\n", - "1.00004999875006*(22*x0**2 + 6*x1**2)*g(8)/(x0**3 + x0*x1**2) + 252.037800944984*g(6)/(x0**3 + x0*x1**2) - 140.014*g(7)/(x0**2 + x1**2)\n", - "1.00004999875006*(25*x0**2 + 7*x1**2)*g(9)/(x0**3 + x0*x1**2) + 392.058801469975*g(7)/(x0**3 + x0*x1**2) - 184.0184*g(8)/(x0**2 + x1**2)\n", - "1.00004999875006*(28*x0**2 + 8*x1**2)*g(10)/(x0**3 + x0*x1**2) + 576.086402159964*g(8)/(x0**3 + x0*x1**2) - 234.0234*g(9)/(x0**2 + x1**2)\n", - "1.00004999875006*(31*x0**2 + 9*x1**2)*g(11)/(x0**3 + x0*x1**2) + 810.121503037449*g(9)/(x0**3 + x0*x1**2) - 290.029*g(10)/(x0**2 + x1**2)\n", - "1.00004999875006*(34*x0**2 + 10*x1**2)*g(12)/(x0**3 + x0*x1**2) + 1100.16500412493*g(10)/(x0**3 + x0*x1**2) - 352.0352*g(11)/(x0**2 + x1**2)\n", - "1.00000049999988*(x0**2 - x1**2)*g(1)/(x0**3 + x0*x1**2)\n", - "4.0000019999995*x0**2*g(2)/(x0**3 + x0*x1**2) - 2.000002*g(1)/(x0**2 + x1**2)\n", - "1.00000049999988*(7*x0**2 + x1**2)*g(3)/(x0**3 + x0*x1**2) + 2.00000300000075*g(1)/(x0**3 + x0*x1**2) - 10.00001*g(2)/(x0**2 + x1**2)\n", - "1.00000049999988*(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12.0000180000045*g(2)/(x0**3 + x0*x1**2) - 24.000024*g(3)/(x0**2 + x1**2)\n", - "1.00000049999988*(13*x0**2 + 3*x1**2)*g(5)/(x0**3 + x0*x1**2) + 36.0000540000135*g(3)/(x0**3 + x0*x1**2) - 44.000044*g(4)/(x0**2 + x1**2)\n", - "1.00000049999988*(16*x0**2 + 4*x1**2)*g(6)/(x0**3 + x0*x1**2) + 80.00012000003*g(4)/(x0**3 + x0*x1**2) - 70.00007*g(5)/(x0**2 + x1**2)\n", - "1.00000049999988*(19*x0**2 + 5*x1**2)*g(7)/(x0**3 + x0*x1**2) + 150.000225000056*g(5)/(x0**3 + x0*x1**2) - 102.000102*g(6)/(x0**2 + x1**2)\n", - "1.00000049999988*(22*x0**2 + 6*x1**2)*g(8)/(x0**3 + x0*x1**2) + 252.000378000095*g(6)/(x0**3 + x0*x1**2) - 140.00014*g(7)/(x0**2 + x1**2)\n", - "1.00000049999988*(25*x0**2 + 7*x1**2)*g(9)/(x0**3 + x0*x1**2) + 392.000588000147*g(7)/(x0**3 + x0*x1**2) - 184.000184*g(8)/(x0**2 + x1**2)\n", - "1.00000049999988*(28*x0**2 + 8*x1**2)*g(10)/(x0**3 + x0*x1**2) + 576.000864000216*g(8)/(x0**3 + x0*x1**2) - 234.000234*g(9)/(x0**2 + x1**2)\n", - "1.00000049999987*(31*x0**2 + 9*x1**2)*g(11)/(x0**3 + x0*x1**2) + 810.001215000304*g(9)/(x0**3 + x0*x1**2) - 290.00029*g(10)/(x0**2 + x1**2)\n", - "1.00000049999988*(34*x0**2 + 10*x1**2)*g(12)/(x0**3 + x0*x1**2) + 1100.00165000041*g(10)/(x0**3 + x0*x1**2) - 352.000352*g(11)/(x0**2 + x1**2)\n" - ] - }, - { - "data": { - "image/png": "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N1W7dm313//+V23atElt2bJFxcbGKj8/P+Xp6anmzZun1q1bp1588UUFqOeff75Yr3dhPvvsMwWokydPmixfu3atAtTq1auVUkr9+OOPClAvvfSS2rBhg/rzzz/VvHnz1Msvv3zH1yQjI0O1atVK2dvbq48//lht2LBBvfXWW8rCwkL17t3bpG1+3a1atVI//PCD2rhxozp8+LA6cuSIsrOzU82aNVM//vij+vXXX1WvXr1UnTp1FGBybB988IHS6XRq1KhRas2aNeqXX35RnTp1Uvb29urIkSPGdiNGjFCWlpaqbt26avr06eqvv/5S69evL/QYTp8+rb788ksFqGnTpqmdO3cat/X9998rQPXs2VOtWrVKLV26VAUFBSkrKyu1bds24zbu9F4vTEmO+dbfxaSkJLVz507l4+OjunTponbu3Kl27typYmJi1M6dOxWgBg8ebFyulFLR0dGqdu3aKiAgQM2fP1/9+eef6j//+Y+ytrZWI0eONO7nTu+tkr73AwMD1UsvvaTWr1+vFi5cqFxdXVVoaKix3b59+1RgYKBq27atsdZ9+/YV+Xrt2LFD6XQ69fjjj6u1a9eqjRs3qm+++UYNGzbM2Ka4v0ObNm1SgNq0aZPJPvKP/9bjKep9lJOTo0JDQ5WFhYWaOHGiWrt2rVq9erV644031I8//mh8fnE/54qS/7661bPPPqsA9eKLL6p169apefPmKU9PT1W7dm0VFxdnbFecz/nly5ert99+W61cuVJt2bJF/fTTT6pbt27K09PTuK3Y2Fg1bdo0Bagvv/zS+POKjY01vka3/k3Q6/WqV69eysLCQr311ltqw4YN6uOPP1b29vaqbdu2KjMz09g2ICBA+fv7q2bNmqklS5ao9evXq0cffVQBasuWLcZ2zz33nLKzs1OzZs1SmzZtUmvWrFEffvih+u9//3vX17C8SECqhPJ/Yd5++22T5fkfjp988onJ8kuXLilbW1v1+uuvK6WUSklJUU5OTur+++9Xer2+yP2UNCDVr19fZWdnl2mt+XUAavfu3SZtmzVrpnr16mV8PHXqVAWo8PDwIo8pPwSsWLHCZPnevXsVoObMmVPkc5VSqkmTJqpt27YqJyfHZHmfPn2Ur6+vysvLU0rd/CMxfPjwAtvIP56//vrLZPnkyZMLPc7nn39e6XQ6deLECaXUnV/vwly/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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ + "'''\n", "x_plot = [i for i in range(len(compute_error(0)))]\n", "for i in range(1, 4):\n", " plt.semilogy(x_plot, compute_error(i), label=str(10**(-i)))\n", "plt.xlabel(\"order of derivative being computed\")\n", - "plt.ylabel(\"error\")\n", + "plt.ylabel(\"absolute error\")\n", "plt.title(\"recurrence error vs order for different source-locations\")\n", - "plt.legend(title='ratio of y_{coord_src}/x_{coord_src}')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.0" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(1.0/4.4**10) * 4.4**10 - 1" + "plt.legend(title='ratio of x_{coord_src}/y_{coord_src}')\n", + "plt.show()\n", + "'''" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/test/test_recurrence_qbx.py b/test/test_recurrence_qbx.py index a3a76cc4..570fbfa7 100644 --- a/test/test_recurrence_qbx.py +++ b/test/test_recurrence_qbx.py @@ -294,8 +294,8 @@ def _construct_laplace_axis_2d(orders, resolutions): return err import matplotlib.pyplot as plt -orders = [6,7] -resolutions = range(2000, 3001, 200) +orders = [8] +resolutions = range(200, 800, 200) err_mat = _construct_laplace_axis_2d(orders, resolutions) for i in range(len(orders)): plt.plot(resolutions, err_mat[i], label="order ="+str(orders[i])) From 39d6c8466824ccf0270bc90045e40fdad7d7ef9f Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 23 Nov 2024 15:44:47 -0800 Subject: [PATCH 100/143] Much more error in recurrence+qbx vs recurrence only??? --- sumpy/recurrence_qbx.py | 20 ++++++++----- test/modified_recur.ipynb | 59 +++++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/sumpy/recurrence_qbx.py b/sumpy/recurrence_qbx.py index ebdd0322..db6644eb 100644 --- a/sumpy/recurrence_qbx.py +++ b/sumpy/recurrence_qbx.py @@ -114,22 +114,28 @@ def generate_lamb_expr(i, n_initial): for j in range(ndim): arg_list.append(var[j]) + lamb_expr_symb_deriv = sp.diff(g_x_y, var_t[0], i) + for j in range(ndim): + lamb_expr_symb_deriv = lamb_expr_symb_deriv.subs(var_t[j], 0) + if i < n_initial: - lamb_expr_symb = sp.diff(g_x_y, var_t[0], i) - for j in range(ndim): - lamb_expr_symb = lamb_expr_symb.subs(var_t[j], 0) + lamb_expr_symb = lamb_expr_symb_deriv else: lamb_expr_symb = recurrence.subs(n, i) - print("=============== ORDER = " + str(i)) - print(lamb_expr_symb) - return sp.lambdify(arg_list, lamb_expr_symb) + #print("=============== ORDER = " + str(i)) + #print(lamb_expr_symb) + return sp.lambdify(arg_list, lamb_expr_symb), sp.lambdify(arg_list, lamb_expr_symb_deriv) interactions = 0 coord = [cts_r_s[j] for j in range(ndim)] for i in range(p+1): - lamb_expr = generate_lamb_expr(i, n_initial) + lamb_expr, true_lamb_expr = generate_lamb_expr(i, n_initial) a = [*storage, *coord] s_new = lamb_expr(*a) + s_new_true = true_lamb_expr(*a) + arg_max = np.argmax(np.max(s_new-s_new_true)) + print(np.max(s_new-s_new_true)/s_new_true.reshape(-1)[arg_max]) + print("x:", coord[0].reshape(-1)[arg_max], "y:", coord[1].reshape(-1)[arg_max]) interactions += s_new * radius**i/math.factorial(i) storage.pop(0) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index f3788e9a..c37d2b2c 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -86,7 +86,7 @@ "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -131,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -154,7 +154,7 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -169,13 +169,13 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def compute_error(pw):\n", - " x_coord = 10**-pw * np.random.rand()\n", - " y_coord = 10**-pw * np.random.rand()\n", + " x_coord = 0.11302666666666661\n", + " y_coord = 0\n", " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", @@ -189,35 +189,34 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[-16.4793912653345 -7446016.24208662 95090046267340.2 5.89957479007560e+21\n", - " 1.46052167481843e+29 -5.88202094275608e+36 -1.03964211722783e+45\n", - " -5.65475868362143e+52 3.09919194622245e+60 1.02148424529142e+69\n", - " 9.09458487415835e+76 -5.39245944612498e+84 -2.94394795078325e+93\n", - " -3.79481490540789e+101]\n", - "[-1.64793913e+001 -7.44601624e+006 9.50900463e+013 5.89957479e+021\n", - " 1.46052167e+029 -5.88202094e+036 -1.03964212e+045 -5.65475868e+052\n", - " 3.09919195e+060 1.02148425e+069 9.09458487e+076 -5.39245945e+084\n", - " -2.94394795e+093 -3.79481491e+101]\n" + "[-2.18013149991004 -8.84746962368763 -78.2777187420753 -1385.11947756415\n", + " -36764.4075087807 -1301087.91466724 -57556679.0138276 -3055385815.29108\n", + " -189227032326.038 -13393443363881.4 -1.06648274986670e+15\n", + " -9.43567373363252e+16 -9.18300204110757e+18 -9.74955979355538e+20]\n", + "[-2.18013150e+00 -8.84746962e+00 -7.82777187e+01 -1.38511948e+03\n", + " -3.67644075e+04 -1.30108791e+06 -5.75566790e+07 -3.05538582e+09\n", + " -1.89227032e+11 -1.33934434e+13 -1.06648275e+15 -9.43567373e+16\n", + " -9.18300204e+18 -9.74955979e+20]\n" ] }, { "data": { "text/plain": [ - "array([0, 1.25076624108262e-16, 1.64317934561428e-16,\n", - " 1.77737555215664e-16, 1.08406247664505e-15, 2.20783094012695e-15,\n", - " 1.06690009650372e-15, 7.52203555358031e-16, 1.09374099087612e-14,\n", - " 6.56365286316817e-15, 1.83759411688817e-15, 3.15172520976218e-14,\n", - " 2.34420194715335e-14, 2.98146389490554e-14], dtype=object)" + "array([0, 2.00775692367946e-16, 0, 1.64154557874739e-16,\n", + " 7.91630613108144e-16, 2.14740886634168e-15, 1.03558172216766e-15,\n", + " 2.18490253552735e-15, 4.03187347889313e-15, 6.99969361522217e-15,\n", + " 3.30056909072257e-13, 2.10944131408974e-13, 2.03840965255176e-13,\n", + " 1.33202052553871e-12], dtype=object)" ] }, - "execution_count": 106, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } From 25b1edcf9f4189f45d08d0d61e692e1c735a8b48 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 23 Nov 2024 16:59:01 -0800 Subject: [PATCH 101/143] Cone of innacuracy --- sumpy/recurrence_qbx.py | 7 +- test/modified_recur.ipynb | 136 ++++++++++++++++++++++++------------ test/test_recurrence_qbx.py | 2 +- 3 files changed, 95 insertions(+), 50 deletions(-) diff --git a/sumpy/recurrence_qbx.py b/sumpy/recurrence_qbx.py index db6644eb..c2a2e86d 100644 --- a/sumpy/recurrence_qbx.py +++ b/sumpy/recurrence_qbx.py @@ -133,9 +133,10 @@ def generate_lamb_expr(i, n_initial): a = [*storage, *coord] s_new = lamb_expr(*a) s_new_true = true_lamb_expr(*a) - arg_max = np.argmax(np.max(s_new-s_new_true)) - print(np.max(s_new-s_new_true)/s_new_true.reshape(-1)[arg_max]) - print("x:", coord[0].reshape(-1)[arg_max], "y:", coord[1].reshape(-1)[arg_max]) + arg_max = np.argmax(abs(s_new-s_new_true)/abs(s_new_true)) + print((s_new-s_new_true).reshape(-1)[arg_max]/s_new_true.reshape(-1)[arg_max]) + print("x:", coord[0].reshape(-1)[arg_max], "y:", coord[1].reshape(-1)[arg_max], + "s_recur:", s_new.reshape(-1)[arg_max], "s_true:", s_new_true.reshape(-1)[arg_max], "order: ", i) interactions += s_new * radius**i/math.factorial(i) storage.pop(0) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index c37d2b2c..8303fb9f 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -86,7 +86,7 @@ "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, - "execution_count": 8, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 53, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 54, "metadata": {}, "outputs": [], "source": [ @@ -131,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ @@ -154,7 +154,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ @@ -169,13 +169,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 91, "metadata": {}, "outputs": [], "source": [ "def compute_error(pw):\n", - " x_coord = 0.11302666666666661\n", - " y_coord = 0\n", + " x_coord = 1e-7\n", + " y_coord = 1\n", " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", @@ -189,54 +189,98 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[-2.18013149991004 -8.84746962368763 -78.2777187420753 -1385.11947756415\n", - " -36764.4075087807 -1301087.91466724 -57556679.0138276 -3055385815.29108\n", - " -189227032326.038 -13393443363881.4 -1.06648274986670e+15\n", - " -9.43567373363252e+16 -9.18300204110757e+18 -9.74955979355538e+20]\n", - "[-2.18013150e+00 -8.84746962e+00 -7.82777187e+01 -1.38511948e+03\n", - " -3.67644075e+04 -1.30108791e+06 -5.75566790e+07 -3.05538582e+09\n", - " -1.89227032e+11 -1.33934434e+13 -1.06648275e+15 -9.43567373e+16\n", - " -9.18300204e+18 -9.74955979e+20]\n" + "[4.88498130835068e-15 -9.99999999999990e-8 0.999999999999970\n", + " 5.99999999999980e-7 -5.99999999999940 -1.20103359222412e-5\n", + " 119.689922332713 -12403106.6899557 -620155334528027.\n", + " -3.72093200713792e+22 -2.60465240499655e+30 -2.08372192399724e+38\n", + " -1.87534973159752e+46 -1.87534973159752e+54]\n", + "[ 4.88498131e-15 -1.00000000e-07 1.00000000e+00 6.00000000e-07\n", + " -6.00000000e+00 -1.20000000e-05 1.20000000e+02 5.04000000e-04\n", + " -5.04000000e+03 -3.62880000e-02 3.62880000e+05 3.99168000e+00\n", + " -3.99168000e+07 -6.22702080e+02]\n" ] }, { "data": { "text/plain": [ - "array([0, 2.00775692367946e-16, 0, 1.64154557874739e-16,\n", - " 7.91630613108144e-16, 2.14740886634168e-15, 1.03558172216766e-15,\n", - " 2.18490253552735e-15, 4.03187347889313e-15, 6.99969361522217e-15,\n", - " 3.30056909072257e-13, 2.10944131408974e-13, 2.03840965255176e-13,\n", - " 1.33202052553871e-12], dtype=object)" + "array([0, 0, 1.11022302462519e-16, 0, 4.44089209850107e-16,\n", + " 0.000861326853504301, 0.00258398056051277, 24609338671.5500,\n", + " 123046693357.780, 1.02538911131465e+24, 7.17772377920519e+24,\n", + " 5.22016274851136e+37, 4.69814647366267e+38, 3.01163235491067e+51],\n", + " dtype=object)" ] }, - "execution_count": 14, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compute_error(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{\\left(10 x_{0}^{2} + 2 x_{1}^{2}\\right) g{\\left(4 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{12 g{\\left(2 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} - \\frac{24 g{\\left(3 \\right)}}{x_{0}^{2} + x_{1}^{2}}$" + ], + "text/plain": [ + "(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12*g(2)/(x0**3 + x0*x1**2) - 24*g(3)/(x0**2 + x1**2)" + ] + }, + "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "compute_error(7)" + "r_new.subs(rct, 1).subs(n, 5)" ] }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "-0.0" + "1.1399853691344745e-15" ] }, - "execution_count": 68, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(30116417561.29867 -30116417561.298637)/30116417561.298637" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-4999999999.999999" + ] + }, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -252,19 +296,19 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle - \\frac{720 x_{0} \\left(\\frac{64 x_{0}^{6}}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{3}} - \\frac{112 x_{0}^{4}}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{2}} + \\frac{56 x_{0}^{2}}{x_{0}^{2} + x_{1}^{2}} - 7\\right)}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{4}}$" + "$\\displaystyle - \\frac{114.591559026165 x_{0} \\left(\\frac{64 x_{0}^{6}}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{3}} - \\frac{112 x_{0}^{4}}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{2}} + \\frac{56 x_{0}^{2}}{x_{0}^{2} + x_{1}^{2}} - 7\\right)}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{4}}$" ], "text/plain": [ - "-720*x0*(64*x0**6/(x0**2 + x1**2)**3 - 112*x0**4/(x0**2 + x1**2)**2 + 56*x0**2/(x0**2 + x1**2) - 7)/(x0**2 + x1**2)**4" + "-114.591559026165*x0*(64*x0**6/(x0**2 + x1**2)**3 - 112*x0**4/(x0**2 + x1**2)**2 + 56*x0**2/(x0**2 + x1**2) - 7)/(x0**2 + x1**2)**4" ] }, - "execution_count": 72, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -275,19 +319,19 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 0.555111512312578$" + "$\\displaystyle 0.0883487411517643$" ], "text/plain": [ - "0.555111512312578" + "0.0883487411517643" ] }, - "execution_count": 71, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -298,16 +342,16 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "-0.0" + "-4999999999.999999" ] }, - "execution_count": 51, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -318,7 +362,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -327,7 +371,7 @@ "'\\nx_plot = [i for i in range(len(compute_error(0)))]\\nfor i in range(1, 4):\\n plt.semilogy(x_plot, compute_error(i), label=str(10**(-i)))\\nplt.xlabel(\"order of derivative being computed\")\\nplt.ylabel(\"absolute error\")\\nplt.title(\"recurrence error vs order for different source-locations\")\\nplt.legend(title=\\'ratio of x_{coord_src}/y_{coord_src}\\')\\nplt.show()\\n'" ] }, - "execution_count": 14, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } diff --git a/test/test_recurrence_qbx.py b/test/test_recurrence_qbx.py index 570fbfa7..7651d6de 100644 --- a/test/test_recurrence_qbx.py +++ b/test/test_recurrence_qbx.py @@ -98,7 +98,7 @@ def _qbx_lp_general(knl, sources, targets, centers, radius, def _create_ellipse(n_p): h = 9.688 / n_p - radius = 7*h + radius = 7*h * 1/40 t = np.linspace(0, 2 * np.pi, n_p, endpoint=False) unit_circle_param = np.exp(1j * t) From 8cc112454a90da12f19922bb41691bbdffc355f2 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 23 Nov 2024 17:23:55 -0800 Subject: [PATCH 102/143] possible tarylor exp in x0 could avoid cat can --- test/modified_recur.ipynb | 78 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 5 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 8303fb9f..6941c454 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -228,27 +228,95 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 104, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle \\frac{\\left(10 x_{0}^{2} + 2 x_{1}^{2}\\right) g{\\left(4 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{12 g{\\left(2 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} - \\frac{24 g{\\left(3 \\right)}}{x_{0}^{2} + x_{1}^{2}}$" + "$\\displaystyle \\frac{12 x_{0}^{2} g{\\left(2 \\right)} - 24 x_{0}^{2} g{\\left(3 \\right)} + 10 x_{0}^{2} g{\\left(4 \\right)} + 2 x_{1}^{2} g{\\left(4 \\right)}}{x_{0}^{2} + x_{1}^{2}}$" ], "text/plain": [ - "(10*x0**2 + 2*x1**2)*g(4)/(x0**3 + x0*x1**2) + 12*g(2)/(x0**3 + x0*x1**2) - 24*g(3)/(x0**2 + x1**2)" + "(12*x0**2*g(2) - 24*x0**2*g(3) + 10*x0**2*g(4) + 2*x1**2*g(4))/(x0**2 + x1**2)" ] }, - "execution_count": 90, + "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "r_new.subs(rct, 1).subs(n, 5)" + "a = sp.cancel(sp.diff(r_new.subs(rct, var[0]).subs(n, 5), var[0], 0))\n", + "a" ] }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{1440 \\left(6 g{\\left(2 \\right)} - 12 g{\\left(3 \\right)} + 4 g{\\left(4 \\right)}\\right)}{x_{1}^{6}}$" + ], + "text/plain": [ + "1440*(6*g(2) - 12*g(3) + 4*g(4))/x1**6" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.diff(a, var[0], 6).subs(var[0], 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - \\frac{25920.010368}{x_{1}^{6}}$" + ], + "text/plain": [ + "-25920.010368/x1**6" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.diff(a, var[0], 6).subs(var[0], 0).subs(g(2), 1.00000000e+00).subs(g(3), 6.00000000e-07).subs(g(4), -6.00000000e+00)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": 34, From 3f667e07f926e7d2b27c308f39db610eb0002b55 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 24 Nov 2024 23:10:50 -0800 Subject: [PATCH 103/143] Update modified_recur.ipynb --- test/modified_recur.ipynb | 248 ++++++++++++-------------------------- 1 file changed, 78 insertions(+), 170 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 6941c454..d666f22d 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 47, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -86,7 +86,7 @@ "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, - "execution_count": 52, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -131,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -154,7 +154,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -169,17 +169,17 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "def compute_error(pw):\n", - " x_coord = 1e-7\n", + " x_coord = 10**(-pw)\n", " y_coord = 1\n", " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", - " rct_val = 1\n", + " rct_val = x_coord\n", " exp = evaluate_recurrence_lamb(coord_dict, rct_val, r_new, 14)\n", " true = evaluate_true(coord_dict, rct_val, 14)\n", " print(exp)\n", @@ -189,111 +189,130 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[4.88498130835068e-15 -9.99999999999990e-8 0.999999999999970\n", - " 5.99999999999980e-7 -5.99999999999940 -1.20103359222412e-5\n", - " 119.689922332713 -12403106.6899557 -620155334528027.\n", - " -3.72093200713792e+22 -2.60465240499655e+30 -2.08372192399724e+38\n", - " -1.87534973159752e+46 -1.87534973159752e+54]\n", - "[ 4.88498131e-15 -1.00000000e-07 1.00000000e+00 6.00000000e-07\n", - " -6.00000000e+00 -1.20000000e-05 1.20000000e+02 5.04000000e-04\n", - " -5.04000000e+03 -3.62880000e-02 3.62880000e+05 3.99168000e+00\n", - " -3.99168000e+07 -6.22702080e+02]\n" + "[4.99999750058881e-7 -9.99999000001000e-7 9.99997000005001e-7\n", + " 5.99998000004200e-12 -5.99994000021000e-12 -1.19999160001121e-16\n", + " 1.19997480020830e-16 5.03996236056665e-21 -5.03970436047030e-21\n", + " 3.22333878647354e-25 5.15931089723621e-24 3.83716481291881e-23\n", + " 3.45344442229625e-22 3.45344487898425e-21]\n", + "[ 4.99999750e-07 -9.99999000e-07 9.99997000e-07 5.99998000e-12\n", + " -5.99994000e-12 -1.19999160e-16 1.19997480e-16 5.03993952e-21\n", + " -5.03981856e-21 -3.62873347e-25 3.62860042e-25 3.99157622e-29\n", + " -3.99136865e-29 -6.22680286e-33]\n" ] }, { "data": { "text/plain": [ - "array([0, 0, 1.11022302462519e-16, 0, 4.44089209850107e-16,\n", - " 0.000861326853504301, 0.00258398056051277, 24609338671.5500,\n", - " 123046693357.780, 1.02538911131465e+24, 7.17772377920519e+24,\n", - " 5.22016274851136e+37, 4.69814647366267e+38, 3.01163235491067e+51],\n", - " dtype=object)" + "array([0, 2.11758448571812e-16, 4.23517744178265e-16,\n", + " 4.03898129797430e-16, 4.03900822467246e-16, 1.58609401692541e-11,\n", + " 4.75849247343332e-11, 4.53184684440781e-6, 2.26597825890807e-5,\n", + " 1.88828204410285, 13.2184597422124, 961314.681805742,\n", + " 8652282.26317474, 554609638070.892], dtype=object)" ] }, - "execution_count": 92, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "compute_error(1)" + "compute_error(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Avoiding Cat Cancellation\n", + "The question is can we avoid catastrophic cancellation in the recurrence when $x_0 << 1$? Where $(x_0, y_0)$ is the location of the source?\n", + "\n", + "If we formulate a recurrence for\n", + "$$\n", + "g(i, x_0, y_0) = \\frac{d^i}{dx^i}|_{x = 0} G(x, y) r_{ct}^i\n", + "$$\n", + "we will inevitably get catastrophic cancellation when $x_0 << y_0$. Suppose we let $r_{ct} = x_0$ (we can scale up and down later with the true $r_{ct}$) and have\n", + "$$\n", + "g(n, x_0, y_0) = f_1(x_0, y_0, n-1) g(n-1, x_0, y_0) + f_2(x_0, y_0, n-2) g(n-2, x_0, y_0) + f_3(x_0, y_0, n-3) g(n-3, x_0, y_0)\n", + "$$\n", + "we could treat $g(n-1, x_0, y_0), g(n-2, x_0, y_0), g(n-3, x_0, y_0)$ as constants and taylor expand $f_i(x_0, y_0, j)$ when $x_0 << y_0$. So instead we get for example:\n", + "$$\n", + "g(2) = -g(1) + \\frac{4g(1)}{x_1^2} \\frac{x_0^2}{2!} - \\frac{48 g(1)}{x_1^4} \\frac{x_0^4}{4!} \n", + "$$\n", + "$$\n", + "g(3) = -\\frac{4(g(1)-2g(2))}{x_1^2} \\frac{x_0^2}{2!} - \\frac{48 (g(1)-2g(2))}{x_1^4} \\frac{x_0^4}{4!} \n", + "$$\n", + "$$\n", + "g(4) = g(3) - \\frac{4(g(1)-5g(2)+3g(3))}{x_1^2 } \\frac{x_0^2}{2!} - \\frac{48(g(1)-5g(2)+3g(3))}{x_1^4} \\frac{x_0^4}{4!} \n", + "$$\n", + "$$\n", + "g(5) = 2g(4) + \\frac{8(3g(2)-6g(3)+2g(4))}{x_1^2} \\frac{x_0^2}{2!}\n", + "$$" ] }, { "cell_type": "code", - "execution_count": 104, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\frac{12 x_{0}^{2} g{\\left(2 \\right)} - 24 x_{0}^{2} g{\\left(3 \\right)} + 10 x_{0}^{2} g{\\left(4 \\right)} + 2 x_{1}^{2} g{\\left(4 \\right)}}{x_{0}^{2} + x_{1}^{2}}$" - ], - "text/plain": [ - "(12*x0**2*g(2) - 24*x0**2*g(3) + 10*x0**2*g(4) + 2*x1**2*g(4))/(x0**2 + x1**2)" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "a = sp.cancel(sp.diff(r_new.subs(rct, var[0]).subs(n, 5), var[0], 0))\n", - "a" + "def generate_specialized_formula(i):\n", + " a = sp.cancel(r_new.subs(rct, var[0]).subs(n, 3))\n", + " for j in range(4):\n", + " " ] }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle \\frac{1440 \\left(6 g{\\left(2 \\right)} - 12 g{\\left(3 \\right)} + 4 g{\\left(4 \\right)}\\right)}{x_{1}^{6}}$" + "$\\displaystyle \\frac{- 2 x_{0}^{2} g{\\left(1 \\right)} + 4 x_{0}^{2} g{\\left(2 \\right)}}{x_{0}^{2} + x_{1}^{2}}$" ], "text/plain": [ - "1440*(6*g(2) - 12*g(3) + 4*g(4))/x1**6" + "(-2*x0**2*g(1) + 4*x0**2*g(2))/(x0**2 + x1**2)" ] }, - "execution_count": 110, + "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sp.diff(a, var[0], 6).subs(var[0], 0)" + "a = sp.cancel(r_new.subs(rct, var[0]).subs(n, 3))\n", + "a" ] }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle - \\frac{25920.010368}{x_{1}^{6}}$" + "$\\displaystyle \\frac{4 \\left(- g{\\left(1 \\right)} + 2 g{\\left(2 \\right)}\\right)}{x_{1}^{2}}$" ], "text/plain": [ - "-25920.010368/x1**6" + "4*(-g(1) + 2*g(2))/x1**2" ] }, - "execution_count": 111, + "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sp.diff(a, var[0], 6).subs(var[0], 0).subs(g(2), 1.00000000e+00).subs(g(3), 6.00000000e-07).subs(g(4), -6.00000000e+00)" + "sp.simplify(sp.diff(a, var[0], 2).subs(var[0], 0))" ] }, { @@ -317,117 +336,6 @@ "outputs": [], "source": [] }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.1399853691344745e-15" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(30116417561.29867 -30116417561.298637)/30116417561.298637" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-4999999999.999999" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pw = 8\n", - "x0 = 1\n", - "x1 = 10**(-pw)\n", - "g_1 = -5000000000.00000\n", - "g_2 = (x0**2 - x1**2)*g_1/(x0**3 + x0*x1**2)\n", - "g_2" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle - \\frac{114.591559026165 x_{0} \\left(\\frac{64 x_{0}^{6}}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{3}} - \\frac{112 x_{0}^{4}}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{2}} + \\frac{56 x_{0}^{2}}{x_{0}^{2} + x_{1}^{2}} - 7\\right)}{\\left(x_{0}^{2} + x_{1}^{2}\\right)^{4}}$" - ], - "text/plain": [ - "-114.591559026165*x0*(64*x0**6/(x0**2 + x1**2)**3 - 112*x0**4/(x0**2 + x1**2)**2 + 56*x0**2/(x0**2 + x1**2) - 7)/(x0**2 + x1**2)**4" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "derivs[7]" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle 0.0883487411517643$" - ], - "text/plain": [ - "0.0883487411517643" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "derivs[2].subs(var[0], 10**(-8)).subs(var[1], 10**(-8))" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-4999999999.999999" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "g_2" - ] - }, { "cell_type": "code", "execution_count": 17, From af5a1703f71df51bbb1bb26c289817ed7dda0a64 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 25 Nov 2024 01:55:15 -0800 Subject: [PATCH 104/143] spec formula no go --- test/modified_recur.ipynb | 191 +++++++++++++++++++++++--------------- 1 file changed, 115 insertions(+), 76 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index d666f22d..8f55df45 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -16,12 +16,14 @@ "from sumpy.recurrence import get_recurrence\n", "\n", "import sympy as sp\n", - "import numpy as np" + "import numpy as np\n", + "\n", + "import math" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -32,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -74,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -86,7 +88,7 @@ "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -97,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -109,12 +111,12 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs\n", - "derivs = compute_derivatives(15)" + "derivs = compute_derivatives(10)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -131,7 +133,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -154,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -169,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -180,50 +182,42 @@ " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", " rct_val = x_coord\n", - " exp = evaluate_recurrence_lamb(coord_dict, rct_val, r_new, 14)\n", - " true = evaluate_true(coord_dict, rct_val, 14)\n", - " print(exp)\n", - " print(true)\n", + " exp = evaluate_recurrence_lamb(coord_dict, rct_val, r_new, 9)\n", + " true = evaluate_true(coord_dict, rct_val, 9)\n", + "\n", " return np.abs(exp-true)/np.abs(true)" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[4.99999750058881e-7 -9.99999000001000e-7 9.99997000005001e-7\n", - " 5.99998000004200e-12 -5.99994000021000e-12 -1.19999160001121e-16\n", - " 1.19997480020830e-16 5.03996236056665e-21 -5.03970436047030e-21\n", - " 3.22333878647354e-25 5.15931089723621e-24 3.83716481291881e-23\n", - " 3.45344442229625e-22 3.45344487898425e-21]\n", - "[ 4.99999750e-07 -9.99999000e-07 9.99997000e-07 5.99998000e-12\n", - " -5.99994000e-12 -1.19999160e-16 1.19997480e-16 5.03993952e-21\n", - " -5.03981856e-21 -3.62873347e-25 3.62860042e-25 3.99157622e-29\n", - " -3.99136865e-29 -6.22680286e-33]\n" + "[0 -1.00000000000000e-16 1.00000000000000e-16 6.00000000000000e-32\n", + " -6.00000000000000e-32 -1.75162308040602e-46 -4.54869241218068e-47\n", + " -6.61947696487225e-46 -3.30973848243613e-45]\n", + "[ 0.00e+00 -1.00e-16 1.00e-16 6.00e-32 -6.00e-32 -1.20e-46 1.20e-46\n", + " 5.04e-61 -5.04e-61]\n" ] }, { "data": { "text/plain": [ - "array([0, 2.11758448571812e-16, 4.23517744178265e-16,\n", - " 4.03898129797430e-16, 4.03900822467246e-16, 1.58609401692541e-11,\n", - " 4.75849247343332e-11, 4.53184684440781e-6, 2.26597825890807e-5,\n", - " 1.88828204410285, 13.2184597422124, 961314.681805742,\n", - " 8652282.26317474, 554609638070.892], dtype=object)" + "array([nan, 0, 0, 0, 0, 0.459685900338351, 1.37905770101506,\n", + " 1.31338828668100e+15, 6.56694143340504e+15], dtype=object)" ] }, - "execution_count": 24, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "compute_error(3)" + "compute_error(8)" ] }, { @@ -258,88 +252,133 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ - "def generate_specialized_formula(i):\n", - " a = sp.cancel(r_new.subs(rct, var[0]).subs(n, 3))\n", - " for j in range(4):\n", - " " + "def generate_specialized_formula(i, order):\n", + " a = sp.cancel(r_new.subs(rct, var[0]).subs(n, i))\n", + " res = 0\n", + " for j in range(order+1):\n", + " res += sp.simplify(sp.diff(a, var[0], j).subs(var[0], 0)) * var[0]**j/math.factorial(j)\n", + " return res" ] }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_specialized_formula(coord_dict, p, rct_val, order_approx):\n", + " subs_dict = {}\n", + " subs_dict[g(-2)] = 0\n", + " subs_dict[g(-1)] = 0\n", + " subs_dict[g(0)] = derivs[0].subs(coord_dict)\n", + " subs_dict[g(1)] = derivs[1].subs(coord_dict) * rct_val\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " for i in range(2, p):\n", + " exp = generate_specialized_formula(i, order_approx)\n", + " f = sp.lambdify([var[0], var[1], g(i-1), g(i-2), g(i-3)], exp)\n", + " subs_dict[g(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[g(i-1)],\n", + " subs_dict[g(i-2)], subs_dict[g(i-3)])\n", + " subs_dict.pop(g(-2))\n", + " subs_dict.pop(g(-1))\n", + " return np.array(list(subs_dict.values()))" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_error_using_specialized_formula(pw, order_approx):\n", + " x_coord = 10**(-pw)\n", + " y_coord = 1\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", + "\n", + " rct_val = x_coord\n", + " exp = evaluate_specialized_formula(coord_dict, 9, rct_val, order_approx)\n", + " true = evaluate_true(coord_dict, rct_val, 9)\n", + " print(exp)\n", + " print(true)\n", + " return np.abs(exp-true)/np.abs(true)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5.00000041357686e-11 -9.99999999900000e-11 9.99999999700000e-11\n", + " 5.99999999800000e-20 -5.99999999400000e-20 -1.19999928158156e-28\n", + " 1.20000215021531e-28 8.61598124858447e-34 4.30496662438318e-33]\n", + "[ 5.00000041e-11 -1.00000000e-10 1.00000000e-10 6.00000000e-20\n", + " -5.99999999e-20 -1.20000000e-28 1.20000000e-28 5.03999999e-37\n", + " -5.03999998e-37]\n" + ] + }, { "data": { - "text/latex": [ - "$\\displaystyle \\frac{- 2 x_{0}^{2} g{\\left(1 \\right)} + 4 x_{0}^{2} g{\\left(2 \\right)}}{x_{0}^{2} + x_{1}^{2}}$" - ], "text/plain": [ - "(-2*x0**2*g(1) + 4*x0**2*g(2))/(x0**2 + x1**2)" + "array([0, 0, 1.29246970750185e-16, 4.01235405214419e-16,\n", + " 2.00617702740955e-16, 5.97982031121250e-7, 1.79394609774367e-6,\n", + " 1708.52009105628, 8542.60047595449], dtype=object)" ] }, - "execution_count": 75, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "a = sp.cancel(r_new.subs(rct, var[0]).subs(n, 3))\n", - "a" + "compute_error_using_specialized_formula(5, 25)" ] }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 51, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5.00000041357686e-11 -9.99999999900000e-11 9.99999999700000e-11\n", + " 5.99999999800000e-20 -5.99999999400000e-20 -1.20000024454654e-28\n", + " 1.19999926132039e-28 -2.93959842401676e-34 -1.47282321203299e-33]\n", + "[ 5.00000041e-11 -1.00000000e-10 1.00000000e-10 6.00000000e-20\n", + " -5.99999999e-20 -1.20000000e-28 1.20000000e-28 5.03999999e-37\n", + " -5.03999998e-37]\n" + ] + }, { "data": { - "text/latex": [ - "$\\displaystyle \\frac{4 \\left(- g{\\left(1 \\right)} + 2 g{\\left(2 \\right)}\\right)}{x_{1}^{2}}$" - ], "text/plain": [ - "4*(-g(1) + 2*g(2))/x1**2" + "array([0, 0, 1.29246970750185e-16, 0, 0, 2.04488779601828e-7,\n", + " 6.13466339664336e-7, 584.253656258786, 2921.26828836340],\n", + " dtype=object)" ] }, - "execution_count": 77, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sp.simplify(sp.diff(a, var[0], 2).subs(var[0], 0))" + "compute_error(5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, "outputs": [ { "data": { From d4d818eee55dbd68f543381b1c172dfef34717e6 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 29 Nov 2024 14:06:29 -0800 Subject: [PATCH 105/143] Odd-Even Recurrence --- test/modified_recur.ipynb | 108 +++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 31 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 8f55df45..874654b6 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -71,7 +71,8 @@ "var = _make_sympy_vec(\"x\", 2)\n", "rct = sp.symbols(\"r_{ct}\")\n", "g = sp.Function(\"g\")\n", - "n = sp.symbols(\"n\")" + "n = sp.symbols(\"n\")\n", + "coord_dict = {var[0]: 1, var[1]: 1}" ] }, { @@ -171,7 +172,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -181,37 +182,37 @@ " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", - " rct_val = x_coord\n", + " rct_val = 1\n", " exp = evaluate_recurrence_lamb(coord_dict, rct_val, r_new, 9)\n", " true = evaluate_true(coord_dict, rct_val, 9)\n", "\n", + " print(true)\n", + "\n", " return np.abs(exp-true)/np.abs(true)" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[0 -1.00000000000000e-16 1.00000000000000e-16 6.00000000000000e-32\n", - " -6.00000000000000e-32 -1.75162308040602e-46 -4.54869241218068e-47\n", - " -6.61947696487225e-46 -3.30973848243613e-45]\n", - "[ 0.00e+00 -1.00e-16 1.00e-16 6.00e-32 -6.00e-32 -1.20e-46 1.20e-46\n", - " 5.04e-61 -5.04e-61]\n" + "[ 0.00e+00 -1.00e-08 1.00e+00 6.00e-08 -6.00e+00 -1.20e-06 1.20e+02\n", + " 5.04e-05 -5.04e+03]\n" ] }, { "data": { "text/plain": [ - "array([nan, 0, 0, 0, 0, 0.459685900338351, 1.37905770101506,\n", - " 1.31338828668100e+15, 6.56694143340504e+15], dtype=object)" + "array([nan, 0, 1.11022302462516e-16, 2.20581496680807e-16, 0,\n", + " 0.192092895507813, 0.576278686523440, 548836844308037.,\n", + " 2.74418422154019e+15], dtype=object)" ] }, - "execution_count": 28, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -224,7 +225,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Avoiding Cat Cancellation\n", + "# Avoiding Cat Cancellation: Attempt 1\n", "The question is can we avoid catastrophic cancellation in the recurrence when $x_0 << 1$? Where $(x_0, y_0)$ is the location of the source?\n", "\n", "If we formulate a recurrence for\n", @@ -252,7 +253,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -266,7 +267,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -289,7 +290,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -309,7 +310,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -332,7 +333,7 @@ " 1708.52009105628, 8542.60047595449], dtype=object)" ] }, - "execution_count": 55, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -343,30 +344,27 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[5.00000041357686e-11 -9.99999999900000e-11 9.99999999700000e-11\n", - " 5.99999999800000e-20 -5.99999999400000e-20 -1.20000024454654e-28\n", - " 1.19999926132039e-28 -2.93959842401676e-34 -1.47282321203299e-33]\n", - "[ 5.00000041e-11 -1.00000000e-10 1.00000000e-10 6.00000000e-20\n", - " -5.99999999e-20 -1.20000000e-28 1.20000000e-28 5.03999999e-37\n", - " -5.03999998e-37]\n" + "[ 5.00000041e-11 -1.00000000e-05 1.00000000e+00 6.00000000e-05\n", + " -5.99999999e+00 -1.20000000e-03 1.20000000e+02 5.03999999e-02\n", + " -5.03999998e+03]\n" ] }, { "data": { "text/plain": [ - "array([0, 0, 1.29246970750185e-16, 0, 0, 2.04488779601828e-7,\n", - " 6.13466339664336e-7, 584.253656258786, 2921.26828836340],\n", - " dtype=object)" + "array([0, 0, 1.11022302495822e-16, 0, 4.44089210294152e-16,\n", + " 1.45828085314177e-7, 4.37484255134502e-7, 416.651671175665,\n", + " 2083.25836091981], dtype=object)" ] }, - "execution_count": 51, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -375,9 +373,57 @@ "compute_error(5)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Avoiding Cat Cancellation Attempt 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have\n", + "$$\n", + "\\text{ Given } g(0), g(1), rct = 1\n", + "$$\n", + "$$\n", + "g(1) = \\frac{1}{2\\pi} \\frac{x_0}{x_0^2 + x_1^2}\n", + "$$\n", + "$$\n", + "g(2) = \\frac{x_0^2 -x_1^2}{x_0^3 +x_0 x_1^2} g(1)\n", + "$$\n", + "$$\n", + "g(3) = \\frac{4x_0 g(2)}{x_0^2 + x_1^2} - \\frac{2 g (1)}{x_0^2 + x_1^2}\n", + "$$\n", + "$$\n", + "g(4) = \\frac{(7 x_0^2 + x_1^2)g(3)}{x_0^3 + x_0x_1^2} - \\frac{10g(2)}{x_0^2 + x_1^2} + \\frac{2g(1)}{x_0^3 + x_0 x_1^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Rewriting as an odd-even recurrence we get:\n", + "$$\n", + "g(2) = \\frac{1}{2\\pi} \\frac{x_0^2 -x_1^2}{(x_0^2 + x_1^2)^2} \n", + "$$\n", + "$$\n", + "g(3) = \\frac{6x_0^2 -2x_1^2}{(x_0^2 + x_1^2)^2} g(1)\n", + "$$\n", + "$$\n", + "g(4) = \\frac{(7 x_0^2 + x_1^2)}{x_0^2 + x_1^2} \\left(\\frac{4 g(2)}{x_0^2 + x_1^2} - \\frac{1 }{\\pi(x_0^2 + x_1^2)^2} \\right) - \\frac{10g(2)}{x_0^2 + x_1^2} + \\frac{1}{x_0^2 + x_1^2} \\frac{1}{\\pi} \\frac{1}{x_0^2 + x_1^2}\n", + "$$\n", + "$$\n", + "g(4) = \\frac{18x_0^2 - 6x_1^2}{(x_0^2 + x_1^2)^2} g(2) + \\frac{-(7 x_0^2 + x_1^2) + 1}{\\pi(x_0^2 + x_1^2)^2}\n", + "$$" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -386,7 +432,7 @@ "'\\nx_plot = [i for i in range(len(compute_error(0)))]\\nfor i in range(1, 4):\\n plt.semilogy(x_plot, compute_error(i), label=str(10**(-i)))\\nplt.xlabel(\"order of derivative being computed\")\\nplt.ylabel(\"absolute error\")\\nplt.title(\"recurrence error vs order for different source-locations\")\\nplt.legend(title=\\'ratio of x_{coord_src}/y_{coord_src}\\')\\nplt.show()\\n'" ] }, - "execution_count": 17, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } From 20d70716dc81a5d40122d1043725fa390b21dbb3 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 29 Nov 2024 23:27:14 -0800 Subject: [PATCH 106/143] Try with dictionary first --- test/modified_recur.ipynb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 874654b6..8c5f2979 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -421,6 +421,25 @@ "$$" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def odd_even(i):\n", + " #Pseudocode\n", + " #Step 1 use extract_idx_terms from recurrence\n", + " #Use odd-even to recursively? substitute odd or even terms\n", + " #Should take in dictionary?\n", + " #The problem is when we try and replace the smallest even\n", + " #term, we get a smaller even term. Have we already computed\n", + " #Are we even only to a certain order????\n", + " #Yes you can assume every even/odd terms has been computed accurately\n", + " #Let us try with a dictionary first\n", + " return 0" + ] + }, { "cell_type": "code", "execution_count": 19, From cd2096ef4e4c9054aa36dde51f75d9e8811b5895 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 30 Nov 2024 12:02:06 -0800 Subject: [PATCH 107/143] Odd-Even Ideas --- test/modified_recur.ipynb | 74 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 8c5f2979..27bb79c0 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -100,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ @@ -112,7 +112,70 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs\n", - "derivs = compute_derivatives(10)" + "derivs = compute_derivatives(15)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we have $x_0 << x_1$ then the following expressions are a good approximation\\\n", + "to coefficients for a Taylor expansion of a Laplace kernel at the origin with\\\n", + "source at $(x_0, x_1)$:" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[log(sqrt(x1**2)),\n", + " -x0/x1**2,\n", + " x1**(-2),\n", + " 6*x0/x1**4,\n", + " -6/x1**4,\n", + " -120*x0/x1**6,\n", + " 120/x1**6,\n", + " 5040*x0/x1**8,\n", + " -5040/x1**8,\n", + " -362880*x0/x1**10,\n", + " 362880/x1**10,\n", + " 39916800*x0/x1**12,\n", + " -39916800/x1**12,\n", + " -6227020800*x0/x1**14,\n", + " 6227020800/x1**14]" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[sp.diff(derivs[i], var[0], 0).subs(var[0], 0) + sp.diff(derivs[i], var[0], 1).subs(var[0], 0) * var[0] for i in range(0,15,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 6, 120, 5040, 362880, 39916800, 6227020800]" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[math.factorial(2*n_v+1) for n_v in range(7)]" ] }, { @@ -421,6 +484,13 @@ "$$" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, From cfdc52df5a0a3f92c21df80866abf4c93f9fb1f8 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 30 Nov 2024 14:25:58 -0800 Subject: [PATCH 108/143] Use new subs recur --- test/modified_recur.ipynb | 276 ++++++++++++++++---------------------- 1 file changed, 116 insertions(+), 160 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 27bb79c0..6e6ef503 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -83,10 +83,10 @@ { "data": { "text/latex": [ - "$\\displaystyle \\left(-1\\right)^{n + 1} r_{ct}^{n} \\left(\\frac{\\left(-1\\right)^{n - 3} r_{ct}^{3 - n} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) g{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} r_{ct}^{2 - n} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) g{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} r_{ct}^{1 - n} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) g{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" + "$\\displaystyle \\left(-1\\right)^{n + 1} \\left(\\frac{\\left(-1\\right)^{n - 3} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) g{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) g{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) g{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" ], "text/plain": [ - "(-1)**(n + 1)*r_{ct}**n*((-1)**(n - 3)*r_{ct}**(3 - n)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*r_{ct}**(2 - n)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*r_{ct}**(1 - n)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" + "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, "execution_count": 6, @@ -95,109 +95,65 @@ } ], "source": [ + "r_new = r_new.subs(rct, 1)\n", "r_new" ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "def compute_derivatives(p):\n", - " var = _make_sympy_vec(\"x\", 2)\n", - " var_t = _make_sympy_vec(\"t\", 2)\n", - " g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))\n", - " derivs = [sp.diff(g_x_y,\n", - " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", - " for i in range(p)]\n", - " return derivs\n", - "derivs = compute_derivatives(15)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we have $x_0 << x_1$ then the following expressions are a good approximation\\\n", - "to coefficients for a Taylor expansion of a Laplace kernel at the origin with\\\n", - "source at $(x_0, x_1)$:" + "r_new_shifted_1 = r_new.subs(n, n-1)\n", + "r_new_shifted_3 = r_new.subs(n, n-3)" ] }, { "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[log(sqrt(x1**2)),\n", - " -x0/x1**2,\n", - " x1**(-2),\n", - " 6*x0/x1**4,\n", - " -6/x1**4,\n", - " -120*x0/x1**6,\n", - " 120/x1**6,\n", - " 5040*x0/x1**8,\n", - " -5040/x1**8,\n", - " -362880*x0/x1**10,\n", - " 362880/x1**10,\n", - " 39916800*x0/x1**12,\n", - " -39916800/x1**12,\n", - " -6227020800*x0/x1**14,\n", - " 6227020800/x1**14]" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[sp.diff(derivs[i], var[0], 0).subs(var[0], 0) + sp.diff(derivs[i], var[0], 1).subs(var[0], 0) * var[0] for i in range(0,15,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 73, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { + "text/latex": [ + "$\\displaystyle \\frac{\\left(6 n^{2} x_{0}^{4} + 3 n^{2} x_{0}^{2} x_{1}^{2} + n^{2} x_{1}^{4} - 26 n x_{0}^{4} - 21 n x_{0}^{2} x_{1}^{2} - 7 n x_{1}^{4} + 26 x_{0}^{4} + 30 x_{0}^{2} x_{1}^{2} + 12 x_{1}^{4}\\right) g{\\left(n - 2 \\right)}}{x_{0}^{6} + 2 x_{0}^{4} x_{1}^{2} + x_{0}^{2} x_{1}^{4}} + \\frac{\\left(3 n^{4} x_{0}^{2} + n^{4} x_{1}^{2} - 38 n^{3} x_{0}^{2} - 14 n^{3} x_{1}^{2} + 175 n^{2} x_{0}^{2} + 73 n^{2} x_{1}^{2} - 344 n x_{0}^{2} - 168 n x_{1}^{2} + 240 x_{0}^{2} + 144 x_{1}^{2}\\right) g{\\left(n - 4 \\right)}}{x_{0}^{6} + 2 x_{0}^{4} x_{1}^{2} + x_{0}^{2} x_{1}^{4}} + \\frac{\\left(- 8 n^{3} x_{0}^{2} - 2 n^{3} x_{1}^{2} + 64 n^{2} x_{0}^{2} + 20 n^{2} x_{1}^{2} - 164 n x_{0}^{2} - 66 n x_{1}^{2} + 132 x_{0}^{2} + 72 x_{1}^{2}\\right) g{\\left(n - 3 \\right)}}{x_{0}^{5} + 2 x_{0}^{3} x_{1}^{2} + x_{0} x_{1}^{4}}$" + ], "text/plain": [ - "[1, 6, 120, 5040, 362880, 39916800, 6227020800]" + "(6*n**2*x0**4 + 3*n**2*x0**2*x1**2 + n**2*x1**4 - 26*n*x0**4 - 21*n*x0**2*x1**2 - 7*n*x1**4 + 26*x0**4 + 30*x0**2*x1**2 + 12*x1**4)*g(n - 2)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (3*n**4*x0**2 + n**4*x1**2 - 38*n**3*x0**2 - 14*n**3*x1**2 + 175*n**2*x0**2 + 73*n**2*x1**2 - 344*n*x0**2 - 168*n*x1**2 + 240*x0**2 + 144*x1**2)*g(n - 4)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (-8*n**3*x0**2 - 2*n**3*x1**2 + 64*n**2*x0**2 + 20*n**2*x1**2 - 164*n*x0**2 - 66*n*x1**2 + 132*x0**2 + 72*x1**2)*g(n - 3)/(x0**5 + 2*x0**3*x1**2 + x0*x1**4)" ] }, - "execution_count": 73, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "[math.factorial(2*n_v+1) for n_v in range(7)]" + "poly1 = sp.poly(r_new.subs(g(n-1), r_new_shifted_1), [g(n-2), g(n-3), g(n-4)])\n", + "new_recur = g(n-2) * poly1.coeffs()[0].subs((-1)**(2*n), 1) + g(n-3) * poly1.coeffs()[1].subs((-1)**(2*n), 1) + g(n-4) * poly1.coeffs()[2].subs((-1)**(2*n), 1)\n", + "new_recur" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ - "def evaluate_recurrence(coord_dict, rct_val, recur, p):\n", - " subs_dict = {}\n", - " subs_dict[g(0)] = derivs[0].subs(coord_dict).subs(rct, rct_val)\n", - " subs_dict[g(1)] = derivs[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", + "def compute_derivatives(p):\n", " var = _make_sympy_vec(\"x\", 2)\n", - " for i in range(2, p):\n", - " subs_dict[g(i)] = get_recurrence(recur.subs(rct, rct_val), i).subs(subs_dict).subs(coord_dict)\n", - " print(get_recurrence(recur.subs(rct, 1),i))\n", - " return np.array(list(subs_dict.values()))" + " var_t = _make_sympy_vec(\"t\", 2)\n", + " g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))\n", + " derivs = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(p)]\n", + " return derivs\n", + "derivs = compute_derivatives(15)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -207,12 +163,13 @@ " subs_dict[g(-1)] = 0\n", " subs_dict[g(0)] = derivs[0].subs(coord_dict).subs(rct, rct_val)\n", " subs_dict[g(1)] = derivs[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", + " subs_dict[g(2)] = derivs[2].subs(coord_dict).subs(rct, rct_val) * rct_val**2\n", " var = _make_sympy_vec(\"x\", 2)\n", - " for i in range(2, p):\n", + " for i in range(3, p):\n", " exp = get_recurrence(recur.subs(rct, rct_val), i)\n", - " f = sp.lambdify([var[0], var[1], g(i-1), g(i-2), g(i-3)], exp)\n", - " subs_dict[g(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[g(i-1)],\n", - " subs_dict[g(i-2)], subs_dict[g(i-3)])\n", + " f = sp.lambdify([var[0], var[1], g(i-1), g(i-2), g(i-3), g(i-4)], exp)\n", + " subs_dict[g(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[g(i-1)], subs_dict[g(i-2)],\n", + " subs_dict[g(i-3)], subs_dict[g(i-4)])\n", " subs_dict.pop(g(-2))\n", " subs_dict.pop(g(-1))\n", " return np.array(list(subs_dict.values()))" @@ -220,7 +177,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ @@ -235,19 +192,19 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 53, "metadata": {}, "outputs": [], "source": [ - "def compute_error(pw):\n", + "def compute_error(pw, recur):\n", " x_coord = 10**(-pw)\n", " y_coord = 1\n", " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", "\n", " rct_val = 1\n", - " exp = evaluate_recurrence_lamb(coord_dict, rct_val, r_new, 9)\n", - " true = evaluate_true(coord_dict, rct_val, 9)\n", + " exp = evaluate_recurrence_lamb(coord_dict, rct_val, recur, 10)\n", + " true = evaluate_true(coord_dict, rct_val, 10)\n", "\n", " print(true)\n", "\n", @@ -256,32 +213,62 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.0000e+00 -1.0000e-08 1.0000e+00 6.0000e-08 -6.0000e+00 -1.2000e-06\n", + " 1.2000e+02 5.0400e-05 -5.0400e+03 -3.6288e-03]\n" + ] + }, + { + "data": { + "text/plain": [ + "array([nan, 0, 0, 0, 0, 0.0562597910563149, 0.466666666666666,\n", + " 160742260160899., 2.22222222222222e+15, 6.69759417337081e+29],\n", + " dtype=object)" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compute_error(8, new_recur)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[ 0.00e+00 -1.00e-08 1.00e+00 6.00e-08 -6.00e+00 -1.20e-06 1.20e+02\n", - " 5.04e-05 -5.04e+03]\n" + "[ 0.0000e+00 -1.0000e-08 1.0000e+00 6.0000e-08 -6.0000e+00 -1.2000e-06\n", + " 1.2000e+02 5.0400e-05 -5.0400e+03 -3.6288e-03]\n" ] }, { "data": { "text/plain": [ - "array([nan, 0, 1.11022302462516e-16, 2.20581496680807e-16, 0,\n", - " 0.192092895507813, 0.576278686523440, 548836844308037.,\n", - " 2.74418422154019e+15], dtype=object)" + "array([nan, 0, 0, 0, 0, 0.192092895507813, 0.576278686523440,\n", + " 548836844308037., 2.74418422154019e+15, 2.28682018461682e+30],\n", + " dtype=object)" ] }, - "execution_count": 12, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "compute_error(8)" + "compute_error(8, r_new)" ] }, { @@ -316,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -330,7 +317,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -353,7 +340,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -373,69 +360,56 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[5.00000041357686e-11 -9.99999999900000e-11 9.99999999700000e-11\n", - " 5.99999999800000e-20 -5.99999999400000e-20 -1.19999928158156e-28\n", - " 1.20000215021531e-28 8.61598124858447e-34 4.30496662438318e-33]\n", - "[ 5.00000041e-11 -1.00000000e-10 1.00000000e-10 6.00000000e-20\n", - " -5.99999999e-20 -1.20000000e-28 1.20000000e-28 5.03999999e-37\n", - " -5.03999998e-37]\n" - ] - }, - { - "data": { - "text/plain": [ - "array([0, 0, 1.29246970750185e-16, 4.01235405214419e-16,\n", - " 2.00617702740955e-16, 5.97982031121250e-7, 1.79394609774367e-6,\n", - " 1708.52009105628, 8542.60047595449], dtype=object)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "compute_error_using_specialized_formula(5, 25)" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 5.00000041e-11 -1.00000000e-05 1.00000000e+00 6.00000000e-05\n", - " -5.99999999e+00 -1.20000000e-03 1.20000000e+02 5.03999999e-02\n", - " -5.03999998e+03]\n" - ] - }, - { - "data": { - "text/plain": [ - "array([0, 0, 1.11022302495822e-16, 0, 4.44089210294152e-16,\n", - " 1.45828085314177e-7, 4.37484255134502e-7, 416.651671175665,\n", - " 2083.25836091981], dtype=object)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "compute_error(5)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Avoiding Cat Cancel 1.5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we have $x_0 << x_1$ then the following expressions are a good approximation\\\n", + "to coefficients for a Taylor expansion of a Laplace kernel at the origin with\\\n", + "source at $(x_0, x_1)$:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[sp.diff(derivs[i], var[0], 0).subs(var[0], 0) + sp.diff(derivs[i], var[0], 1).subs(var[0], 0) * var[0] + sp.diff(derivs[i], var[0], 2).subs(var[0], 0) * var[0]**2 for i in range(0,15,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[math.factorial(2*n_v+1) for n_v in range(7)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -484,13 +458,6 @@ "$$" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, @@ -512,20 +479,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'\\nx_plot = [i for i in range(len(compute_error(0)))]\\nfor i in range(1, 4):\\n plt.semilogy(x_plot, compute_error(i), label=str(10**(-i)))\\nplt.xlabel(\"order of derivative being computed\")\\nplt.ylabel(\"absolute error\")\\nplt.title(\"recurrence error vs order for different source-locations\")\\nplt.legend(title=\\'ratio of x_{coord_src}/y_{coord_src}\\')\\nplt.show()\\n'" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "'''\n", "x_plot = [i for i in range(len(compute_error(0)))]\n", From f317bf3a2e4883e343cc119ec559c3d46ad0fec2 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 1 Dec 2024 15:10:13 -0800 Subject: [PATCH 109/143] Heat map for error --- test/modified_recur.ipynb | 261 +++++++++++++++++++++++++++++--------- 1 file changed, 202 insertions(+), 59 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 6e6ef503..39f60014 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ @@ -18,12 +18,15 @@ "import sympy as sp\n", "import numpy as np\n", "\n", - "import math" + "import math\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm, ticker" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -34,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ @@ -54,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -63,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ @@ -77,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 53, "metadata": {}, "outputs": [ { @@ -89,7 +92,7 @@ "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, - "execution_count": 6, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -101,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 54, "metadata": {}, "outputs": [], "source": [ @@ -111,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 55, "metadata": {}, "outputs": [ { @@ -123,7 +126,7 @@ "(6*n**2*x0**4 + 3*n**2*x0**2*x1**2 + n**2*x1**4 - 26*n*x0**4 - 21*n*x0**2*x1**2 - 7*n*x1**4 + 26*x0**4 + 30*x0**2*x1**2 + 12*x1**4)*g(n - 2)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (3*n**4*x0**2 + n**4*x1**2 - 38*n**3*x0**2 - 14*n**3*x1**2 + 175*n**2*x0**2 + 73*n**2*x1**2 - 344*n*x0**2 - 168*n*x1**2 + 240*x0**2 + 144*x1**2)*g(n - 4)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (-8*n**3*x0**2 - 2*n**3*x1**2 + 64*n**2*x0**2 + 20*n**2*x1**2 - 164*n*x0**2 - 66*n*x1**2 + 132*x0**2 + 72*x1**2)*g(n - 3)/(x0**5 + 2*x0**3*x1**2 + x0*x1**4)" ] }, - "execution_count": 9, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -136,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ @@ -153,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ @@ -177,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -192,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ @@ -213,62 +216,64 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 60, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0.0000e+00 -1.0000e-08 1.0000e+00 6.0000e-08 -6.0000e+00 -1.2000e-06\n", - " 1.2000e+02 5.0400e-05 -5.0400e+03 -3.6288e-03]\n" - ] - }, - { - "data": { - "text/plain": [ - "array([nan, 0, 0, 0, 0, 0.0562597910563149, 0.466666666666666,\n", - " 160742260160899., 2.22222222222222e+15, 6.69759417337081e+29],\n", - " dtype=object)" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "compute_error(8, new_recur)" + "def compute_error_coord(recur, loc, order):\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " coord_dict = {var[0]: loc[0], var[1]: loc[1]}\n", + "\n", + " rct_val = 1\n", + " exp = evaluate_recurrence_lamb(coord_dict, rct_val, recur, order+1)\n", + " true = evaluate_true(coord_dict, rct_val, order+1)\n", + "\n", + " #print(true)\n", + "\n", + " return np.abs(exp-true)[order]/np.abs(true)[order]" ] }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 81, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0.0000e+00 -1.0000e-08 1.0000e+00 6.0000e-08 -6.0000e+00 -1.2000e-06\n", - " 1.2000e+02 5.0400e-05 -5.0400e+03 -3.6288e-03]\n" - ] - }, { "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHJCAYAAACBuOOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABj3ElEQVR4nO3de1yUZd4/8M/IYcADGCIoCuQ5RxR0xBJDQQsbPJSH1n12F9G01qCXKetT+vJXHh6V1srYEkzXLbNtN7LS9nHdEAuFZE1AcVOstEVBRRE0EVRAuH5/+DDrOAzOwMzcBz7v12teeV/36XuhNh+v+7rvWyOEECAiIiJSsQ5SF0BERETkaAw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERHfZv38/NBoN9u/fL3UpNrt48SJeeOEF9O3bF56enggODsa8efNQUlIidWlEknOVugAiImq72tpajB07FlevXsWqVaug0+nwww8/YMWKFcjIyMDJkyfRpUsXqcskkgwDD8nWjRs30LFjR6nLMGpoaMDt27eh1WrN1smtVme5efMmPDw8oNFozNa19WfS0s+7rW7evAlPT0+7H7c5zvqzkZOTg1OnTmHr1q2YN28eACAqKgpeXl741a9+hX379mHatGkOr4NIrnhJi2Rh5cqV0Gg0OHLkCGbOnIkHHngA/fr1AwAIIZCWloawsDB4enrigQcewMyZM/Hvf//b7DhffvklJkyYAG9vb3Ts2BGDBw9GcnKycX1UVBSioqLM9pszZw4efPBB4/KZM2eg0Wiwfv16rFmzBn369IFWq0VWVpZdao2KikJISAjy8vIQGRmJjh07om/fvnjttdfQ2Nhosu3PP/+M3/3ud+jbty+0Wi38/PwQGxuL77//3rhNXV0d1qxZg4ceegharRbdu3fH3LlzcfnyZat+/vn5+Zg6dSp8fHzg4eGB4cOH45NPPjHZZtu2bdBoNNi7dy+eeeYZdO/eHR07dkRtba2xP9nZ2YiIiEDHjh3xzDPPAABKSkrwm9/8Bn5+ftBqtRg8eDDefPNNk3629PO25NatW1i2bBn69OkDd3d39OrVC4mJifj5559NtnvwwQcxefJkfP755xg+fDg8PDywatUqAMD333+PJ554Ah07doSvry8WLFiA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Ij09XQghxPnz50X37t3FzJkzxbfffit++uknkZGRIebOnStu377dbF+OHj0q3N3dxd/+9jchhBBbt24VXbp0ET/99JPF/ldUVIhu3bqJ6dOni7y8PPHjjz+K7du3i++//96q/tfU1IiePXuKGTNmiO+++058/fXXom/fviI+Pt54jvj4ePHkk0+anPf69evC19dX/Nd//Zc4ceKE+Pvf/y769+/POTxE7QgDD5ETFRUViYkTJ4ru3bsLrVYrBg4cKN555x3j+oaGBrFq1SrRq1cv4ebmJkJDQ8U//vEPk2N88803YujQocLDw0NERkaKHTt2WBV4bt68KRYvXix69uwp3N3dRf/+/cV7771nXP/jjz+KadOmia5duwpPT0/x0EMPiUWLFonGxsZmj6XT6cRzzz1n0j5t2jQRERFhMSQJIcSxY8dETEyM6Nixo+jSpYuIjIw0hiRr+v+vf/1LREdHCw8PD+Hj4yOeffZZcf36deP65gKPEEL885//FKGhocLd3V2EhYWJzz77jIGHqB3RCMGL20RERKRunMNDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKr3/wFwWDF4XXpeZgAAAABJRU5ErkJggg==", "text/plain": [ - "array([nan, 0, 0, 0, 0, 0.192092895507813, 0.576278686523440,\n", - " 548836844308037., 2.74418422154019e+15, 2.28682018461682e+30],\n", - " dtype=object)" + "
" ] }, - "execution_count": 60, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "compute_error(8, r_new)" + "res = 10\n", + "x_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", + "y_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", + "res=len(x_grid)\n", + "order_plot = 8\n", + "plot_me = np.empty((res, res))\n", + "for i in range(res):\n", + " for j in range(res):\n", + " if abs(x_grid[i]) == abs(y_grid[j]):\n", + " plot_me[i, j] = 1e-16\n", + " else:\n", + " plot_me[i,j] = compute_error_coord(r_new, np.array([x_grid[i],y_grid[j]]), order_plot)\n", + " if plot_me[i,j] == 0:\n", + " plot_me[i, j] = 1e-16\n", + " \n", + "fig, ax = plt.subplots()\n", + "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cbar = fig.colorbar(cs)\n", + "plt.gca().set_xscale('log')\n", + "plt.gca().set_yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n", + "plt.title(\"recurrence error order = \"+str(order_plot))\n", + "plt.show()" ] }, { @@ -394,18 +399,156 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[log(sqrt(x0**2 + x1**2)),\n", + " -x0/(x0**2 + x1**2),\n", + " (-2*x0**2/(x0**2 + x1**2) + 1)/(x0**2 + x1**2),\n", + " -2*x0*(4*x0**2/(x0**2 + x1**2) - 3)/(x0**2 + x1**2)**2,\n", + " 6*(-8*x0**4/(x0**2 + x1**2)**2 + 8*x0**2/(x0**2 + x1**2) - 1)/(x0**2 + x1**2)**2,\n", + " -24*x0*(16*x0**4/(x0**2 + x1**2)**2 - 20*x0**2/(x0**2 + x1**2) + 5)/(x0**2 + x1**2)**3,\n", + " 120*(-32*x0**6/(x0**2 + x1**2)**3 + 48*x0**4/(x0**2 + x1**2)**2 - 18*x0**2/(x0**2 + x1**2) + 1)/(x0**2 + x1**2)**3,\n", + " -720*x0*(64*x0**6/(x0**2 + x1**2)**3 - 112*x0**4/(x0**2 + x1**2)**2 + 56*x0**2/(x0**2 + x1**2) - 7)/(x0**2 + x1**2)**4,\n", + " 5040*(-128*x0**8/(x0**2 + x1**2)**4 + 256*x0**6/(x0**2 + x1**2)**3 - 160*x0**4/(x0**2 + x1**2)**2 + 32*x0**2/(x0**2 + x1**2) - 1)/(x0**2 + x1**2)**4,\n", + " -40320*x0*(256*x0**8/(x0**2 + x1**2)**4 - 576*x0**6/(x0**2 + x1**2)**3 + 432*x0**4/(x0**2 + x1**2)**2 - 120*x0**2/(x0**2 + x1**2) + 9)/(x0**2 + x1**2)**5,\n", + " 362880*(-512*x0**10/(x0**2 + x1**2)**5 + 1280*x0**8/(x0**2 + x1**2)**4 - 1120*x0**6/(x0**2 + x1**2)**3 + 400*x0**4/(x0**2 + x1**2)**2 - 50*x0**2/(x0**2 + x1**2) + 1)/(x0**2 + x1**2)**5,\n", + " -3628800*x0*(1024*x0**10/(x0**2 + x1**2)**5 - 2816*x0**8/(x0**2 + x1**2)**4 + 2816*x0**6/(x0**2 + x1**2)**3 - 1232*x0**4/(x0**2 + x1**2)**2 + 220*x0**2/(x0**2 + x1**2) - 11)/(x0**2 + x1**2)**6,\n", + " 39916800*(-2048*x0**12/(x0**2 + x1**2)**6 + 6144*x0**10/(x0**2 + x1**2)**5 - 6912*x0**8/(x0**2 + x1**2)**4 + 3584*x0**6/(x0**2 + x1**2)**3 - 840*x0**4/(x0**2 + x1**2)**2 + 72*x0**2/(x0**2 + x1**2) - 1)/(x0**2 + x1**2)**6,\n", + " -479001600*x0*(4096*x0**12/(x0**2 + x1**2)**6 - 13312*x0**10/(x0**2 + x1**2)**5 + 16640*x0**8/(x0**2 + x1**2)**4 - 9984*x0**6/(x0**2 + x1**2)**3 + 2912*x0**4/(x0**2 + x1**2)**2 - 364*x0**2/(x0**2 + x1**2) + 13)/(x0**2 + x1**2)**7,\n", + " 6227020800*(-8192*x0**14/(x0**2 + x1**2)**7 + 28672*x0**12/(x0**2 + x1**2)**6 - 39424*x0**10/(x0**2 + x1**2)**5 + 26880*x0**8/(x0**2 + x1**2)**4 - 9408*x0**6/(x0**2 + x1**2)**3 + 1568*x0**4/(x0**2 + x1**2)**2 - 98*x0**2/(x0**2 + x1**2) + 1)/(x0**2 + x1**2)**7]" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "[sp.diff(derivs[i], var[0], 0).subs(var[0], 0) + sp.diff(derivs[i], var[0], 1).subs(var[0], 0) * var[0] + sp.diff(derivs[i], var[0], 2).subs(var[0], 0) * var[0]**2 for i in range(0,15,1)]" + "[sp.diff(derivs[i], var[0], 0) for i in range(0,15,1)]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[log(sqrt(x1**2)),\n", + " 0,\n", + " x1**(-2),\n", + " 0,\n", + " -6/x1**4,\n", + " 0,\n", + " 120/x1**6,\n", + " 0,\n", + " -5040/x1**8,\n", + " 0,\n", + " 362880/x1**10,\n", + " 0,\n", + " -39916800/x1**12,\n", + " 0,\n", + " 6227020800/x1**14]" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[sp.diff(derivs[i], var[0], 0).subs(var[0], 0) for i in range(0,15,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[x1**(-2),\n", + " 0,\n", + " -6/x1**4,\n", + " 0,\n", + " 120/x1**6,\n", + " 0,\n", + " -5040/x1**8,\n", + " 0,\n", + " 362880/x1**10,\n", + " 0,\n", + " -39916800/x1**12,\n", + " 0,\n", + " 6227020800/x1**14,\n", + " 0,\n", + " -1307674368000/x1**16]" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[sp.diff(derivs[i], var[0], 2).subs(var[0], 0) for i in range(0,15,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[-6/x1**4,\n", + " 0,\n", + " 120/x1**6,\n", + " 0,\n", + " -5040/x1**8,\n", + " 0,\n", + " 362880/x1**10,\n", + " 0,\n", + " -39916800/x1**12,\n", + " 0,\n", + " 6227020800/x1**14,\n", + " 0,\n", + " -1307674368000/x1**16,\n", + " 0,\n", + " 355687428096000/x1**18]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[sp.diff(derivs[i], var[0], 4).subs(var[0], 0) for i in range(0,15,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 6, 120, 5040, 362880, 39916800, 6227020800]" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "[math.factorial(2*n_v+1) for n_v in range(7)]" ] From 0f94ee44691a38ecde190ddbdc75f5f5889a56f5 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 1 Dec 2024 15:40:40 -0800 Subject: [PATCH 110/143] Heat map updated --- test/modified_recur.ipynb | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 39f60014..d58bd5e2 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 48, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -57,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -66,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -80,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -92,7 +92,7 @@ "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, - "execution_count": 53, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -104,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -126,7 +126,7 @@ "(6*n**2*x0**4 + 3*n**2*x0**2*x1**2 + n**2*x1**4 - 26*n*x0**4 - 21*n*x0**2*x1**2 - 7*n*x1**4 + 26*x0**4 + 30*x0**2*x1**2 + 12*x1**4)*g(n - 2)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (3*n**4*x0**2 + n**4*x1**2 - 38*n**3*x0**2 - 14*n**3*x1**2 + 175*n**2*x0**2 + 73*n**2*x1**2 - 344*n*x0**2 - 168*n*x1**2 + 240*x0**2 + 144*x1**2)*g(n - 4)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (-8*n**3*x0**2 - 2*n**3*x1**2 + 64*n**2*x0**2 + 20*n**2*x1**2 - 164*n*x0**2 - 66*n*x1**2 + 132*x0**2 + 72*x1**2)*g(n - 3)/(x0**5 + 2*x0**3*x1**2 + x0*x1**4)" ] }, - "execution_count": 55, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -156,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -180,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -216,7 +216,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -235,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 17, "metadata": {}, "outputs": [ { From 6f86adcb52e086fc6e01ca54f9abb9a33961770c Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 2 Dec 2024 08:05:32 -0600 Subject: [PATCH 111/143] Helmholtz Recurrence Error --- test/modified_recur.ipynb | 380 +++++++++++++++++++++----------------- 1 file changed, 210 insertions(+), 170 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index d58bd5e2..ef600410 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 63, "metadata": {}, "outputs": [], "source": [ @@ -16,6 +16,8 @@ "from sumpy.recurrence import get_recurrence\n", "\n", "import sympy as sp\n", + "from sympy import hankel1\n", + "\n", "import numpy as np\n", "\n", "import math\n", @@ -26,18 +28,22 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "w = make_identity_diff_op(2)\n", "laplace2d = laplacian(w)\n", - "n_init, order, r = get_processed_and_shifted_recurrence(laplace2d)" + "n_init, order, r = get_processed_and_shifted_recurrence(laplace2d)\n", + "\n", + "w = make_identity_diff_op(2)\n", + "helmholtz2d = laplacian(w) + w\n", + "n_init, _, recur_helmholtz = get_processed_and_shifted_recurrence(helmholtz2d)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ @@ -57,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 66, "metadata": {}, "outputs": [], "source": [ @@ -66,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ @@ -74,13 +80,23 @@ "var = _make_sympy_vec(\"x\", 2)\n", "rct = sp.symbols(\"r_{ct}\")\n", "g = sp.Function(\"g\")\n", + "s = sp.Function(\"s\")\n", "n = sp.symbols(\"n\")\n", "coord_dict = {var[0]: 1, var[1]: 1}" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "r_new_helmholtz = recur_helmholtz.subs(s, g)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, "metadata": {}, "outputs": [ { @@ -92,7 +108,7 @@ "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" ] }, - "execution_count": 7, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -104,7 +120,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 71, "metadata": {}, "outputs": [ { @@ -126,7 +142,7 @@ "(6*n**2*x0**4 + 3*n**2*x0**2*x1**2 + n**2*x1**4 - 26*n*x0**4 - 21*n*x0**2*x1**2 - 7*n*x1**4 + 26*x0**4 + 30*x0**2*x1**2 + 12*x1**4)*g(n - 2)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (3*n**4*x0**2 + n**4*x1**2 - 38*n**3*x0**2 - 14*n**3*x1**2 + 175*n**2*x0**2 + 73*n**2*x1**2 - 344*n*x0**2 - 168*n*x1**2 + 240*x0**2 + 144*x1**2)*g(n - 4)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (-8*n**3*x0**2 - 2*n**3*x1**2 + 64*n**2*x0**2 + 20*n**2*x1**2 - 164*n*x0**2 - 66*n*x1**2 + 132*x0**2 + 72*x1**2)*g(n - 3)/(x0**5 + 2*x0**3*x1**2 + x0*x1**4)" ] }, - "execution_count": 9, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -139,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ @@ -151,28 +167,45 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs\n", - "derivs = compute_derivatives(15)" + "derivs = compute_derivatives(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "k = 1\n", + "var = _make_sympy_vec(\"x\", 2)\n", + "var_t = _make_sympy_vec(\"t\", 2)\n", + "abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", + " (var[1]-var_t[1])**2)\n", + "g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", + "derivs_helmholtz = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(7)]" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 79, "metadata": {}, "outputs": [], "source": [ - "def evaluate_recurrence_lamb(coord_dict, rct_val, recur, p):\n", + "def evaluate_recurrence_lamb(coord_dict, rct_val, recur, p, derivs_list):\n", " subs_dict = {}\n", " subs_dict[g(-2)] = 0\n", " subs_dict[g(-1)] = 0\n", - " subs_dict[g(0)] = derivs[0].subs(coord_dict).subs(rct, rct_val)\n", - " subs_dict[g(1)] = derivs[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", - " subs_dict[g(2)] = derivs[2].subs(coord_dict).subs(rct, rct_val) * rct_val**2\n", + " subs_dict[g(0)] = derivs_list[0].subs(coord_dict).subs(rct, rct_val)\n", + " subs_dict[g(1)] = derivs_list[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", + " subs_dict[g(2)] = derivs_list[2].subs(coord_dict).subs(rct, rct_val) * rct_val**2\n", " var = _make_sympy_vec(\"x\", 2)\n", " for i in range(3, p):\n", " exp = get_recurrence(recur.subs(rct, rct_val), i)\n", - " f = sp.lambdify([var[0], var[1], g(i-1), g(i-2), g(i-3), g(i-4)], exp)\n", + " f = sp.lambdify([var[0], var[1], g(i-1), g(i-2), g(i-3), g(i-4), g(i-5)], exp)\n", " subs_dict[g(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[g(i-1)], subs_dict[g(i-2)],\n", - " subs_dict[g(i-3)], subs_dict[g(i-4)])\n", + " subs_dict[g(i-3)], subs_dict[g(i-4)], subs_dict[g(i-5)])\n", " subs_dict.pop(g(-2))\n", " subs_dict.pop(g(-1))\n", " return np.array(list(subs_dict.values()))" @@ -180,14 +213,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 80, "metadata": {}, "outputs": [], "source": [ - "def evaluate_true(coord_dict, rct_val, p):\n", + "def evaluate_true(coord_dict, rct_val, p, derivs_list):\n", " retMe = []\n", " for i in range(p):\n", - " exp = (derivs[i]*rct_val**i)\n", + " exp = (derivs_list[i]*rct_val**i)\n", " f = sp.lambdify(var, exp)\n", " retMe.append(f(coord_dict[var[0]], coord_dict[var[1]]))\n", " return np.array(retMe)" @@ -195,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 81, "metadata": {}, "outputs": [], "source": [ @@ -209,38 +242,35 @@ " exp = evaluate_recurrence_lamb(coord_dict, rct_val, recur, 10)\n", " true = evaluate_true(coord_dict, rct_val, 10)\n", "\n", - " print(true)\n", - "\n", " return np.abs(exp-true)/np.abs(true)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ - "def compute_error_coord(recur, loc, order):\n", + "def compute_error_coord(recur, loc, order, derivs_list):\n", " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: loc[0], var[1]: loc[1]}\n", "\n", " rct_val = 1\n", - " exp = evaluate_recurrence_lamb(coord_dict, rct_val, recur, order+1)\n", - " true = evaluate_true(coord_dict, rct_val, order+1)\n", + " exp = evaluate_recurrence_lamb(coord_dict, rct_val, recur, order+1, derivs_list)[order].evalf()\n", + " \n", + " true = derivs_list[order].subs(coord_dict).evalf()\n", "\n", - " #print(true)\n", - "\n", - " return np.abs(exp-true)[order]/np.abs(true)[order]" + " return (np.abs(exp-true)/np.abs(true))" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 86, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHJCAYAAACBuOOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABj3ElEQVR4nO3de1yUZd4/8M/IYcADGCIoCuQ5RxR0xBJDQQsbPJSH1n12F9G01qCXKetT+vJXHh6V1srYEkzXLbNtN7LS9nHdEAuFZE1AcVOstEVBRRE0EVRAuH5/+DDrOAzOwMzcBz7v12teeV/36XuhNh+v+7rvWyOEECAiIiJSsQ5SF0BERETkaAw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERHfZv38/NBoN9u/fL3UpNrt48SJeeOEF9O3bF56enggODsa8efNQUlIidWlEknOVugAiImq72tpajB07FlevXsWqVaug0+nwww8/YMWKFcjIyMDJkyfRpUsXqcskkgwDD8nWjRs30LFjR6nLMGpoaMDt27eh1WrN1smtVme5efMmPDw8oNFozNa19WfS0s+7rW7evAlPT0+7H7c5zvqzkZOTg1OnTmHr1q2YN28eACAqKgpeXl741a9+hX379mHatGkOr4NIrnhJi2Rh5cqV0Gg0OHLkCGbOnIkHHngA/fr1AwAIIZCWloawsDB4enrigQcewMyZM/Hvf//b7DhffvklJkyYAG9vb3Ts2BGDBw9GcnKycX1UVBSioqLM9pszZw4efPBB4/KZM2eg0Wiwfv16rFmzBn369IFWq0VWVpZdao2KikJISAjy8vIQGRmJjh07om/fvnjttdfQ2Nhosu3PP/+M3/3ud+jbty+0Wi38/PwQGxuL77//3rhNXV0d1qxZg4ceegharRbdu3fH3LlzcfnyZat+/vn5+Zg6dSp8fHzg4eGB4cOH45NPPjHZZtu2bdBoNNi7dy+eeeYZdO/eHR07dkRtba2xP9nZ2YiIiEDHjh3xzDPPAABKSkrwm9/8Bn5+ftBqtRg8eDDefPNNk3629PO25NatW1i2bBn69OkDd3d39OrVC4mJifj5559NtnvwwQcxefJkfP755xg+fDg8PDywatUqAMD333+PJ554Ah07doSvry8WLFiA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Ij09XQghxPnz50X37t3FzJkzxbfffit++uknkZGRIebOnStu377dbF+OHj0q3N3dxd/+9jchhBBbt24VXbp0ET/99JPF/ldUVIhu3bqJ6dOni7y8PPHjjz+K7du3i++//96q/tfU1IiePXuKGTNmiO+++058/fXXom/fviI+Pt54jvj4ePHkk0+anPf69evC19dX/Nd//Zc4ceKE+Pvf/y769+/POTxE7QgDD5ETFRUViYkTJ4ru3bsLrVYrBg4cKN555x3j+oaGBrFq1SrRq1cv4ebmJkJDQ8U//vEPk2N88803YujQocLDw0NERkaKHTt2WBV4bt68KRYvXix69uwp3N3dRf/+/cV7771nXP/jjz+KadOmia5duwpPT0/x0EMPiUWLFonGxsZmj6XT6cRzzz1n0j5t2jQRERFhMSQJIcSxY8dETEyM6Nixo+jSpYuIjIw0hiRr+v+vf/1LREdHCw8PD+Hj4yOeffZZcf36deP65gKPEEL885//FKGhocLd3V2EhYWJzz77jIGHqB3RCMGL20RERKRunMNDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKr3/wFwWDF4XXpeZgAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHJCAYAAACBuOOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABn40lEQVR4nO3de1xUdeL/8ffIZQAVDFEUEcJrEoo6YgmiookNXspL6+4WoWJl0M9V1kof/bzkppSVuSWYrmtku9+NtKT9moVUKiZrCYqbYqUtCiqK4AVBBYTP7w9/zDrOhbmcmTkzvJ+Pxzxqzpw58zl4mZfnqhBCCBARERG5sHaOHgARERGRrTF4iIiIyOUxeIiIiMjlMXiIiIjI5TF4iIiIyOUxeIiIiMjlMXiIiIjI5TF4iIiIyOUxeIiIiMjlMXicUFZWFhQKBQoLC/W+PmnSJNx///1a0+6//34oFAq9jzFjxpi8bAA4ffq05r0rVqzQO8+cOXM089xtzJgxiIiI0Pueqqoqg8s8ceIEZs2ahZCQEHh6eiIgIAAJCQn48ssvdebdu3cvFAoFtm/fbvLP4O5HVlYWZs2a1ep89/6MieSq5c/E3r17HT0Ui5w5cwZz5sxBUFAQlEolevTogalTpzp6WORk3B09ALKfmJgYvPXWWzrTfX19LVpex44dkZWVhWXLlqFdu/+2c21tLbZt2wZfX1/U1NRYPN4Wn332GX7/+9+jV69eWLp0Kfr374+LFy/igw8+QEJCAl588UWsWbOm1eXs2LED9fX1muebN2/GX//6V3z11Vfw8/PTTO/duzdiY2Mxb948vcvJysrCxo0b+RcukR0cO3YMY8aMQa9evfDWW28hODgYFRUVyM3NdfTQyMkweNqQTp064eGHH5ZseTNnzsTmzZvxzTffYPz48Zrp2dnZaGpqwuOPP46//e1vVn3Gr7/+isTERAwcOBB79+5F+/btNa898cQTeP755/Hmm29i6NCh+O1vf2t0WUOGDNF6/tVXXwEAVCoVAgICtF7r0qULevfurbOMgwcP4oMPPsCoUaPw5ptvmr0+N27cgI+Pj9nvs5Wmpibcvn0bSqVS5zW5jdVebt68CS8vL52tk4D1PxNjP29r3bx5E97e3pIvVx97/d4QQiAxMRE9e/bE/v37tX5uM2fOtPnnk2vhLi2yWP/+/REdHY0tW7ZoTd+yZQumTZumtdXEUu+88w5u3LiB9957Tyt2Wrz99tvo1KkTVq1aZfVntebChQuYPn06unTpgk8++QTu7sb/vbBixQooFAocPnwYM2bMwH333aeJKCEEMjMzMXjwYHh7e+O+++7DjBkz8J///EdnOV999RXGjRsHPz8/+Pj4YMCAAUhPT9e8PmbMGK3dki1mzZqltdutZVfkmjVr8NprryEsLAxKpRJ79uyRZKwtuysPHTqE2NhY+Pj4oFevXnj99dfR3NysNe/Vq1fxxz/+Eb169YJSqUTXrl2RkJCAn376STNPQ0MDXnvtNTzwwANQKpXo0qULZs+ejUuXLhn9ubcoLCzElClT4O/vDy8vLwwZMgSffPKJ1jwtu3B3796NOXPmoEuXLvDx8UF9fb1mffLz8xEdHQ0fHx/MmTMHAFBWVoannnoKXbt2hVKpxIABA/D2229rraexn7cht27dwpIlSxAWFgZPT0/06NEDqampuHr1qtZ8999/PyZNmoTPPvsMQ4YMgZeXF1599VUAwE8//YRHH30UPj4+CAgIwLx583D9+nW9n/f1119j3Lhx8PX1hY+PD2JiYvDNN99ozWPs94at5efno7i4GAsWLLBJJFLbwuBxYi3/Wrz3IYTQO78Qwqz5TZGcnIycnBxcuXIFAPDzzz+joKAAycnJRt+nbxxNTU068+Xl5SEwMNDglikfHx/Ex8fj2LFjuHDhgsXr0ZrGxkY88cQTqKqqwvbt2xEYGGjye6dNm4Y+ffpg27ZteP/99wEAzz33HBYsWIBHHnkEOTk5yMzMxPHjxxEdHY2LFy9q3vvXv/4VCQkJaG5uxvvvv4///d//xfz583H27FmL1+Xdd9/Ft99+i7feegtffvklHnjgAUnGCtyJwieffBJPPfUU/vnPf0KtVmPJkiVaW/quX7+OkSNHYuPGjZg9ezb+93//F++//z769euHiooKAEBzczMee+wxvP766/j973+PL774Aq+//jry8vIwZswY3Lx50+g67tmzBzExMbh69Sref/99fP755xg8eDBmzpyJrKwsnfnnzJkDDw8PfPTRR9i+fTs8PDwAABUVFXjqqafw+9//Hrt27UJKSgouXbqE6Oho7N69G3/605/wz3/+E4888ggWLVqEF154wayf992EEHj88cfx1ltvITExEV988QXS0tLw4YcfYuzY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", "text/plain": [ "
" ] @@ -250,18 +280,18 @@ } ], "source": [ - "res = 10\n", + "res = 5\n", "x_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", "y_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", "res=len(x_grid)\n", - "order_plot = 8\n", + "order_plot = 6\n", "plot_me = np.empty((res, res))\n", "for i in range(res):\n", " for j in range(res):\n", " if abs(x_grid[i]) == abs(y_grid[j]):\n", " plot_me[i, j] = 1e-16\n", " else:\n", - " plot_me[i,j] = compute_error_coord(r_new, np.array([x_grid[i],y_grid[j]]), order_plot)\n", + " plot_me[i,j] = compute_error_coord(r_new_helmholtz, np.array([x_grid[i],y_grid[j]]), order_plot, derivs_helmholtz)\n", " if plot_me[i,j] == 0:\n", " plot_me[i, j] = 1e-16\n", " \n", @@ -272,7 +302,7 @@ "plt.gca().set_yscale('log')\n", "plt.xlabel(\"source x-coord\")\n", "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"recurrence error order = \"+str(order_plot))\n", + "plt.title(\"HELMHOLTZ recurrence error order = \"+str(order_plot))\n", "plt.show()" ] }, @@ -363,13 +393,37 @@ " return np.abs(exp-true)/np.abs(true)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Avoiding Cat Cancel 1.5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we have $x_0 << x_1$ then the following expressions are a good approximation\\\n", + "to coefficients for a Taylor expansion of a Laplace kernel at the origin with\\\n", + "source at $(x_0, x_1)$:" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "compute_error_using_specialized_formula(5, 25)" + "k = 1\n", + "var = _make_sympy_vec(\"x\", 2)\n", + "var_t = _make_sympy_vec(\"t\", 2)\n", + "abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", + " (var[1]-var_t[1])**2)\n", + "g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", + "derivs_helmholtz = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(7)]" ] }, { @@ -378,181 +432,145 @@ "metadata": {}, "outputs": [], "source": [ - "compute_error(5)" + "[sp.diff(derivs[i], var[0], 0) for i in range(0,15,1)]" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": {}, + "outputs": [], "source": [ - "# Avoiding Cat Cancel 1.5" + "[sp.diff(derivs_helmholtz[i], var[0], 0) for i in range(0,7,1)]" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": {}, + "outputs": [], "source": [ - "If we have $x_0 << x_1$ then the following expressions are a good approximation\\\n", - "to coefficients for a Taylor expansion of a Laplace kernel at the origin with\\\n", - "source at $(x_0, x_1)$:" + "[sp.diff(derivs[i], var[0], 0).subs(var[0], 0) for i in range(0,15,1)]" ] }, { "cell_type": "code", - "execution_count": 66, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[log(sqrt(x0**2 + x1**2)),\n", - " -x0/(x0**2 + x1**2),\n", - " (-2*x0**2/(x0**2 + x1**2) + 1)/(x0**2 + x1**2),\n", - " -2*x0*(4*x0**2/(x0**2 + x1**2) - 3)/(x0**2 + x1**2)**2,\n", - " 6*(-8*x0**4/(x0**2 + x1**2)**2 + 8*x0**2/(x0**2 + x1**2) - 1)/(x0**2 + x1**2)**2,\n", - " -24*x0*(16*x0**4/(x0**2 + x1**2)**2 - 20*x0**2/(x0**2 + x1**2) + 5)/(x0**2 + x1**2)**3,\n", - " 120*(-32*x0**6/(x0**2 + x1**2)**3 + 48*x0**4/(x0**2 + x1**2)**2 - 18*x0**2/(x0**2 + x1**2) + 1)/(x0**2 + x1**2)**3,\n", - " -720*x0*(64*x0**6/(x0**2 + x1**2)**3 - 112*x0**4/(x0**2 + x1**2)**2 + 56*x0**2/(x0**2 + x1**2) - 7)/(x0**2 + x1**2)**4,\n", - " 5040*(-128*x0**8/(x0**2 + x1**2)**4 + 256*x0**6/(x0**2 + x1**2)**3 - 160*x0**4/(x0**2 + x1**2)**2 + 32*x0**2/(x0**2 + x1**2) - 1)/(x0**2 + x1**2)**4,\n", - " -40320*x0*(256*x0**8/(x0**2 + x1**2)**4 - 576*x0**6/(x0**2 + x1**2)**3 + 432*x0**4/(x0**2 + x1**2)**2 - 120*x0**2/(x0**2 + x1**2) + 9)/(x0**2 + x1**2)**5,\n", - " 362880*(-512*x0**10/(x0**2 + x1**2)**5 + 1280*x0**8/(x0**2 + x1**2)**4 - 1120*x0**6/(x0**2 + x1**2)**3 + 400*x0**4/(x0**2 + x1**2)**2 - 50*x0**2/(x0**2 + x1**2) + 1)/(x0**2 + x1**2)**5,\n", - " -3628800*x0*(1024*x0**10/(x0**2 + x1**2)**5 - 2816*x0**8/(x0**2 + x1**2)**4 + 2816*x0**6/(x0**2 + x1**2)**3 - 1232*x0**4/(x0**2 + x1**2)**2 + 220*x0**2/(x0**2 + x1**2) - 11)/(x0**2 + x1**2)**6,\n", - " 39916800*(-2048*x0**12/(x0**2 + x1**2)**6 + 6144*x0**10/(x0**2 + x1**2)**5 - 6912*x0**8/(x0**2 + x1**2)**4 + 3584*x0**6/(x0**2 + x1**2)**3 - 840*x0**4/(x0**2 + x1**2)**2 + 72*x0**2/(x0**2 + x1**2) - 1)/(x0**2 + x1**2)**6,\n", - " -479001600*x0*(4096*x0**12/(x0**2 + x1**2)**6 - 13312*x0**10/(x0**2 + x1**2)**5 + 16640*x0**8/(x0**2 + x1**2)**4 - 9984*x0**6/(x0**2 + x1**2)**3 + 2912*x0**4/(x0**2 + x1**2)**2 - 364*x0**2/(x0**2 + x1**2) + 13)/(x0**2 + x1**2)**7,\n", - " 6227020800*(-8192*x0**14/(x0**2 + x1**2)**7 + 28672*x0**12/(x0**2 + x1**2)**6 - 39424*x0**10/(x0**2 + x1**2)**5 + 26880*x0**8/(x0**2 + x1**2)**4 - 9408*x0**6/(x0**2 + x1**2)**3 + 1568*x0**4/(x0**2 + x1**2)**2 - 98*x0**2/(x0**2 + x1**2) + 1)/(x0**2 + x1**2)**7]" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "[sp.diff(derivs[i], var[0], 0) for i in range(0,15,1)]" + "a1 = [sp.diff(derivs_helmholtz[i], var[0], 0).subs(var[0], 0) for i in range(0,7,1)]\n", + "a1" ] }, { "cell_type": "code", - "execution_count": 67, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[log(sqrt(x1**2)),\n", - " 0,\n", - " x1**(-2),\n", - " 0,\n", - " -6/x1**4,\n", - " 0,\n", - " 120/x1**6,\n", - " 0,\n", - " -5040/x1**8,\n", - " 0,\n", - " 362880/x1**10,\n", - " 0,\n", - " -39916800/x1**12,\n", - " 0,\n", - " 6227020800/x1**14]" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "[sp.diff(derivs[i], var[0], 0).subs(var[0], 0) for i in range(0,15,1)]" + "r1 = sp.simplify(a1[0])\n", + "sp.diff(r1, var[1])" ] }, { "cell_type": "code", - "execution_count": 68, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[x1**(-2),\n", - " 0,\n", - " -6/x1**4,\n", - " 0,\n", - " 120/x1**6,\n", - " 0,\n", - " -5040/x1**8,\n", - " 0,\n", - " 362880/x1**10,\n", - " 0,\n", - " -39916800/x1**12,\n", - " 0,\n", - " 6227020800/x1**14,\n", - " 0,\n", - " -1307674368000/x1**16]" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "source": [ + "r2 = sp.simplify(a1[2])\n", + "sp.diff(r2, var[1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.simplify(a1[4])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "[sp.diff(derivs[i], var[0], 2).subs(var[0], 0) for i in range(0,15,1)]" ] }, { "cell_type": "code", - "execution_count": 69, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[-6/x1**4,\n", - " 0,\n", - " 120/x1**6,\n", - " 0,\n", - " -5040/x1**8,\n", - " 0,\n", - " 362880/x1**10,\n", - " 0,\n", - " -39916800/x1**12,\n", - " 0,\n", - " 6227020800/x1**14,\n", - " 0,\n", - " -1307674368000/x1**16,\n", - " 0,\n", - " 355687428096000/x1**18]" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "source": [ + "a = [sp.diff(derivs_helmholtz[i], var[0], 2).subs(var[0], 0) for i in range(0,7,1)]\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.simplify(a[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.simplify(a[2])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "[sp.diff(derivs[i], var[0], 4).subs(var[0], 0) for i in range(0,15,1)]" ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[1, 6, 120, 5040, 362880, 39916800, 6227020800]" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "source": [ + "[sp.diff(derivs_helmholtz[i], var[0], 4).subs(var[0], 0) for i in range(0,4,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "[math.factorial(2*n_v+1) for n_v in range(7)]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose\n", + "$$\n", + "f(n) = f(n-2) (2n+1)(2n) = 4n^2 f(n-2) - 2n f(n-1)\n", + "$$\n", + "what PDE do we satisfy? This isn't obvious since\n", + "$$\n", + "y = c y'' - dy'\n", + "$$\n", + "something of that form. What if it's just the old recurrence but simplified??? When $x_0 << 1$?\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -637,6 +655,28 @@ "plt.show()\n", "'''" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we have a relation\n", + "$$\n", + "f(1, x_0, x_1) g_1(x_0, x_1) + f(2, x_0, x_1) g_2(x_0, x_1) = 0\n", + "$$\n", + "and we know that\n", + "$$\n", + "f(1, x_0, x_1) = f_0(x_1) + f_1(x_1) x_0 + f_2(x_1) \\frac{x_0^2}{2}\n", + "$$\n", + "$$\n", + "f(2, x_0, x_1) = f_0(x_1) + f_1(x_1) x_0 + f_2(x_1) \\frac{x_0^2}{2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] } ], "metadata": { From c0965cdd2e348c465012c3ea3a5c85c5553341f1 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 6 Dec 2024 17:46:39 -0600 Subject: [PATCH 112/143] Created notebook to perform recurrence on taylor series --- test/modified_recur.ipynb | 11 +- test/taylor_recurrence.ipynb | 339 +++++++++++++++++++++++++++++++++++ 2 files changed, 349 insertions(+), 1 deletion(-) create mode 100644 test/taylor_recurrence.ipynb diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index ef600410..c80b0888 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -94,6 +94,15 @@ "r_new_helmholtz = recur_helmholtz.subs(s, g)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "r_new_helmholtz = recur_helmholtz.subs(s, g)" + ] + }, { "cell_type": "code", "execution_count": 69, @@ -681,7 +690,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "inteq", "language": "python", "name": "python3" }, diff --git a/test/taylor_recurrence.ipynb b/test/taylor_recurrence.ipynb new file mode 100644 index 00000000..91c4933b --- /dev/null +++ b/test/taylor_recurrence.ipynb @@ -0,0 +1,339 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 1: Generalizing the Recurrence:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If\n", + "$$\n", + "s(n, \\textbf{x}) = \\frac{d^n}{d\\textbf{t}^n}|_{\\textbf{t}=0} G(\\textbf{x}, \\textbf{t}) \\cdot \\hat{\\textbf{i}}\n", + "$$\n", + "We claim that we can write\n", + "$$\n", + "s(n, \\textbf{x}) = \\sum_{i=0}^{i=k} \\frac{s_{n,i}(x_1)}{i!} x_0^i\n", + "$$\n", + "where $k$ is some constant chosen beforehand. And more-over there exists a $\\textbf{vector}?$ (rather than scalar) recurrence for the $\\{s_{n,i}\\}_{n=0}^{n=\\infty}$ where $i \\in \\{0, \\dots, k\\}$. This is a straightforward plug-and-chug. See below for an example:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we are given the recurrence where $\\textbf{x} = (x_0, x_1)$\n", + "$$\n", + "(x_0^3 + x_0 x_1^2) s(n)- (3nx_0^2 + nx_1^2 - 5x_0^2 - 3x_1^2)s(n-1) + (3n^2x_0 - 13nx_0 + 14x_0)s(n-2) - (n^3-8n^2+21n-18) s(n-3) = 0\n", + "$$\n", + "Then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "(x_0^3 + x_0 x_1^2) \\left(\\sum_{i=0}^{i=k} \\frac{s_{n,i}(x_1)}{i!} x_0^i\\right)- ((3n-5)x_0^2 + nx_1^2 - 3x_1^2)\\left(\\sum_{i=0}^{i=k} \\frac{s_{n-1,i}(x_1)}{i!} x_0^i \\right) + \\\\\n", + "(3n^2 - 13n+14)x_0 \\left(\\sum_{i=0}^{i=k} \\frac{s_{n-2,i}(x_1)}{i!} x_0^i \\right) - (n^3-8n^2+21n-18) \\left(\\sum_{i=0}^{i=k} \\frac{s_{n-3,i}(x_1)}{i!} x_0^i \\right) = 0\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are going to break the simplifcation of the above expression into 4 parts:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "(x_0^3 + x_0 x_1^2) \\left(\\sum_{i=0}^{i=k} \\frac{s_{n,i}(x_1)}{i!} x_0^i\\right) = \\sum_{i=3}^{i=k+3} \\frac{s_{n,i-3}(x_1)}{(i-3)!} x_0^{i} +\\sum_{i=1}^{i=k+1} \\frac{x_1^2s_{n,i-1}(x_1)}{(i-1)!} x_0^{i}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "- ((3n-5)x_0^2 + nx_1^2 - 3x_1^2)\\left(\\sum_{i=0}^{i=k} \\frac{s_{n-1,i}(x_1)}{i!} x_0^i \\right) = (5-3n) \\sum_{i=2}^{i=k+2} \\frac{s_{n-1,i-2}(x_1)}{(i-2)!} x_0^{i} + \\sum_{i=0}^{i=k} \\frac{(3-n)x_1^2 s_{n-1,i}(x_1)}{i!} x_0^{i}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "(3n^2 - 13n+14)x_0 \\left(\\sum_{i=0}^{i=k} \\frac{s_{n-2,i}(x_1)}{i!} x_0^i \\right) = (3n^2 - 13n+14) \\left(\\sum_{i=1}^{i=k+1} \\frac{s_{n-2,i-1}(x_1)}{(i-1)!} x_0^i \\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "-(n^3-8n^2+21n-18) \\left(\\sum_{i=0}^{i=k} \\frac{s_{n-3,i}(x_1)}{i!} x_0^i \\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Summing the terms we get the following vector recurrence:\n", + "$$\n", + "\\frac{s_{n,i-3}(x_1)}{(i-3)!} + \\frac{x_1^2s_{n,i-1}(x_1)}{(i-1)!} = \\\\\n", + "(3n-5) \\frac{s_{n-1,i-2}(x_1)}{(i-2)!} - \\frac{(3-n)x_1^2 s_{n-1,i}(x_1)}{i!} - (3n^2 - 13n+14)\\frac{s_{n-2,i-1}(x_1)}{(i-1)!} + (n^3-8n^2+21n-18) \\frac{s_{n-3,i}(x_1)}{i!} \n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 2: Testing The Recurrence" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "from sumpy.recurrence import _make_sympy_vec, get_processed_and_shifted_recurrence\n", + "\n", + "from sumpy.expansion.diff_op import (\n", + " laplacian,\n", + " make_identity_diff_op,\n", + ")\n", + "\n", + "from sumpy.recurrence import get_recurrence\n", + "\n", + "import sympy as sp\n", + "from sympy import hankel1\n", + "\n", + "import numpy as np\n", + "\n", + "import math\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm, ticker" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "w = make_identity_diff_op(2)\n", + "laplace2d = laplacian(w)\n", + "\n", + "w = make_identity_diff_op(2)\n", + "helmholtz2d = laplacian(w) + w" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "var = _make_sympy_vec(\"x\", 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_derivatives(p):\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " var_t = _make_sympy_vec(\"t\", 2)\n", + " g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))\n", + " derivs = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(p)]\n", + " return derivs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_derivatives_h2d(p):\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " var_t = _make_sympy_vec(\"t\", 2)\n", + " abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", + " (var[1]-var_t[1])**2)\n", + " g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", + " derivs_helmholtz = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(p)]\n", + " return derivs_helmholtz" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "derivs = compute_derivatives_h2d(7)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 0.25 i H^{(1)}_{0}\\left(6 \\sqrt{x_{0}^{2} + x_{1}^{2}}\\right)$" + ], + "text/plain": [ + "0.25*I*hankel1(0, 6*sqrt(x0**2 + x1**2))" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "derivs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "s = sp.Function(\"s\")\n", + "n = sp.symbols(\"n\")\n", + "var = _make_sympy_vec(\"x\", 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "order_of_rep = 4" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.25*I*hankel1(0, 6*sqrt(x1**2)),\n", + " 0,\n", + " 0.75*I*(hankel1(-1, 6*sqrt(x1**2)) - hankel1(1, 6*sqrt(x1**2)))/sqrt(x1**2),\n", + " 0]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[sp.diff(derivs[0], var[0], i).subs(var[0], 0) for i in range(0,order_of_rep,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0,\n", + " -1.5*I*(hankel1(-1, 6*sqrt(x1**2))/2 - hankel1(1, 6*sqrt(x1**2))/2)/sqrt(x1**2),\n", + " 0,\n", + " I*(-(6.75*(hankel1(-2, 6*sqrt(x1**2)) - hankel1(0, 6*sqrt(x1**2)))/sqrt(x1**2) - 6.75*(hankel1(0, 6*sqrt(x1**2)) - hankel1(2, 6*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) + 2.25*(hankel1(-1, 6*sqrt(x1**2)) - hankel1(1, 6*sqrt(x1**2)))/(x1**2)**(3/2))]" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[sp.diff(derivs[1], var[0], i).subs(var[0], 0) for i in range(0,order_of_rep,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.75*I*(hankel1(-1, 6*sqrt(x1**2)) - hankel1(1, 6*sqrt(x1**2)))/sqrt(x1**2),\n", + " 0,\n", + " 2.25*I*(((hankel1(-2, 6*sqrt(x1**2)) - hankel1(0, 6*sqrt(x1**2)))/sqrt(x1**2) - (hankel1(0, 6*sqrt(x1**2)) - hankel1(2, 6*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (hankel1(-1, 6*sqrt(x1**2)) - hankel1(1, 6*sqrt(x1**2)))/(x1**2)**(3/2) + 2*(hankel1(-2, 6*sqrt(x1**2)) - 2*hankel1(0, 6*sqrt(x1**2)) + hankel1(2, 6*sqrt(x1**2)))/x1**2),\n", + " 0]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[sp.diff(derivs[2], var[0], i).subs(var[0], 0) for i in range(0,order_of_rep,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "inteq", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 0a23e4f9f2e1935bbeec3abf43aac4eb3346e4e6 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 13 Dec 2024 22:30:18 -0600 Subject: [PATCH 113/143] Create function that gives recurrence expression equal to 0 --- sumpy/recurrence.py | 20 +++ test/taylor_recurrence.ipynb | 239 +++-------------------------------- 2 files changed, 36 insertions(+), 223 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index ef2b081d..7ede66e3 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -390,6 +390,26 @@ def _get_initial_c(recurrence): return i +def get_shifted_recurrence_exp_from_pde(pde: LinearPDESystemOperator) -> sp.Expr: + r""" + A function that "shifts" the recurrence so it's center is placed + at the origin and source is the input for the recurrence generated. + + :arg recurrence: a recurrence relation in :math:`s(n)` + """ + r = recurrence_from_pde(pde) + + idx_l, terms = _extract_idx_terms_from_recurrence(r) + + r_ret = r + + n = sp.symbols("n") + for i in range(len(idx_l)): + r_ret = r_ret.subs(terms[i], (-1)**(n+idx_l[i])*terms[i]) + + return r_ret + + def shift_recurrence(r: sp.Expr) -> sp.Expr: r""" A function that "shifts" the recurrence so it's center is placed diff --git a/test/taylor_recurrence.ipynb b/test/taylor_recurrence.ipynb index 91c4933b..a96b07a5 100644 --- a/test/taylor_recurrence.ipynb +++ b/test/taylor_recurrence.ipynb @@ -7,106 +7,9 @@ "# Part 1: Generalizing the Recurrence:" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If\n", - "$$\n", - "s(n, \\textbf{x}) = \\frac{d^n}{d\\textbf{t}^n}|_{\\textbf{t}=0} G(\\textbf{x}, \\textbf{t}) \\cdot \\hat{\\textbf{i}}\n", - "$$\n", - "We claim that we can write\n", - "$$\n", - "s(n, \\textbf{x}) = \\sum_{i=0}^{i=k} \\frac{s_{n,i}(x_1)}{i!} x_0^i\n", - "$$\n", - "where $k$ is some constant chosen beforehand. And more-over there exists a $\\textbf{vector}?$ (rather than scalar) recurrence for the $\\{s_{n,i}\\}_{n=0}^{n=\\infty}$ where $i \\in \\{0, \\dots, k\\}$. This is a straightforward plug-and-chug. See below for an example:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Suppose we are given the recurrence where $\\textbf{x} = (x_0, x_1)$\n", - "$$\n", - "(x_0^3 + x_0 x_1^2) s(n)- (3nx_0^2 + nx_1^2 - 5x_0^2 - 3x_1^2)s(n-1) + (3n^2x_0 - 13nx_0 + 14x_0)s(n-2) - (n^3-8n^2+21n-18) s(n-3) = 0\n", - "$$\n", - "Then" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "(x_0^3 + x_0 x_1^2) \\left(\\sum_{i=0}^{i=k} \\frac{s_{n,i}(x_1)}{i!} x_0^i\\right)- ((3n-5)x_0^2 + nx_1^2 - 3x_1^2)\\left(\\sum_{i=0}^{i=k} \\frac{s_{n-1,i}(x_1)}{i!} x_0^i \\right) + \\\\\n", - "(3n^2 - 13n+14)x_0 \\left(\\sum_{i=0}^{i=k} \\frac{s_{n-2,i}(x_1)}{i!} x_0^i \\right) - (n^3-8n^2+21n-18) \\left(\\sum_{i=0}^{i=k} \\frac{s_{n-3,i}(x_1)}{i!} x_0^i \\right) = 0\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We are going to break the simplifcation of the above expression into 4 parts:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "(x_0^3 + x_0 x_1^2) \\left(\\sum_{i=0}^{i=k} \\frac{s_{n,i}(x_1)}{i!} x_0^i\\right) = \\sum_{i=3}^{i=k+3} \\frac{s_{n,i-3}(x_1)}{(i-3)!} x_0^{i} +\\sum_{i=1}^{i=k+1} \\frac{x_1^2s_{n,i-1}(x_1)}{(i-1)!} x_0^{i}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "- ((3n-5)x_0^2 + nx_1^2 - 3x_1^2)\\left(\\sum_{i=0}^{i=k} \\frac{s_{n-1,i}(x_1)}{i!} x_0^i \\right) = (5-3n) \\sum_{i=2}^{i=k+2} \\frac{s_{n-1,i-2}(x_1)}{(i-2)!} x_0^{i} + \\sum_{i=0}^{i=k} \\frac{(3-n)x_1^2 s_{n-1,i}(x_1)}{i!} x_0^{i}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "(3n^2 - 13n+14)x_0 \\left(\\sum_{i=0}^{i=k} \\frac{s_{n-2,i}(x_1)}{i!} x_0^i \\right) = (3n^2 - 13n+14) \\left(\\sum_{i=1}^{i=k+1} \\frac{s_{n-2,i-1}(x_1)}{(i-1)!} x_0^i \\right)\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "-(n^3-8n^2+21n-18) \\left(\\sum_{i=0}^{i=k} \\frac{s_{n-3,i}(x_1)}{i!} x_0^i \\right)\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Summing the terms we get the following vector recurrence:\n", - "$$\n", - "\\frac{s_{n,i-3}(x_1)}{(i-3)!} + \\frac{x_1^2s_{n,i-1}(x_1)}{(i-1)!} = \\\\\n", - "(3n-5) \\frac{s_{n-1,i-2}(x_1)}{(i-2)!} - \\frac{(3-n)x_1^2 s_{n-1,i}(x_1)}{i!} - (3n^2 - 13n+14)\\frac{s_{n-2,i-1}(x_1)}{(i-1)!} + (n^3-8n^2+21n-18) \\frac{s_{n-3,i}(x_1)}{i!} \n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Part 2: Testing The Recurrence" - ] - }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -117,7 +20,7 @@ " make_identity_diff_op,\n", ")\n", "\n", - "from sumpy.recurrence import get_recurrence\n", + "from sumpy.recurrence import get_recurrence, recurrence_from_pde, shift_recurrence, get_shifted_recurrence_exp_from_pde\n", "\n", "import sympy as sp\n", "from sympy import hankel1\n", @@ -132,29 +35,31 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "w = make_identity_diff_op(2)\n", - "laplace2d = laplacian(w)\n", - "\n", - "w = make_identity_diff_op(2)\n", - "helmholtz2d = laplacian(w) + w" + "var = _make_sympy_vec(\"x\", 2)\n", + "s = sp.Function(\"s\")\n", + "n = sp.symbols(\"n\")" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "var = _make_sympy_vec(\"x\", 2)" + "w = make_identity_diff_op(2)\n", + "laplace2d = laplacian(w)\n", + "\n", + "w = make_identity_diff_op(2)\n", + "helmholtz2d = laplacian(w) + w" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -170,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -188,123 +93,11 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ - "derivs = compute_derivatives_h2d(7)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle 0.25 i H^{(1)}_{0}\\left(6 \\sqrt{x_{0}^{2} + x_{1}^{2}}\\right)$" - ], - "text/plain": [ - "0.25*I*hankel1(0, 6*sqrt(x0**2 + x1**2))" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "derivs[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [], - "source": [ - "s = sp.Function(\"s\")\n", - "n = sp.symbols(\"n\")\n", - "var = _make_sympy_vec(\"x\", 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [], - "source": [ - "order_of_rep = 4" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.25*I*hankel1(0, 6*sqrt(x1**2)),\n", - " 0,\n", - " 0.75*I*(hankel1(-1, 6*sqrt(x1**2)) - hankel1(1, 6*sqrt(x1**2)))/sqrt(x1**2),\n", - " 0]" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[sp.diff(derivs[0], var[0], i).subs(var[0], 0) for i in range(0,order_of_rep,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0,\n", - " -1.5*I*(hankel1(-1, 6*sqrt(x1**2))/2 - hankel1(1, 6*sqrt(x1**2))/2)/sqrt(x1**2),\n", - " 0,\n", - " I*(-(6.75*(hankel1(-2, 6*sqrt(x1**2)) - hankel1(0, 6*sqrt(x1**2)))/sqrt(x1**2) - 6.75*(hankel1(0, 6*sqrt(x1**2)) - hankel1(2, 6*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) + 2.25*(hankel1(-1, 6*sqrt(x1**2)) - hankel1(1, 6*sqrt(x1**2)))/(x1**2)**(3/2))]" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[sp.diff(derivs[1], var[0], i).subs(var[0], 0) for i in range(0,order_of_rep,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.75*I*(hankel1(-1, 6*sqrt(x1**2)) - hankel1(1, 6*sqrt(x1**2)))/sqrt(x1**2),\n", - " 0,\n", - " 2.25*I*(((hankel1(-2, 6*sqrt(x1**2)) - hankel1(0, 6*sqrt(x1**2)))/sqrt(x1**2) - (hankel1(0, 6*sqrt(x1**2)) - hankel1(2, 6*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (hankel1(-1, 6*sqrt(x1**2)) - hankel1(1, 6*sqrt(x1**2)))/(x1**2)**(3/2) + 2*(hankel1(-2, 6*sqrt(x1**2)) - 2*hankel1(0, 6*sqrt(x1**2)) + hankel1(2, 6*sqrt(x1**2)))/x1**2),\n", - " 0]" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[sp.diff(derivs[2], var[0], i).subs(var[0], 0) for i in range(0,order_of_rep,1)]" + "recur = get_shifted_recurrence_exp_from_pde(laplace2d)" ] }, { From 646121475314f1224b89655e13145d6c563e6065 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 15 Dec 2024 19:09:21 -0800 Subject: [PATCH 114/143] Poly in s(n) and x_0 --- sumpy/recurrence.py | 10 ++- test/taylor_recurrence.ipynb | 126 ++++++++++++++++++++++++++++++++--- 2 files changed, 126 insertions(+), 10 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index 7ede66e3..df0c8811 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -401,13 +401,19 @@ def get_shifted_recurrence_exp_from_pde(pde: LinearPDESystemOperator) -> sp.Expr idx_l, terms = _extract_idx_terms_from_recurrence(r) - r_ret = r + # How much do we need to shift the recurrence relation + shift_idx = max(idx_l) n = sp.symbols("n") + r = r.subs(n, n-shift_idx) + + idx_l, terms = _extract_idx_terms_from_recurrence(r) + + r_ret = r for i in range(len(idx_l)): r_ret = r_ret.subs(terms[i], (-1)**(n+idx_l[i])*terms[i]) - return r_ret + return r_ret, (max(idx_l)+1-min(idx_l)) def shift_recurrence(r: sp.Expr) -> sp.Expr: diff --git a/test/taylor_recurrence.ipynb b/test/taylor_recurrence.ipynb index a96b07a5..18e11509 100644 --- a/test/taylor_recurrence.ipynb +++ b/test/taylor_recurrence.ipynb @@ -4,12 +4,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 1: Generalizing the Recurrence:" + "# Generalizing a Taylor Recurrence" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -46,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -59,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -93,11 +93,121 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "recur, order = get_shifted_recurrence_exp_from_pde(laplace2d)\n", + "order" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 1.55431223447522 \\cdot 10^{-15}$" + ], + "text/plain": [ + "1.55431223447522e-15" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Sanity check that recurrence is correct\n", + "derivs_lap = compute_derivatives(5)\n", + "exp = recur.subs(n, 4)\n", + "exp.subs(s(4), derivs_lap[4]).subs(s(3), derivs_lap[3]).subs(s(2), derivs_lap[2]).subs(s(1), derivs_lap[1]).subs(var[0],np.random.rand()).subs(var[1],np.random.rand())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 2: We need to arrange the terms in the recurrence as a polynomial in $x_0$, $s(n)$\n", + "$$\n", + "table[i, j]\n", + "$$\n", + "Where $i = 0$ represents the coefficient attached to $s(n)$ and $i = 1$ represents $s(n-1)$, etc. and the $j$ is for the polynomial in $x_0$." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( \\left(\\left(-1\\right)^{n} x_{0}^{3} + \\left(-1\\right)^{n} x_{0} x_{1}^{2}\\right) s{\\left(n \\right)} + \\left(- 3 \\left(-1\\right)^{n} n x_{0}^{2} - \\left(-1\\right)^{n} n x_{1}^{2} + 5 \\left(-1\\right)^{n} x_{0}^{2} + 3 \\left(-1\\right)^{n} x_{1}^{2}\\right) s{\\left(n - 1 \\right)} + \\left(3 \\left(-1\\right)^{n} n^{2} x_{0} - 13 \\left(-1\\right)^{n} n x_{0} + 14 \\left(-1\\right)^{n} x_{0}\\right) s{\\left(n - 2 \\right)} + \\left(- \\left(-1\\right)^{n} n^{3} + 8 \\left(-1\\right)^{n} n^{2} - 21 \\left(-1\\right)^{n} n + 18 \\left(-1\\right)^{n}\\right) s{\\left(n - 3 \\right)}, s{\\left(n \\right)}, s{\\left(n - 1 \\right)}, s{\\left(n - 2 \\right)}, s{\\left(n - 3 \\right)}, domain=\\mathbb{Z}\\left[n, x_{0}, \\left(-1\\right)^{n}, x_{1}\\right] \\right)}$" + ], + "text/plain": [ + "Poly(((-1)**n*x0**3 + (-1)**n*x0*x1**2)*(s(n)) + (-3*(-1)**n*n*x0**2 - (-1)**n*n*x1**2 + 5*(-1)**n*x0**2 + 3*(-1)**n*x1**2)*(s(n - 1)) + (3*(-1)**n*n**2*x0 - 13*(-1)**n*n*x0 + 14*(-1)**n*x0)*(s(n - 2)) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*(s(n - 3)), s(n), s(n - 1), s(n - 2), s(n - 3), domain='ZZ[n,x0,(-1)**n,x1]')" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "recur\n", + "poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)])\n", + "poly_in_s_n" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "recur = get_shifted_recurrence_exp_from_pde(laplace2d)" + "coeff_s_n = [poly_in_s_n.coeff_monomial(poly_in_s_n.gens[i]) for i in range(order)]\n", + "\n", + "table = []\n", + "for i in range(len(coeff_s_n)):\n", + " table.append(sp.poly(coeff_s_n[i], var[0]).all_coeffs()[::-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[0, (-1)**n*x1**2, 0, (-1)**n],\n", + " [-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2, 0, -3*(-1)**n*n + 5*(-1)**n],\n", + " [0, 3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n],\n", + " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table" ] }, { From 71274c4d30eeaeeeae359bda4a637c80a81c5134 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 15 Dec 2024 22:29:10 -0800 Subject: [PATCH 115/143] Code to produce general recurrence done --- test/taylor_recurrence.ipynb | 223 +++++++++++++++++++++++++++++------ 1 file changed, 189 insertions(+), 34 deletions(-) diff --git a/test/taylor_recurrence.ipynb b/test/taylor_recurrence.ipynb index 18e11509..bbc130d6 100644 --- a/test/taylor_recurrence.ipynb +++ b/test/taylor_recurrence.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -20,7 +20,7 @@ " make_identity_diff_op,\n", ")\n", "\n", - "from sumpy.recurrence import get_recurrence, recurrence_from_pde, shift_recurrence, get_shifted_recurrence_exp_from_pde\n", + "from sumpy.recurrence import get_recurrence, recurrence_from_pde, shift_recurrence, get_shifted_recurrence_exp_from_pde, _extract_idx_terms_from_recurrence\n", "\n", "import sympy as sp\n", "from sympy import hankel1\n", @@ -35,18 +35,19 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "var = _make_sympy_vec(\"x\", 2)\n", "s = sp.Function(\"s\")\n", + "g = sp.Function(\"s\")\n", "n = sp.symbols(\"n\")" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -59,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -75,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -91,9 +92,16 @@ " return derivs_helmholtz" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Step 1: Get recurrence as expression that evaluates to 0 and sanity check it" + ] + }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -102,7 +110,7 @@ "4" ] }, - "execution_count": 33, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -114,19 +122,19 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 1.55431223447522 \\cdot 10^{-15}$" + "$\\displaystyle 6.48092690624935 \\cdot 10^{-15}$" ], "text/plain": [ - "1.55431223447522e-15" + "6.48092690624935e-15" ] }, - "execution_count": 34, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -142,72 +150,219 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Step 2: We need to arrange the terms in the recurrence as a polynomial in $x_0$, $s(n)$\n", + "## Step 2: After performing a Taylor expansion of the $s(n), s(n-1), \\dots$ in the 1D recurrence we need to create a 2D grid of coefficients \n", "$$\n", - "table[i, j]\n", + "grid[i, j]\n", "$$\n", "Where $i = 0$ represents the coefficient attached to $s(n)$ and $i = 1$ represents $s(n-1)$, etc. and the $j$ is for the polynomial in $x_0$." ] }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "def get_grid(recur):\n", + " poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)])\n", + " coeff_s_n = [poly_in_s_n.coeff_monomial(poly_in_s_n.gens[i]) for i in range(order)]\n", + "\n", + " table = []\n", + " for i in range(len(coeff_s_n)):\n", + " table.append(sp.poly(coeff_s_n[i], var[0]).all_coeffs()[::-1])\n", + "\n", + " return table" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[0, (-1)**n*x1**2, 0, (-1)**n],\n", + " [-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2, 0, -3*(-1)**n*n + 5*(-1)**n],\n", + " [0, 3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n],\n", + " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grid = get_grid(recur)\n", + "grid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Step 3: Grid of Coefficient to Grid Recurrence\n", + "$$\n", + "f(x_1) x_0^k s(n-j) \\to f(x_1) x_0^k \\sum_{i=0}^{\\infty} s_{n-j,i} \\frac{x_0^i}{i!} = f(x_1) \\sum_{i=k}^{\\infty} s_{n-j,i-k} \\frac{x_0^i}{(i-k)!} \n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{\\left(-1\\right)^{n} x_{1}^{2} s{\\left(n,i - 1 \\right)}}{\\left(i - 1\\right)!} + \\frac{\\left(-1\\right)^{n} s{\\left(n,i - 3 \\right)}}{\\left(i - 3\\right)!} + \\frac{\\left(- 3 \\left(-1\\right)^{n} n + 5 \\left(-1\\right)^{n}\\right) s{\\left(n - 1,i - 2 \\right)}}{\\left(i - 2\\right)!} + \\frac{\\left(- \\left(-1\\right)^{n} n x_{1}^{2} + 3 \\left(-1\\right)^{n} x_{1}^{2}\\right) s{\\left(n - 1,i \\right)}}{i!} + \\frac{\\left(3 \\left(-1\\right)^{n} n^{2} - 13 \\left(-1\\right)^{n} n + 14 \\left(-1\\right)^{n}\\right) s{\\left(n - 2,i - 1 \\right)}}{\\left(i - 1\\right)!} + \\frac{\\left(- \\left(-1\\right)^{n} n^{3} + 8 \\left(-1\\right)^{n} n^{2} - 21 \\left(-1\\right)^{n} n + 18 \\left(-1\\right)^{n}\\right) s{\\left(n - 3,i \\right)}}{i!}$" + ], + "text/plain": [ + "(-1)**n*x1**2*s(n, i - 1)/factorial(i - 1) + (-1)**n*s(n, i - 3)/factorial(i - 3) + (-3*(-1)**n*n + 5*(-1)**n)*s(n - 1, i - 2)/factorial(i - 2) + (-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2)*s(n - 1, i)/factorial(i) + (3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n)*s(n - 2, i - 1)/factorial(i - 1) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*s(n - 3, i)/factorial(i)" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def convert(grid):\n", + " recur_exp = 0\n", + " i = sp.symbols(\"i\")\n", + " s_terms = []\n", + " for j in range(len(grid)):\n", + " for k in range(len(grid[j])):\n", + " recur_exp += grid[j][k] * s(n-j,i-k)/sp.factorial(i-k)\n", + " if grid[j][k] != 0:\n", + " s_terms.append((j,k))\n", + " return recur_exp, s_terms\n", + "grid_recur, s_terms = convert(grid)\n", + "s_terms\n", + "grid_recur" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Step 4: Translate grid recurrence to column recurrence\n", + "We can use the fact\n", + "$$\n", + "s_{n, i} = s_{n-j, i+j} (-1)^j\n", + "$$\n", + "to perform the following translation:\n", + "$$\n", + "s_{x, i-l} \\to s_{x+l, i} (-1)^l\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [], + "source": [ + "def grid_recur_to_column_recur(grid_recur, s_terms):\n", + " grid_recur_simp = grid_recur\n", + " bag = set()\n", + " for s_t in s_terms:\n", + " bag.add(-((0-s_t[0])-s_t[1]))\n", + " grid_recur_simp = grid_recur_simp.subs(s(n-s_t[0],i-s_t[1]), (-1)**(s_t[1])*s((n-s_t[0])-s_t[1],(i-s_t[1])+s_t[1]))\n", + " shift = min(bag)\n", + " return sp.solve(sp.simplify(grid_recur_simp * sp.factorial(i)).subs(n, n+shift), s(n,i))[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 110, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle \\operatorname{Poly}{\\left( \\left(\\left(-1\\right)^{n} x_{0}^{3} + \\left(-1\\right)^{n} x_{0} x_{1}^{2}\\right) s{\\left(n \\right)} + \\left(- 3 \\left(-1\\right)^{n} n x_{0}^{2} - \\left(-1\\right)^{n} n x_{1}^{2} + 5 \\left(-1\\right)^{n} x_{0}^{2} + 3 \\left(-1\\right)^{n} x_{1}^{2}\\right) s{\\left(n - 1 \\right)} + \\left(3 \\left(-1\\right)^{n} n^{2} x_{0} - 13 \\left(-1\\right)^{n} n x_{0} + 14 \\left(-1\\right)^{n} x_{0}\\right) s{\\left(n - 2 \\right)} + \\left(- \\left(-1\\right)^{n} n^{3} + 8 \\left(-1\\right)^{n} n^{2} - 21 \\left(-1\\right)^{n} n + 18 \\left(-1\\right)^{n}\\right) s{\\left(n - 3 \\right)}, s{\\left(n \\right)}, s{\\left(n - 1 \\right)}, s{\\left(n - 2 \\right)}, s{\\left(n - 3 \\right)}, domain=\\mathbb{Z}\\left[n, x_{0}, \\left(-1\\right)^{n}, x_{1}\\right] \\right)}$" + "$\\displaystyle \\frac{\\left(- i^{2} - 2 i n + 3 i - n^{2} + 3 n - 2\\right) s{\\left(n - 2,i \\right)}}{x_{1}^{2}}$" ], "text/plain": [ - "Poly(((-1)**n*x0**3 + (-1)**n*x0*x1**2)*(s(n)) + (-3*(-1)**n*n*x0**2 - (-1)**n*n*x1**2 + 5*(-1)**n*x0**2 + 3*(-1)**n*x1**2)*(s(n - 1)) + (3*(-1)**n*n**2*x0 - 13*(-1)**n*n*x0 + 14*(-1)**n*x0)*(s(n - 2)) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*(s(n - 3)), s(n), s(n - 1), s(n - 2), s(n - 3), domain='ZZ[n,x0,(-1)**n,x1]')" + "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 59, + "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "recur\n", - "poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)])\n", - "poly_in_s_n" + "column_recur = grid_recur_to_column_recur(grid_recur, s_terms)\n", + "column_recur" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 5: Package into Big Function:" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 114, "metadata": {}, "outputs": [], "source": [ - "coeff_s_n = [poly_in_s_n.coeff_monomial(poly_in_s_n.gens[i]) for i in range(order)]\n", - "\n", - "table = []\n", - "for i in range(len(coeff_s_n)):\n", - " table.append(sp.poly(coeff_s_n[i], var[0]).all_coeffs()[::-1])" + "def get_taylor_recurrence(pde):\n", + " recur, order = get_shifted_recurrence_exp_from_pde(pde)\n", + " grid = get_grid(recur)\n", + " grid_recur, s_terms = convert(grid)\n", + " column_recur = grid_recur_to_column_recur(grid_recur, s_terms)\n", + " return column_recur" ] }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 115, "metadata": {}, "outputs": [ { "data": { + "text/latex": [ + "$\\displaystyle \\frac{\\left(- i^{2} - 2 i n + 3 i - n^{2} + 3 n - 2\\right) s{\\left(n - 2,i \\right)}}{x_{1}^{2}}$" + ], "text/plain": [ - "[[0, (-1)**n*x1**2, 0, (-1)**n],\n", - " [-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2, 0, -3*(-1)**n*n + 5*(-1)**n],\n", - " [0, 3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n],\n", - " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" + "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_taylor_recurrence(laplace2d)" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{- n^{3} s{\\left(n - 2,0 \\right)} + 5 n^{2} s{\\left(n - 2,0 \\right)} - 8 n s{\\left(n - 2,0 \\right)} + 4 s{\\left(n - 2,0 \\right)}}{x_{1}^{2} \\left(n - 2\\right)}$" + ], + "text/plain": [ + "(-n**3*s(n - 2, 0) + 5*n**2*s(n - 2, 0) - 8*n*s(n - 2, 0) + 4*s(n - 2, 0))/(x1**2*(n - 2))" ] }, - "execution_count": 58, + "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "table" + "get_taylor_recurrence(helmholtz2d).subs(i, 0)" ] }, { From d16b9007b64b9f5f180dcb5d2da96d396280c91d Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 20 Dec 2024 11:55:01 -0800 Subject: [PATCH 116/143] Remove all failed attempts --- test/modified_recur.ipynb | 524 ++--------------------------------- test/taylor_recurrence.ipynb | 65 +++-- 2 files changed, 49 insertions(+), 540 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index c80b0888..15c2d52f 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -28,13 +28,13 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "w = make_identity_diff_op(2)\n", "laplace2d = laplacian(w)\n", - "n_init, order, r = get_processed_and_shifted_recurrence(laplace2d)\n", + "n_init, order, recur_laplace = get_processed_and_shifted_recurrence(laplace2d)\n", "\n", "w = make_identity_diff_op(2)\n", "helmholtz2d = laplacian(w) + w\n", @@ -43,36 +43,7 @@ }, { "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [], - "source": [ - "def scale_recurrence(r):\n", - " #We want to subsitute s(i) r^i_{ct} = g(i)\n", - " g = sp.Function(\"g\")\n", - " s = sp.Function(\"s\")\n", - " n = sp.symbols(\"n\")\n", - " rct = sp.symbols(\"r_{ct}\")\n", - "\n", - " r_new = r*rct**n\n", - " for i in range(order):\n", - " r_new = r_new.subs(s(n-i),g(n-i)/(rct**(n-i)))\n", - "\n", - " return r_new" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": {}, - "outputs": [], - "source": [ - "r_new = scale_recurrence(r)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -81,85 +52,7 @@ "rct = sp.symbols(\"r_{ct}\")\n", "g = sp.Function(\"g\")\n", "s = sp.Function(\"s\")\n", - "n = sp.symbols(\"n\")\n", - "coord_dict = {var[0]: 1, var[1]: 1}" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [], - "source": [ - "r_new_helmholtz = recur_helmholtz.subs(s, g)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "r_new_helmholtz = recur_helmholtz.subs(s, g)" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\left(-1\\right)^{n + 1} \\left(\\frac{\\left(-1\\right)^{n - 3} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) g{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) g{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) g{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" - ], - "text/plain": [ - "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*g(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*g(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*g(n - 1)/(x0**3 + x0*x1**2))" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "r_new = r_new.subs(rct, 1)\n", - "r_new" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [], - "source": [ - "r_new_shifted_1 = r_new.subs(n, n-1)\n", - "r_new_shifted_3 = r_new.subs(n, n-3)" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\frac{\\left(6 n^{2} x_{0}^{4} + 3 n^{2} x_{0}^{2} x_{1}^{2} + n^{2} x_{1}^{4} - 26 n x_{0}^{4} - 21 n x_{0}^{2} x_{1}^{2} - 7 n x_{1}^{4} + 26 x_{0}^{4} + 30 x_{0}^{2} x_{1}^{2} + 12 x_{1}^{4}\\right) g{\\left(n - 2 \\right)}}{x_{0}^{6} + 2 x_{0}^{4} x_{1}^{2} + x_{0}^{2} x_{1}^{4}} + \\frac{\\left(3 n^{4} x_{0}^{2} + n^{4} x_{1}^{2} - 38 n^{3} x_{0}^{2} - 14 n^{3} x_{1}^{2} + 175 n^{2} x_{0}^{2} + 73 n^{2} x_{1}^{2} - 344 n x_{0}^{2} - 168 n x_{1}^{2} + 240 x_{0}^{2} + 144 x_{1}^{2}\\right) g{\\left(n - 4 \\right)}}{x_{0}^{6} + 2 x_{0}^{4} x_{1}^{2} + x_{0}^{2} x_{1}^{4}} + \\frac{\\left(- 8 n^{3} x_{0}^{2} - 2 n^{3} x_{1}^{2} + 64 n^{2} x_{0}^{2} + 20 n^{2} x_{1}^{2} - 164 n x_{0}^{2} - 66 n x_{1}^{2} + 132 x_{0}^{2} + 72 x_{1}^{2}\\right) g{\\left(n - 3 \\right)}}{x_{0}^{5} + 2 x_{0}^{3} x_{1}^{2} + x_{0} x_{1}^{4}}$" - ], - "text/plain": [ - "(6*n**2*x0**4 + 3*n**2*x0**2*x1**2 + n**2*x1**4 - 26*n*x0**4 - 21*n*x0**2*x1**2 - 7*n*x1**4 + 26*x0**4 + 30*x0**2*x1**2 + 12*x1**4)*g(n - 2)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (3*n**4*x0**2 + n**4*x1**2 - 38*n**3*x0**2 - 14*n**3*x1**2 + 175*n**2*x0**2 + 73*n**2*x1**2 - 344*n*x0**2 - 168*n*x1**2 + 240*x0**2 + 144*x1**2)*g(n - 4)/(x0**6 + 2*x0**4*x1**2 + x0**2*x1**4) + (-8*n**3*x0**2 - 2*n**3*x1**2 + 64*n**2*x0**2 + 20*n**2*x1**2 - 164*n*x0**2 - 66*n*x1**2 + 132*x0**2 + 72*x1**2)*g(n - 3)/(x0**5 + 2*x0**3*x1**2 + x0*x1**4)" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "poly1 = sp.poly(r_new.subs(g(n-1), r_new_shifted_1), [g(n-2), g(n-3), g(n-4)])\n", - "new_recur = g(n-2) * poly1.coeffs()[0].subs((-1)**(2*n), 1) + g(n-3) * poly1.coeffs()[1].subs((-1)**(2*n), 1) + g(n-4) * poly1.coeffs()[2].subs((-1)**(2*n), 1)\n", - "new_recur" + "n = sp.symbols(\"n\")" ] }, { @@ -181,19 +74,22 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "k = 1\n", - "var = _make_sympy_vec(\"x\", 2)\n", - "var_t = _make_sympy_vec(\"t\", 2)\n", - "abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", - " (var[1]-var_t[1])**2)\n", - "g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", - "derivs_helmholtz = [sp.diff(g_x_y,\n", - " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", - " for i in range(7)]" + "def compute_derivatives_h2d(p):\n", + " k = 1\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " var_t = _make_sympy_vec(\"t\", 2)\n", + " abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", + " (var[1]-var_t[1])**2)\n", + " g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", + " derivs_helmholtz = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(p)]\n", + " return derivs_helmholtz\n", + "derivs_helmholtz = compute_derivatives_h2d(4)" ] }, { @@ -235,25 +131,6 @@ " return np.array(retMe)" ] }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": {}, - "outputs": [], - "source": [ - "def compute_error(pw, recur):\n", - " x_coord = 10**(-pw)\n", - " y_coord = 1\n", - " var = _make_sympy_vec(\"x\", 2)\n", - " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", - "\n", - " rct_val = 1\n", - " exp = evaluate_recurrence_lamb(coord_dict, rct_val, recur, 10)\n", - " true = evaluate_true(coord_dict, rct_val, 10)\n", - "\n", - " return np.abs(exp-true)/np.abs(true)" - ] - }, { "cell_type": "code", "execution_count": 82, @@ -315,373 +192,6 @@ "plt.show()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Avoiding Cat Cancellation: Attempt 1\n", - "The question is can we avoid catastrophic cancellation in the recurrence when $x_0 << 1$? Where $(x_0, y_0)$ is the location of the source?\n", - "\n", - "If we formulate a recurrence for\n", - "$$\n", - "g(i, x_0, y_0) = \\frac{d^i}{dx^i}|_{x = 0} G(x, y) r_{ct}^i\n", - "$$\n", - "we will inevitably get catastrophic cancellation when $x_0 << y_0$. Suppose we let $r_{ct} = x_0$ (we can scale up and down later with the true $r_{ct}$) and have\n", - "$$\n", - "g(n, x_0, y_0) = f_1(x_0, y_0, n-1) g(n-1, x_0, y_0) + f_2(x_0, y_0, n-2) g(n-2, x_0, y_0) + f_3(x_0, y_0, n-3) g(n-3, x_0, y_0)\n", - "$$\n", - "we could treat $g(n-1, x_0, y_0), g(n-2, x_0, y_0), g(n-3, x_0, y_0)$ as constants and taylor expand $f_i(x_0, y_0, j)$ when $x_0 << y_0$. So instead we get for example:\n", - "$$\n", - "g(2) = -g(1) + \\frac{4g(1)}{x_1^2} \\frac{x_0^2}{2!} - \\frac{48 g(1)}{x_1^4} \\frac{x_0^4}{4!} \n", - "$$\n", - "$$\n", - "g(3) = -\\frac{4(g(1)-2g(2))}{x_1^2} \\frac{x_0^2}{2!} - \\frac{48 (g(1)-2g(2))}{x_1^4} \\frac{x_0^4}{4!} \n", - "$$\n", - "$$\n", - "g(4) = g(3) - \\frac{4(g(1)-5g(2)+3g(3))}{x_1^2 } \\frac{x_0^2}{2!} - \\frac{48(g(1)-5g(2)+3g(3))}{x_1^4} \\frac{x_0^4}{4!} \n", - "$$\n", - "$$\n", - "g(5) = 2g(4) + \\frac{8(3g(2)-6g(3)+2g(4))}{x_1^2} \\frac{x_0^2}{2!}\n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def generate_specialized_formula(i, order):\n", - " a = sp.cancel(r_new.subs(rct, var[0]).subs(n, i))\n", - " res = 0\n", - " for j in range(order+1):\n", - " res += sp.simplify(sp.diff(a, var[0], j).subs(var[0], 0)) * var[0]**j/math.factorial(j)\n", - " return res" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def evaluate_specialized_formula(coord_dict, p, rct_val, order_approx):\n", - " subs_dict = {}\n", - " subs_dict[g(-2)] = 0\n", - " subs_dict[g(-1)] = 0\n", - " subs_dict[g(0)] = derivs[0].subs(coord_dict)\n", - " subs_dict[g(1)] = derivs[1].subs(coord_dict) * rct_val\n", - " var = _make_sympy_vec(\"x\", 2)\n", - " for i in range(2, p):\n", - " exp = generate_specialized_formula(i, order_approx)\n", - " f = sp.lambdify([var[0], var[1], g(i-1), g(i-2), g(i-3)], exp)\n", - " subs_dict[g(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[g(i-1)],\n", - " subs_dict[g(i-2)], subs_dict[g(i-3)])\n", - " subs_dict.pop(g(-2))\n", - " subs_dict.pop(g(-1))\n", - " return np.array(list(subs_dict.values()))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def compute_error_using_specialized_formula(pw, order_approx):\n", - " x_coord = 10**(-pw)\n", - " y_coord = 1\n", - " var = _make_sympy_vec(\"x\", 2)\n", - " coord_dict = {var[0]: x_coord, var[1]: y_coord}\n", - "\n", - " rct_val = x_coord\n", - " exp = evaluate_specialized_formula(coord_dict, 9, rct_val, order_approx)\n", - " true = evaluate_true(coord_dict, rct_val, 9)\n", - " print(exp)\n", - " print(true)\n", - " return np.abs(exp-true)/np.abs(true)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Avoiding Cat Cancel 1.5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we have $x_0 << x_1$ then the following expressions are a good approximation\\\n", - "to coefficients for a Taylor expansion of a Laplace kernel at the origin with\\\n", - "source at $(x_0, x_1)$:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "k = 1\n", - "var = _make_sympy_vec(\"x\", 2)\n", - "var_t = _make_sympy_vec(\"t\", 2)\n", - "abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", - " (var[1]-var_t[1])**2)\n", - "g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", - "derivs_helmholtz = [sp.diff(g_x_y,\n", - " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", - " for i in range(7)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "[sp.diff(derivs[i], var[0], 0) for i in range(0,15,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "[sp.diff(derivs_helmholtz[i], var[0], 0) for i in range(0,7,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "[sp.diff(derivs[i], var[0], 0).subs(var[0], 0) for i in range(0,15,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a1 = [sp.diff(derivs_helmholtz[i], var[0], 0).subs(var[0], 0) for i in range(0,7,1)]\n", - "a1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "r1 = sp.simplify(a1[0])\n", - "sp.diff(r1, var[1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "r2 = sp.simplify(a1[2])\n", - "sp.diff(r2, var[1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.simplify(a1[4])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "[sp.diff(derivs[i], var[0], 2).subs(var[0], 0) for i in range(0,15,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a = [sp.diff(derivs_helmholtz[i], var[0], 2).subs(var[0], 0) for i in range(0,7,1)]\n", - "a" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.simplify(a[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.simplify(a[2])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "[sp.diff(derivs[i], var[0], 4).subs(var[0], 0) for i in range(0,15,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "[sp.diff(derivs_helmholtz[i], var[0], 4).subs(var[0], 0) for i in range(0,4,1)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "[math.factorial(2*n_v+1) for n_v in range(7)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Suppose\n", - "$$\n", - "f(n) = f(n-2) (2n+1)(2n) = 4n^2 f(n-2) - 2n f(n-1)\n", - "$$\n", - "what PDE do we satisfy? This isn't obvious since\n", - "$$\n", - "y = c y'' - dy'\n", - "$$\n", - "something of that form. What if it's just the old recurrence but simplified??? When $x_0 << 1$?\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Avoiding Cat Cancellation Attempt 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have\n", - "$$\n", - "\\text{ Given } g(0), g(1), rct = 1\n", - "$$\n", - "$$\n", - "g(1) = \\frac{1}{2\\pi} \\frac{x_0}{x_0^2 + x_1^2}\n", - "$$\n", - "$$\n", - "g(2) = \\frac{x_0^2 -x_1^2}{x_0^3 +x_0 x_1^2} g(1)\n", - "$$\n", - "$$\n", - "g(3) = \\frac{4x_0 g(2)}{x_0^2 + x_1^2} - \\frac{2 g (1)}{x_0^2 + x_1^2}\n", - "$$\n", - "$$\n", - "g(4) = \\frac{(7 x_0^2 + x_1^2)g(3)}{x_0^3 + x_0x_1^2} - \\frac{10g(2)}{x_0^2 + x_1^2} + \\frac{2g(1)}{x_0^3 + x_0 x_1^2}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Rewriting as an odd-even recurrence we get:\n", - "$$\n", - "g(2) = \\frac{1}{2\\pi} \\frac{x_0^2 -x_1^2}{(x_0^2 + x_1^2)^2} \n", - "$$\n", - "$$\n", - "g(3) = \\frac{6x_0^2 -2x_1^2}{(x_0^2 + x_1^2)^2} g(1)\n", - "$$\n", - "$$\n", - "g(4) = \\frac{(7 x_0^2 + x_1^2)}{x_0^2 + x_1^2} \\left(\\frac{4 g(2)}{x_0^2 + x_1^2} - \\frac{1 }{\\pi(x_0^2 + x_1^2)^2} \\right) - \\frac{10g(2)}{x_0^2 + x_1^2} + \\frac{1}{x_0^2 + x_1^2} \\frac{1}{\\pi} \\frac{1}{x_0^2 + x_1^2}\n", - "$$\n", - "$$\n", - "g(4) = \\frac{18x_0^2 - 6x_1^2}{(x_0^2 + x_1^2)^2} g(2) + \\frac{-(7 x_0^2 + x_1^2) + 1}{\\pi(x_0^2 + x_1^2)^2}\n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def odd_even(i):\n", - " #Pseudocode\n", - " #Step 1 use extract_idx_terms from recurrence\n", - " #Use odd-even to recursively? substitute odd or even terms\n", - " #Should take in dictionary?\n", - " #The problem is when we try and replace the smallest even\n", - " #term, we get a smaller even term. Have we already computed\n", - " #Are we even only to a certain order????\n", - " #Yes you can assume every even/odd terms has been computed accurately\n", - " #Let us try with a dictionary first\n", - " return 0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "'''\n", - "x_plot = [i for i in range(len(compute_error(0)))]\n", - "for i in range(1, 4):\n", - " plt.semilogy(x_plot, compute_error(i), label=str(10**(-i)))\n", - "plt.xlabel(\"order of derivative being computed\")\n", - "plt.ylabel(\"absolute error\")\n", - "plt.title(\"recurrence error vs order for different source-locations\")\n", - "plt.legend(title='ratio of x_{coord_src}/y_{coord_src}')\n", - "plt.show()\n", - "'''" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Suppose we have a relation\n", - "$$\n", - "f(1, x_0, x_1) g_1(x_0, x_1) + f(2, x_0, x_1) g_2(x_0, x_1) = 0\n", - "$$\n", - "and we know that\n", - "$$\n", - "f(1, x_0, x_1) = f_0(x_1) + f_1(x_1) x_0 + f_2(x_1) \\frac{x_0^2}{2}\n", - "$$\n", - "$$\n", - "f(2, x_0, x_1) = f_0(x_1) + f_1(x_1) x_0 + f_2(x_1) \\frac{x_0^2}{2}\n", - "$$" - ] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/test/taylor_recurrence.ipynb b/test/taylor_recurrence.ipynb index bbc130d6..c29991ea 100644 --- a/test/taylor_recurrence.ipynb +++ b/test/taylor_recurrence.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -101,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -110,7 +110,7 @@ "4" ] }, - "execution_count": 37, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -122,19 +122,19 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 6.48092690624935 \\cdot 10^{-15}$" + "$\\displaystyle 4.14251966063262 \\cdot 10^{-15}$" ], "text/plain": [ - "6.48092690624935e-15" + "4.14251966063262e-15" ] }, - "execution_count": 38, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -159,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -188,7 +188,7 @@ " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" ] }, - "execution_count": 40, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -210,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -222,7 +222,7 @@ "(-1)**n*x1**2*s(n, i - 1)/factorial(i - 1) + (-1)**n*s(n, i - 3)/factorial(i - 3) + (-3*(-1)**n*n + 5*(-1)**n)*s(n - 1, i - 2)/factorial(i - 2) + (-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2)*s(n - 1, i)/factorial(i) + (3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n)*s(n - 2, i - 1)/factorial(i - 1) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*s(n - 3, i)/factorial(i)" ] }, - "execution_count": 71, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -276,21 +276,20 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 12, "metadata": {}, "outputs": [ { - "data": { - "text/latex": [ - "$\\displaystyle \\frac{\\left(- i^{2} - 2 i n + 3 i - n^{2} + 3 n - 2\\right) s{\\left(n - 2,i \\right)}}{x_{1}^{2}}$" - ], - "text/plain": [ - "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" - ] - }, - "execution_count": 110, - "metadata": {}, - "output_type": "execute_result" + "ename": "NameError", + "evalue": "name 'i' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[12], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m column_recur \u001b[38;5;241m=\u001b[39m \u001b[43mgrid_recur_to_column_recur\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrid_recur\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43ms_terms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m column_recur\n", + "Cell \u001b[0;32mIn[11], line 6\u001b[0m, in \u001b[0;36mgrid_recur_to_column_recur\u001b[0;34m(grid_recur, s_terms)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m s_t \u001b[38;5;129;01min\u001b[39;00m s_terms:\n\u001b[1;32m 5\u001b[0m bag\u001b[38;5;241m.\u001b[39madd(\u001b[38;5;241m-\u001b[39m((\u001b[38;5;241m0\u001b[39m\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m]))\n\u001b[0;32m----> 6\u001b[0m grid_recur_simp \u001b[38;5;241m=\u001b[39m grid_recur_simp\u001b[38;5;241m.\u001b[39msubs(s(n\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m0\u001b[39m],\u001b[43mi\u001b[49m\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m]), (\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m(s_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39ms((n\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m],(i\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m+\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m]))\n\u001b[1;32m 7\u001b[0m shift \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mmin\u001b[39m(bag)\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m sp\u001b[38;5;241m.\u001b[39msolve(sp\u001b[38;5;241m.\u001b[39msimplify(grid_recur_simp \u001b[38;5;241m*\u001b[39m sp\u001b[38;5;241m.\u001b[39mfactorial(i))\u001b[38;5;241m.\u001b[39msubs(n, n\u001b[38;5;241m+\u001b[39mshift), s(n,i))[\u001b[38;5;241m0\u001b[39m]\n", + "\u001b[0;31mNameError\u001b[0m: name 'i' is not defined" + ] } ], "source": [ @@ -307,7 +306,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -321,7 +320,7 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -344,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -362,7 +361,7 @@ } ], "source": [ - "get_taylor_recurrence(helmholtz2d).subs(i, 0)" + "get_taylor_recurrence(helmholtz2d)" ] }, { From 427cf030b49f092f0e82b047b69c34873ec32539 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 20 Dec 2024 12:19:28 -0800 Subject: [PATCH 117/143] Want higher order --- test/modified_recur.ipynb | 184 +++++++++++++++++++++++++++++--------- 1 file changed, 140 insertions(+), 44 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index 15c2d52f..f9634c77 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 63, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -43,21 +43,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "max_abs = .0000001\n", "var = _make_sympy_vec(\"x\", 2)\n", "rct = sp.symbols(\"r_{ct}\")\n", - "g = sp.Function(\"g\")\n", "s = sp.Function(\"s\")\n", "n = sp.symbols(\"n\")" ] }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -69,14 +68,69 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs\n", - "derivs = compute_derivatives(10)" + "derivs_laplace = compute_derivatives(8)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[13], line 12\u001b[0m\n\u001b[1;32m 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m [sp\u001b[38;5;241m.\u001b[39mdiff(g_x_y,\n\u001b[1;32m 9\u001b[0m var_t[\u001b[38;5;241m0\u001b[39m], i)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(p)]\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n\u001b[0;32m---> 12\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m \u001b[43mcompute_derivatives_h2d\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[0;32mIn[13], line 8\u001b[0m, in \u001b[0;36mcompute_derivatives_h2d\u001b[0;34m(p)\u001b[0m\n\u001b[1;32m 5\u001b[0m abs_dist \u001b[38;5;241m=\u001b[39m sp\u001b[38;5;241m.\u001b[39msqrt((var[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m+\u001b[39m\n\u001b[1;32m 6\u001b[0m (var[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 7\u001b[0m g_x_y \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39mj\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m4\u001b[39m) \u001b[38;5;241m*\u001b[39m hankel1(\u001b[38;5;241m0\u001b[39m, k \u001b[38;5;241m*\u001b[39m abs_dist)\n\u001b[0;32m----> 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_x_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n", + "Cell \u001b[0;32mIn[13], line 8\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 5\u001b[0m abs_dist \u001b[38;5;241m=\u001b[39m sp\u001b[38;5;241m.\u001b[39msqrt((var[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m+\u001b[39m\n\u001b[1;32m 6\u001b[0m (var[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 7\u001b[0m g_x_y \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39mj\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m4\u001b[39m) \u001b[38;5;241m*\u001b[39m hankel1(\u001b[38;5;241m0\u001b[39m, k \u001b[38;5;241m*\u001b[39m abs_dist)\n\u001b[0;32m----> 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m [\u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_x_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(p)]\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:2481\u001b[0m, in \u001b[0;36mdiff\u001b[0;34m(f, *symbols, **kwargs)\u001b[0m\n\u001b[1;32m 2417\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2418\u001b[0m \u001b[38;5;124;03mDifferentiate f with respect to symbols.\u001b[39;00m\n\u001b[1;32m 2419\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2478\u001b[0m \n\u001b[1;32m 2479\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2480\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(f, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdiff\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m-> 2481\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2482\u001b[0m kwargs\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 2483\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _derivative_dispatch(f, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/expr.py:3575\u001b[0m, in \u001b[0;36mExpr.diff\u001b[0;34m(self, *symbols, **assumptions)\u001b[0m\n\u001b[1;32m 3573\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdiff\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39massumptions):\n\u001b[1;32m 3574\u001b[0m assumptions\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m-> 3575\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_derivative_dispatch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43massumptions\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1908\u001b[0m, in \u001b[0;36m_derivative_dispatch\u001b[0;34m(expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1906\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtensor\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray_derivatives\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ArrayDerivative\n\u001b[1;32m 1907\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ArrayDerivative(expr, \u001b[38;5;241m*\u001b[39mvariables, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1908\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDerivative\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mvariables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1436\u001b[0m, in \u001b[0;36mDerivative.__new__\u001b[0;34m(cls, expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1429\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m old_v\u001b[38;5;241m.\u001b[39mis_scalar \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\n\u001b[1;32m 1430\u001b[0m old_v, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_eval_derivative\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 1431\u001b[0m \u001b[38;5;66;03m# special hack providing evaluation for classes\u001b[39;00m\n\u001b[1;32m 1432\u001b[0m \u001b[38;5;66;03m# that have defined is_scalar=True but have no\u001b[39;00m\n\u001b[1;32m 1433\u001b[0m \u001b[38;5;66;03m# _eval_derivative defined\u001b[39;00m\n\u001b[1;32m 1434\u001b[0m expr \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m=\u001b[39m old_v\u001b[38;5;241m.\u001b[39mdiff(old_v)\n\u001b[0;32m-> 1436\u001b[0m obj \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dispatch_eval_derivative_n_times\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcount\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1437\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m obj \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mis_zero:\n\u001b[1;32m 1438\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1897\u001b[0m, in \u001b[0;36mDerivative._dispatch_eval_derivative_n_times\u001b[0;34m(cls, expr, v, count)\u001b[0m\n\u001b[1;32m 1891\u001b[0m \u001b[38;5;129m@classmethod\u001b[39m\n\u001b[1;32m 1892\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_dispatch_eval_derivative_n_times\u001b[39m(\u001b[38;5;28mcls\u001b[39m, expr, v, count):\n\u001b[1;32m 1893\u001b[0m \u001b[38;5;66;03m# Evaluate the derivative `n` times. If\u001b[39;00m\n\u001b[1;32m 1894\u001b[0m \u001b[38;5;66;03m# `_eval_derivative_n_times` is not overridden by the current\u001b[39;00m\n\u001b[1;32m 1895\u001b[0m \u001b[38;5;66;03m# object, the default in `Basic` will call a loop over\u001b[39;00m\n\u001b[1;32m 1896\u001b[0m \u001b[38;5;66;03m# `_eval_derivative`:\u001b[39;00m\n\u001b[0;32m-> 1897\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mexpr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_eval_derivative_n_times\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcount\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/cache.py:72\u001b[0m, in \u001b[0;36m__cacheit..func_wrapper..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(func)\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 71\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 72\u001b[0m retval \u001b[38;5;241m=\u001b[39m \u001b[43mcfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m e\u001b[38;5;241m.\u001b[39margs \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m e\u001b[38;5;241m.\u001b[39margs[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124munhashable type:\u001b[39m\u001b[38;5;124m'\u001b[39m):\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/mul.py:987\u001b[0m, in \u001b[0;36mMul._eval_derivative_n_times\u001b[0;34m(self, s, n)\u001b[0m\n\u001b[1;32m 985\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mntheory\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmultinomial\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m multinomial_coefficients_iterator\n\u001b[1;32m 986\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m kvals, c \u001b[38;5;129;01min\u001b[39;00m multinomial_coefficients_iterator(m, n):\n\u001b[0;32m--> 987\u001b[0m p \u001b[38;5;241m=\u001b[39m Mul(\u001b[38;5;241m*\u001b[39m\u001b[43m[\u001b[49m\u001b[43marg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mzip\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkvals\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 988\u001b[0m terms\u001b[38;5;241m.\u001b[39mappend(c \u001b[38;5;241m*\u001b[39m p)\n\u001b[1;32m 989\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Add(\u001b[38;5;241m*\u001b[39mterms)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/mul.py:987\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 985\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mntheory\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmultinomial\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m multinomial_coefficients_iterator\n\u001b[1;32m 986\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m kvals, c \u001b[38;5;129;01min\u001b[39;00m multinomial_coefficients_iterator(m, n):\n\u001b[0;32m--> 987\u001b[0m p \u001b[38;5;241m=\u001b[39m Mul(\u001b[38;5;241m*\u001b[39m[\u001b[43marg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m k, arg \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(kvals, args)])\n\u001b[1;32m 988\u001b[0m terms\u001b[38;5;241m.\u001b[39mappend(c \u001b[38;5;241m*\u001b[39m p)\n\u001b[1;32m 989\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Add(\u001b[38;5;241m*\u001b[39mterms)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/expr.py:3575\u001b[0m, in \u001b[0;36mExpr.diff\u001b[0;34m(self, *symbols, **assumptions)\u001b[0m\n\u001b[1;32m 3573\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdiff\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39massumptions):\n\u001b[1;32m 3574\u001b[0m assumptions\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m-> 3575\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_derivative_dispatch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43massumptions\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1908\u001b[0m, in \u001b[0;36m_derivative_dispatch\u001b[0;34m(expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1906\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtensor\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray_derivatives\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ArrayDerivative\n\u001b[1;32m 1907\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ArrayDerivative(expr, \u001b[38;5;241m*\u001b[39mvariables, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1908\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDerivative\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mvariables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1474\u001b[0m, in \u001b[0;36mDerivative.__new__\u001b[0;34m(cls, expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1472\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexprtools\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m factor_terms\n\u001b[1;32m 1473\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msimplify\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msimplify\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m signsimp\n\u001b[0;32m-> 1474\u001b[0m expr \u001b[38;5;241m=\u001b[39m \u001b[43mfactor_terms\u001b[49m\u001b[43m(\u001b[49m\u001b[43msignsimp\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1475\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1267\u001b[0m, in \u001b[0;36mfactor_terms\u001b[0;34m(expr, radical, clear, fraction, sign)\u001b[0m\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n\u001b[1;32m 1266\u001b[0m expr \u001b[38;5;241m=\u001b[39m sympify(expr)\n\u001b[0;32m-> 1267\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mAdd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmake_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m [\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m Add\u001b[38;5;241m.\u001b[39mmake_args(p)]\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m[\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs])\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mAdd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmake_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m [\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m Add\u001b[38;5;241m.\u001b[39mmake_args(p)]\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m[\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs])\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mAdd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmake_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m [\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m Add\u001b[38;5;241m.\u001b[39mmake_args(p)]\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m[\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs])\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1230\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1227\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mis_Pow \u001b[38;5;129;01mor\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mis_Function \u001b[38;5;129;01mor\u001b[39;00m \\\n\u001b[1;32m 1228\u001b[0m is_iterable \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(expr, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124margs_cnc\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 1229\u001b[0m args \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39margs\n\u001b[0;32m-> 1230\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1231\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m newargs \u001b[38;5;241m==\u001b[39m args:\n\u001b[1;32m 1232\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1230\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1227\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mis_Pow \u001b[38;5;129;01mor\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mis_Function \u001b[38;5;129;01mor\u001b[39;00m \\\n\u001b[1;32m 1228\u001b[0m is_iterable \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(expr, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124margs_cnc\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 1229\u001b[0m args \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39margs\n\u001b[0;32m-> 1230\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m 1231\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m newargs \u001b[38;5;241m==\u001b[39m args:\n\u001b[1;32m 1232\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1257\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1255\u001b[0m \u001b[38;5;66;03m# rebuild p not worrying about the order which gcd_terms will fix\u001b[39;00m\n\u001b[1;32m 1256\u001b[0m p \u001b[38;5;241m=\u001b[39m Add\u001b[38;5;241m.\u001b[39m_from_args(list_args)\n\u001b[0;32m-> 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m \u001b[43mgcd_terms\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1258\u001b[0m \u001b[43m \u001b[49m\u001b[43misprimitive\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 1259\u001b[0m \u001b[43m \u001b[49m\u001b[43mclear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mclear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1260\u001b[0m \u001b[43m \u001b[49m\u001b[43mfraction\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfraction\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[1;32m 1263\u001b[0m \u001b[38;5;241m*\u001b[39m[do(a) \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs])\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1068\u001b[0m, in \u001b[0;36mgcd_terms\u001b[0;34m(terms, isprimitive, clear, fraction)\u001b[0m\n\u001b[1;32m 1066\u001b[0m terms \u001b[38;5;241m=\u001b[39m sympify(terms)\n\u001b[1;32m 1067\u001b[0m terms, reps \u001b[38;5;241m=\u001b[39m mask(terms)\n\u001b[0;32m-> 1068\u001b[0m cont, numer, denom \u001b[38;5;241m=\u001b[39m \u001b[43m_gcd_terms\u001b[49m\u001b[43m(\u001b[49m\u001b[43mterms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43misprimitive\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfraction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1069\u001b[0m numer \u001b[38;5;241m=\u001b[39m numer\u001b[38;5;241m.\u001b[39mxreplace(reps)\n\u001b[1;32m 1070\u001b[0m coeff, factors \u001b[38;5;241m=\u001b[39m cont\u001b[38;5;241m.\u001b[39mas_coeff_Mul()\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:953\u001b[0m, in \u001b[0;36m_gcd_terms\u001b[0;34m(terms, isprimitive, fraction)\u001b[0m\n\u001b[1;32m 950\u001b[0m cont \u001b[38;5;241m=\u001b[39m cont\u001b[38;5;241m.\u001b[39mgcd(term)\n\u001b[1;32m 952\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, term \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(terms):\n\u001b[0;32m--> 953\u001b[0m terms[i] \u001b[38;5;241m=\u001b[39m \u001b[43mterm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mquo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcont\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 955\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fraction:\n\u001b[1;32m 956\u001b[0m denom \u001b[38;5;241m=\u001b[39m terms[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mdenom\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:868\u001b[0m, in \u001b[0;36mTerm.quo\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 867\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mquo\u001b[39m(\u001b[38;5;28mself\u001b[39m, other): \u001b[38;5;66;03m# Term\u001b[39;00m\n\u001b[0;32m--> 868\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmul\u001b[49m\u001b[43m(\u001b[49m\u001b[43mother\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minv\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:857\u001b[0m, in \u001b[0;36mTerm.mul\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 855\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmul\u001b[39m(\u001b[38;5;28mself\u001b[39m, other): \u001b[38;5;66;03m# Term\u001b[39;00m\n\u001b[1;32m 856\u001b[0m coeff \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcoeff\u001b[38;5;241m*\u001b[39mother\u001b[38;5;241m.\u001b[39mcoeff\n\u001b[0;32m--> 857\u001b[0m numer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnumer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmul\u001b[49m\u001b[43m(\u001b[49m\u001b[43mother\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnumer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 858\u001b[0m denom \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdenom\u001b[38;5;241m.\u001b[39mmul(other\u001b[38;5;241m.\u001b[39mdenom)\n\u001b[1;32m 860\u001b[0m numer, denom \u001b[38;5;241m=\u001b[39m numer\u001b[38;5;241m.\u001b[39mnormal(denom)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:484\u001b[0m, in \u001b[0;36mFactors.mul\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 480\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 482\u001b[0m factors[factor] \u001b[38;5;241m=\u001b[39m exp\n\u001b[0;32m--> 484\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mFactors\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfactors\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:324\u001b[0m, in \u001b[0;36mFactors.__init__\u001b[0;34m(self, factors)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(factors, Factors):\n\u001b[1;32m 323\u001b[0m factors \u001b[38;5;241m=\u001b[39m factors\u001b[38;5;241m.\u001b[39mfactors\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[0;32m--> 324\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[43mfactors\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mS\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mOne\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 325\u001b[0m factors \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 326\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m factors \u001b[38;5;129;01mis\u001b[39;00m S\u001b[38;5;241m.\u001b[39mZero \u001b[38;5;129;01mor\u001b[39;00m factors \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/numbers.py:1941\u001b[0m, in \u001b[0;36mInteger.__eq__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 1939\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(other, Integer):\n\u001b[1;32m 1940\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mp \u001b[38;5;241m==\u001b[39m other\u001b[38;5;241m.\u001b[39mp)\n\u001b[0;32m-> 1941\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mRational\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__eq__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mother\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/numbers.py:1593\u001b[0m, in \u001b[0;36mRational.__eq__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 1591\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__eq__\u001b[39m(\u001b[38;5;28mself\u001b[39m, other):\n\u001b[1;32m 1592\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1593\u001b[0m other \u001b[38;5;241m=\u001b[39m \u001b[43m_sympify\u001b[49m\u001b[43m(\u001b[49m\u001b[43mother\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1594\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SympifyError:\n\u001b[1;32m 1595\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mNotImplemented\u001b[39m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/sympify.py:514\u001b[0m, in \u001b[0;36m_sympify\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 488\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_sympify\u001b[39m(a):\n\u001b[1;32m 489\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 490\u001b[0m \u001b[38;5;124;03m Short version of :func:`~.sympify` for internal usage for ``__add__`` and\u001b[39;00m\n\u001b[1;32m 491\u001b[0m \u001b[38;5;124;03m ``__eq__`` methods where it is ok to allow some things (like Python\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 512\u001b[0m \n\u001b[1;32m 513\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 514\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msympify\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstrict\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/sympify.py:396\u001b[0m, in \u001b[0;36msympify\u001b[0;34m(a, locals, convert_xor, strict, rational, evaluate)\u001b[0m\n\u001b[1;32m 394\u001b[0m conv \u001b[38;5;241m=\u001b[39m _sympy_converter\u001b[38;5;241m.\u001b[39mget(superclass)\n\u001b[1;32m 395\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conv \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 396\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconv\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 398\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28mtype\u001b[39m(\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 399\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m strict:\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/containers.py:332\u001b[0m, in \u001b[0;36m\u001b[0;34m(d)\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[38;5;21m__hash__\u001b[39m : Callable[[Basic], Any] \u001b[38;5;241m=\u001b[39m Basic\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__hash__\u001b[39m\n\u001b[1;32m 331\u001b[0m \u001b[38;5;66;03m# this handles dict, defaultdict, OrderedDict\u001b[39;00m\n\u001b[0;32m--> 332\u001b[0m _sympy_converter[\u001b[38;5;28mdict\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mlambda\u001b[39;00m d: \u001b[43mDict\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43md\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mOrderedSet\u001b[39;00m(MutableSet):\n\u001b[1;32m 335\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, iterable\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/containers.py:259\u001b[0m, in \u001b[0;36mDict.__new__\u001b[0;34m(cls, *args)\u001b[0m\n\u001b[1;32m 257\u001b[0m items \u001b[38;5;241m=\u001b[39m [Tuple(k, v) \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m args[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mitems()]\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m iterable(args) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mall\u001b[39m(\u001b[38;5;28mlen\u001b[39m(arg) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m args):\n\u001b[0;32m--> 259\u001b[0m items \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mTuple\u001b[49m\u001b[43m(\u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 261\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPass Dict args as Dict((k1, v1), ...) or Dict(\u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124mk1: v1, ...})\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/containers.py:259\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 257\u001b[0m items \u001b[38;5;241m=\u001b[39m [Tuple(k, v) \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m args[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mitems()]\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m iterable(args) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mall\u001b[39m(\u001b[38;5;28mlen\u001b[39m(arg) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m args):\n\u001b[0;32m--> 259\u001b[0m items \u001b[38;5;241m=\u001b[39m [\u001b[43mTuple\u001b[49m\u001b[43m(\u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m args]\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 261\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPass Dict args as Dict((k1, v1), ...) or Dict(\u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124mk1: v1, ...})\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/containers.py:52\u001b[0m, in \u001b[0;36mTuple.__new__\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mTuple\u001b[39;00m(Basic):\n\u001b[1;32m 22\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;124;03m Wrapper around the builtin tuple object.\u001b[39;00m\n\u001b[1;32m 24\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 49\u001b[0m \n\u001b[1;32m 50\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 52\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__new__\u001b[39m(\u001b[38;5;28mcls\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 53\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msympify\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[1;32m 54\u001b[0m args \u001b[38;5;241m=\u001b[39m (sympify(arg) \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m args)\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], "source": [ "def compute_derivatives_h2d(p):\n", " k = 1\n", @@ -89,43 +143,43 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs_helmholtz\n", - "derivs_helmholtz = compute_derivatives_h2d(4)" + "derivs_helmholtz = compute_derivatives_h2d(10)" ] }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "def evaluate_recurrence_lamb(coord_dict, rct_val, recur, p, derivs_list):\n", + "def evaluate_recurrence_lamb(coord_dict, recur, p, derivs_list):\n", " subs_dict = {}\n", - " subs_dict[g(-2)] = 0\n", - " subs_dict[g(-1)] = 0\n", - " subs_dict[g(0)] = derivs_list[0].subs(coord_dict).subs(rct, rct_val)\n", - " subs_dict[g(1)] = derivs_list[1].subs(coord_dict).subs(rct, rct_val) * rct_val\n", - " subs_dict[g(2)] = derivs_list[2].subs(coord_dict).subs(rct, rct_val) * rct_val**2\n", + " subs_dict[s(-2)] = 0\n", + " subs_dict[s(-1)] = 0\n", + " subs_dict[s(0)] = derivs_list[0].subs(coord_dict)\n", + " subs_dict[s(1)] = derivs_list[1].subs(coord_dict)\n", + " subs_dict[s(2)] = derivs_list[2].subs(coord_dict)\n", " var = _make_sympy_vec(\"x\", 2)\n", " for i in range(3, p):\n", - " exp = get_recurrence(recur.subs(rct, rct_val), i)\n", - " f = sp.lambdify([var[0], var[1], g(i-1), g(i-2), g(i-3), g(i-4), g(i-5)], exp)\n", - " subs_dict[g(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[g(i-1)], subs_dict[g(i-2)],\n", - " subs_dict[g(i-3)], subs_dict[g(i-4)], subs_dict[g(i-5)])\n", - " subs_dict.pop(g(-2))\n", - " subs_dict.pop(g(-1))\n", + " exp = get_recurrence(recur, i)\n", + " f = sp.lambdify([var[0], var[1], s(i-1), s(i-2), s(i-3), s(i-4), s(i-5)], exp)\n", + " subs_dict[s(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[s(i-1)], subs_dict[s(i-2)],\n", + " subs_dict[s(i-3)], subs_dict[s(i-4)], subs_dict[s(i-5)])\n", + " subs_dict.pop(s(-2))\n", + " subs_dict.pop(s(-1))\n", " return np.array(list(subs_dict.values()))" ] }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "def evaluate_true(coord_dict, rct_val, p, derivs_list):\n", + "def evaluate_true(coord_dict, p, derivs_list):\n", " retMe = []\n", " for i in range(p):\n", - " exp = (derivs_list[i]*rct_val**i)\n", + " exp = derivs_list[i]\n", " f = sp.lambdify(var, exp)\n", " retMe.append(f(coord_dict[var[0]], coord_dict[var[1]]))\n", " return np.array(retMe)" @@ -133,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -141,8 +195,7 @@ " var = _make_sympy_vec(\"x\", 2)\n", " coord_dict = {var[0]: loc[0], var[1]: loc[1]}\n", "\n", - " rct_val = 1\n", - " exp = evaluate_recurrence_lamb(coord_dict, rct_val, recur, order+1, derivs_list)[order].evalf()\n", + " exp = evaluate_recurrence_lamb(coord_dict, recur, order+1, derivs_list)[order].evalf()\n", " \n", " true = derivs_list[order].subs(coord_dict).evalf()\n", "\n", @@ -151,12 +204,34 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def generate_error_grid(res, order_plot, recur, derivs):\n", + " x_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", + " y_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", + " res=len(x_grid)\n", + " plot_me = np.empty((res, res))\n", + " for i in range(res):\n", + " for j in range(res):\n", + " if abs(x_grid[i]) == abs(y_grid[j]):\n", + " plot_me[i, j] = 1e-16\n", + " else:\n", + " plot_me[i,j] = compute_error_coord(recur, np.array([x_grid[i],y_grid[j]]), order_plot, derivs)\n", + " if plot_me[i,j] == 0:\n", + " plot_me[i, j] = 1e-16\n", + " return x_grid, y_grid, plot_me" + ] + }, + { + "cell_type": "code", + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHJCAYAAACBuOOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABn40lEQVR4nO3de1xUdeL/8ffIZQAVDFEUEcJrEoo6YgmiookNXspL6+4WoWJl0M9V1kof/bzkppSVuSWYrmtku9+NtKT9moVUKiZrCYqbYqUtCiqK4AVBBYTP7w9/zDrOhbmcmTkzvJ+Pxzxqzpw58zl4mZfnqhBCCBARERG5sHaOHgARERGRrTF4iIiIyOUxeIiIiMjlMXiIiIjI5TF4iIiIyOUxeIiIiMjlMXiIiIjI5TF4iIiIyOUxeIiIiMjlMXicUFZWFhQKBQoLC/W+PmnSJNx///1a0+6//34oFAq9jzFjxpi8bAA4ffq05r0rVqzQO8+cOXM089xtzJgxiIiI0Pueqqoqg8s8ceIEZs2ahZCQEHh6eiIgIAAJCQn48ssvdebdu3cvFAoFtm/fbvLP4O5HVlYWZs2a1ep89/6MieSq5c/E3r17HT0Ui5w5cwZz5sxBUFAQlEolevTogalTpzp6WORk3B09ALKfmJgYvPXWWzrTfX19LVpex44dkZWVhWXLlqFdu/+2c21tLbZt2wZfX1/U1NRYPN4Wn332GX7/+9+jV69eWLp0Kfr374+LFy/igw8+QEJCAl588UWsWbOm1eXs2LED9fX1muebN2/GX//6V3z11Vfw8/PTTO/duzdiY2Mxb948vcvJysrCxo0b+RcukR0cO3YMY8aMQa9evfDWW28hODgYFRUVyM3NdfTQyMkweNqQTp064eGHH5ZseTNnzsTmzZvxzTffYPz48Zrp2dnZaGpqwuOPP46//e1vVn3Gr7/+isTERAwcOBB79+5F+/btNa898cQTeP755/Hmm29i6NCh+O1vf2t0WUOGDNF6/tVXXwEAVCoVAgICtF7r0qULevfurbOMgwcP4oMPPsCoUaPw5ptvmr0+N27cgI+Pj9nvs5Wmpibcvn0bSqVS5zW5jdVebt68CS8vL52tk4D1PxNjP29r3bx5E97e3pIvVx97/d4QQiAxMRE9e/bE/v37tX5uM2fOtPnnk2vhLi2yWP/+/REdHY0tW7ZoTd+yZQumTZumtdXEUu+88w5u3LiB9957Tyt2Wrz99tvo1KkTVq1aZfVntebChQuYPn06unTpgk8++QTu7sb/vbBixQooFAocPnwYM2bMwH333aeJKCEEMjMzMXjwYHh7e+O+++7DjBkz8J///EdnOV999RXGjRsHPz8/+Pj4YMCAAUhPT9e8PmbMGK3dki1mzZqltdutZVfkmjVr8NprryEsLAxKpRJ79uyRZKwtuysPHTqE2NhY+Pj4oFevXnj99dfR3NysNe/Vq1fxxz/+Eb169YJSqUTXrl2RkJCAn376STNPQ0MDXnvtNTzwwANQKpXo0qULZs+ejUuXLhn9ubcoLCzElClT4O/vDy8vLwwZMgSffPKJ1jwtu3B3796NOXPmoEuXLvDx8UF9fb1mffLz8xEdHQ0fHx/MmTMHAFBWVoannnoKXbt2hVKpxIABA/D2229rraexn7cht27dwpIlSxAWFgZPT0/06NEDqampuHr1qtZ8999/PyZNmoTPPvsMQ4YMgZeXF1599VUAwE8//YRHH30UPj4+CAgIwLx583D9+nW9n/f1119j3Lhx8PX1hY+PD2JiYvDNN99ozWPs94at5efno7i4GAsWLLBJJFLbwuBxYi3/Wrz3IYTQO78Qwqz5TZGcnIycnBxcuXIFAPDzzz+joKAAycnJRt+nbxxNTU068+Xl5SEwMNDglikfHx/Ex8fj2LFjuHDhgsXr0ZrGxkY88cQTqKqqwvbt2xEYGGjye6dNm4Y+ffpg27ZteP/99wEAzz33HBYsWIBHHnkEOTk5yMzMxPHjxxEdHY2LFy9q3vvXv/4VCQkJaG5uxvvvv4///d//xfz583H27FmL1+Xdd9/Ft99+i7feegtffvklHnjgAUnGCtyJwieffBJPPfUU/vnPf0KtVmPJkiVaW/quX7+OkSNHYuPGjZg9ezb+93//F++//z769euHiooKAEBzczMee+wxvP766/j973+PL774Aq+//jry8vIwZswY3Lx50+g67tmzBzExMbh69Sref/99fP755xg8eDBmzpyJrKwsnfnnzJkDDw8PfPTRR9i+fTs8PDwAABUVFXjqqafw+9//Hrt27UJKSgouXbqE6Oho7N69G3/605/wz3/+E4888ggWLVqEF154wayf992EEHj88cfx1ltvITExEV988QXS0tLw4YcfYuzY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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHJCAYAAACBuOOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABo6ElEQVR4nO3de1xUdeL/8ffIZQAVFFESEfKehIKOWIKoZGKDl/LSurtFqFgZ9HOVtdKHP6+rUlbmlmCaW2a7342spP2ahVQqJmsJiltipS0KKorgBUEFhc/vD39MjjMDczkz58zwfj4e86g5c+bM5+BlXp6rSgghQEREROTC2sg9ACIiIiJ7Y/AQERGRy2PwEBERkctj8BAREZHLY/AQERGRy2PwEBERkctj8BAREZHLY/AQERGRy2PwEBERkctj8DihLVu2QKVSoaCgwOjr48ePx7333qs37d5774VKpTL6GDVqlNnLBoCTJ0/q3rts2TKj88ycOVM3z51GjRqF8PBwo++prKw0ucxjx45h+vTpCAkJgaenJwICApCQkIAvvvjCYN49e/ZApVLh448/NvtncOdjy5YtmD59eovz3f0zJlKqpj8Te/bskXsoVjl16hRmzpyJoKAgqNVqdOvWDZMmTZJ7WORk3OUeADlOTEwMXnvtNYPpvr6+Vi2vffv22LJlC5YsWYI2bX5r55qaGmzbtg2+vr6orq62erxNPv30U/zxj39Ez549sXjxYvTr1w/nz5/He++9h4SEBLzwwgtYs2ZNi8vZvn076urqdM83b96Mv/3tb/jyyy/h5+enm96rVy/ExsZi9uzZRpezZcsWbNy4kX/hEjnAjz/+iFGjRqFnz5547bXXEBwcjPLycuTk5Mg9NHIyDJ5WpEOHDnjwwQclW960adOwefNmfP311xgzZoxuelZWFhoaGvDYY4/h73//u02f8euvvyIxMREDBgzAnj170LZtW91rjz/+OJ577jm8+uqrGDx4MH7/+983u6xBgwbpPf/yyy8BABqNBgEBAXqvde7cGb169TJYxoEDB/Dee+9hxIgRePXVVy1en2vXrsHHx8fi99lLQ0MDbt26BbVabfCa0sbqKNevX4eXl5fB1knA9p9Jcz9vW12/fh3e3t6SL9cYR/3eEEIgMTER3bt3x759+/R+btOmTbP755Nr4S4tslq/fv0QHR2Nd999V2/6u+++i8mTJ+ttNbHWG2+8gWvXruGtt97Si50mr7/+Ojp06IBVq1bZ/FktOXfuHKZMmYLOnTvjo48+grt78/9eWLZsGVQqFQ4dOoSpU6eiY8eOuogSQiAzMxORkZHw9vZGx44dMXXqVPz3v/81WM6XX36J0aNHw8/PDz4+Pujfvz/S09N1r48aNUpvt2ST6dOn6+12a9oVuWbNGqxcuRI9evSAWq3G7t27JRlr0+7KgwcPIjY2Fj4+PujZsydefvllNDY26s17+fJl/PnPf0bPnj2hVqvRpUsXJCQk4KefftLNU19fj5UrV+K+++6DWq1G586dMWPGDFy4cKHZn3uTgoICTJw4Ef7+/vDy8sKgQYPw0Ucf6c3TtAt3165dmDlzJjp37gwfHx/U1dXp1icvLw/R0dHw8fHBzJkzAQClpaV48skn0aVLF6jVavTv3x+vv/663no29/M25caNG1i4cCF69OgBT09PdOvWDampqbh8+bLefPfeey/Gjx+PTz/9FIMGDYKXlxeWL18OAPjpp5/wyCOPwMfHBwEBAZg9ezauXr1q9PO++uorjB49Gr6+vvDx8UFMTAy+/vprvXma+71hb3l5eSgqKsLcuXPtEonUujB4nFjTvxbvfgghjM4vhLBofnMkJycjOzsbly5dAgD8/PPPyM/PR3JycrPvMzaOhoYGg/lyc3MRGBhocsuUj48P4uPj8eOPP+LcuXNWr0dLbt68iccffxyVlZX4+OOPERgYaPZ7J0+ejN69e2Pbtm14++23AQDPPvss5s6di4cffhjZ2dnIzMzE0aNHER0djfPnz+ve+7e//Q0JCQlobGzE22+/jf/93//FnDlzcPr0aavX5c0338Q333yD1157DV988QXuu+8+ScYK3I7CJ554Ak8++ST+9a9/QavVYuHChXpb+q5evYrhw4dj48aNmDFjBv73f/8Xb7/9Nvr27Yvy8nIAQGNjIx599FG8/PLL+OMf/4jPP/8cL7/8MnJzczFq1Chcv3692XXcvXs3YmJicPnyZbz99tv47LPPEBkZiWnTpmHLli0G88+cORMeHh744IMP8PHHH8PDwwMAUF5ejieffBJ//OMfsXPnTqSkpODChQuIjo7Grl278Je//AX/+te/8PDDD2P+/Pl4/vnnLfp530kIgcceewyvvfYaEhMT8fnnnyMtLQ3vv/8+HnroIb3dsQBw6NAhvPDCC5gzZw6+/PJLTJkyBefPn8fIkSPx448/IjMzEx988AFqamqMjuvvf/874uPj4evri/fffx8fffQR/P39MXbsWIPoAYz/3jDF2J9va/7uycvLA3B793lCQgK8vLzQrl07jB8/Xi+OicwiyOm89957AkCzj9DQUL33hIaGmpz3L3/5i8GyDx48aPLzS0pKBADx6quviqtXr4p27dqJ9evXCyGEeOGFF0SPHj1EY2OjSE1NFXf/Fhs5cmSLY1+6dKlufi8vL/Hggw82+/N46aWXBADx3XffCSGE2L17twAgtm3b1uz7li5dKgCICxcuNDufEEKkpKQIAOLtt99ucd67l79kyRK96f/+978FAPH666/rTS8rKxPe3t7ixRdfFEIIcfXqVeHr6yuGDx8uGhsbTX7OyJEjxciRIw2mJyUl6f0+aPp169Wrl6ivr5d0rE3juPPXoUlYWJgYO3as7vmKFSsEAJGbm2tynf75z38KAOKTTz7Rm37w4EEBQGRmZpp8rxBC3HfffWLQoEHi5s2betPHjx8vunbtKhoaGoQQv/1+f+qppwyW0bQ+X3/9td70BQsWGF3P5557TqhUKvHzzz8LIZr/eRvz5ZdfCgBizZo1etOzsrIEALFp0ybdtNDQUOHm5qb7rCYvvfSSUKlUoqioSG/6mDFjBACxe/duIYQQtbW1wt/fX0yYMEFvvoaGBhERESGGDh2qm2bq94YpTettzqNpPKY8++yzAoDw9fUVycnJ4quvvhIffPCBCA0NFQEBAeLs2bNmjYlICCF4DI8T27p1K/r3728wfd68eSgrKzOYPnz4cLzxxhsG07t162b1GNq1a4fHH38c7777Lp599lls3boVqampRo9/aNKrVy98+OGHBtOvXLmChx9+2OIxiP//r8TmPtMWW7ZsQWZmJmbOnIlnn33W4vdPmTJF7/mOHTugUqnw5JNP4tatW7rp99xzDyIiInRn0uTn56O6uhopKSmSrtvEiRN1WzCkGuud04cOHao3beDAgSgqKtI9/+KLL9C3b99mf6137NiBDh06YMKECXqfGxkZiXvuuQd79uzBc889Z/S9J06cwE8//aQ7QP/O9yckJGDHjh34+eef9f7s3L3eTTp27IiHHnpIb9o333yDsLAwg/WcPn06NmzYgG+++QZ9+/bVTW/u5333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", "text/plain": [ "
" ] @@ -166,20 +241,8 @@ } ], "source": [ - "res = 5\n", - "x_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", - "y_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", - "res=len(x_grid)\n", "order_plot = 6\n", - "plot_me = np.empty((res, res))\n", - "for i in range(res):\n", - " for j in range(res):\n", - " if abs(x_grid[i]) == abs(y_grid[j]):\n", - " plot_me[i, j] = 1e-16\n", - " else:\n", - " plot_me[i,j] = compute_error_coord(r_new_helmholtz, np.array([x_grid[i],y_grid[j]]), order_plot, derivs_helmholtz)\n", - " if plot_me[i,j] == 0:\n", - " plot_me[i, j] = 1e-16\n", + "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace)\n", " \n", "fig, ax = plt.subplots()\n", "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", @@ -193,8 +256,41 @@ ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 12, "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "order_plot = 7\n", + "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace)\n", + " \n", + "fig, ax = plt.subplots()\n", + "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cbar = fig.colorbar(cs)\n", + "plt.gca().set_xscale('log')\n", + "plt.gca().set_yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n", + "plt.title(\"HELMHOLTZ recurrence error order = \"+str(order_plot))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [] } ], From 576993d2faabf55a0fbd844d335548cd03dc8ee6 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 21 Dec 2024 12:31:51 -0800 Subject: [PATCH 118/143] Make evaluate_recurrence_lamb take n_initial, n_order --- test/modified_recur.ipynb | 142 +++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 72 deletions(-) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb index f9634c77..34a2ba3d 100644 --- a/test/modified_recur.ipynb +++ b/test/modified_recur.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -43,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -73,64 +73,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 6, "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[13], line 12\u001b[0m\n\u001b[1;32m 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m [sp\u001b[38;5;241m.\u001b[39mdiff(g_x_y,\n\u001b[1;32m 9\u001b[0m var_t[\u001b[38;5;241m0\u001b[39m], i)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(p)]\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n\u001b[0;32m---> 12\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m \u001b[43mcompute_derivatives_h2d\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m)\u001b[49m\n", - "Cell \u001b[0;32mIn[13], line 8\u001b[0m, in \u001b[0;36mcompute_derivatives_h2d\u001b[0;34m(p)\u001b[0m\n\u001b[1;32m 5\u001b[0m abs_dist \u001b[38;5;241m=\u001b[39m sp\u001b[38;5;241m.\u001b[39msqrt((var[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m+\u001b[39m\n\u001b[1;32m 6\u001b[0m (var[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 7\u001b[0m g_x_y \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39mj\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m4\u001b[39m) \u001b[38;5;241m*\u001b[39m hankel1(\u001b[38;5;241m0\u001b[39m, k \u001b[38;5;241m*\u001b[39m abs_dist)\n\u001b[0;32m----> 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_x_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n", - "Cell \u001b[0;32mIn[13], line 8\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 5\u001b[0m abs_dist \u001b[38;5;241m=\u001b[39m sp\u001b[38;5;241m.\u001b[39msqrt((var[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m+\u001b[39m\n\u001b[1;32m 6\u001b[0m (var[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 7\u001b[0m g_x_y \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39mj\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m4\u001b[39m) \u001b[38;5;241m*\u001b[39m hankel1(\u001b[38;5;241m0\u001b[39m, k \u001b[38;5;241m*\u001b[39m abs_dist)\n\u001b[0;32m----> 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m [\u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_x_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(p)]\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:2481\u001b[0m, in \u001b[0;36mdiff\u001b[0;34m(f, *symbols, **kwargs)\u001b[0m\n\u001b[1;32m 2417\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2418\u001b[0m \u001b[38;5;124;03mDifferentiate f with respect to symbols.\u001b[39;00m\n\u001b[1;32m 2419\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2478\u001b[0m \n\u001b[1;32m 2479\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2480\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(f, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdiff\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m-> 2481\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2482\u001b[0m kwargs\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 2483\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _derivative_dispatch(f, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/expr.py:3575\u001b[0m, in \u001b[0;36mExpr.diff\u001b[0;34m(self, *symbols, **assumptions)\u001b[0m\n\u001b[1;32m 3573\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdiff\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39massumptions):\n\u001b[1;32m 3574\u001b[0m assumptions\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m-> 3575\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_derivative_dispatch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43massumptions\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1908\u001b[0m, in \u001b[0;36m_derivative_dispatch\u001b[0;34m(expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1906\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtensor\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray_derivatives\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ArrayDerivative\n\u001b[1;32m 1907\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ArrayDerivative(expr, \u001b[38;5;241m*\u001b[39mvariables, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1908\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDerivative\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mvariables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1436\u001b[0m, in \u001b[0;36mDerivative.__new__\u001b[0;34m(cls, expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1429\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m old_v\u001b[38;5;241m.\u001b[39mis_scalar \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\n\u001b[1;32m 1430\u001b[0m old_v, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_eval_derivative\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 1431\u001b[0m \u001b[38;5;66;03m# special hack providing evaluation for classes\u001b[39;00m\n\u001b[1;32m 1432\u001b[0m \u001b[38;5;66;03m# that have defined is_scalar=True but have no\u001b[39;00m\n\u001b[1;32m 1433\u001b[0m \u001b[38;5;66;03m# _eval_derivative defined\u001b[39;00m\n\u001b[1;32m 1434\u001b[0m expr \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m=\u001b[39m old_v\u001b[38;5;241m.\u001b[39mdiff(old_v)\n\u001b[0;32m-> 1436\u001b[0m obj \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dispatch_eval_derivative_n_times\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcount\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1437\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m obj \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mis_zero:\n\u001b[1;32m 1438\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1897\u001b[0m, in \u001b[0;36mDerivative._dispatch_eval_derivative_n_times\u001b[0;34m(cls, expr, v, count)\u001b[0m\n\u001b[1;32m 1891\u001b[0m \u001b[38;5;129m@classmethod\u001b[39m\n\u001b[1;32m 1892\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_dispatch_eval_derivative_n_times\u001b[39m(\u001b[38;5;28mcls\u001b[39m, expr, v, count):\n\u001b[1;32m 1893\u001b[0m \u001b[38;5;66;03m# Evaluate the derivative `n` times. If\u001b[39;00m\n\u001b[1;32m 1894\u001b[0m \u001b[38;5;66;03m# `_eval_derivative_n_times` is not overridden by the current\u001b[39;00m\n\u001b[1;32m 1895\u001b[0m \u001b[38;5;66;03m# object, the default in `Basic` will call a loop over\u001b[39;00m\n\u001b[1;32m 1896\u001b[0m \u001b[38;5;66;03m# `_eval_derivative`:\u001b[39;00m\n\u001b[0;32m-> 1897\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mexpr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_eval_derivative_n_times\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcount\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/cache.py:72\u001b[0m, in \u001b[0;36m__cacheit..func_wrapper..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(func)\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 71\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 72\u001b[0m retval \u001b[38;5;241m=\u001b[39m \u001b[43mcfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m e\u001b[38;5;241m.\u001b[39margs \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m e\u001b[38;5;241m.\u001b[39margs[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124munhashable type:\u001b[39m\u001b[38;5;124m'\u001b[39m):\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/mul.py:987\u001b[0m, in \u001b[0;36mMul._eval_derivative_n_times\u001b[0;34m(self, s, n)\u001b[0m\n\u001b[1;32m 985\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mntheory\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmultinomial\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m multinomial_coefficients_iterator\n\u001b[1;32m 986\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m kvals, c \u001b[38;5;129;01min\u001b[39;00m multinomial_coefficients_iterator(m, n):\n\u001b[0;32m--> 987\u001b[0m p \u001b[38;5;241m=\u001b[39m Mul(\u001b[38;5;241m*\u001b[39m\u001b[43m[\u001b[49m\u001b[43marg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43marg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mzip\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkvals\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 988\u001b[0m terms\u001b[38;5;241m.\u001b[39mappend(c \u001b[38;5;241m*\u001b[39m p)\n\u001b[1;32m 989\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Add(\u001b[38;5;241m*\u001b[39mterms)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/mul.py:987\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 985\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mntheory\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmultinomial\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m multinomial_coefficients_iterator\n\u001b[1;32m 986\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m kvals, c \u001b[38;5;129;01min\u001b[39;00m multinomial_coefficients_iterator(m, n):\n\u001b[0;32m--> 987\u001b[0m p \u001b[38;5;241m=\u001b[39m Mul(\u001b[38;5;241m*\u001b[39m[\u001b[43marg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m k, arg \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(kvals, args)])\n\u001b[1;32m 988\u001b[0m terms\u001b[38;5;241m.\u001b[39mappend(c \u001b[38;5;241m*\u001b[39m p)\n\u001b[1;32m 989\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Add(\u001b[38;5;241m*\u001b[39mterms)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/expr.py:3575\u001b[0m, in \u001b[0;36mExpr.diff\u001b[0;34m(self, *symbols, **assumptions)\u001b[0m\n\u001b[1;32m 3573\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdiff\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39massumptions):\n\u001b[1;32m 3574\u001b[0m assumptions\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m-> 3575\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_derivative_dispatch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43massumptions\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1908\u001b[0m, in \u001b[0;36m_derivative_dispatch\u001b[0;34m(expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1906\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtensor\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray_derivatives\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ArrayDerivative\n\u001b[1;32m 1907\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ArrayDerivative(expr, \u001b[38;5;241m*\u001b[39mvariables, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1908\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDerivative\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mvariables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1474\u001b[0m, in \u001b[0;36mDerivative.__new__\u001b[0;34m(cls, expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1472\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexprtools\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m factor_terms\n\u001b[1;32m 1473\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msimplify\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msimplify\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m signsimp\n\u001b[0;32m-> 1474\u001b[0m expr \u001b[38;5;241m=\u001b[39m \u001b[43mfactor_terms\u001b[49m\u001b[43m(\u001b[49m\u001b[43msignsimp\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1475\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1267\u001b[0m, in \u001b[0;36mfactor_terms\u001b[0;34m(expr, radical, clear, fraction, sign)\u001b[0m\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n\u001b[1;32m 1266\u001b[0m expr \u001b[38;5;241m=\u001b[39m sympify(expr)\n\u001b[0;32m-> 1267\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mAdd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmake_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m [\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m Add\u001b[38;5;241m.\u001b[39mmake_args(p)]\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m[\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs])\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mAdd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmake_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m [\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m Add\u001b[38;5;241m.\u001b[39mmake_args(p)]\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m[\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs])\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mAdd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmake_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1242\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1240\u001b[0m cont, p \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mas_content_primitive(radical\u001b[38;5;241m=\u001b[39mradical, clear\u001b[38;5;241m=\u001b[39mclear)\n\u001b[1;32m 1241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mis_Add:\n\u001b[0;32m-> 1242\u001b[0m list_args \u001b[38;5;241m=\u001b[39m [\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m Add\u001b[38;5;241m.\u001b[39mmake_args(p)]\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;66;03m# get a common negative (if there) which gcd_terms does not remove\u001b[39;00m\n\u001b[1;32m 1244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28many\u001b[39m(a\u001b[38;5;241m.\u001b[39mas_coeff_Mul()[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mextract_multiplicatively(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1245\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m list_args):\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1263\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m gcd_terms(p,\n\u001b[1;32m 1258\u001b[0m isprimitive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 1259\u001b[0m clear\u001b[38;5;241m=\u001b[39mclear,\n\u001b[1;32m 1260\u001b[0m fraction\u001b[38;5;241m=\u001b[39mfraction)\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[0;32m-> 1263\u001b[0m \u001b[38;5;241m*\u001b[39m[\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs])\n\u001b[1;32m 1264\u001b[0m rv \u001b[38;5;241m=\u001b[39m _keep_coeff(cont, p, clear\u001b[38;5;241m=\u001b[39mclear, sign\u001b[38;5;241m=\u001b[39msign)\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1230\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1227\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mis_Pow \u001b[38;5;129;01mor\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mis_Function \u001b[38;5;129;01mor\u001b[39;00m \\\n\u001b[1;32m 1228\u001b[0m is_iterable \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(expr, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124margs_cnc\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 1229\u001b[0m args \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39margs\n\u001b[0;32m-> 1230\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1231\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m newargs \u001b[38;5;241m==\u001b[39m args:\n\u001b[1;32m 1232\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1230\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1227\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mis_Pow \u001b[38;5;129;01mor\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mis_Function \u001b[38;5;129;01mor\u001b[39;00m \\\n\u001b[1;32m 1228\u001b[0m is_iterable \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(expr, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124margs_cnc\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 1229\u001b[0m args \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39margs\n\u001b[0;32m-> 1230\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m 1231\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m newargs \u001b[38;5;241m==\u001b[39m args:\n\u001b[1;32m 1232\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1257\u001b[0m, in \u001b[0;36mfactor_terms..do\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1255\u001b[0m \u001b[38;5;66;03m# rebuild p not worrying about the order which gcd_terms will fix\u001b[39;00m\n\u001b[1;32m 1256\u001b[0m p \u001b[38;5;241m=\u001b[39m Add\u001b[38;5;241m.\u001b[39m_from_args(list_args)\n\u001b[0;32m-> 1257\u001b[0m p \u001b[38;5;241m=\u001b[39m \u001b[43mgcd_terms\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1258\u001b[0m \u001b[43m \u001b[49m\u001b[43misprimitive\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 1259\u001b[0m \u001b[43m \u001b[49m\u001b[43mclear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mclear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1260\u001b[0m \u001b[43m \u001b[49m\u001b[43mfraction\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfraction\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mxreplace(special)\n\u001b[1;32m 1261\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs:\n\u001b[1;32m 1262\u001b[0m p \u001b[38;5;241m=\u001b[39m p\u001b[38;5;241m.\u001b[39mfunc(\n\u001b[1;32m 1263\u001b[0m \u001b[38;5;241m*\u001b[39m[do(a) \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39margs])\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:1068\u001b[0m, in \u001b[0;36mgcd_terms\u001b[0;34m(terms, isprimitive, clear, fraction)\u001b[0m\n\u001b[1;32m 1066\u001b[0m terms \u001b[38;5;241m=\u001b[39m sympify(terms)\n\u001b[1;32m 1067\u001b[0m terms, reps \u001b[38;5;241m=\u001b[39m mask(terms)\n\u001b[0;32m-> 1068\u001b[0m cont, numer, denom \u001b[38;5;241m=\u001b[39m \u001b[43m_gcd_terms\u001b[49m\u001b[43m(\u001b[49m\u001b[43mterms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43misprimitive\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfraction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1069\u001b[0m numer \u001b[38;5;241m=\u001b[39m numer\u001b[38;5;241m.\u001b[39mxreplace(reps)\n\u001b[1;32m 1070\u001b[0m coeff, factors \u001b[38;5;241m=\u001b[39m cont\u001b[38;5;241m.\u001b[39mas_coeff_Mul()\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:953\u001b[0m, in \u001b[0;36m_gcd_terms\u001b[0;34m(terms, isprimitive, fraction)\u001b[0m\n\u001b[1;32m 950\u001b[0m cont \u001b[38;5;241m=\u001b[39m cont\u001b[38;5;241m.\u001b[39mgcd(term)\n\u001b[1;32m 952\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, term \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(terms):\n\u001b[0;32m--> 953\u001b[0m terms[i] \u001b[38;5;241m=\u001b[39m \u001b[43mterm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mquo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcont\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 955\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fraction:\n\u001b[1;32m 956\u001b[0m denom \u001b[38;5;241m=\u001b[39m terms[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mdenom\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:868\u001b[0m, in \u001b[0;36mTerm.quo\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 867\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mquo\u001b[39m(\u001b[38;5;28mself\u001b[39m, other): \u001b[38;5;66;03m# Term\u001b[39;00m\n\u001b[0;32m--> 868\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmul\u001b[49m\u001b[43m(\u001b[49m\u001b[43mother\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minv\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:857\u001b[0m, in \u001b[0;36mTerm.mul\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 855\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmul\u001b[39m(\u001b[38;5;28mself\u001b[39m, other): \u001b[38;5;66;03m# Term\u001b[39;00m\n\u001b[1;32m 856\u001b[0m coeff \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcoeff\u001b[38;5;241m*\u001b[39mother\u001b[38;5;241m.\u001b[39mcoeff\n\u001b[0;32m--> 857\u001b[0m numer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnumer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmul\u001b[49m\u001b[43m(\u001b[49m\u001b[43mother\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnumer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 858\u001b[0m denom \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdenom\u001b[38;5;241m.\u001b[39mmul(other\u001b[38;5;241m.\u001b[39mdenom)\n\u001b[1;32m 860\u001b[0m numer, denom \u001b[38;5;241m=\u001b[39m numer\u001b[38;5;241m.\u001b[39mnormal(denom)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:484\u001b[0m, in \u001b[0;36mFactors.mul\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 480\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 482\u001b[0m factors[factor] \u001b[38;5;241m=\u001b[39m exp\n\u001b[0;32m--> 484\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mFactors\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfactors\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/exprtools.py:324\u001b[0m, in \u001b[0;36mFactors.__init__\u001b[0;34m(self, factors)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(factors, Factors):\n\u001b[1;32m 323\u001b[0m factors \u001b[38;5;241m=\u001b[39m factors\u001b[38;5;241m.\u001b[39mfactors\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[0;32m--> 324\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[43mfactors\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mS\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mOne\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 325\u001b[0m factors \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 326\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m factors \u001b[38;5;129;01mis\u001b[39;00m S\u001b[38;5;241m.\u001b[39mZero \u001b[38;5;129;01mor\u001b[39;00m factors \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/numbers.py:1941\u001b[0m, in \u001b[0;36mInteger.__eq__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 1939\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(other, Integer):\n\u001b[1;32m 1940\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mp \u001b[38;5;241m==\u001b[39m other\u001b[38;5;241m.\u001b[39mp)\n\u001b[0;32m-> 1941\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mRational\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__eq__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mother\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/numbers.py:1593\u001b[0m, in \u001b[0;36mRational.__eq__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 1591\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__eq__\u001b[39m(\u001b[38;5;28mself\u001b[39m, other):\n\u001b[1;32m 1592\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1593\u001b[0m other \u001b[38;5;241m=\u001b[39m \u001b[43m_sympify\u001b[49m\u001b[43m(\u001b[49m\u001b[43mother\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1594\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SympifyError:\n\u001b[1;32m 1595\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mNotImplemented\u001b[39m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/sympify.py:514\u001b[0m, in \u001b[0;36m_sympify\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 488\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_sympify\u001b[39m(a):\n\u001b[1;32m 489\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 490\u001b[0m \u001b[38;5;124;03m Short version of :func:`~.sympify` for internal usage for ``__add__`` and\u001b[39;00m\n\u001b[1;32m 491\u001b[0m \u001b[38;5;124;03m ``__eq__`` methods where it is ok to allow some things (like Python\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 512\u001b[0m \n\u001b[1;32m 513\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 514\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msympify\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstrict\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/sympify.py:396\u001b[0m, in \u001b[0;36msympify\u001b[0;34m(a, locals, convert_xor, strict, rational, evaluate)\u001b[0m\n\u001b[1;32m 394\u001b[0m conv \u001b[38;5;241m=\u001b[39m _sympy_converter\u001b[38;5;241m.\u001b[39mget(superclass)\n\u001b[1;32m 395\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conv \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 396\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconv\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 398\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28mtype\u001b[39m(\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 399\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m strict:\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/containers.py:332\u001b[0m, in \u001b[0;36m\u001b[0;34m(d)\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[38;5;21m__hash__\u001b[39m : Callable[[Basic], Any] \u001b[38;5;241m=\u001b[39m Basic\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__hash__\u001b[39m\n\u001b[1;32m 331\u001b[0m \u001b[38;5;66;03m# this handles dict, defaultdict, OrderedDict\u001b[39;00m\n\u001b[0;32m--> 332\u001b[0m _sympy_converter[\u001b[38;5;28mdict\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mlambda\u001b[39;00m d: \u001b[43mDict\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43md\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mOrderedSet\u001b[39;00m(MutableSet):\n\u001b[1;32m 335\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, iterable\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/containers.py:259\u001b[0m, in \u001b[0;36mDict.__new__\u001b[0;34m(cls, *args)\u001b[0m\n\u001b[1;32m 257\u001b[0m items \u001b[38;5;241m=\u001b[39m [Tuple(k, v) \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m args[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mitems()]\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m iterable(args) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mall\u001b[39m(\u001b[38;5;28mlen\u001b[39m(arg) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m args):\n\u001b[0;32m--> 259\u001b[0m items \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mTuple\u001b[49m\u001b[43m(\u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 261\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPass Dict args as Dict((k1, v1), ...) or Dict(\u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124mk1: v1, ...})\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/containers.py:259\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 257\u001b[0m items \u001b[38;5;241m=\u001b[39m [Tuple(k, v) \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m args[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mitems()]\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m iterable(args) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mall\u001b[39m(\u001b[38;5;28mlen\u001b[39m(arg) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m args):\n\u001b[0;32m--> 259\u001b[0m items \u001b[38;5;241m=\u001b[39m [\u001b[43mTuple\u001b[49m\u001b[43m(\u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m args]\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 261\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPass Dict args as Dict((k1, v1), ...) or Dict(\u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124mk1: v1, ...})\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/containers.py:52\u001b[0m, in \u001b[0;36mTuple.__new__\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mTuple\u001b[39;00m(Basic):\n\u001b[1;32m 22\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;124;03m Wrapper around the builtin tuple object.\u001b[39;00m\n\u001b[1;32m 24\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 49\u001b[0m \n\u001b[1;32m 50\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 52\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__new__\u001b[39m(\u001b[38;5;28mcls\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 53\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msympify\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[1;32m 54\u001b[0m args \u001b[38;5;241m=\u001b[39m (sympify(arg) \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m args)\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], + "outputs": [], "source": [ "def compute_derivatives_h2d(p):\n", " k = 1\n", @@ -143,22 +88,21 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs_helmholtz\n", - "derivs_helmholtz = compute_derivatives_h2d(10)" + "derivs_helmholtz = compute_derivatives_h2d(8)" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "def evaluate_recurrence_lamb(coord_dict, recur, p, derivs_list):\n", + "def evaluate_recurrence_lamb(coord_dict, recur, p, derivs_list, n_initial, n_order):\n", " subs_dict = {}\n", " subs_dict[s(-2)] = 0\n", " subs_dict[s(-1)] = 0\n", - " subs_dict[s(0)] = derivs_list[0].subs(coord_dict)\n", - " subs_dict[s(1)] = derivs_list[1].subs(coord_dict)\n", - " subs_dict[s(2)] = derivs_list[2].subs(coord_dict)\n", + " for i in range(n_initial):\n", + " subs_dict[s(i)] = derivs_list[i].subs(coord_dict)\n", " var = _make_sympy_vec(\"x\", 2)\n", " for i in range(3, p):\n", " exp = get_recurrence(recur, i)\n", @@ -172,7 +116,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -187,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -204,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -226,7 +170,38 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3S4hIcHksp944gk88cQTsozzdvfeey+2bt2KP/zhD4iKikJqaqr+woObNm3Cv/71LyxYsADTpk0zeq+pdQWAESNGtLjf/89//jP27duHP/zhD/D19TW7LGuuDRITE4Onn34aM2bMQH5+PoYPH462bduirKwM33zzDfr164dnn30W7dq1w+uvv47Zs2fjoYcewlNPPYWgoCCcPHkSR48exdtvvw0ASExMxPr16/HEE0/gqaeeQmVlJVavXm1z7EgZqxTz5s1DZmYmJk6ciIULF2LIkCG4fv069u3bh3HjxiEuLg6///3v8cEHHyAhIQF//OMfMWTIEHh4eOD06dPYs2cPJk6c2OyFH9evXw+dTocxY8Zg+vTp6NatGy5evIjjx4/j8OHD2LZtm9U/k/nz52PLli0YO3Ysli9fjrCwMHz++efIyMjAs88+a3RcjaUefvhhjBkzBi+88AKqqqoQExOD//znP1iyZAkGDhyIxMTEFpcxb948bNq0CWPHjsXLL7+MoKAgfPDBBwan+wO3jr176623kJSUhIsXL2Lq1Kno3LkzLly4gKNHj+LChQtW/yPC09NTtl3nr776KoqKijB69GiEhISgvLwc7777Lnbv3o2lS5cabU0japaih0yTVVo6k2rs2LGSztLq1q2b0bLNPYqLiw3O0mqOubO07r//fpPzX7hwwegsrSbHjh0TSUlJIiQkRHh4eIiAgADxyCOPiM8//9xo3qaztMw9ms4Mae4sreZ+Xrc/mtPSWWCbNm0SDzzwgGjbtq3w8fER9957r3jyySdFfn6+wXy7du0SI0aMEG3bthW+vr4iPDxcvPLKKwbzvP/++6Jv377C29tbhIeHi8zMTLNnaZn6dZNjrOZ+be8chxBCXLp0Sfzxj38UoaGhwsPDQ3Tu3FmMHTtW/Pjjj/p56uvrxWuvvSYiIyOFt7e3aNeunbjvvvvEM888I06cOGFynLc7evSo+N3vfic6d+4sPDw8RJcuXcSoUaMMzrRr7s9Sc79Xf/31V/H444+Ljh07Cg8PD9GnTx/x6quv6s/+EqL5n7c5169fFy+88IIICwsTHh4eomvXruLZZ58Vly5dMpgvLCxMjB071uQyioqKxMMPPyy8vb1FQECAmDVrlvj0009NnhW1b98+MXbsWBEQECA8PDxEt27dxNixYw3OcJRyNqPcPvvsMzFs2DDRqVMn4e7uLtq3by9iY2PFP//5T4ePhZyfRggbLsJCRERE5AR4xBcRERG5vFYRPDt37tQfyLhx40alh0NERNRqKfWd7PK7tG7evInw8HDs2bMHfn5+GDRoEL799lsEBAQoPTQiIqJWRcnvZJffwvPdd9/h/vvvR7du3dC+fXskJCQgOztb6WERERG1Okp+J6s+eHJzczF+/HgEBwdDo9EgKyvLaJ6MjAz06NED3t7e0Gq12L9/v/61s2fPGtw6ISQkBGfOnHHE0ImIiFyKM38nqz54ampqEBkZqb/myJ0yMzMxb948vPjiizhy5AhiY2Oh0+lQUlICACbvxmuvey4RERG5Mmf+Tlb9hQd1Ol2z90pZs2YNZs2ahdmzZwMA1q5di+zsbKxbtw5paWno1q2bQT2ePn262Su31tbWora2Vv+8sbERFy9eRMeOHRlKRETULCEErl69iuDgYLvd+uLGjRuoq6uTZVlCCKPvNi8vL7O3jXH0d7KslLsEkHQAxI4dO/TPa2trhZubm/jkk08M5ps7d64YPny4EOLWxct69uwpTp8+LaqqqkTPnj1FRUWF2c9ousgWH3zwwQcffFj7KC0ttcv34PXr10WXoC6yjbNdu3ZG00xd/NUUwP7fyXJS/Rae5lRUVKChocHoJndBQUH6m+W5u7vj9ddfR1xcHBobG/H888+bvKNzk0WLFiE1NVX//MqVKwgNDcXJYyebvWEh2Vflles4U3lN6WG0er9cvgEAKLpUo/BI5HPoQrXSQ7BJ0dmrSg+h1aq+YHzsiai/gcaPFtnt+6Kurg7nzp/DiWMn4NfettvHVF2tQq/7e6G0tNTgVjTW3ijZHt/JcnLq4Gly5+Y4cccmugkTJmDChAkWLatpU156ejrS09PR0NAA4NbdmeW4NxFJU3H5OgDgcm0d2rZjcCrpxKXr8GnbDj9crIGXbzulh2PSwXLpX/7uPm1bnkmlvj9dBY2Xr9LDaHWqy08DADSePmbnsfchEH7t/WT7TvLzk29ZgLzfyXJy6uAJDAyEm5ubvhyblJeXGxWmVCkpKUhJSUFVVRX8/f1tWhZJ1xQ6AFBa4TpbE5zRiUu//Vr8cNFxvxbWxEtr8f3pKqWH0Co1hQ6ZZs/vZDk4dfB4enpCq9UiJyfH4M7JOTk5mDhxok3LvnMLDznG7aEDMHaUdHvoALbFDuNFPowdx2PoWMae38lyUH3wVFdX4+TJk/rnxcXFKCwsREBAAEJDQ5GamorExEQMHjwYQ4cOxYYNG1BSUoI5c+bY9LncwuNYDB11sTR2GDKOxdhxHEaOaUp9J8tB9cGTn5+PuLg4/fOmA4qTkpKwefNmTJs2DZWVlVi+fDnKysoQERGBXbt2ISwsTKkhk0SMHfW4M3QAx+7GIvMYO47B0GmeM38nu/y9tKx1+y6tn3/+GedLzvOgZZndGToAY0cppkIHaDl2uIXHMRg79idX6Ii662j4YD6uXLlil++Mpr0OcnwnVVVVISg0yG5jVRvVb+FRCndp2Y+p0AEYO0rhVh31YujYH7fotB4MHnIYc6EDMHaUYO1WHXIMxo79MHJaJwaPGTxLS16MHfUwFzoAY0ctGDv2wdBp3VR/81ClpKSkoKioCIcOHVJ6KE6t4vJ1xo6KyBk7PH7HPhg78qsuP83YIW7hIftoLnKaMHYcp7nQAbhlRy0YO/Ji5NDtGDxmcJeWdSwJHYCx4ygthQ7A2FEDho58GDlkDndpmcFdWtK0tOvqdowdx2DsOAfGjjy424pawi08ZDNLQwdg7DiCJaEDMHbUgLFjO0YOWYrBQ1aTEjoAY8feLA0dgLGjBowd2zB0SCoGD0nG0FEfxo5zYexYh5FDtmDwmMGDlo1JDR2AsWNvUkIHYOwojaFjHYYOyYHBYwZvLWGIsaMuUkMHYOwojbEjHUOH5MTgoWZZEzoAY8eeuFXH+TB2pGHokD0weMgka0MHYOzYC7fqOCfGjmUYOWRvDB4yYEvoAIwde7AmdADGjtIYOpZh6JCjMHgIgO2hAzB27IGx45wYOy1j6JCjMXjMaE1naTF21Mfa0AEYO0pj7DSPoUNKYfCY0RrO0pIjdADGjpxsCR2AsaM0xo55DB1SGoOnFZIrdADGjpwYO86NsWOMkUNqwuBpReQMHYCxIxdbQwdg7CiJoWOMoUNqxOBpBeQOHYCxIwc5Qgdg7CiJsWOIoUNqxuBxcdyqo06MHefH2PkNQ4ecAYPHRXGrjjrJFToAY0dJjB1GDjkfBo+LsUfoAIwdW8kZOgBjR0mtPXYYOuSsGDxmONt1eOwVOgBjx1bcquMaGDoMHXJuDB4znOk6PIwddeJWHdfRmmOHoUOugsHjxOwZOgBjx1pyhw7A2FFSa4wdRg65ojZKD4Ckq7h8nbGjUowd19LaYqe6/DRjhxRVWlqKkSNHIjw8HP3798e2bdtkWza38DgRe0dOE8aOdPYIHYCxo6TWFDuMHFILd3d3rF27FgMGDEB5eTkGDRqEhIQEtG3b1vZlyzA+sjNHhQ7A2JHKXqEDMHaUwtAhUk7Xrl3RtWtXAEDnzp0REBCAixcvyhI83KWlcowd9WLsuJ7WEDtNu60YO2SN3NxcjB8/HsHBwdBoNMjKyjKaJyMjAz169IC3tze0Wi32799v1Wfl5+ejsbER3bt3t3HUt3ALj0o5MnQAxo4U9gwdgLGjFFePHQYOyaGmpgaRkZGYMWMGpkyZYvR6ZmYm5s2bh4yMDMTExGD9+vXQ6XQoKipCaGgoAECr1aK2ttbovbt370ZwcDAAoLKyEk8++SQ2btwo29hbRfBMmjQJe/fuxejRo7F9+3alh9MsR4cOwNiRgrHjmlw5dhg61JKqKsPf/15eXvDy8jI5r06ng06nM7usNWvWYNasWZg9ezYAYO3atcjOzsa6deuQlpYGACgoKGh2PLW1tZg0aRIWLVqE6OhoKavSrFYRPHPnzsXMmTPx/vvvKz0Usxg66mbv0AEYO0pg6JCzqrxyHXWNHjYt4+rVW3+v3bnLaMmSJVi6dKnk5dXV1aGgoAALFy40mB4fH4+8vDyLliGEwPTp0zFq1CgkJiZKHkNzWkXwxMXFYe/evUoPwyzGjno5InQAxo4SXDF2GDlkjdLSUvj5+emfm9u605KKigo0NDQgKCjIYHpQUBDOnTtn0TIOHDiAzMxM9O/fX3980NatW9GvXz+rxnQ7xQ9aduQBUGrjiOvpmMLYsQxjx7yD5VeVHoJNGDtEv/Hz8zN4WBs8TTQajcFzIYTRNHOGDRuGxsZGFBYW6h9yxA6ggi08jjoASk2UiJwmjJ2WMXRcmyvGDpEaBAYGws3NzWhrTnl5udFWHyUoHjyOOABKitraWoN4uvNgLlsoGToAY6cljgodgLGjFMYOkf14enpCq9UiJycHkyZN0k/PycnBxIkTFRzZLYoHT3PkOABKqrS0NCxbtkzWZSodOgBjpyWMHdfG0CGSR3V1NU6ePKl/XlxcjMLCQgQEBCA0NBSpqalITEzE4MGDMXToUGzYsAElJSWYM2eOgqO+RdXBI8cBUAAwZswYHD58GDU1NQgJCcGOHTsQFRVlct5FixYhNTVV/7yqqsqmix4xdtTNkaEDMHaUwNghkk9+fj7i4uL0z5u+L5OSkrB582ZMmzYNlZWVWL58OcrKyhAREYFdu3YhLCxMqSHrqTp4mthyABQAZGdnWzxv0/UH0tPTkZ6ejoaGBovfezs1hA7A2DHH0aEDMHaUwNghktfIkSMhhGh2nuTkZCQnJztoRJZT/Cyt5ih5AFRKSgqKiopw6NAhSe9T6swrUxg7pjF2WgfGDhHdTtXBc/sBULfLycmR9eqLpqSnpyM8PNzsrq87qSl0AMaOKScuXWfstBKMHSK6k+K7tNR6AFRKSgpSUlJQVVUFf3//ZudVU+gAjJ07KRE5TRg7jtVaQ4fX4CFqmeLB48wHQKktdADGzp0YO61Ha40dIrKM4sGj1gOgmjtomaGjfkqGDsDYcTTGDhG1RNXH8CjJ1EHLajtOpwlj5zdKHadzO8aOYzF2iMgSDB4LVV5RX+gAjJ3bKR06AGPH0Rg7RGQpxXdpqZWt1+FxBMbOLQyd1oehQ0RScQuPGdZeh8dRGDvq2H0FMHYcjbFDRNZg8Dghxo46tuoAjB1HY+wQkbW4S8vJtPbYUUvoAIwdR2PsEJEtuIXHDKlXWnaE1h47asLYcSzGDhHZisFjhtqO4WHsqAdjx3G+P13F2CEiWTB4nABjRz0YO47D0CEiOTF4VI6xox6MHcdh7BCR3Bg8ZqjhGB7GjnowdhyHsUNE9sCztMyQcrd0uTF01IWx4xgMHSKyJ27hURnGjrowdhyDsUNE9sbgURHGjrowdhyDsUNEjsBdWirB2FEPho7jMHaIyFG4hUcFGDvqwdhxHMYOETkSt/CY4ai7pTN21IOx4xgMHSJSArfwmOGIKy0zdtSDseMYjB0iUgqDRyGMHfVg7DgGY8c+qstPKz0EIqfA4FEAY0c9GDuOwdghIqUxeByMsaMejB3HYOwQkRrwoGUHYuyoB2PHegfLr1o0H0OHiNSEW3gchLGjHowd+2PsEJEtrl27hrCwMCxYsEC2ZXILj50xdNSFsWN/jB0istWKFSvwwAMPyLpMbuExQ467pTN21IWxY3+MHSKy1YkTJ/Djjz8iISFB1uUyeMyw9To8jB35nbh03er3Mnbsj7FD5Ppyc3Mxfvx4BAcHQ6PRICsry2iejIwM9OjRA97e3tBqtdi/f7+kz1iwYAHS0tJkGvFvuEvLDhg76sHQsT+GDlHrUVNTg8jISMyYMQNTpkwxej0zMxPz5s1DRkYGYmJisH79euh0OhQVFSE0NBQAoNVqUVtba/Te3bt349ChQ+jduzd69+6NvLw8WcfO4JEZY0c9GDv2x9ghcn5VVYZ/jr28vODl5WVyXp1OB51OZ3ZZa9aswaxZszB79mwAwNq1a5GdnY1169bpt9oUFBSYff/Bgwfx4YcfYtu2baiurkZ9fT38/PywePFiqatlhMEjI8aOejB2iMiVnam8hra1bjYto6b6GgCge/fuBtOXLFmCpUuXSl5eXV0dCgoKsHDhQoPp8fHxFm+tSUtL04fR5s2b8cMPP8gSOwCDRzaMHfVg7BARWa60tBR+fn765+a27rSkoqICDQ0NCAoKMpgeFBSEc+fO2TRGOTB4ZMDYUQ/GDhGRNH5+fgbBYyuNRmPwXAhhNM0S06dPl2lEt/AsLRsxdtSDsUNEpJzAwEC4ubkZbc0pLy832uqjBAaPDRg76sHYISJSlqenJ7RaLXJycgym5+TkIDo6WqFR/cblg6e0tBQjR45EeHg4+vfvj23btsmzXMaOajB2iIgco7q6GoWFhSgsLAQAFBcXo7CwECUlJQCA1NRUbNy4EZs2bcLx48cxf/58lJSUYM6cOQqO+haXP4bH3d0da9euxYABA1BeXo5BgwYhISEBbdu2tXqZjB31YOwQETlOfn4+4uLi9M9TU1MBAElJSdi8eTOmTZuGyspKLF++HGVlZYiIiMCuXbsQFham1JD1XD54unbtiq5duwIAOnfujICAAFy8eNGq4GHoqAtjh4jIsUaOHAkhRLPzJCcnIzk52UEjspziu7QccZnqJvn5+WhsbDS65oAlzlRes+ozyT4YO0REJIXiW3jsfZnq4OBgAEBlZSWefPJJbNy4sdnx1NbWGizrzitQkvIYO0REJJXiwWPvy1QDtyJm0qRJWLRoUYtHiqelpWHZsmUS14IchbGjHrythPKqy08rPQQip6H4Lq3mNF2mOj4+3mC6lMtUCyEwffp0jBo1ComJiS3Ov2jRIly5ckX/KC0ttWrsJJ8Tl67jxKXrjB0FHSy/qn8AjB2lVZefZuwQSaT4Fp7myHGZ6gMHDiAzMxP9+/fXHx+0detW9OvXz+T8TTdNS09PR3p6OhoaGmxaB7LeiUvX9f/P2FFGU+DcjrGjHEYOkfVUHTxNbLlM9bBhw9DY2Cj5M1NSUpCSkoKqqir4+/tLfj9Z7/bQARg7SjAVOgBjRykMHSLbqTp4lLxMNbfwON6doQMwdhzJXOQ0Yew4FiOHSF6qPoZHyctUp6SkoKioCIcOHbLr59Bvx+jcibHjGLcfm2MOY8dxeHwOkX0ovoWnuroaJ0+e1D9vukx1QEAAQkNDkZqaisTERAwePBhDhw7Fhg0bVHOZarKNqchpwtixv5YipwljxzEYOUT2pXjwqPUy1dylZT/NhQ7A2LEnSyOnCWPH/hg6RI6hES1dI7qVazpoOWdvEdq2a6/0cJxaS6EDMHbsRWroAIwde2PouCZRdx0NH8zHlStX4OfnJ/vy5fxOqqm+iodHhtttrGqj+BYecn2WhA7A2LEHa0IHYOzYCyOHSDkMHjO4S8t2DB1lWBs5TRg78mPoECmPwWMGr8NjPUtDB2DsyImhoz4MHSL1YPCQbKSEDsDYkYutoQMwduTG0CFSHwYP2Uxq6ACMHVvJETlNGDvyYOQQqRuDxwwew9Mya0IHYOzYQs7QARg7cmDoEDkHBo8ZPIbHPGtDB2DsWEPuyGnC2LENQ4fIuTB4yGK2hA7A2JHKXqEDMHZswdAhck4MHmqRraEDMHaksGfoAIwdazF0iJwbg8cMHsMjT+gAjB1L2DtymjB2pGHkELkOBo8ZrfkYHrlCB2DstMRRoQMwdqRg6BC5HgYP6ckZOgBjpzmODB2AsWMphg6R62LwEEPHQRwdOU0YOy1j6BC5PgZPKyZ36ACMHVMYOurF0CFqPRg8rZA9Qgdg7NxJqdABGDvNYeQQtU4MHjNc8Swte4UOwNhpomTkNGHsmMbQIWrdGDxmuNJZWvYMHYCxA6gjdADGjikMHSLnUlxcjJkzZ+L8+fNwc3PDwYMH0bZtW5uXy+BxcYwd+1JL6ACMnTsxdIic0/Tp0/Hyyy8jNjYWFy9ehJeXlyzLZfC4KHuHDtB6Y0dNkdOEsXMLI4fIuR07dgweHh6IjY0FAAQEBMi27DayLYlU4cSl64wdOzlYfpWxo1LV5acZO0QOkJubi/HjxyM4OBgajQZZWVlG82RkZKBHjx7w9vaGVqvF/v37LV7+iRMn0K5dO0yYMAGDBg3CypUrZRs7t/C4CEdETpPWFjtqjJwmrT12GDlEjlVTU4PIyEjMmDEDU6ZMMXo9MzMT8+bNQ0ZGBmJiYrB+/XrodDoUFRUhNDQUAKDValFbW2v03t27d6O+vh779+9HYWEhOnfujEceeQRRUVF4+OGHbR47g8fJOTJ0gNYTO2qOnCatOXYYOkTyqaoy/LvEy8vL7HEzOp0OOp3O7LLWrFmDWbNmYfbs2QCAtWvXIjs7G+vWrUNaWhoAoKCgwOz7Q0JCEBUVhe7duwMAEhISUFhYyOBpzRwdOkDriB1nCB2g9cYOQ4foll8u34BPvW1f4ddrbgCAPi6aLFmyBEuXLpW8vLq6OhQUFGDhwoUG0+Pj45GXl2fRMqKionD+/HlcunQJ/v7+yM3NxTPPPCN5LKYweMxQ63V4lAgdwPVjh6GjXowcIvsqLS2Fn5+f/rm1Z0VVVFSgoaEBQUFBBtODgoJw7tw5i5bh7u6OlStXYvjw4RBCID4+HuPGjbNqPEbLlmUpLkht1+Fh6MjPWSKnSWuLHYYOkWP4+fkZBI+tNBqNwXMhhNG05rS028xaDB6VUyp0ANeNHWcLHaB1xQ5Dh8g5BQYGws3NzWhrTnl5udFWHyXwtHSVctTp5ea4Yuyo9bTylrSW2OGp5UTOzdPTE1qtFjk5OQbTc3JyEB0drdCofsMtPCqjZOQ0caXYccbAuZ2rxw4Dh8i5VFdX4+TJk/rnxcXFKCwsREBAAEJDQ5GamorExEQMHjwYQ4cOxYYNG1BSUoI5c+YoOOpbGDwqoYbQAVwndpw9dADXjh2GDpFzys/PR1xcnP55amoqACApKQmbN2/GtGnTUFlZieXLl6OsrAwRERHYtWsXwsLClBqyHoNHYWoJHcA1YscVQgdw3dhh6BA5t5EjR0II0ew8ycnJSE5OdtCILMfgUYiaQgdw7thxlchp4oqxw9AhIqUxeBxMbaEDOG/suFroAK4XOwwdIlILlw+eq1evYtSoUaivr0dDQwPmzp2Lp556yuHjUGPoAM4ZO64YOoDrxA4jh4jUyOWDx9fXF/v27YOvry+uXbuGiIgITJ48GR07dnTI56s1dADGjpq4QuwwdIhIzVw+eNzc3ODr6wsAuHHjBhoaGlo84EoOag4dwDljxxUxdIiIHMOiCw/eddddCAgIsOghVW5uLsaPH4/g4GBoNBpkZWUZzZORkYEePXrA29sbWq0W+/fvl/QZly9fRmRkJEJCQvD8888jMDBQ8jgtpfQFAy3B2FEHxg4RkeNYtIVn7dq1+v+vrKzEyy+/jDFjxmDo0KEAgH//+9/Izs7GSy+9JHkANTU1iIyMxIwZMzBlyhSj1zMzMzFv3jxkZGQgJiYG69evh06nQ1FREUJDQwEAWq0WtbW1Ru/dvXs3goOD0aFDBxw9ehTnz5/H5MmTMXXqVLOXua6trTVYVlWVZV9Kao8cgKGjJq4QO0REzkQjJO7fmTJlCuLi4vDcc88ZTH/77bfx5ZdfmtxCY/FgNBrs2LEDjz76qH7aAw88gEGDBmHdunX6aX379sWjjz6KtLQ0yZ/x7LPPYtSoUXjsscdMvr506VIsW7bMaHrO3iK0bdfeaLozhA7gOrHjCsfwuFLscAsPkSFRdx0NH8zHlStXZL0hZ5OmG1q/k3UYPm3b2bSs6zXVmPPoILuNVW0k30srOzsbjzzyiNH0MWPG4Msvv5RlUE3q6upQUFCA+Ph4g+nx8fHIy8uzaBnnz5/Xb6WpqqpCbm4u+vTpY3b+RYsW4cqVK/pHaWmpyfmcYddVE1eJHVfgSrFDRORMJAdPx44dsWPHDqPpWVlZsp/5VFFRgYaGBqPdT0FBQUZ3YzXn9OnTGD58OCIjIzFs2DA899xz6N+/v9n5vby84Ofnh61bt+LBBx/E6NGjDV53ptABGDtqwtghIlKO5LO0li1bhlmzZmHv3r36Y3gOHjyIL774Ahs3bpR9gMCtXV23E0IYTTNHq9WisLBQ8mempKQgJSVFv/nwl8s34FPvXCe1MXbUg7FDRKQsyd/g06dPR9++ffHmm2/ik08+gRAC4eHhOHDgAB544AFZBxcYGAg3NzejrTnl5eVmDzqmWxg76sHYISJSnqTgqa+vx9NPP42XXnoJH3zwgb3GpOfp6QmtVoucnBxMmjRJPz0nJwcTJ06062enp6cjPT0dDQ0Ndv0ce2DsqAdjh4hIHSQdw+Ph4WHy+B1bVFdXo7CwUL/bqbi4GIWFhSgpKQFw69bzGzduxKZNm3D8+HHMnz8fJSUlmDNnjqzjuFNKSgqKiopw6NAhu36O3Bg76sHYISJSD8m7tCZNmoSsrCykpqbKMoD8/HzExcXpnzctNykpCZs3b8a0adNQWVmJ5cuXo6ysDBEREdi1axfCwsJk+XxznHELD2NHPRg7RETqIjl4evbsib/85S/Iy8uDVqtF27ZtDV6fO3eupOWNHDmyxVs9JCcnIzk5WepQbXLnQctqx9hRh9YUOrwGDxE5E8nBs3HjRnTo0AEFBQUoKCgweE2j0UgOHrIdY0cdWlPsEBE5G8nBU1xcbI9xqI4z7NJi6KgHY4eISN0kX3jwdkIIh9x5XAlqP2iZsaMejB0iIvWzKni2bNmCfv36wcfHBz4+Pujfvz+2bt0q99jIDMaOejB2iIicg+RdWmvWrMFLL72E5557DjExMRBC4MCBA5gzZw4qKiowf/58e4yT/g9jRz0YO0REzkNy8Lz11ltYt24dnnzySf20iRMn4v7778fSpUtdJnjUeAwPY0c9GDtERM5F8i6tsrIyREdHG02Pjo5GWVmZLINSA7Udw8PYUQ/GDhGR85EcPD179sRHH31kND0zMxO9evWSZVBkiLGjHowdIiLnZNXd0qdNm4bc3FzExMRAo9Hgm2++wVdffWUyhMg2jB31YOwQETkvycEzZcoUfPvtt3jjjTeQlZWlv1v6d999h4EDB9pjjK0WY0cdGDpERM5PcvAAgFarxd///ne5x6IqSh+0zNhRB8YOEZFrsCp4GhoakJWVhePHj0Oj0SA8PBwTJkyAm5ub3ONTjJL30mLsqANjh4jI8d544w1s3LgRQgg89NBD+Otf/wqNRmPzciUHz8mTJzF27FicPn0affr0gRACP//8M7p3747PP/8c9957r82Das0YO+rA2CEicrwLFy7g7bffxrFjx+Dh4YHhw4fj4MGDGDp0qM3LlnyW1ty5c3HPPfegtLQUhw8fxpEjR1BSUoIePXrwxqE2+OFiDWNHJRg7RETKuXnzJm7cuIH6+nrU19ejc+fOsixXcvDs27cPq1evRkBAgH5ax44dsWrVKuzbt0+WQbU2DB31YOwQEZmXm5uL8ePHIzg4GBqNBllZWUbzZGRkoEePHvD29oZWq8X+/fstXn6nTp2wYMEChIaGIjg4GA899JBse44kB4+XlxeuXr1qNL26uhqenp6yDEoN0tPTER4ejqioKLt+DmNHPRg7RETNq6mpQWRkJN5++22Tr2dmZmLevHl48cUXceTIEcTGxkKn06GkpEQ/j1arRUREhNHj7NmzuHTpEnbu3IlTp07hzJkzyMvLQ25urixjl3wMz7hx4/D000/j3XffxZAhQwAA3377LebMmYMJEybIMig1cMRBy4wd9WDsEFFrVVVl+Pefl5cXvLy8TM6r0+mg0+nMLmvNmjWYNWsWZs+eDQBYu3YtsrOzsW7dOqSlpQEACgoKzL5/27Zt6Nmzp34v0tixY3Hw4EEMHz5c0jqZIjl43nzzTSQlJWHo0KHw8PAAcGt/24QJE/DXv/7V5gG1Fowd9WDsEJGzKbpUA69a285cqr1263uoe/fuBtOXLFmCpUuXSl5eXV0dCgoKsHDhQoPp8fHxyMvLs2gZ3bt3R15eHm7cuAEPDw/s3bsXTz/9tOSxmCI5eDp06IBPP/0UJ0+exPHjx/UXHuzZs6csA2oNGDvqwdghotautLQUfn5++ufmtu60pKKiAg0NDQgKCjKYHhQUhHPnzlm0jAcffBAJCQkYOHAg2rRpg9GjR8u298iq6/AAt+6pxciRjrGjHowdIiLAz8/PIHhsdec1c4QQkq6js2LFCqxYsUK28TSRfNDy1KlTsWrVKqPpr776Kh577DFZBuWqGDvq8P3pKsYOEZHMAgMD4ebmZrQ1p7y83GirjxKsOi197NixRtMfeeQR2Y6kdkWMHXVg6BAR2Yenpye0Wi1ycnIMpufk5CA6OlqhUf1G8i4tc6efe3h4GB3pTbcwdtSBsUNEZJvq6mqcPHlS/7y4uBiFhYUICAhAaGgoUlNTkZiYiMGDB2Po0KHYsGEDSkpKMGfOHAVHfYvk4ImIiEBmZiYWL15sMP3DDz9EeHi4bANTmlw3D2XsqANjh4jIdvn5+YiLi9M/T01NBQAkJSVh8+bNmDZtGiorK7F8+XKUlZUhIiICu3btQlhYmFJD1pMcPC+99BKmTJmCX375BaNGjQIAfPXVV/jnP/+Jbdu2yT5Apdh6HR6GjnowdoiI5DFy5EgIIZqdJzk5GcnJyQ4akeUkB8+ECROQlZWFlStXYvv27fDx8UH//v3x5ZdfYsSIEfYYo9Nh7KgHY4eIiAArT0sfO3asyQOXibGjJowdIiJqIvksrdslJyejoqJCrrE4PcaOejB2iIjodjYFz9///neemfV/GDvqwdghIqI72RQ8LR241FowdtSDsUNERKbYFDzE2FETxg4REZkj+aDlmpoatG3bFgBw9epV2QfkTBg76sDQISKilkjewhMUFISZM2fim2++scd47ObatWsICwvDggULZFkeY0cdGDtERGQJycHzz3/+E1euXMHo0aPRu3dvrFq1CmfPnrXH2GS1YsUKPPDAA7Isi7GjDowdIiKylOTgGT9+PD7++GOcPXsWzz77LP75z38iLCwM48aNwyeffIKbN2/aY5w2OXHiBH788UckJCTYvCzGjjowdoiISAqrD1ru2LEj5s+fj6NHj2LNmjX48ssvMXXqVAQHB2Px4sW4du2aRcvJzc3F+PHjERwcDI1Gg6ysLKN5MjIy0KNHD3h7e0Or1WL//v2SxrpgwQKkpaVJeo8pjB11YOwQEZFUVl1pGQDOnTuHLVu24L333kNJSQmmTp2KWbNm4ezZs1i1ahUOHjyI3bt3t7icmpoaREZGYsaMGZgyZYrR65mZmZg3bx4yMjIQExOD9evXQ6fToaioCKGhoQAArVaL2tpao/fu3r0bhw4dQu/evdG7d2/k5eW1OJ7a2lqDZTVdZ6joUg28fNu1+H6yL8YOERFZQ3LwfPLJJ3jvvfeQnZ2N8PBwpKSk4IknnkCHDh308wwYMAADBw60aHk6nQ46nc7s62vWrMGsWbMwe/ZsAMDatWuRnZ2NdevW6bfaFBQUmH3/wYMH8eGHH2Lbtm2orq5GfX09/Pz8jO723iQtLQ3Lli2zaOxERETkHCTv0poxYwaCg4Nx4MABFBYW4rnnnjOIHQC455578OKLL9o8uLq6OhQUFCA+Pt5genx8vEVba4BbAVNaWopTp07htddew1NPPWU2dgBg0aJFuHLliv5RWlpq0zqQPA6WX8XB8tZ9GQQ1qS4/rfQQiIgkkbyFp6ysDL6+vs3O4+PjgyVLllg9qCYVFRVoaGhAUFCQwfSgoCCcO3fO5uWb4uXlBS8vL6SnpyM9PR0NDQ12+RyyXFPocHeW8hg6ROSsJAdPS7FjDxqNxuC5EMJomiWmT59u8bwpKSlISUlBVVUV/P39JX8W2Y6hox4MHSJydlYftOwIgYGBcHNzM9qaU15ebrTVh1zH7buuGDvKY+wQkStQ9b20PD09odVqkZOTYzA9JycH0dHRdv3s9PR0hIeHIyoqyq6fQ4YYO+pRXX6asUNELkPxLTzV1dU4efKk/nlxcTEKCwsREBCA0NBQpKamIjExEYMHD8bQoUOxYcMGlJSUYM6cOXYdF3dpOdadByQzdpTDyCEiV2R18Jw8eRK//PILhg8fDh8fH6uPq8nPz0dcXJz+eWpqKgAgKSkJmzdvxrRp01BZWYnly5ejrKwMERER2LVrF8LCwqwdukV40LJjmDrzirGjHMYOEbkqjRBCSHlDZWUlpk2bhq+//hoajQYnTpzAPffcg1mzZqFDhw54/fXX7TVWRTRt4Zn73n5eeFBmjB31YOgQyUPUXUfDB/Nx5coV+Pn5yb58Ob+Taq9V480ZsXYbq9pIPoZn/vz5cHd3R0lJicEZW9OmTcMXX3wh6+DINZm7pg5jRxmMHSJqDSTv0tq9ezeys7MREhJiML1Xr1749ddfZRsYuSZzFw9k7DgeQ4eIWhPJwVNTU2PyWjwVFRXw8vKSZVBqwGN45NXcVZIZO47F0CGi1kjyLq3hw4djy5Yt+ucajQaNjY149dVXDQ4+dnYpKSkoKirCoUOHlB6KU2vplhCMHcdi7BBRayV5C8+rr76KkSNHIj8/H3V1dXj++edx7NgxXLx4EQcOHLDHGMlJtXTvK8aO4zB0iKi1kxw84eHh+M9//oN169bBzc0NNTU1mDx5MlJSUtC1a1d7jFER3KVlPUtu8snYcQyGDhHRLVZdh6dLly5YtmyZ3GNRFV54UDpL72bO2HEMxg4ROaNJkyZh7969GD16NLZv327w2s6dO/GnP/0JjY2NeOGFFzB79myLlyv5GJ733nsP27ZtM5q+bds2vP/++1IXRy7C0q06jB374y0hiMiZzZ071+BY4SY3b95Eamoqvv76axw+fBivvPIKLl68aPFyJQfPqlWrEBgYaDS9c+fOWLlypdTFkZNr6aDkJgwd+2PoEJEriIuLQ/v27Y2mf/fdd7j//vvRrVs3tG/fHgkJCcjOzrZ4uZKD59dff0WPHj2MpoeFhaGkpETq4shJWRo6AGPHERg6ROQIubm5GD9+PIKDg6HRaJCVlWU0T0ZGBnr06AFvb29otVrs379fls8+e/YsunXrpn8eEhKCM2fOWPx+ycHTuXNn/Oc//zGafvToUXTs2FHq4lSLd0s3z9LQARg79satOkTkSDU1NYiMjMTbb79t8vXMzEzMmzcPL774Io4cOYLY2FjodDqDDSJarRYRERFGj7Nnzzb72abuhCXlHp6SD1r+/e9/j7lz56J9+/YYPnw4AGDfvn344x//iN///vdSF6daPGjZmJTQARg79sbQISI5VFUZ/l3t5eVl9kLCOp0OOp3O7LLWrFmDWbNm6Q8mXrt2LbKzs7Fu3TqkpaUBAAoKCqwaZ7du3Qy26Jw+fRoPPPCAxe+XHDwvv/wyfv31V4wePRru7rfe3tjYiCeffJLH8LgoqaEDMHbsiaFDRIcuVMPdR9K9v43cvF4DAOjevbvB9CVLlmDp0qWSl1dXV4eCggIsXLjQYHp8fDzy8vKsHmeTIUOG4IcffsCZM2fg5+eHXbt2YfHixRa/X1LwCCFQVlaG9957Dy+//DIKCwvh4+ODfv36ISwsTPLgSf0YO+rB0CEieygtLTW4W7q1t4mqqKhAQ0MDgoKCDKYHBQXh3LlzFi9nzJgxOHz4MGpqahASEoIdO3YgKioK7u7ueP311xEXF4fGxkY8//zzkg6lkRw8vXr1wrFjx9CrVy/06tVLytvJiVgTOgBjx14YO0RkL35+fgbBY6s7j6sRQkg61qa5M68mTJiACRMmWDUuSQctt2nTBr169UJlZaVVH+ZMWutBy1LOvroTY0d+PCiZiJxFYGAg3NzcjLbmlJeXG231UYLks7RWr16NP//5z/jhhx/sMR7VaI03D7U2dADGjtwYOkTkbDw9PaHVapGTk2MwPScnB9HR0QqN6jeSD1p+4okncO3aNURGRsLT0xM+Pj4Gr0u56iGpgy2hAzB25MbQISK1qq6uxsmTJ/XPi4uLUVhYiICAAISGhiI1NRWJiYkYPHgwhg4dig0bNqCkpARz5sxRcNS3SA6etWvX2mEYpBTGjnowdIhI7fLz8xEXF6d/npqaCgBISkrC5s2bMW3aNFRWVmL58uUoKytDREQEdu3apYoTmyQHT1JSkj3GQQ7G0FEXxg4ROYORI0eavADg7ZKTk5GcnOygEVlOcvC0dPuI0NBQqwdD9mdr6ACMHTkxdIiIHENy8Nx9993Nnl7W0NBg04DIfhg76sHQISJyLMnBc+TIEYPn9fX1OHLkCNasWYMVK1bINjCSjxyhAzB25MLYISJyPMnBExkZaTRt8ODBCA4OxquvvorJkyfLMjCynVyhAzB25MDQISJSjuTgMad3794udc2a9PR0pKenO+0uOsaOejB0iIiUJzl47ryratP9tZYuXepSt5pw1rulyxk6AGPHVowdIiJ1kBw8HTp0MHmfjO7du+PDDz+UbWAkjdyhAzB2bMHQISJSF8nBs2fPHoPnbdq0QadOndCzZ0+4u8u2h4wkYOyoB0OHiEidJBfKiBEj7DEOsoI9Qgdg7FiLsUNEpF5WbZL55ZdfsHbtWhw/fhwajQZ9+/bFH//4R9x7771yj49MsFfoAIwdazB0iIjUT/Ld0rOzsxEeHo7vvvsO/fv3R0REBL799lvcf//9RndIJfkxdtSFsUNE5Bwkb+FZuHAh5s+fj1WrVhlNf+GFF/Dwww/LNjj6DUNHXRg6RETORfIWnuPHj2PWrFlG02fOnImioiJZBiU3d3d3DBgwAAMGDMDs2bOVHo4kB8uvMnZUpLr8NGOHiMgJSd7C06lTJxQWFhpdc6ewsBCdO3eWbWBy6tChAwoLC5UehmT2DB2AsSMVQ4eIyHlJDp6nnnoKTz/9NP73f/8X0dHR0Gg0+Oabb/DKK6/gT3/6kz3G2OrYO3QAxo4UDB0iIucneZfWSy+9hMWLF+Ott97CiBEjMHz4cLz99ttYunQpXnzxRckDyM3Nxfjx4xEcHAyNRoOsrCyjeTIyMtCjRw94e3tDq9Vi//79kj6jqqoKWq0Ww4YNw759+ySP0ZEYO+rB3VdERK5D8hYejUaD+fPnY/78+bh69daXc/v27a0eQE1NDSIjIzFjxgxMmTLF6PXMzEzMmzcPGRkZiImJwfr166HT6VBUVITQ0FAAgFarRW1trdF7d+/ejeDgYJw6dQrBwcH44YcfMHbsWHz//ffw8/Ozesz24IjQARg7lmLoEBG5FsnBc/36dQgh4Ovri/bt2+PXX3/Fu+++i/DwcMTHx0segE6ng06nM/v6mjVrMGvWLP3BxmvXrkV2djbWrVuHtLQ0AEBBQUGznxEcHAwAiIiIQHh4OH7++WcMHjzY5Ly1tbUG8XTnvcPk5qjQARg7lmDoEBG5Jsm7tCZOnIgtW7YAAC5fvowhQ4bg9ddfx8SJE7Fu3TpZB1dXV4eCggKjkIqPj0deXp5Fy7h06ZI+YE6fPo2ioiLcc889ZudPS0uDv7+//tG9e3frV6AFjB11YewQEbkuycFz+PBhxMbGAgC2b9+OLl264Ndff8WWLVvw5ptvyjq4iooKNDQ0ICgoyGB6UFAQzp07Z9Eyjh8/jsGDByMyMhLjxo3DX//6VwQEBJidf9GiRbhy5Yr+UVpaatM6mGLvU83vxNhpHo/VISJyfZJ3aV27dk1/zM7u3bsxefJktGnTBg8++CB+/fVX2QcIwOTd2e+cZk50dDS+//57iz/Ly8sLXl5eSE9PR3p6OhoaGiSNtTmOjJwmjB3zGDlERK2H5C08PXv2RFZWFkpLS5Gdna3f3VReXi77gcCBgYFwc3Mz2ppTXl5utNVHbikpKSgqKsKhQ4dkWR5jR10YO0RErYvk4Fm8eDEWLFiAu+++Gw888ACGDh0K4NbWnoEDB8o6OE9PT2i1WqN7dOXk5CA6OlrWz7pTeno6wsPDERUVZdNyHL37qgljxzTuviIiap0k79KaOnUqhg0bhrKyMkRGRuqnjx49GpMmTZI8gOrqapw8eVL/vLi4GIWFhQgICEBoaChSU1ORmJiIwYMHY+jQodiwYQNKSkowZ84cyZ8lRUpKClJSUlBVVQV/f3/J71cicgCGjjmMHCKi1k1y8ABAly5d0KVLF4NpQ4YMsWoA+fn5iIuL0z9PTU0FACQlJWHz5s2YNm0aKisrsXz5cpSVlSEiIgK7du1CWFiYVZ/nCIwddWHsEBGRVcEjp5EjR0II0ew8ycnJSE5OdtCIbrHmoGWlQgdg7JjC0CEioiaKB49aSdmlpWToAIydOzF0iIjoTpIPWiZDjB11YewQEZEpDB4zWjpLS6mzr27H2PkNz74iInINkyZNwl133YWpU6caTC8tLcXIkSMRHh6O/v37Y9u2bZKWy+Axw9x1eNQQOgBj53YMHSIi1zF37lz9Laxu5+7ujrVr16KoqAhffvkl5s+fj5qaGouXy+CRQA2hAzB2mnCrDhGR64mLi9Pf0eF2Xbt2xYABAwAAnTt3RkBAAC5evGjxchk8Zty5S+vQhWqFR3QLY4ehQ0SklNzcXIwfPx7BwcHQaDTIysoymicjIwM9evSAt7c3tFot9u/fL/s48vPz0djYKOkG3wweM+S+tYQcGDvcfUVEJLeqqiqDR21trdl5a2pqEBkZibffftvk65mZmZg3bx5efPFFHDlyBLGxsdDpdCgpKdHPo9VqERERYfQ4e/asReOtrKzEk08+iQ0bNkhaT56W7iQYO0RE1KTo7FVovGy7ubWovQYARltJlixZgqVLl5p8j06ng06nM7vMNWvWYNasWZg9ezYAYO3atcjOzsa6deuQlpYGACgoKLB6zLW1tZg0aRIWLVok+RZTDB4nwNghIiJ7KS0tNbj5t5eXl1XLqaurQ0FBARYuXGgwPT4+Hnl5eTaNEQCEEJg+fTpGjRqFxMREye9n8KgYQ4eIiOzNz8/PIHisVVFRgYaGBgQFBRlMDwoKwrlz5yxezpgxY3D48GHU1NQgJCQEO3bsQFRUFA4cOIDMzEz0799ff+zQ1q1b0a9fP4uWy+Axw5pbS8iJsUNERM5Io9EYPBdCGE1rTnZ2tsnpw4YNQ2Njo9Xj4kHLZih50DJjh4iInE1gYCDc3NyMtuaUl5cbbfVRAoNHZRg7RETkjDw9PaHVapGTk2MwPScnR/IBxvbAXVoqwtghIiI1q66uxsmTJ/XPi4uLUVhYiICAAISGhiI1NRWJiYkYPHgwhg4dig0bNqCkpARz5sxRcNS3MHhUgrFDRERql5+fj7i4OP3z1NRUAEBSUhI2b96MadOmobKyEsuXL0dZWRkiIiKwa9cuhIWFKTVkPQaPCjB2LMOLDhIRKWvkyJEQQjQ7T3JyMpKTkx00IsvxGB4zWrpbulwYO0RERPbH4DHDEWdpMXaIiIgcg8GjEMYOERGR4zB4FMDYISIiciwGj4MxdoiIiByPZ2k5CEOHiIhIOdzC4wCMHSIiImUxeOyMsUNERKQ8Bo8ZclyHh7EjH150kIiIbMHgMcPW6/AwdoiIiNSDwWMHjB0iIiJ1YfDIjLFDRESkPgweGTF2iIiI1InBIxPGDhERkXoxeGTA2CEiIlI3Bo+NGDtERETq1yqCp7i4GHFxcQgPD0e/fv1QU1Mjy3IZO0RERM6hVdxLa/r06Xj55ZcRGxuLixcvwsvLy6blMXQcixcdJCIiW7l88Bw7dgweHh6IjY0FAAQEBNi0PMYOERGR81F8l1Zubi7Gjx+P4OBgaDQaZGVlGc2TkZGBHj16wNvbG1qtFvv377d4+SdOnEC7du0wYcIEDBo0CCtXrrR6rIwdIiIi56T4Fp6amhpERkZixowZmDJlitHrmZmZmDdvHjIyMhATE4P169dDp9OhqKgIoaGhAACtVova2lqj9+7evRv19fXYv38/CgsL0blzZzzyyCOIiorCww8/LGmcRWevQuPla91KEhERkaIUDx6dTgedTmf29TVr1mDWrFmYPXs2AGDt2rXIzs7GunXrkJaWBgAoKCgw+/6QkBBERUWhe/fuAICEhAQUFhaaDZ7a2lqDeKqq4lYdIiIiZ6f4Lq3m1NXVoaCgAPHx8QbT4+PjkZeXZ9EyoqKicP78eVy6dAmNjY3Izc1F3759zc6flpYGf39//aMplEgZPGCZiIjkoOrgqaioQENDA4KCggymBwUF4dy5cxYtw93dHStXrsTw4cPRv39/9OrVC+PGjTM7/6JFi3DlyhX9o7S01KZ1IOmqy0/rH0RERHJQfJeWJTQajcFzIYTRtOa0tNvsdl5eXvDy8kJ6ejrS09PR0NAgaaxkPQYOERHZi6qDJzAwEG5ubkZbc8rLy422+sgtJSUFKSkpqKqqgr+/v10/qzVj5BARkSOoepeWp6cntFotcnJyDKbn5OQgOjrarp+dnp6O8PBwREVF2fVzWiPusiIiIkdTPHiqq6tRWFiIwsJCALduA1FYWIiSkhIAQGpqKjZu3IhNmzbh+PHjmD9/PkpKSjBnzhy7jislJQVFRUU4dOiQXT+nNWHkEBFRSyZNmoS77roLU6dONfn6tWvXEBYWhgULFkharuK7tPLz8xEXF6d/npqaCgBISkrC5s2bMW3aNFRWVmL58uUoKytDREQEdu3ahbCwMKWGTBIwcIiISIq5c+di5syZeP/9902+vmLFCjzwwAOSl6t48IwcORJCiGbnSU5ORnJysoNGdAsPWrYNQ4eIiKwRFxeHvXv3mnztxIkT+PHHHzF+/Hj88MMPkpar+C4tteIuLel4bA4RkWuz9+2gWrJgwQL9RYelUnwLDzk3xg0RkXO7844CTZdnMcXet4MKDg42O85PP/0UvXv3Ru/evS2++PDtGDxmcJdW8xg6RETKqb5wBhpPH5uWIequA4DRHQWWLFmCpUuXmnyPvW8H1ZyDBw/iww8/xLZt21BdXY36+nr4+flh8eLFFr2fwWMGr8NjjJFDROR6SktL4efnp39ubutOS5puB7Vw4UKD6VJuB9WctLQ0fTRt3rwZP/zwg8WxAzB4qAWMHCIi1+bn52cQPNaS43ZQADBmzBgcPnwYNTU1CAkJwY4dO2S5Jh6Dh0xi6BARkTVsvR1UdnZ2i/NMnz5d6rAYPOa0xmN4GDlERGQtJW8HZQmelm5GazktnaeSExGRHJS8HZQluIWnlWLgEBGRVNXV1Th58qT+edPtoAICAhAaGorU1FQkJiZi8ODBGDp0KDZs2OCQ20FZgsHTijByiIjIFs58OygGjxmudAwPQ4eIiOSg1ttBWYLBY4azX4eHkUNERPQbBo8LYeQQERGZxuBxAQwdIiKi5jF4nBQjh4iIyHIMHifCyCEiIrIOg8cMNZ2lxdAhIiKyDYPHDKXP0mLkEBERyYfBoyKMHCIiIvtg8KgAQ4eIiMi+GDwKYeQQERE5DoPHwRg6REREjsfgcQBGDhERkbIYPHbCyCEiIlIPBo8Z1l6Hh6FDRESkPgweM6Rch4eRQ0REpG4MHisxcoiIiJwHg0cihg4REZHzYfBYqPrCGWg8fZQeBhEREVmhjdIDICIiIrI3Bg8RERG5PAYPERERuTwGDxEREbk8lw+en376CQMGDNA/fHx8kJWVpfSwiIiIyIFc/iytPn36oLCwEABQXV2Nu+++Gw8//LCygyIiIiKHcvktPLf77LPPMHr0aLRt21bpoRAREZEDKR48ubm5GD9+PIKDg6HRaEzubsrIyECPHj3g7e0NrVaL/fv3W/VZH330EaZNm2bjiImIiMjZKL5Lq6amBpGRkZgxYwamTJli9HpmZibmzZuHjIwMxMTEYP369dDpdCgqKkJoaCgAQKvVora21ui9u3fvRnBwMACgqqoKBw4cwIcfftjseGpraw2WVVVVZcvqERERkQooHjw6nQ46nc7s62vWrMGsWbMwe/ZsAMDatWuRnZ2NdevWIS0tDQBQUFDQ4ud8+umnGDNmDLy9vZudLy0tDcuWLZOwBkRERCSXSZMmYe/evRg9ejS2b99u8FpxcTFmzpyJ8+fPw83NDQcPHrT4MBXFd2k1p66uDgUFBYiPjzeYHh8fj7y8PEnLsnR31qJFi3DlyhX9o7S0VNLnEBERkfXmzp2LLVu2mHxt+vTpWL58OYqKirBv3z54eXlZvFxVB09FRQUaGhoQFBRkMD0oKAjnzp2zeDlXrlzBd999hzFjxrQ4r5eXF/z8/LB161Y8+OCDGD16tORxExERkXXi4uLQvn17o+nHjh2Dh4cHYmNjAQABAQFwd7d8R5Wqg6eJRqMxeC6EMJrWHH9/f5w/fx6enp4WvyclJQVFRUU4dOiQxe8hIiJyZY480ehOJ06cQLt27TBhwgQMGjQIK1eulPR+xY/haU5gYCDc3NyMtuaUl5cbbfWRW3p6OtLT09HQ0GDXzyEiIlLSnSfneHl5md1V5KgTjUypr6/H/v37UVhYiM6dO+ORRx5BVFSUxdfWU3XweHp6QqvVIicnB5MmTdJPz8nJwcSJE+362SkpKUhJSUFVVRX8/f3t+llERERSiHM/Ae6WH79ichk3b0VH9+7dDaYvWbIES5cuNfkeR51oZEpISAiioqL0401ISEBhYaHzBE91dTVOnjypf15cXIzCwkIEBAQgNDQUqampSExMxODBgzF06FBs2LABJSUlmDNnjoKjJiIicg2lpaXw8/PTP5dyIPDtmk40WrhwocF0a040MiUqKgrnz5/HpUuX4O/vj9zcXDzzzDMWv1/x4MnPz0dcXJz+eWpqKgAgKSkJmzdvxrRp01BZWYnly5ejrKwMERER2LVrF8LCwuw6Lu7SIiKi1sDPz88geKwl14lGY8aMweHDh1FTU4OQkBDs2LEDUVFRcHd3x8qVKzF8+HAIIRAfH49x48ZZvFzFg2fkyJEQQjQ7T3JyMpKTkx00olu4S4uIiEg6W080ys7ONvtaS7vUmuMUZ2kRERGRuil5opElGDxmpKenIzw8HFFRUUoPhYiISPVuP9Hodjk5OYiOjlZoVL9RfJeWWnGXFhERkSFnPtGIwUNEREQWUeuJRpZg8BAREZFF1HqikSV4DI8ZPIaHiIjIdTB4zOC9tIiIiFwHg4eIiIhcHoOHiIiIXB6Dxwwew0NEROQ6GDxm8BgeIiIi18HgISIiIpfH4CEiIiKXx+AhIiIil8fgISIiIpfH4DGDZ2kRERG5DgaPGTxLi4iIyHUweIiIiMjlMXiIiIjI5TF4iIiIyOUxeIiIiMjlMXiIiIjI5TF4iIiIyOUxeMzgdXiIiIhcB4PHDF6Hh4iIyHUweIiIiMjlMXiIiIjI5TF4iIiIyOUxeIiIiMjlMXiIiIjI5TF4iIiIyOUxeIiIiMjltYrgeeONN3D//fcjPDwcc+fOhRBC6SERERGRCZMmTcJdd92FqVOnGr1my/e5ywfPhQsX8Pbbb6OgoADff/89CgoKcPDgQaWHRURERCbMnTsXW7ZsMZpu6/e5ywcPANy8eRM3btxAfX096uvr0blzZ6WHRERERCbExcWhffv2Jl+z5ftc8eDJzc3F+PHjERwcDI1Gg6ysLKN5MjIy0KNHD3h7e0Or1WL//v0WL79Tp05YsGABQkNDERwcjIceegj33nuvjGtARETUOtj7O7s5tn6fu8syChvU1NQgMjISM2bMwJQpU4xez8zMxLx585CRkYGYmBisX78eOp0ORUVFCA0NBQBotVrU1tYavXf37t3w8fHBzp07cerUKfj4+ECn0yE3NxfDhw83OZ7a2lqDZV25cgUAIOpvyLG6RETkwpq+K+x+rOjNOtj8CTfrAABVVVUGk728vODl5WXyLfb+zg4ODjY73EuXLkn6PjciVASA2LFjh8G0IUOGiDlz5hhMu++++8TChQstWuZHH30kkpOT9c9Xr14tXnnlFbPzL1myRADggw8++OCDD6sfv/zyi+VffhJcv35ddOnSRbZxtmvXzmjakiVLLBoLIP93dpM9e/aIKVOmGEyT+n1+J8W38DSnrq4OBQUFWLhwocH0+Ph45OXlWbSM7t27Iy8vDzdu3ICHhwf27t2Lp59+2uz8ixYtQmpqqv755cuXERYWhpKSEvj7+0teh6ioqGbvuN7c63e+JuV50/9HRUXhq6++Qvfu3VFaWgo/Pz/Z16G5eUxNt2Tcpv7f2dej6b9VVVV2XQ+51sHU2JumOfuvhaPWg3++1fNrYe/1aPrvlStXEBoaioCAAMnrYAlvb28UFxejrq5OluUJIaDRaAymmdu60xI5vrObI/X7/E6qDp6Kigo0NDQgKCjIYHpQUBDOnTtn0TIefPBBJCQkYODAgWjTpg1Gjx6NCRMmmJ3f3KY8f39/q/4Qurm5Nfu+5l6/8zUpz5v+//Zpfn5+dlmH5uYxNd2ScTf3/866HnfOb6/1kGsdzI3dFX4tHLUe/POtnl8Le6/HnfO3aWO/Q2S9vb3h7e1tt+VbS47vbAAYM2YMDh8+jJqaGoSEhGDHjh2IioqS/H1+J1UHT5M769NUkTZnxYoVWLFihdzDskhKSorVr9/5mpTnTf/f0udbwpJlmJvH1HRLxt3c/1tL6fWQYx0sWY5c63D7c1f7tbB0DC3hn2/n+bVobh41/fl2BbZ+Z2dnZ5t9zZbvc83/7YdTBY1Ggx07duDRRx8FcGvzmK+vL7Zt24ZJkybp5/vjH/+IwsJC7Nu3z+5jqqqqgr+/P65cuWLVvzrUwBXWAeB6qIkrrAPgGuvhCusAcD2ckRq/s5uj+GnpzfH09IRWq0VOTo7B9JycHERHRztkDF5eXliyZInV+zTVwBXWAeB6qIkrrAPgGuvhCusAcD1cgRq+s5uj+Bae6upqnDx5EgAwcOBArFmzBnFxcQgICEBoaCgyMzORmJiId955B0OHDsWGDRvwt7/9DceOHUNYWJiSQyciImpVnPo7W9J5YnawZ88ek6fKJSUl6edJT08XYWFhwtPTUwwaNEjs27dPuQETERG1Us78na34Fh4iIiIie1P1MTxEREREcmDwEBERkctj8BAREZHLY/DI6I033sD999+P8PBwzJ071/43j7ODn376CQMGDNA/fHx8TN4NV+2Ki4sRFxeH8PBw9OvXDzU1NUoPySru7u76X4vZs2crPRyrXbt2DWFhYViwYIHSQ7HK1atXERUVhQEDBqBfv37429/+pvSQrFJaWoqRI0ciPDwc/fv3x7Zt25QeklUmTZqEu+66C1OnTlV6KJLs3LkTffr0Qa9evbBx40alh9Pq8KBlmVy4cAEPPvggjh07Bg8PDwwfPhyvvfYahg4dqvTQrFZdXY27774bv/76K9q2bav0cCQZMWIEXn75ZcTGxuLixYvw8/ODu7tTXFjcQGBgICoqKpQehs1efPFFnDhxAqGhoXjttdeUHo5kDQ0NqK2tha+vL65du4aIiAgcOnQIHTt2VHpokpSVleH8+fMYMGAAysvLMWjQIPz0009O9+d7z549qK6uxvvvv4/t27crPRyL3Lx5E+Hh4dizZw/8/PwwaNAgfPvtt3a75xYZ4xYeGd28eRM3btxAfX096uvr0blzZ6WHZJPPPvsMo0ePdrq/DJuiMzY2FgAQEBDglLHjKk6cOIEff/wRCQkJSg/Fam5ubvD19QUA3LhxAw0NDU65Bbdr164YMGAAAKBz584ICAjAxYsXlR2UFeLi4tC+fXulhyHJd999h/vvvx/dunVD+/btkZCQ0OwtFEh+rSZ4cnNzMX78eAQHB0Oj0ZjcTZORkYEePXrA29sbWq0W+/fvt3j5nTp1woIFCxAaGorg4GA89NBDuPfee2Vcg1vsvR63++ijjzBt2jQbR2zM3utw4sQJtGvXDhMmTMCgQYOwcuVKGUf/G0f8WlRVVUGr1WLYsGF2uSy7I9ZhwYIFSEtLk2nEpjliPS5fvozIyEiEhITg+eefR2BgoEyj/40j/3zn5+ejsbER3bt3t3HUhhy5Do5k63qdPXsW3bp10z8PCQnBmTNnHDF0+j+tJnhqamoQGRmJt99+2+TrmZmZmDdvHl588UUcOXIEsbGx0Ol0KCkp0c+j1WoRERFh9Dh79iwuXbqEnTt34tSpUzhz5gzy8vKQm5vrdOvRpKqqCgcOHLDLv8rtvQ719fXYv38/0tPT8e9//xs5OTlGlzp3hvUAgFOnTqGgoADvvPMOnnzySVRVVTnVOnz66afo3bs3evfuLeu4Hb0eANChQwccPXoUxcXF+Mc//oHz58875XoAQGVlJZ588kls2LDBadfB0WxdL1NbBKXcUJNkoOBFDxUDQOzYscNg2pAhQ8ScOXMMpt13331i4cKFFi3zo48+EsnJyfrnq1evFq+88orNY22OPdajyZYtW8Qf/vAHW4fYInusQ15enhgzZoz++erVq8Xq1attHmtz7Plr0eSRRx4Rhw4dsnaILbLHOixcuFCEhISIsLAw0bFjR+Hn5yeWLVsm15BNcsSvxZw5c8RHH31k7RAtYq/1uHHjhoiNjRVbtmyRY5jNsuevxZ49e8SUKVNsHaJVrFmvAwcOiEcffVT/2ty5c8UHH3xg97HSb1rNFp7m1NXVoaCgAPHx8QbT4+PjkZeXZ9Eyunfvjry8PP3+/b1796JPnz72GK5ZcqxHE3vtzmqJHOsQFRWF8+fP49KlS2hsbERubi769u1rj+GaJcd6XLp0CbW1tQCA06dPo6ioCPfcc4/sYzVHjnVIS0tDaWkpTp06hddeew1PPfUUFi9ebI/hmiXHepw/f16/da2qqgq5ublO+edbCIHp06dj1KhRSExMtMcwmyXn31FqYsl6DRkyBD/88APOnDmDq1evYteuXRgzZowSw221eCQngIqKCjQ0NCAoKMhgelBQEM6dO2fRMh588EEkJCRg4MCBaNOmDUaPHo0JEybYY7hmybEeAHDlyhV89913+Pjjj+UeYovkWAd3d3esXLkSw4cPhxAC8fHxGDdunD2Ga5Yc63H8+HE888wzaNOmDTQaDf7617869IwOuX4/KU2O9Th9+jRmzZoFIQSEEHjuuefQv39/ewzXLDnW48CBA8jMzET//v31x6Bs3boV/fr1k3u4Jsn1e2rMmDE4fPgwampqEBISgh07diAqKkru4VrMkvVyd3fH66+/jri4ODQ2NuL55593urP8nB2D5zZ37k8VQkjax7pixQqsWLFC7mFJZut6+Pv72+X4BClsXQedTgedTif3sCSzZT2io6Px/fff22NYktj6a9Fk+vTpMo3IOrash1arRWFhoR1GJZ0t6zFs2DA0NjbaY1iS2Pp7Sq1nN7W0XhMmTHD4P4TpN9ylhVvXOnFzczP6F0Z5eblRsauZK6yHK6wD4Brr4QrrAHA91MQV1sEUV10vV8PgAeDp6QmtVmt0Jk9OTg6io6MVGpV0rrAerrAOgGushyusA8D1UBNXWAdTXHW9XE2r2aVVXV2NkydP6p8XFxejsLAQAQEBCA0NRWpqKhITEzF48GAMHToUGzZsQElJCebMmaPgqI25wnq4wjoArrEerrAOANdDTevhCutgiquuV6uiyLlhCtizZ48AYPRISkrSz5Oeni7CwsKEp6enGDRokNi3b59yAzbDFdbDFdZBCNdYD1dYByG4HmriCutgiquuV2vCe2kRERGRy+MxPEREROTyGDxERETk8hg8RERE5PIYPEREROTyGDxERETk8hg8RERE5PIYPEREROTyGDxERETk8hg8RERE5PIYPETUKp06dQoajQaFhYVKD4WIHIDBQ0RERC6PwUPk4hoaGtDY2Kj0MBRTV1en9BCISAUYPEQOtn37dvTr1w8+Pj7o2LEjHnroIdTU1AAAGhsbsXz5coSEhMDLywsDBgzAF198oX/v3r17odFocPnyZf20wsJCaDQanDp1CgCwefNmdOjQATt37kR4eDi8vLzw66+/ora2Fs8//zy6d+8OLy8v9OrVC++++65+OUVFRUhISEC7du0QFBSExMREVFRUmF2PmTNnon///qitrQUA1NfXQ6vV4g9/+EOz63/s2DGMHTsWfn5+aN++PWJjY/HLL79YtP4A8P3332PUqFH6n9/TTz+N6upq/evTp0/Ho48+irS0NAQHB6N3794AgO+++w4DBw6Et7c3Bg8ejCNHjjQ7TiJyLQweIgcqKyvDf/3Xf2HmzJk4fvw49u7di8mTJ0MIAQD461//itdffx2vvfYa/vOf/2DMmDGYMGECTpw4Ielzrl27hrS0NGzcuBHHjh1D586d8eSTT+LDDz/Em2++iePHj+Odd95Bu3bt9OMaMWIEBgwYgPz8fHzxxRc4f/48fve735n9jDfffBM1NTVYuHAhAOCll15CRUUFMjIyzL7nzJkzGD58OLy9vfH111+joKAAM2fOxM2bNy1a/2vXruGRRx7BXXfdhUOHDmHbtm348ssv8dxzzxl8zldffYXjx48jJycHO3fuRE1NDcaNG4c+ffqgoKAAS5cuxYIFCyT9TInIyQkicpiCggIBQJw6dcrk68HBwWLFihUG06KiokRycrIQQog9e/YIAOLSpUv6148cOSIAiOLiYiGEEO+9954AIAoLC/Xz/PTTTwKAyMnJMfm5L730koiPjzeYVlpaKgCIn376yez65OXlCQ8PD/HSSy8Jd3d3sW/fPrPzCiHEokWLRI8ePURdXZ3J11ta/w0bNoi77rpLVFdX61///PPPRZs2bcS5c+eEEEIkJSWJoKAgUVtbq59n/fr1IiAgQNTU1OinrVu3TgAQR44caXbMROQauIWHyIEiIyMxevRo9OvXD4899hj+9re/4dKlSwCAqqoqnD17FjExMQbviYmJwfHjxyV9jqenJ/r3769/XlhYCDc3N4wYMcLk/AUFBdizZw/atWunf9x3330AoN/dZMrQoUOxYMEC/OUvf8Gf/vQnDB8+XP+aTqfTL+v+++/XjyM2NhYeHh5Gy7Jk/Y8fP47IyEi0bdvW4PXGxkb89NNP+mn9+vWDp6en/nnT+3x9fQ3GTkSth7vSAyBqTdzc3JCTk4O8vDzs3r0bb731Fl588UV8++236NixIwBAo9EYvEcIoZ/Wpk0b/bQm9fX1Rp/j4+NjsBwfH59mx9XY2Ijx48fjlVdeMXqta9euzb7vwIEDcHNzM9rttnHjRly/fh0A9IHT0jiA5tf/9v9v7n23B1HT+4iodeMWHiIH02g0iImJwbJly3DkyBF4enpix44d8PPzQ3BwML755huD+fPy8tC3b18AQKdOnQDcOuamiSXXkenXrx8aGxuxb98+k68PGjQIx44dw913342ePXsaPO6Mh9u9+uqrOH78OPbt24fs7Gy89957+te6deumX0ZYWBgAoH///ti/f7/JSLNk/cPDw1FYWKg/yBsADhw4gDZt2ugPTjYlPDwcR48e1QcYABw8eNDs/ETkghTdoUbUyhw8eFCsWLFCHDp0SPz666/io48+Ep6enmLXrl1CCCHeeOMN4efnJz788EPx448/ihdeeEF4eHiIn3/+WQghRF1dnejevbt47LHHxE8//SR27twp+vTpY3QMj7+/v9FnT58+XXTv3l3s2LFD/O///q/Ys2ePyMzMFEIIcebMGdGpUycxdepU8e2334pffvlFZGdnixkzZoibN2+aXJcjR44IT09P8dlnnwkhhNi4caNo3769+OWXX8yuf0VFhejYsaOYPHmyOHTokPj555/Fli1bxI8//mjR+tfU1IiuXbuKKVOmiO+//158/fXX4p577hFJSUn6z0hKShITJ040+NyrV6+KwMBA8V//9V/i2LFj4vPPPxc9e/bkMTxErQiDh8iBioqKxJgxY0SnTp2El5eX6N27t3jrrbf0rzc0NIhly5aJbt26CQ8PDxEZGSn+9a9/GSzjm2++Ef369RPe3t4iNjZWbNu2zaLguX79upg/f77o2rWr8PT0FD179hSbNm3Sv/7zzz+LSZMmiQ4dOggfHx9x3333iXnz5onGxkaTywoPDxdPP/20wfRJkyaJ6Ohos5EkhBBHjx4V8fHxwtfXV7Rv317ExsbqI8mS9f/Pf/4j4uLihLe3twgICBBPPfWUuHr1qv51U8EjhBD//ve/RWRkpPD09BQDBgwQH3/8MYOHqBXRCMGd20REROTaeAwPERERuTwGDxEREbk8Bg8RERG5PAYPERERuTwGDxEREbk8Bg8RERG5PAYPERERuTwGDxEREbk8Bg8RERG5PAYPERERuTwGDxEREbm8/w/v/oUt8uQIDAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "order_plot = 5\n", + "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace)\n", + " \n", + "fig, ax = plt.subplots()\n", + "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cbar = fig.colorbar(cs)\n", + "plt.gca().set_xscale('log')\n", + "plt.gca().set_yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n", + "plt.title(\"HELMHOLTZ recurrence error order = \"+str(order_plot))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -257,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -286,6 +261,29 @@ "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 1.06358757108645 \\cdot 10^{-10}$" + ], + "text/plain": [ + "1.06358757108645e-10" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compute_error_coord(recur_laplace, np.array([10e-4,1]), 6, derivs_laplace)" + ] + }, { "cell_type": "code", "execution_count": null, From adaf9c03355c8959d4cfa2b2e6daafad0450498c Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 21 Dec 2024 21:05:09 -0800 Subject: [PATCH 119/143] Why are the Laplace/Helmhotlz errors so similar? --- test/modified_recur.ipynb | 316 --------------- test/plot_normal_recurrence.ipynb | 367 ++++++++++++++++++ ...nce.ipynb => plot_taylor_recurrence.ipynb} | 0 3 files changed, 367 insertions(+), 316 deletions(-) delete mode 100644 test/modified_recur.ipynb create mode 100644 test/plot_normal_recurrence.ipynb rename test/{taylor_recurrence.ipynb => plot_taylor_recurrence.ipynb} (100%) diff --git a/test/modified_recur.ipynb b/test/modified_recur.ipynb deleted file mode 100644 index 34a2ba3d..00000000 --- a/test/modified_recur.ipynb +++ /dev/null @@ -1,316 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from sumpy.recurrence import _make_sympy_vec, get_processed_and_shifted_recurrence\n", - "\n", - "from sumpy.expansion.diff_op import (\n", - " laplacian,\n", - " make_identity_diff_op,\n", - ")\n", - "\n", - "from sumpy.recurrence import get_recurrence\n", - "\n", - "import sympy as sp\n", - "from sympy import hankel1\n", - "\n", - "import numpy as np\n", - "\n", - "import math\n", - "\n", - "import matplotlib.pyplot as plt\n", - "from matplotlib import cm, ticker" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "w = make_identity_diff_op(2)\n", - "laplace2d = laplacian(w)\n", - "n_init, order, recur_laplace = get_processed_and_shifted_recurrence(laplace2d)\n", - "\n", - "w = make_identity_diff_op(2)\n", - "helmholtz2d = laplacian(w) + w\n", - "n_init, _, recur_helmholtz = get_processed_and_shifted_recurrence(helmholtz2d)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "max_abs = .0000001\n", - "var = _make_sympy_vec(\"x\", 2)\n", - "rct = sp.symbols(\"r_{ct}\")\n", - "s = sp.Function(\"s\")\n", - "n = sp.symbols(\"n\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "def compute_derivatives(p):\n", - " var = _make_sympy_vec(\"x\", 2)\n", - " var_t = _make_sympy_vec(\"t\", 2)\n", - " g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))\n", - " derivs = [sp.diff(g_x_y,\n", - " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", - " for i in range(p)]\n", - " return derivs\n", - "derivs_laplace = compute_derivatives(8)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "def compute_derivatives_h2d(p):\n", - " k = 1\n", - " var = _make_sympy_vec(\"x\", 2)\n", - " var_t = _make_sympy_vec(\"t\", 2)\n", - " abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", - " (var[1]-var_t[1])**2)\n", - " g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", - " derivs_helmholtz = [sp.diff(g_x_y,\n", - " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", - " for i in range(p)]\n", - " return derivs_helmholtz\n", - "derivs_helmholtz = compute_derivatives_h2d(8)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "def evaluate_recurrence_lamb(coord_dict, recur, p, derivs_list, n_initial, n_order):\n", - " subs_dict = {}\n", - " subs_dict[s(-2)] = 0\n", - " subs_dict[s(-1)] = 0\n", - " for i in range(n_initial):\n", - " subs_dict[s(i)] = derivs_list[i].subs(coord_dict)\n", - " var = _make_sympy_vec(\"x\", 2)\n", - " for i in range(3, p):\n", - " exp = get_recurrence(recur, i)\n", - " f = sp.lambdify([var[0], var[1], s(i-1), s(i-2), s(i-3), s(i-4), s(i-5)], exp)\n", - " subs_dict[s(i)] = f(coord_dict[var[0]], coord_dict[var[1]], subs_dict[s(i-1)], subs_dict[s(i-2)],\n", - " subs_dict[s(i-3)], subs_dict[s(i-4)], subs_dict[s(i-5)])\n", - " subs_dict.pop(s(-2))\n", - " subs_dict.pop(s(-1))\n", - " return np.array(list(subs_dict.values()))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "def evaluate_true(coord_dict, p, derivs_list):\n", - " retMe = []\n", - " for i in range(p):\n", - " exp = derivs_list[i]\n", - " f = sp.lambdify(var, exp)\n", - " retMe.append(f(coord_dict[var[0]], coord_dict[var[1]]))\n", - " return np.array(retMe)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "def compute_error_coord(recur, loc, order, derivs_list):\n", - " var = _make_sympy_vec(\"x\", 2)\n", - " coord_dict = {var[0]: loc[0], var[1]: loc[1]}\n", - "\n", - " exp = evaluate_recurrence_lamb(coord_dict, recur, order+1, derivs_list)[order].evalf()\n", - " \n", - " true = derivs_list[order].subs(coord_dict).evalf()\n", - "\n", - " return (np.abs(exp-true)/np.abs(true))" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "def generate_error_grid(res, order_plot, recur, derivs):\n", - " x_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", - " y_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", - " res=len(x_grid)\n", - " plot_me = np.empty((res, res))\n", - " for i in range(res):\n", - " for j in range(res):\n", - " if abs(x_grid[i]) == abs(y_grid[j]):\n", - " plot_me[i, j] = 1e-16\n", - " else:\n", - " plot_me[i,j] = compute_error_coord(recur, np.array([x_grid[i],y_grid[j]]), order_plot, derivs)\n", - " if plot_me[i,j] == 0:\n", - " plot_me[i, j] = 1e-16\n", - " return x_grid, y_grid, plot_me" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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3S4hIcHksp944gk88cQTsozzdvfeey+2bt2KP/zhD4iKikJqaqr+woObNm3Cv/71LyxYsADTpk0zeq+pdQWAESNGtLjf/89//jP27duHP/zhD/D19TW7LGuuDRITE4Onn34aM2bMQH5+PoYPH462bduirKwM33zzDfr164dnn30W7dq1w+uvv47Zs2fjoYcewlNPPYWgoCCcPHkSR48exdtvvw0ASExMxPr16/HEE0/gqaeeQmVlJVavXm1z7EgZqxTz5s1DZmYmJk6ciIULF2LIkCG4fv069u3bh3HjxiEuLg6///3v8cEHHyAhIQF//OMfMWTIEHh4eOD06dPYs2cPJk6c2OyFH9evXw+dTocxY8Zg+vTp6NatGy5evIjjx4/j8OHD2LZtm9U/k/nz52PLli0YO3Ysli9fjrCwMHz++efIyMjAs88+a3RcjaUefvhhjBkzBi+88AKqqqoQExOD//znP1iyZAkGDhyIxMTEFpcxb948bNq0CWPHjsXLL7+MoKAgfPDBBwan+wO3jr176623kJSUhIsXL2Lq1Kno3LkzLly4gKNHj+LChQtW/yPC09NTtl3nr776KoqKijB69GiEhISgvLwc7777Lnbv3o2lS5cabU0japaih0yTVVo6k2rs2LGSztLq1q2b0bLNPYqLiw3O0mqOubO07r//fpPzX7hwwegsrSbHjh0TSUlJIiQkRHh4eIiAgADxyCOPiM8//9xo3qaztMw9ms4Mae4sreZ+Xrc/mtPSWWCbNm0SDzzwgGjbtq3w8fER9957r3jyySdFfn6+wXy7du0SI0aMEG3bthW+vr4iPDxcvPLKKwbzvP/++6Jv377C29tbhIeHi8zMTLNnaZn6dZNjrOZ+be8chxBCXLp0Sfzxj38UoaGhwsPDQ3Tu3FmMHTtW/Pjjj/p56uvrxWuvvSYiIyOFt7e3aNeunbjvvvvEM888I06cOGFynLc7evSo+N3vfic6d+4sPDw8RJcuXcSoUaMMzrRr7s9Sc79Xf/31V/H444+Ljh07Cg8PD9GnTx/x6quv6s/+EqL5n7c5169fFy+88IIICwsTHh4eomvXruLZZ58Vly5dMpgvLCxMjB071uQyioqKxMMPPyy8vb1FQECAmDVrlvj0009NnhW1b98+MXbsWBEQECA8PDxEt27dxNixYw3OcJRyNqPcPvvsMzFs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WAdTXHW9XE2r2aVVXV2NkydP6p8XFxejsLAQAQEBCA0NRWpqKhITEzF48GAMHToUGzZsQElJCebMmaPgqI25wnq4wjoArrEerrAOANdDTevhCutgiquuV6uiyLlhCtizZ48AYPRISkrSz5Oeni7CwsKEp6enGDRokNi3b59yAzbDFdbDFdZBCNdYD1dYByG4HmriCutgiquuV2vCe2kRERGRy+MxPEREROTyGDxERETk8hg8RERE5PIYPEREROTyGDxERETk8hg8RERE5PIYPEREROTyGDxERETk8hg8RERE5PIYPETUKp06dQoajQaFhYVKD4WIHIDBQ0RERC6PwUPk4hoaGtDY2Kj0MBRTV1en9BCISAUYPEQOtn37dvTr1w8+Pj7o2LEjHnroIdTU1AAAGhsbsXz5coSEhMDLywsDBgzAF198oX/v3r17odFocPnyZf20wsJCaDQanDp1CgCwefNmdOjQATt37kR4eDi8vLzw66+/ora2Fs8//zy6d+8OLy8v9OrVC++++65+OUVFRUhISEC7du0QFBSExMREVFRUmF2PmTNnon///qitrQUA1NfXQ6vV4g9/+EOz63/s2DGMHTsWfn5+aN++PWJjY/HLL79YtP4A8P3332PUqFH6n9/TTz+N6upq/evTp0/Ho48+irS0NAQHB6N3794AgO+++w4DBw6Et7c3Bg8ejCNHjjQ7TiJyLQweIgcqKyvDf/3Xf2HmzJk4fvw49u7di8mTJ0MIAQD461//itdffx2vvfYa/vOf/2DMmDGYMGECTpw4Ielzrl27hrS0NGzcuBHHjh1D586d8eSTT+LDDz/Em2++iePHj+Odd95Bu3bt9OMaMWIEBgwYgPz8fHzxxRc4f/48fve735n9jDfffBM1NTVYuHAhAOCll15CRUUFMjIyzL7nzJkzGD58OLy9vfH111+joKAAM2fOxM2bNy1a/2vXruGRRx7BXXfdhUOHDmHbtm348ssv8dxzzxl8zldffYXjx48jJycHO3fuRE1NDcaNG4c+ffqgoKAAS5cuxYIFCyT9TInIyQkicpiCggIBQJw6dcrk68HBwWLFihUG06KiokRycrIQQog9e/YIAOLSpUv6148cOSIAiOLiYiGEEO+9954AIAoLC/Xz/PTTTwKAyMnJMfm5L730koiPjzeYVlpaKgCIn376yez65OXlCQ8PD/HSSy8Jd3d3sW/fPrPzCiHEokWLRI8ePURdXZ3J11ta/w0bNoi77rpLVFdX61///PPPRZs2bcS5c+eEEEIkJSWJoKAgUVtbq59n/fr1IiAgQNTU1OinrVu3TgAQR44caXbMROQauIWHyIEiIyMxevRo9OvXD4899hj+9re/4dKlSwCAqqoqnD17FjExMQbviYmJwfHjxyV9jqenJ/r3769/XlhYCDc3N4wYMcLk/AUFBdizZw/atWunf9x3330AoN/dZMrQoUOxYMEC/OUvf8Gf/vQnDB8+XP+aTqfTL+v+++/XjyM2NhYeHh5Gy7Jk/Y8fP47IyEi0bdvW4PXGxkb89NNP+mn9+vWDp6en/nnT+3x9fQ3GTkSth7vSAyBqTdzc3JCTk4O8vDzs3r0bb731Fl588UV8++236NixIwBAo9EYvEcIoZ/Wpk0b/bQm9fX1Rp/j4+NjsBwfH59mx9XY2Ijx48fjlVdeMXqta9euzb7vwIEDcHNzM9rttnHjRly/fh0A9IHT0jiA5tf/9v9v7n23B1HT+4iodeMWHiIH02g0iImJwbJly3DkyBF4enpix44d8PPzQ3BwML755huD+fPy8tC3b18AQKdOnQDcOuamiSXXkenXrx8aGxuxb98+k68PGjQIx44dw913342ePXsaPO6Mh9u9+uqrOH78OPbt24fs7Gy89957+te6deumX0ZYWBgAoH///ti/f7/JSLNk/cPDw1FYWKg/yBsADhw4gDZt2ugPTjYlPDwcR48e1QcYABw8eNDs/ETkghTdoUbUyhw8eFCsWLFCHDp0SPz666/io48+Ep6enmLXrl1CCCHeeOMN4efnJz788EPx448/ihdeeEF4eHiIn3/+WQghRF1dnejevbt47LHHxE8//SR27twp+vTpY3QMj7+/v9FnT58+XXTv3l3s2LFD/O///q/Ys2ePyMzMFEIIcebMGdGpUycxdepU8e2334pffvlFZGdnixkzZoibN2+aXJcjR44IT09P8dlnnwkhhNi4caNo3769+OWXX8yuf0VFhejYsaOYPHmyOHTokPj555/Fli1bxI8//mjR+tfU1IiuXbuKKVOmiO+//158/fXX4p577hFJSUn6z0hKShITJ040+NyrV6+KwMBA8V//9V/i2LFj4vPPPxc9e/bkMTxErQiDh8iBioqKxJgxY0SnTp2El5eX6N27t3jrrbf0rzc0NIhly5aJbt26CQ8PDxEZGSn+9a9/GSzjm2++Ef369RPe3t4iNjZWbNu2zaLguX79upg/f77o2rWr8PT0FD179hSbNm3Sv/7zzz+LSZMmiQ4dOggfHx9x3333iXnz5onGxkaTywoPDxdPP/20wfRJkyaJ6Ohos5EkhBBHjx4V8fHxwtfXV7Rv317ExsbqI8mS9f/Pf/4j4uLihLe3twgICBBPPfWUuHr1qv51U8EjhBD//ve/RWRkpPD09BQDBgwQH3/8MYOHqBXRCMGd20REROTaeAwPERERuTwGDxEREbk8Bg8RERG5PAYPERERuTwGDxEREbk8Bg8RERG5PAYPERERuTwGDxEREbk8Bg8RERG5PAYPERERuTwGDxEREbm8/w/v/oUt8uQIDAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "order_plot = 5\n", - "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace)\n", - " \n", - "fig, ax = plt.subplots()\n", - "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "cbar = fig.colorbar(cs)\n", - "plt.gca().set_xscale('log')\n", - "plt.gca().set_yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"HELMHOLTZ recurrence error order = \"+str(order_plot))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHJCAYAAACBuOOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABo6ElEQVR4nO3de1xUdeL/8ffIZQAVFFESEfKehIKOWIKoZGKDl/LSurtFqFgZ9HOVtdKHP6+rUlbmlmCaW2a7342spP2ahVQqJmsJiltipS0KKorgBUEFhc/vD39MjjMDczkz58zwfj4e86g5c+bM5+BlXp6rSgghQEREROTC2sg9ACIiIiJ7Y/AQERGRy2PwEBERkctj8BAREZHLY/AQERGRy2PwEBERkctj8BAREZHLY/AQERGRy2PwEBERkctj8DihLVu2QKVSoaCgwOjr48ePx7333qs37d5774VKpTL6GDVqlNnLBoCTJ0/q3rts2TKj88ycOVM3z51GjRqF8PBwo++prKw0ucxjx45h+vTpCAkJgaenJwICApCQkIAvvvjCYN49e/ZApVLh448/NvtncOdjy5YtmD59eovz3f0zJlKqpj8Te/bskXsoVjl16hRmzpyJoKAgqNVqdOvWDZMmTZJ7WORk3OUeADlOTEwMXnvtNYPpvr6+Vi2vffv22LJlC5YsWYI2bX5r55qaGmzbtg2+vr6orq62erxNPv30U/zxj39Ez549sXjxYvTr1w/nz5/He++9h4SEBLzwwgtYs2ZNi8vZvn076urqdM83b96Mv/3tb/jyyy/h5+enm96rVy/ExsZi9uzZRpezZcsWbNy4kX/hEjnAjz/+iFGjRqFnz5547bXXEBwcjPLycuTk5Mg9NHIyDJ5WpEOHDnjwwQclW960adOwefNmfP311xgzZoxuelZWFhoaGvDYY4/h73//u02f8euvvyIxMREDBgzAnj170LZtW91rjz/+OJ577jm8+uqrGDx4MH7/+983u6xBgwbpPf/yyy8BABqNBgEBAXqvde7cGb169TJYxoEDB/Dee+9hxIgRePXVVy1en2vXrsHHx8fi99lLQ0MDbt26BbVabfCa0sbqKNevX4eXl5fB1knA9p9Jcz9vW12/fh3e3t6SL9cYR/3eEEIgMTER3bt3x759+/R+btOmTbP755Nr4S4tslq/fv0QHR2Nd999V2/6u+++i8mTJ+ttNbHWG2+8gWvXruGtt97Si50mr7/+Ojp06IBVq1bZ/FktOXfuHKZMmYLOnTvjo48+grt78/9eWLZsGVQqFQ4dOoSpU6eiY8eOuogSQiAzMxORkZHw9vZGx44dMXXqVPz3v/81WM6XX36J0aNHw8/PDz4+Pujfvz/S09N1r48aNUpvt2ST6dOn6+12a9oVuWbNGqxcuRI9evSAWq3G7t27JRlr0+7KgwcPIjY2Fj4+PujZsydefvllNDY26s17+fJl/PnPf0bPnj2hVqvRpUsXJCQk4KefftLNU19fj5UrV+K+++6DWq1G586dMWPGDFy4cKHZn3uTgoICTJw4Ef7+/vDy8sKgQYPw0Ucf6c3TtAt3165dmDlzJjp37gwfHx/U1dXp1icvLw/R0dHw8fHBzJkzAQClpaV48skn0aVLF6jVavTv3x+vv/663no29/M25caNG1i4cCF69OgBT09PdOvWDampqbh8+bLefPfeey/Gjx+PTz/9FIMGDYKXlxeWL18OAPjpp5/wyCOPwMfHBwEBAZg9ezauXr1q9PO++uorjB49Gr6+vvDx8UFMTAy+/vprvXma+71hb3l5eSgqKsLcuXPtEonUujB4nFjTvxbvfgghjM4vhLBofnMkJycjOzsbly5dAgD8/PPPyM/PR3JycrPvMzaOhoYGg/lyc3MRGBhocsuUj48P4uPj8eOPP+LcuXNWr0dLbt68iccffxyVlZX4+OOPERgYaPZ7J0+ejN69e2Pbtm14++23AQDPPvss5s6di4cffhjZ2dnIzMzE0aNHER0djfPnz+ve+7e//Q0JCQlobGzE22+/jf/93//FnDlzcPr0aavX5c0338Q333yD1157DV988QXuu+8+ScYK3I7CJ554Ak8++ST+9a9/QavVYuHChXpb+q5evYrhw4dj48aNmDFjBv73f/8Xb7/9Nvr27Yvy8nIAQGNjIx599FG8/PLL+OMf/4jPP/8cL7/8MnJzczFq1Chcv3692XXcvXs3YmJicPnyZbz99tv47LPPEBkZiWnTpmHLli0G88+cORMeHh744IMP8PHHH8PDwwMAUF5ejieffBJ//OMfsXPnTqSkpODChQuIjo7Grl278Je//AX/+te/8PDDD2P+/Pl4/vnnLfp530kIgcceewyvvfYaEhMT8fnnnyMtLQ3vv/8+HnroIb3dsQBw6NAhvPDCC5gzZw6+/PJLTJkyBefPn8fIkSPx448/IjMzEx988AFqamqMjuvvf/874uPj4evri/fffx8fffQR/P39MXbsWIPoAYz/3jDF2J9va/7uycvLA3B793lCQgK8vLzQrl07jB8/Xi+OicwiyOm89957AkCzj9DQUL33hIaGmpz3L3/5i8GyDx48aPLzS0pKBADx6quviqtXr4p27dqJ9evXCyGEeOGFF0SPHj1EY2OjSE1NFXf/Fhs5cmSLY1+6dKlufi8vL/Hggw82+/N46aWXBADx3XffCSGE2L17twAgtm3b1uz7li5dKgCICxcuNDufEEKkpKQIAOLtt99ucd67l79kyRK96f/+978FAPH666/rTS8rKxPe3t7ixRdfFEIIcfXqVeHr6yuGDx8uGhsbTX7OyJEjxciRIw2mJyUl6f0+aPp169Wrl6ivr5d0rE3juPPXoUlYWJgYO3as7vmKFSsEAJGbm2tynf75z38KAOKTTz7Rm37w4EEBQGRmZpp8rxBC3HfffWLQoEHi5s2betPHjx8vunbtKhoaGoQQv/1+f+qppwyW0bQ+X3/9td70BQsWGF3P5557TqhUKvHzzz8LIZr/eRvz5ZdfCgBizZo1etOzsrIEALFp0ybdtNDQUOHm5qb7rCYvvfSSUKlUoqioSG/6mDFjBACxe/duIYQQtbW1wt/fX0yYMEFvvoaGBhERESGGDh2qm2bq94YpTettzqNpPKY8++yzAoDw9fUVycnJ4quvvhIffPCBCA0NFQEBAeLs2bNmjYlICCF4DI8T27p1K/r3728wfd68eSgrKzOYPnz4cLzxxhsG07t162b1GNq1a4fHH38c7777Lp599lls3boVqampRo9/aNKrVy98+OGHBtOvXLmChx9+2OIxiP//r8TmPtMWW7ZsQWZmJmbOnIlnn33W4vdPmTJF7/mOHTugUqnw5JNP4tatW7rp99xzDyIiInRn0uTn56O6uhopKSmSrtvEiRN1WzCkGuud04cOHao3beDAgSgqKtI9/+KLL9C3b99mf6137NiBDh06YMKECXqfGxkZiXvuuQd79uzBc889Z/S9J06cwE8//aQ7QP/O9yckJGDHjh34+eef9f7s3L3eTTp27IiHHnpIb9o333yDsLAwg/WcPn06NmzYgG+++QZ9+/bVTW/u5333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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "order_plot = 6\n", - "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace)\n", - " \n", - "fig, ax = plt.subplots()\n", - "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "cbar = fig.colorbar(cs)\n", - "plt.gca().set_xscale('log')\n", - "plt.gca().set_yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"HELMHOLTZ recurrence error order = \"+str(order_plot))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "order_plot = 7\n", - "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace)\n", - " \n", - "fig, ax = plt.subplots()\n", - "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "cbar = fig.colorbar(cs)\n", - "plt.gca().set_xscale('log')\n", - "plt.gca().set_yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"HELMHOLTZ recurrence error order = \"+str(order_plot))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle 1.06358757108645 \\cdot 10^{-10}$" - ], - "text/plain": [ - "1.06358757108645e-10" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compute_error_coord(recur_laplace, np.array([10e-4,1]), 6, derivs_laplace)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "inteq", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/test/plot_normal_recurrence.ipynb b/test/plot_normal_recurrence.ipynb new file mode 100644 index 00000000..e04b0031 --- /dev/null +++ b/test/plot_normal_recurrence.ipynb @@ -0,0 +1,367 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from sumpy.recurrence import _make_sympy_vec, get_processed_and_shifted_recurrence\n", + "\n", + "from sumpy.expansion.diff_op import (\n", + " laplacian,\n", + " make_identity_diff_op,\n", + ")\n", + "\n", + "from sumpy.recurrence import get_recurrence\n", + "\n", + "import sympy as sp\n", + "from sympy import hankel1\n", + "\n", + "import numpy as np\n", + "\n", + "import math\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm, ticker" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "w = make_identity_diff_op(2)\n", + "laplace2d = laplacian(w)\n", + "n_init_lap, order_lap, recur_laplace = get_processed_and_shifted_recurrence(laplace2d)\n", + "\n", + "w = make_identity_diff_op(2)\n", + "helmholtz2d = laplacian(w) + w\n", + "n_init_helm, order_helm, recur_helmholtz = get_processed_and_shifted_recurrence(helmholtz2d)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "max_abs = .0000001\n", + "var = _make_sympy_vec(\"x\", 2)\n", + "rct = sp.symbols(\"r_{ct}\")\n", + "s = sp.Function(\"s\")\n", + "n = sp.symbols(\"n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_derivatives(p):\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " var_t = _make_sympy_vec(\"t\", 2)\n", + " g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))\n", + " derivs = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(p)]\n", + " return derivs\n", + "derivs_laplace = compute_derivatives(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_derivatives_h2d(p):\n", + " k = 1\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " var_t = _make_sympy_vec(\"t\", 2)\n", + " abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", + " (var[1]-var_t[1])**2)\n", + " g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", + " derivs_helmholtz = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(p)]\n", + " return derivs_helmholtz\n", + "derivs_helmholtz = compute_derivatives_h2d(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_recurrence_lamb(coord_dict, recur, p, derivs_list, n_initial, n_order):\n", + " subs_dict = {}\n", + " for i in range(n_initial-n_order, 0):\n", + " subs_dict[s(i)] = 0\n", + " for i in range(n_initial):\n", + " subs_dict[s(i)] = derivs_list[i].subs(coord_dict)\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " for i in range(n_initial, p):\n", + " exp = get_recurrence(recur, i)\n", + " f = sp.lambdify([var[0], var[1]] + [s(i-(1+k)) for k in range(n_order-1)], exp)\n", + " subs_dict[s(i)] = f(*([coord_dict[var[0]], coord_dict[var[1]]] + [subs_dict[s(i-(1+k))] for k in range(n_order-1)]))\n", + " for i in range(n_initial-n_order, 0):\n", + " subs_dict.pop(s(i))\n", + " return np.array(list(subs_dict.values()))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_true(coord_dict, p, derivs_list):\n", + " retMe = []\n", + " for i in range(p):\n", + " exp = derivs_list[i]\n", + " f = sp.lambdify(var, exp)\n", + " retMe.append(f(coord_dict[var[0]], coord_dict[var[1]]))\n", + " return np.array(retMe)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_error_coord(recur, loc, order, derivs_list, n_initial, n_order):\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " coord_dict = {var[0]: loc[0], var[1]: loc[1]}\n", + "\n", + " exp = evaluate_recurrence_lamb(coord_dict, recur, order+1, derivs_list, n_initial, n_order)[order].evalf()\n", + " \n", + " true = derivs_list[order].subs(coord_dict).evalf()\n", + "\n", + " \n", + "\n", + " return (np.abs(exp-true)/np.abs(true))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def generate_error_grid(res, order_plot, recur, derivs, n_initial, n_order):\n", + " x_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", + " y_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", + " res=len(x_grid)\n", + " plot_me = np.empty((res, res))\n", + " for i in range(res):\n", + " for j in range(res):\n", + " if abs(x_grid[i]) == abs(y_grid[j]):\n", + " plot_me[i, j] = 1e-16\n", + " else:\n", + " plot_me[i,j] = compute_error_coord(recur, np.array([x_grid[i],y_grid[j]]), order_plot, derivs, n_initial, n_order)\n", + " if plot_me[i,j] == 0:\n", + " plot_me[i, j] = 1e-16\n", + " return x_grid, y_grid, plot_me" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "order_plot = 5\n", + "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + " \n", + "fig, ax = plt.subplots()\n", + "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cbar = fig.colorbar(cs)\n", + "plt.gca().set_xscale('log')\n", + "plt.gca().set_yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n", + "plt.title(\"Laplace recurrence error order = \"+str(order_plot))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHJCAYAAACBuOOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABo3ElEQVR4nO3de1xUdeL/8ffIZUAFFFEUESRvSQjmiAqKihY2ppZpufv9LuJty4W+rrJuq+vXG6WUlVkrmGZltvvdyDapNXeRSoVkLUFpU8zURUHlEmgiqKDw+f3hj8lxZmAuZ+Ychvfz8ZjH7pw5c+ZzUJlX56oSQggQERERObEOcg+AiIiIyN4YPEREROT0GDxERETk9Bg8RERE5PQYPEREROT0GDxERETk9Bg8RERE5PQYPEREROT0GDxERETk9Bg87diOHTugUqmQn5/v0M89cOAAVCoVDhw44NDPJWpr1qxZA5VKJfcwrPbVV19h8uTJ6Nq1Kzw9PTFgwAA8//zzcg+L2ilXuQdARETO5//+7/8QHx+Pp556Cjt37kTnzp1x9uxZXLp0Se6hUTvF4CEyw/Xr19GxY0e5h6Fz48YNeHh4GP2vf6WN1VFMrbcQAjdv3oSnp6fVy27p522LxsZG3L59G2q1WtLlmuKovxsXL17E008/jWeeeQbp6em66bGxsXb/bCJTuEuLWnTz5k387ne/w9ChQ+Hj4wNfX19ERUXhk08+MZhXpVLh2WefxdatWzFw4ECo1WqEhobigw8+aPVz8vPz8Ytf/AJ9+/aFp6cn+vbti1/+8pc4f/68wbzNv0z79OkDd3d3BAQEYObMmaioqNDNU1NTg6VLlyIkJATu7u7o3bs3Fi9ejLq6ulbHMn78eISFhSEnJwfR0dHo2LEj5s2bZ9Fym5qa8Kc//QlDhw6Fp6cnunTpglGjRuHTTz/V+3mtWbPG4PP79u2LOXPm6J4373rct28f5s2bh+7du6Njx46or6+XZKzNf27vv/8+Bg8ejI4dOyIiIgJ79uwxGNv333+PX/7yl/D394darUZQUBBmz56N+vp63Tzl5eV45plnEBgYCHd3d4SEhGDt2rW4fft2qz97AMjIyEBUVBQ6deqEzp07Y9KkSTh27JjePHPmzEHnzp3x3XffIS4uDl5eXpg4caLe+rz55psYPHgw1Go13nvvPQB3drFMnDgRXl5e6NixI6Kjo/HZZ5/pLbuln7cpJSUl+NWvfoUePXpArVZj8ODBePXVV9HU1KSb59y5c1CpVNiwYQNeeOEFhISEQK1WY//+/QCAzz77DEOHDoVarUZISAheeeUVo58lhEB6erru71bXrl0xc+ZM/Oc//9Gbr6W/G/a2fft21NXV4Q9/+INDPo/IHNzCQy2qr6/H5cuXsXTpUvTu3RsNDQ34/PPP8cQTT+Ddd9/F7Nmz9eb/9NNPsX//fqSkpKBTp05IT0/HL3/5S7i6umLmzJkmP+fcuXMYNGgQfvGLX8DX1xdlZWXYsmULIiMjUVRUBD8/PwB3YicyMhK3bt3CH//4R4SHh6O6uhpZWVm4cuUK/P39cf36dYwbNw4XLlzQzXPixAmsWrUK3333HT7//PNW/0u9rKwMv/rVr/Dcc89h/fr16NChg0XLnTNnDv785z9j/vz5SElJgbu7O44ePYpz585Z/Wcxb948PProo3j//fdRV1cHNzc3ScYK3PmyPXLkCFJSUtC5c2ds2LAB06dPx6lTp3DfffcBAL799luMGTMGfn5+SElJwYABA1BWVoZPP/0UDQ0NUKvVKC8vx4gRI9ChQwesWrUK/fr1w7/+9S+88MILOHfuHN59990W13H9+vX43//9X8ydOxf/+7//i4aGBrz88suIiYnBN998g9DQUN28DQ0NmDZtGp555hksW7ZML6gyMzORm5uLVatWoWfPnujRowcOHjyIhx9+GOHh4Xj77behVquRnp6OqVOn4q9//StmzZpl1s/7Xj/++COio6PR0NCA559/Hn379sWePXuwdOlSnD17Vm8LBwC88cYbGDhwIF555RV4e3tjwIAB+OKLL/DYY48hKioKH3zwARobG7Fhwwa9iG/2zDPPYMeOHVi0aBFeeuklXL58GSkpKYiOjsa3334Lf39/3bzG/m6YIoRAY2Nji38+zVxdW/7qyMnJga+vL77//ns89thjOH78OHx9ffHEE09gw4YN8Pb2NutziCQlqN169913BQBx5MgRs99z+/ZtcevWLTF//nzx4IMP6r0GQHh6eory8nK9+e+//37Rv39/3bT9+/cLAGL//v0tfk5tba3o1KmTeP3113XT582bJ9zc3ERRUZHJ96ampooOHToYrNdHH30kAIi9e/e2uI7jxo0TAMQXX3xh1XJzcnIEALFixYoW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G15eXpg8eTKysrLkHhYREVG7I+d3suKDJycnB1OnTkVAQABUKhUyMzMN5klPT0dISAg8PDyg0WiQm5ure+3SpUvo3bu37nlgYCAuXrzoiKETERE5lbb8naz44Kmrq0NERITJM38yMjKwePFirFixAseOHUNMTAy0Wi1KSkoAGL8iqLXX2yAiImrP2vJ3suIvPKjVanU3HjRm48aNmD9/PhYsWAAA2LRpE7KysrBlyxakpqaid+/eevV44cKFFi+4Vl9fr3e5/6amJly+fBndunVjKBERUYuEELh27RoCAgLsdguNmzdvoqGhQZJlCSEMvtvUarXRW5cAjv9OlpR8lwCyHACxe/du3fP6+nrh4uIiPv74Y735Fi1aJMaOHSuEEOLWrVuif//+4sKFC6Kmpkb0799fVFVVmfyM5gt98cEHH3zwwYe1j9LSUrt8D964cUP09O8p2Tg7d+5sMG316tVmjQWw/3eylBS/haclVVVVaGxsNLhzsL+/v+6me66urnj11VcRGxuLpqYmPPfccy1ePn358uVITk7WPb969SqCgoJw5sQZeHl52WdFyCz//o/xm2qS45z96SYAoOhKncwjIQA48mMtii5dk3sYBKD2xztbLcStm2j6cLndvi8aGhpQXlGO0ydOw9vL26Zl1VyrwYAHBqC0tBTe3j8vy9TWndbY4ztZSm06eJrduzlO3LOJbtq0aZg2bZpZy2relJeWloa0tDTdzSu9vLz0/kKQYx07U4VOnRmccjl95QYAwLNTZxy/XAd1x84yj4gOV17DyepGqNQd5R5Ku1ZbeQEAoHL31Jtu70MgvL28JftO8vaWblmAtN/JUmrTwePn5wcXFxddOTarrKw0KExLJSUlISkpCTU1NZLczJGsU/XTDZRWcWuCnJpjBwCOX+afhdwOV97ZovPdhRqZR0LNsUN32PM7WQqKP0urJe7u7tBoNMjOztab3ny3ZlukpaUhNDQUkZGRNi2HrMfYkdfpKzcYOwrD2FGG2soLjB0j7PmdLAXFb+Gpra3FmTNndM+Li4tRWFgIX19fBAUFITk5GfHx8Rg+fDiioqKwbds2lJSUYOHChTZ9LrfwyIuxI5+7I6cZY0dezaEDMHbk1t5DR67vZCkoPnjy8/MRGxure958QHFCQgJ27NiBWbNmobq6GikpKSgrK0NYWBj27t2L4OBguYZM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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "order_plot = 6\n", + "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + " \n", + "fig, ax = plt.subplots()\n", + "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cbar = fig.colorbar(cs)\n", + "plt.gca().set_xscale('log')\n", + "plt.gca().set_yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n", + "plt.title(\"Laplace recurrence error order = \"+str(order_plot))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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enq6mDNnjrh9+3aj23LixAnh7OwsPv74YyGEENu3bxdubm7ixx9/NLn9ZWVlolu3bmLatGni2LFj4ocffhA7d+4U33//vVnbX1VVJXr16iWmT58uvv32W/H555+LBx54QMTGxurXERsbKx5//HGD9V6/fl14enqK3/zmN+LkyZPik08+Ef379+c5PETtCIOHqBXl5+eLCRMmiO7duwu1Wi0GDhwo/vrXv+pfr6urE2vWrBG9e/cWTk5OIjg4WPzzn/80WMYXX3whhg4dKlxcXERERITYvXu3WcFz8+ZNsXjxYtGrVy/h7Ows+vfvL95880396z/88IOYOnWq6NKli3B1dRUPPvigWLRokaivr290WQEBAeLpp582mD516lQRHh5uMpKEEOLrr78W0dHRomPHjsLNzU1EREToI8mc7f/mm29EVFSUcHFxER4eHuJ3v/uduH79uv71xoJHCCG+/PJLERwcLJydnUVISIj4+9//zuAhakdUQvDgNhEREdk3nsNDREREdo/BQ0RERHaPwUNERER2j8FDREREdo/BQ0RERHaPwUNERER2j8FDREREdo/BQ0RERHaPwUNERER2j8FDREREdo/BQ0RERHbv/wNHIFVfdXLeOwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "order_plot = 7\n", + "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + " \n", + "fig, ax = plt.subplots()\n", + "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cbar = fig.colorbar(cs)\n", + "plt.gca().set_xscale('log')\n", + "plt.gca().set_yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n", + "plt.title(\"Laplace recurrence error order = \"+str(order_plot))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "order_plot = 7\n", + "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_helmholtz, derivs=derivs_helmholtz, n_initial=n_init_helm, n_order=order_helm)\n", + " \n", + "fig, ax = plt.subplots()\n", + "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cbar = fig.colorbar(cs)\n", + "plt.gca().set_xscale('log')\n", + "plt.gca().set_yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n", + "plt.title(\"Helmholtz recurrence error order = \"+str(order_plot))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_65942/4137449632.py:6: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs = ax.contourf(x_grid, y_grid, (plot_me_hem7-plot_me_lap7).T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n" + ] + }, + { + "data": { + "image/png": "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jw/i4uIwZcoU9OvXD+Hh4di4cSMKCgowd+5cs9YVGxuL2NhY1cp3IiKils5a5+yGWDzs5OTkICoqSvW8bnHwtGnTsGXLFkyePBnXr1/H8uXLUVRUhICAAOzatQu+vr6WKpmIiKhFaq5ztlXdZ8eaPLxA+cyZM7zPDhERNaip7rNjOy3ZJJee3//spRYxv1n1mh1L4gJlIiIiaWDYISIiIklj2NGBV2MRERFJA8OODjyNRUREJA0MO0RERCRpDDtEREQkaQw7OnDNDhERkTQw7OjANTtERETSwLBDREREksawQ0RERJLGsKMD1+wQERFJA8OODlyzQ0REJA0MO0RERCRpDDtEREQkaQw7REREJGkMO0RERCRpDDs68GosIiIiaWDY0YFXYxEREUkDww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaw44OvM8OERGRNDDs6MD77BAREUkDww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJmuTDzunTpxESEqJ6ODg4YMeOHZYui4iIiLQYP3482rdvj0mTJqm1FxYWYujQofD390dQUBC2b9+ud5+2pi7S2vTq1Qu5ubkAgPLycnTp0gVPPvmkZYsiIiIirebPn4+ZM2fis88+U2u3tbXFe++9h5CQEFy7dg2hoaEYOXIkWrdu3WCfkj+y87B///vfGD58uF4fDBERETW9qKgotG3bVqO9U6dOCAkJAQC4u7vDxcUFN27c0KtPi4edjIwMjBkzBp6enpDJZFpPMSUnJ8PPzw8KhQJKpRKZmZmN2tfXX3+NyZMnG1kxERFRy9SUc3Z9cnJyUFtbC29vb722t/hprIqKCgQHB2PGjBmYOHGixuspKSlYsGABkpOTMXDgQHz00UeIiYlBXl4efHx8AABKpRKVlZUa792zZw88PT0BAGVlZThw4AC++uqreuuprKxU66usrMyY4REREVm1R+c5uVwOuVyuddummrPrc/36dUydOhWbNm3SZ3gAAJkQQui9tZnJZDKkpqZi3LhxqrYBAwYgNDQU69evV7X17t0b48aNQ2Jiot59f/7559i9eze2bdtW73YJCQlYtmyZRntpaSmcnJz03h8REbU8ZWVlcHZ2NtucUdd/qyfmQWanPZDoS1RXovbHdRrt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "order_plot = 7\n", + "x_grid, y_grid, plot_me_hem7 = generate_error_grid(res=5, order_plot=order_plot, recur=recur_helmholtz, derivs=derivs_helmholtz, n_initial=n_init_helm, n_order=order_helm)\n", + "x_grid, y_grid, plot_me_lap7 = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + " \n", + "fig, ax = plt.subplots()\n", + "cs = ax.contourf(x_grid, y_grid, (plot_me_hem7-plot_me_lap7).T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cbar = fig.colorbar(cs)\n", + "plt.gca().set_xscale('log')\n", + "plt.gca().set_yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n", + "plt.title(\"Helmholtz-Laplace recurrence error order = \"+str(order_plot))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(plot_me_hem7-plot_me_lap7).T" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "inteq", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb similarity index 100% rename from test/taylor_recurrence.ipynb rename to test/plot_taylor_recurrence.ipynb From ea51a1bcf9efe2d4698120a9015ab7281d9be85a Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 21 Dec 2024 21:33:13 -0800 Subject: [PATCH 120/143] =?UTF-8?q?=E2=99=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/order4.png | Bin 0 -> 42912 bytes test/order5.png | Bin 0 -> 46382 bytes test/order6.png | Bin 0 -> 47212 bytes test/order7.png | Bin 0 -> 46876 bytes test/plot_normal_recurrence.ipynb | 173 +++++------------------------- 5 files changed, 26 insertions(+), 147 deletions(-) create mode 100644 test/order4.png create mode 100644 test/order5.png create mode 100644 test/order6.png create mode 100644 test/order7.png diff --git a/test/order4.png b/test/order4.png new file mode 100644 index 0000000000000000000000000000000000000000..24b497f98a6330a83eb40702cc6846b6f14f8ac6 GIT binary patch literal 42912 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 Mv`zKqhM$iAAFz(YTmS$7 literal 0 HcmV?d00001 diff --git a/test/order5.png b/test/order5.png new file mode 100644 index 0000000000000000000000000000000000000000..aaacae9e568e112dacbeb5379978712e7c7a58ed GIT binary patch literal 46382 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

g&SN}@5l@(i$MG($yJaJ|`QK3cxX)HNaF>!H~ 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 literal 0 HcmV?d00001 diff --git a/test/order7.png b/test/order7.png new file mode 100644 index 0000000000000000000000000000000000000000..1c188aa17238469f314452cd068a604944530978 GIT binary patch literal 46876 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 G^1lG5kc(yj literal 0 HcmV?d00001 diff --git a/test/plot_normal_recurrence.ipynb b/test/plot_normal_recurrence.ipynb index e04b0031..5e8cae61 100644 --- a/test/plot_normal_recurrence.ipynb +++ b/test/plot_normal_recurrence.ipynb @@ -171,14 +171,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 41, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABN4AAALACAYAAABM/b/3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACcxUlEQVR4nOzdeXhU5d3/8c9AIIFAgIAEwxJQ3MYQoiEqKEqggkHUoljap7IoVpD4o4A+VkqVxSU+aim1BhR9CkVrRVpFaykY1AIKYkDiFqrSIotssgaCBAj37w+eTBmSSWaSmTnLvF/XlUvnzMk598ycYb75zPc+x2OMMQIAAAAAAAAQVg2sHgAAAAAAAADgRgRvAAAAAAAAQAQQvAEAAAAAAAARQPAGAAAAAAAARADBGwAAAAAAABABBG8AAAAAAABABBC8AQAAAAAAABFA8AYAAAAAAABEAMEbAAAAAAAAEAEEb2Eyb948eTwerV27ttr7Bw0apM6dO9dp2yNHjqzz7wbSp08fpaenh3WbHo9HU6dO9d0uKSnR1KlT9c0334R1P3Cuzp07a+TIkXX63ccee0yLFi2qsvwf//iHPB6P/vGPf9RrbLHkd7/7nbp27arGjRvL4/HowIEDVg+pTvr06aM+ffpYPYx6u+222+TxeDRo0CCrhwKgnmqrByOFz0JE0pk1frCOHDmiqVOnVntcVr5X+DsheL/61a/UqVMnxcXFqWXLllYPp87q8/eAXRhjdPXVV8vj8eiee+6xejhwAII3RExJSYmmTZvGByrCIlDwdumll2r16tW69NJLoz8oByouLta4ceOUk5Ojd999V6tXr1bz5s2tHlbM+tvf/qZFixYpKSnJ6qEAABBWR44c0bRp06oN3q6//nqtXr1aZ599dvQH5kBvvPGGHn30UQ0fPlzLly/XsmXLrB5STCsoKNDGjRutHgYchOANjnfkyBGrh+Dn+PHjOnHiRLX32W2s9WWHx5OUlKQrrrjCUcGFMUbff/99tfd9//33MsbUa/s1vS5ffPGFJOlnP/uZrrrqKl1xxRVq2LBhxPZXH+F4LoJV02sSKQcPHtTo0aP18MMPq1WrVlHdNwBYzQ41xOlq+syx21jrK9qfd9U566yzdMUVVyg+Pt7qoQStoqJC5eXl1d4XjmOkptfl888/lySNGzdOV155pXr06FHv/UXquI7m+6Wm1yRSvvnmG02aNEkFBQVR3S+cjeDNQsYYzZo1S5mZmWrSpIlatWqlIUOG6N///netv1vZ1jp37lxdcMEFatKkiXr06KEPP/xQxhg9+eST6tKli5o1a6a+ffsGTOSLiorUu3dvNW3aVOecc44ef/xxnTx50m+dLVu26LbbblPbtm0VHx+viy66SL/+9a+rrHe6efPm6dZbb5Uk5eTkyOPxyOPxaN68eb7pENX91DalduTIkWrWrJk+++wz9e/fX82bN1e/fv0kSceOHdMjjzyiCy+8UPHx8TrrrLN0++2367vvvquynZdfflk9e/ZUs2bN1KxZM2VmZup///d/ffcHaoE+c2pb5WN58cUXde+996p9+/aKj4/Xxo0bwzLWzp07a9CgQVqyZIkuvfRSNWnSRBdeeKF+//vfVxnbt99+q7vuuksdO3ZU48aNlZqaqiFDhmjXrl2+dUpLS3XfffepS5cuaty4sdq3b6/x48errKysxue98rGnp6drxYoV6tWrl5o2bao77rijXts9evSo7r33XmVmZqpFixZKTk5Wz5499cYbb/it5/F4VFZWpj/84Q++Y6XydThzes3MmTPl8XiqPeZ/8YtfqHHjxtqzZ49v2bJly9SvXz8lJSWpadOmuvLKK/XOO+/U+nyE8rgr36/PPvusLrroIsXHx+sPf/iDb5rF22+/rTvuuENnnXWWmjZtqvLycp08eVJPPPGE7xhp27athg8frm3btgX9upypT58+uu222yRJl19+uTwej99x/vvf/17du3dXQkKCkpOTNXjwYG3YsMFvGzUd14G8//776tevn5o3b66mTZuqV69e+tvf/ua3Tk3PhTFGTzzxhNLS0pSQkKBLL71Uf//73yPymkTTvffeq7PPPlvjxo2L6n4BWCvYzz7pP/9WPffcczr//PMVHx8vr9erV155pdb9rF27Vj/+8Y/VuXNnNWnSRJ07d9ZPfvITbd68ucq6TqghTp48qd/97ne+urlly5a64oor9Oabb/o9X9VNiTyzrqvpMyccY6183V588UVddNFFatq0qbp376633nqrytj++c9/6ic/+YlSUlIUHx+vTp06afjw4X5hws6dOzV69Gh16NBBjRs3VpcuXTRt2rSAX/Se+dgHDRqk1157TZdccokSEhI0bdq0em33u+++09ixY+X1etWsWTO1bdtW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+zfD888/r+eff16vv/66fvjDHwY9NsQWgjeLDBo0SI8//ri+/fZb/ehHP7J6OAH169dP+fn5+vjjj3XppZf6ls+fP18ej0c5OTkBf7cyPKzu0ti/+tWvNHfuXP3hD3/QD37wg3qPc9CgQXrllVdUUVGhyy+/POB6/fv3V8OGDTV79mz17Nkz4HqdO3fWp59+6rfsq6++0pdfflmvsDGUsYYiNzdXL774or788ktdcMEFAff72GOPqXXr1urSpUtY9lvf7Xo8HjVu3NjvA3Tnzp3VXtntzC6/2tx+++164okn9Kc//Unz5s1Tz549deGFF/ruv/LKK9WyZUuVlJTonnvuCWncUuSeT0m+aQAvvfSSX5FWVFSkDRs2aPLkyWHdX8+ePdWkSRO99NJLvqsRS6cC6nfffbfGrsCaJCYm6vLLL9drr72mp556Sk2aNJF0qrvrpZdeUocOHWqdYnHFFVcoISFBf/zjH/2mMaxatUqbN2/2C94i+ZpMnTo1qOOktuD8uuuuq/bqWz/+8Y/VpUsX5efnq2vXrnUeJwD7C+WzT5Leeecd7dq1y/dlUEVFhRYsWKBzzz03YLeUx+ORMabKF7kvvPCCKioq/JY5oYbIzc1Vfn6+Zs+erenTpwdcr7r67d1339Xhw4ejNtZgNWnSRNdcc40WLlyoRx99NGB9OWjQIC1evFjnnntu0KdHCEZ9tuvxeKocW59++qlWr17t98V2TX8LBHL77bfr1Vdf1eLFi/XSSy9p8ODBfqeiGTBggOLi4vSvf/0rqNNenClSz6d06u+mJ554Qi+99JImTJjgW/6Xv/xFZWVltV4FPlSRqhcvuOACtW/fXi+//LLuu+8+379VZWVl+stf/uK70mlN+vTpI0n64x//qKysLN/yV199tcpVcyP5mjz33HNBBcK1/X03cuRI32M6XU5Ojn74wx/q5z//uW86NFAdgjeLXHnllbrrrrt0++23a+3atbr66quVmJioHTt26P3331e3bt109913Wz1MTZgwQfPnz9f111+v6dOnKy0tTX/72980a9Ys3X333TX+0Vz5j8+cOXPUvHlzJSQkqEuXLnr33Xf16KOPasiQITr//PP14Ycf+n4nPj5el1xyScjj/PGPf6w//vGPGjhwoH7+85/rsssuU6NGjbRt2za99957uummmzR48GB17txZv/zlL/Xwww/r+++/109+8hO1aNFCJSUl2rNnj+8y3sOGDdNtt92msWPH6pZbbtHmzZv1xBNP1HgOjnCPNRTTp0/X3//+d1199dX65S9/qW7duunAgQNasmSJJk6cqAsvvFDjx4/XX/7yF1199dWaMGGCMjIydPLkSW3ZskVvv/227r333joFgfXZbuVl1MeOHashQ4Zo69atevjhh3X22Wfr66+/9lu3W7du+sc//qG//vWvOvvss9W8efOAfyBI0oUXXqiePXsqPz9fW7du1Zw5c/zub9asmX73u99pxIgR2rdvn4YMGaK2bdvqu+++0yeffKLvvvuuyje54Xrctbngggt011136Xe/+50aNGig3NxcffPNN3rwwQfVsWNHv2IuHFq2bKkHH3xQv/zlLzV8+HD95Cc/0d69ezVt2jQlJCRoypQpdd52fn6+rr32WuXk5Oi+++5T48aNNWvWLH3++ef605/+VOu3lq1atdJ9992nRx55RHfeeaduvfVWbd26VVOnTq0yfSGSr0nnzp2rnXYfqnbt2lU7VSohIUGtW7eutqgD4DzvvvuuvvnmmyrLBw4cGNJnn3TqD8K+ffvqwQcfVGJiombNmqV//vOfeuWVVwLuPykpSVdffbWefPJJtWnTRp07d9by5cv1v//7v1XOp+uEGqJ3794aNmyYHnnkEe3atUuDBg1SfHy81q9fr6ZNm+r//b//J+lU/fbggw/qoYce0jXXXKOSkhI988wzatGiRchjq+tYQzFjxgxdddVVuvzyy/XAAw+oa9eu2rVrl958800999xzat68uaZPn67CwkL16tVL48aN0wUXXKCjR4/qm2++0eLFi/Xss8/W6RQq9dnuoEGD9PDDD2vKlCm65ppr9OWXX2r69Onq0qWLX6jSvHlzpaWl6Y033lC/fv2UnJzsOx4D6d+/vzp06KCxY8dq586dfrMVpFOfx9OnT9fkyZP173//W9ddd51atWqlXbt26aOPPlJiYqKvng/3467NtddeqwEDBugXv/iFSktLdeWVV+rTTz/VlClTdMkll2jYsGF12m4gkaoXGzRooCeeeEI//elPNWjQII0ePVrl5eV68skndeDAAT3++OO1buOiiy7SbbfdppkzZ6pRo0b6wQ9+oM8//1xPPfVUldOVRPI1qelvhVDUVAe2b9+e+g21s/DCDq5S21Wsrr/++ipXJjXGmN///vfm8ssvN4mJiaZJkybm3HPPNcOHDzdr1671rRPoqqZnXkGl8kovTz75pN/yyitdnX7Z+WuuucZcfPHFVcZT3b42b95s/uu//su0bt3aNGrUyFxwwQXmySefrHLZZVVz1aKZM2eaLl26mIYNGxpJZu7cub6r31T3U91zdOb4EhMTq73v+PHj5qmnnjLdu3c3CQkJplmzZubCCy80o0ePNl9//bXfuvPnzzfZ2dm+9S655BIzd+5c3/0nT540TzzxhDnnnHNMQkKC6dGjh3n33XcDXtX09Oc2nGMNdKXDM8dhzKkr4t5xxx2mXbt2plGjRiY1NdX86Ec/Mrt27fKtc/jwYfOrX/3KXHDBBaZx48amRYsWplu3bmbChAl+V0yrTqBjJpTtVndV08cff9x07tzZxMfHm4suusg8//zzvmPkdMXFxebKK680TZs29bt6ZE1XcpszZ47vinAHDx6sduzLly83119/vUlOTjaNGjUy7du3N9dff321r2ldH3d171djav53o6KiwvzP//yPOf/8802jRo1MmzZtzG233ea7fHylml6X6tS0zxdeeMFkZGT4HstNN91U5WppNR3XgaxcudL07dvX9+/cFVdc4bu6bDDjOnnypMnPzzcdO3Y0jRs3NhkZGeavf/1rte+D+r4mVuGqpoA71HaV+8orOAb72Vf5b9WsWbPMueeeaxo1amQuvPBC88c//tFvveo+C7dt22ZuueUW06pVK9O8eXNz3XXXmc8//7zaz2In1BAVFRXmN7/5jUlPT/et17NnT7/Pk/LycnP//febjh07miZNmphrrrnGFBcXB7yqaXWfOeEYa6DPmOqe+5KSEnPrrbea1q1bm8aNG5tOnTqZkSNHmqNHj/rW+e6778y4ceNMly5dTKNGjUxycrLJysoykydPNocPH652rKfvM9DnS7DbPbPGLy8vN/fdd59p3769SUhIMJdeeqlZtGhRtX9HLFu2zFxyySUmPj7e7+qR1V3VtNIvf/lLI8l07Nixyt8blRYtWmRycnJMUlKSiY+PN2lpaWbIkCFm2bJlNT4fwT7uQH9XGVP9FUYrff/99+YXv/iFSUtLM40aNTJnn322ufvuu83+/fv91gv1cz/QPiNVLxpz6jm+/PLLTUJCgklMTDT9+vUzH3zwQVDjMubUcXLvvfeatm3bmoSEBHPFFVeY1atXV/s+qO9rYhW71ZOwL48xQZxtEAAAAEBUeTwe5eXl6ZlnnrF6KAAAoI5qvnwHAAAAAAAAgDqJieDtrbfe0gUXXKDzzjtPL7zwgtXDAQAADjR48GC1atWqygVHDh06pOzsbGVmZqpbt256/vnnLRphbKLOAwAA4RCo1qt05MgRpaWl6b777gtpu66fanrixAl5vV699957SkpK0qWXXqo1a9YoOTnZ6qEBAAAHee+993T48GH94Q9/0J///Gff8oqKCpWXl6tp06Y6cuSI0tPTVVRUpNatW1s42thAnQcAAMIlUK1XafLkyfr666/VqVMnPfXUU0Fv1/Udbx999JEuvvhitW/fXs2bN9fAgQO1dOlSq4cFAAAcJicnR82bN6+yvGHDhmratKkk6ejRo6qoqJDLv9e0Deo8AAAQLoFqPUn6+uuv9c9//lMDBw4Mebu2D95WrFihG264QampqfJ4PFq0aFGVdWbNmqUuXbooISFBWVlZWrlype++7du3q3379r7bHTp00LfffhuNoQMAgCipb71QXwcOHFD37t3VoUMH3X///WrTpk3Ytu1m1HkAACAYVtd69913n/Lz8+v0u7YP3srKytS9e/eAV3NasGCBxo8fr8mTJ2v9+vXq3bu3cnNztWXLFkmq9htnj8cT0TEDAIDoqm+9IElZWVlKT0+v8rN9+/Za99+yZUt98skn2rRpk15++WXt2rUrbI/NzajzAABAMKys9d544w2df/75Ov/88+s09rg6/VYU5ebmKjc3N+D9M2bM0KhRo3TnnXdKkmbOnKmlS5dq9uzZys/PV/v27f2++dy2bZsuv/zygNsrLy9XeXm57/bJkye1b98+tW7dmkIOAGALxhgdOnRIqampatAgst+hHT16VMeOHYvoPgIxxlT57I2Pj1d8fHyVdetbL0jSunXr6j3mlJQUZWRkaMWKFbr11lvrvT23o84DAMAfdV7VOk+yttb78MMP9corr2jhwoU6fPiwjh8/rqSkJD300EPBbcA4iCTz+uuv+26Xl5ebhg0bmtdee81vvXHjxpmrr77aGGPM8ePHTdeuXc22bdtMaWmp6dq1q9mzZ0/AfUyZMsVI4ocffvjhhx/b/2zdujUin7eVvv/+e5OS0s6yx9esWbMqy6ZMmVLruKXQ64Vgvffee+aWW27xW7Zz505z8OBBY4wxBw8eNF6v13zyySchbRfUefzwww8//PBz+k806ry2Z6VY9vjqWucZE/1a73Rz58419957b0jbtH3HW0327NmjiooKpaSk+C1PSUnRzp07JUlxcXH69a9/rZycHJ08eVL3339/jVcZmzRpkiZOnOi7ffDgQXXq1Emr3v9UzZpVf5I9AACi6fDhQ+p1VUbAk7+Gy7Fjx7Rr10599fnXSmqeFNF9nan0UKnOTz9PW7duVVLSf/Yd6FvQmgRTLwRjwIAB+vjjj1VWVqYOHTro9ddfV3Z2trZt26ZRo0bJGCNjjO655x5lZGSEPE74i2adN3rWEsU3SYzMAwEAGylYttbqIaAGeT/oofLvy/Tc2OuiUuft/m6XPlr9WdSzjsOHD+mynt3CUudJka/16svRwVulM9sTzRktizfeeKNuvPHGoLYVqLWxWbPmET/wAQAIRbSmxiU1T/IriqIpKSl8+66tXqhNoKtlZmVlqbi4uD5DQw2iUefFN0lUfNNm9RsoADiAp3ETq4eAACZc53+qhGjVeaeyDufXeVLkar3TjRw5MtRh2f/iCjVp06aNGjZsWCXB3L17d5WkEwAAxCbqBWfidQMAAMGwe83g6OCtcePGysrKUmFhod/ywsJC9erVq17bLigokNfrDUtbIQAAsE4k6wVEDnUeACBWnNnthtDYvdaz/VTTw4cPa+PGjb7bmzZtUnFxsZKTk9WpUydNnDhRw4YNU48ePdSzZ0/NmTNHW7Zs0ZgxY+q137y8POXl5am0tFQtWrSo78MAAAARZFW9gPqhzgMAxDpCt+A4udazffC2du1a5eTk+G5XnhB3xIgRmjdvnoYOHaq9e/dq+vTp2rFjh9LT07V48WKlpaVZNWQAABBl1AvOxOsGAIhlhG7Bc3LN4DHGGKsHYWeV34R+WryJiysAAGzh0KFDysjsooMHD0b0ogeVn4E7N++K+sUVSktL1S4tJeKPEbGt8hgfN3clF1cAEBN+s2SN1UPAaaoL3sqPHNbTt/eOWp1X8tk3Ub+4wqFDpfJ26xwzdZ6jz/EWSZz7AwAAwJ2o8wAAVqPbLXYQvAWQl5enkpISFRUVWT0UAAAAhBF1HgDASoRusYXgDQAAAAAAAIgAgjcAAAAAAIAooNst9hC8BcC5PwAAANyJOg8AYAVCt9hE8BYA5/4AAABwJ+o8AAAQLQRvAAAAAAAAEUS3W+wieAMAAAAAAIgQQrfYRvAGAAAAAAAARADBWwCcdBcAAMCdqPMAANFCtxsI3gLgpLsAAADuRJ0HAIgGQjdIBG8AAAAAAABARBC8AQAAAAAAhBHdbqhE8AYAAAAAABAmhG44HcEbAAAAAABAGBC64UwEbwFwtSsAAAB3os4DAADRQvAWAFe7AgAAcCfqPABAJNDthuoQvAEAAAAAANQDoRsCIXgDAAAAAAAAIoDgDQAAAAAAoI7odkNNCN4AAAAAAADqgNANtSF4AwAAAAAAACKA4A2ukJKcaPUQAAAAAAAxhG43BIPgLYCCggJ5vV5lZ2dbPRQEifANAAAEgzoPAFBfhG4IFsFbAHl5eSopKVFRUZHVQ0EICN8AAEBtqPMAAEC0ELzBdQjfAAAAAACRQrcbQkHwBgAAAAAAEARCN4SK4A2uRNcbAAAAAACwGsEbHC9QyEb4BgAAAAAIF7rdUBcEb3A1wjcAAAAAQH0RuqGuCN7geoRvAAAAAADACgRviAmEbwAAAACAuqDbDfVB8BZAQUGBvF6vsrOzrR4KAAAAwog6DwAQLEI31BfBWwB5eXkqKSlRUVGR1UNBmND1BgAAJOo8AEBwCN0QDgRviCmEbwAAAAAAIFoI3hBzCN8AAAAAADWh2w3hQvCGmET4BgAAAACoDqEbwongDTGL8A0AAAAAAEQSwRscjfAMAAAAABAudLsh3AjeENMI7gAAAAAAEqEbIoPgDTGP8A0AAAAAAEQCwRsgwjcAAAAAiGV0uyFSCN6A/0P4BgAAANTNuMvTrB4CUGeEbogkgjfgNIRvAADEnjE9Olo9BMAVCN8AoCqCNwAAAAAAEJPodkOkEbwBZ6DrDQCA2EOnDlB3p79/eC/BSQjdEA0EbwEUFBTI6/UqOzvb6qHAAoRvAAC4V6A6j8AACA/eSwDwHwRvAeTl5amkpERFRUVWDwUWIXwDAMCdaqrzCAwAIDbQ7YZoIXgDakD4BgAAAISOEBt2RuiGaCJ4g2NFKxQjfAMAILYQGADhwXsJdkTohmgjeAMAAADOQGAAAADCgeANCAJdbwAAxB7CN6D+eB/BTuh2gxUI3oAgEb4BAAAAoSN8gx0QusEqBG9ACAjfAACILQQGAACgPgjegBARvgEAEFsI34D6430EK9HtBisRvAF1QPgGAEBsITQA6o/3EaxA6AarEbwBdUT4BgBAbCE0AAAAoSJ4AwAAAADUSaiBNAE2ooluN9gBwRtQD3S9AQAQWwgNAMAZCN1gFwRvQD0RvgEAEFsI34D64T0EIJYQvMGR7BZ22W08AAAgsggOgPrhPYRIotsNdkLwBoQJ4RsAAAAAWIvQDXZD8AaEEeEbAACxg44doH54DwGIBTERvA0ePFitWrXSkCFDrB4KAABwqJrqibi4OGVmZiozM1N33nmnBaOLXVbXeQQHQP3wHkI40e0GO4qJ4G3cuHGaP3++1cNAjKDrDQDcqaZ6omXLliouLlZxcbFeeOGFKI8sttmhziM4AADrEbrBrmIieMvJyVHz5s2tHgZiCOEbALgP9YQ92eV1IXwD6o73D+qL0A12ZnnwtmLFCt1www1KTU2Vx+PRokWLqqwza9YsdenSRQkJCcrKytLKlSujP1AgRIRvABA9VtcTpaWlysrK0lVXXaXly5eHbbtOZ/XrAsA5CN8AuJXlwVtZWZm6d++uZ555ptr7FyxYoPHjx2vy5Mlav369evfurdzcXG3ZssW3TlZWltLT06v8bN++PVoPA6gW4RsARIfV9cQ333yjdevW6dlnn9Xw4cNVWloatsfmZFa/LtFGcAAA0Ue3G+wuzuoB5ObmKjc3N+D9M2bM0KhRo3wnKp45c6aWLl2q2bNnKz8/X5K0bt26sI2nvLxc5eXlvtsUzqivlORE7dpXZvUwAMCRzvwcjo+PV3x8fJX1rK4nUlNTJUnp6enyer366quv1KNHjzpvzy2sfl3OFI06b9zlaXp6zeawbxewo3CHzbx/ECpCNziB5R1vNTl27JjWrVun/v37+y3v37+/Vq1aFZF95ufnq0WLFr6fjh07RmQ/AAA4xe79R7RrX1lUf3bvPyJJ6tixo9/ncmUYE4pI1xP79+/3hTnbtm1TSUmJzjnnnHpv1+3cXOfR+QbUHe8fAG5jecdbTfbs2aOKigqlpKT4LU9JSdHOnTuD3s6AAQP08ccfq6ysTB06dNDrr7+u7OzsatedNGmSJk6c6LtdWlpK+GYzTpy+SdcbANTN1q1blZSU5LtdXbdbbSJdT2zYsEGjR49WgwYN5PF49Nvf/lbJyckhjzPWUOcBAOqDbjc4ha2Dt0oej8fvtjGmyrKaLF26NOh1A01hAeqL8A0AQpeUlOQXvNVHpOqJXr166bPPPqvX2GKZW+s8pswBdcf7B7UhdIOT2HqqaZs2bdSwYcMq33ru3r27yrejgBM4sVsPAJyOesKeYuF1YcocAACwdfDWuHFjZWVlqbCw0G95YWGhevXqFdF9FxQUyOv1BpyqANQV4RsARJeV9QQCi5U6j/ANqBveOwiEbjc4jeVTTQ8fPqyNGzf6bm/atEnFxcVKTk5Wp06dNHHiRA0bNkw9evRQz549NWfOHG3ZskVjxoyJ6Ljy8vKUl5en0tJStWjRIqL7Quxh2ikAhJdd64lYZ9fXJdp1HtPmgLrhvYMzEbrBiSwP3tauXaucnBzf7coT3o4YMULz5s3T0KFDtXfvXk2fPl07duxQenq6Fi9erLQ0vgEBAACnUE/YE68LAACIdR5jjLF6EHZW+U3op8Wb1Lx5c6uHA7lrqiZdbwDq4tChQ8rI7KKDBw+G7cID1bHyMzBajxGxrfIYL/nsGzVvHvnjjM4duE20poPy3gmf3yxZY/UQ6ixWut3KjxzW07f3jlqdF63PwNMdOlQqb7fOMVPn2focb1biHG+IBjeFiAAAOIVVdR7nrALqhvcOYiV0gzsRvAWQl5enkpISFRUVWT0UuBzhGwAA0WVlnUeAAABAbCF4A2yA8A0AAAAIjNA6dtHtBqcjeANsgvANAIDYQIAAN7DiOOa9E3sI3eAGBG8BcI43eyKcAgAA9WWHOo8AAQCA2EDwFgDneIMVCBYBAIg8u9R5hG9A6HjfxA663eAWBG+AzRC+AQAAAIERvrkfoRvchOANsCHCNwAAYgMBAgD4I3SD2xC8ATZF+AYAQGwgfANCx/sGgFMQvAVgh5PuAoRvAACEnx3rPEIEIHS8b9yHbje4EcFbAHY56S4AAADCy651HiECgFhG6Aa3IngDbI6uNwAAAKB6BNYA7I7gDXAAwjcAAGIDIQKAWES3G9yM4A1wCMI3AABiA+EbEBreM85G6Aa3I3gDHITwDQCA2ECQAISG9wwAuyJ4C8COV7uKdYROp/A8AABQP9R5QP0QciFc6HZDLCB4C8CuV7sCJMI3AADqwyl1HuEGEBreM85C6IZYQfAGAAAA2BRBAhAa3jMA7IbgDXAout4AAIgNBAkA3IZuN8QSgjfAwQjfAACIDYRvQPB4v9gboRtiDcEb4HCEbwAAAIA/wjcAdkHwBrgA4RsAAO5HkADA6eh2QywieANcgvANAAD3I3wDgsf7xV4I3RCrCN4CKCgokNfrVXZ2ttVDAQAAQBg5vc4jTACCx/vFHgjdEMsI3gLIy8tTSUmJioqKrB4KEDS63gAAqB11HgAAiBaCN8BlCN8AAHA/uniA4PF+sRbdboh1BG9wBMKk0PB8AQDgfoQJAOyO0A0geANci/ANAAD3I3xDtDn1mHPquAE4H8Eb4GKEbwAAAMAphG/RRbcbcArBGwAAAOBghAkA7IbQDfgPgjfA5eh6AwDA/QjfgODwXgEQbQRvQAwgfAMAwP0IFIDg8F6JLLrdAH8EbwEUFBTI6/UqOzvb6qEAYUH4BgDAKW6u8wgUAFiJ0A2oiuAtgLy8PJWUlKioqMjqoQBhQ/gGAAB1HgBCagDRQ/AGxBjCNwAA3I1AAQgO75XwotsNqB7BGwAAAOAyBAoAoonQDQiM4A22R4dW+PGcAgDgfoRvQO14nwCINII3IEYRvgEAAACEb/VFtxtQM4I3IIYRvgEA4G4ECggnjiecidANqB3BGxDjCN8AAHA3whKgdrxPQkfoBgSH4A0A4RsAAC5HqADUjvcJgEggeAMAAABiAKECgHCh2w0IHsEbAEl0vQEAAAAE1LUjdANCQ/AGwIfwDQAAdyNUAAAgugjeAPghfAMAwN0I34Ca8R4JjG43IHQEbwCqIHwDAMDdCBaAmvEeqYrQDagbgrcACgoK5PV6lZ2dbfVQAEsQvgEA3Io6DwAARAvBWwB5eXkqKSlRUVGR1UOJaYQ/AAAg3KjzTqGjB6gZ75H/oNsNqDuCNwABEXwCAOBuBAtAzXiPELoB9UXwBqBGhG8AALgbwQIAAJFD8AagVoRvAAAAsS2WA9pYfux0uwH1R/AGICiEbwAAuFcsBwtAMGLxPULoBoQHwRuAoBG+AQDgXrEYLAAAEGkEbwBCQvgGAIB7Eb4BgcXS+4NuNyB8CN4AAAAA+MRSuACEKhbeH4RuQHgRvAEIGV1vAAAAAADUjuANQJ0QvgEA4F6x0NUD1JWb3x90uwHhR/AGoM4I3wAAcC83hwsAqiJ0AyKD4A22RajjDLxOAAC4F+EbUD23vTcI3YDIIXgDUG+EbwAAAIg1bgvfAEQGwRsAAACAgAgXAHej2w2ILII3AGFB1xsAAO5F+AZUz+nvDUI3IPII3gCEDeEbAADu5fSAAXXHa18znh8ANXF98LZ161b16dNHXq9XGRkZWrhwodVDAlyN8A2AWw0ePFitWrXSkCFD/JZ/+eWXyszM9P00adJEixYtsmaQMYY6L/oIGAD3oNsNiA7XB29xcXGaOXOmSkpKtGzZMk2YMEFlZWVWDwtwNcI3AG40btw4zZ8/v8ryCy64QMXFxSouLtb777+vxMREXXvttRaMMPZQ5wGwC6eF0oRuQPS4Png7++yzlZmZKUlq27atkpOTtW/fPmsHBcQAwjcAbpOTk6PmzZvXuM6bb76pfv36KTGRfwOjgTrPGk4LGIBo4b0BoDqWB28rVqzQDTfcoNTUVHk8nmqnZsyaNUtdunRRQkKCsrKytHLlyjrta+3atTp58qQ6duxYz1EDAAA7iWY9UZNXX31VQ4cODft2nYo6z70IGADnotsNiC7Lg7eysjJ1795dzzzzTLX3L1iwQOPHj9fkyZO1fv169e7dW7m5udqyZYtvnaysLKWnp1f52b59u2+dvXv3avjw4ZozZ07EHxOAU+h6AxAt0aonalJaWqoPPvhAAwcODMtjcgPqPHcjfAOqsvv7gtANiL44qweQm5ur3NzcgPfPmDFDo0aN0p133ilJmjlzppYuXarZs2crPz9fkrRu3boa91FeXq7Bgwdr0qRJ6tWrV63rlpeX+26XlpYG+1AQRgQ27pGSnKhd+zjfDoC6OfNzOD4+XvHx8VXWi0Y9UZs33nhDAwYMUEJCQr224ybUeQBi0bjL0/T0ms1WDwOATVgevNXk2LFjWrdunR544AG/5f3799eqVauC2oYxRiNHjlTfvn01bNiwWtfPz8/XtGnT6jRe1A9hGwDY06Y9ZUr8PrpN8pUnyD9z2uCUKVM0derUkLYVjnoiGK+++qruuuuusG3P7ajz3KGyu4eQAQCA6tk6eNuzZ48qKiqUkpLitzwlJUU7d+4MahsffPCBFixYoIyMDN95RV588UV169at2vUnTZqkiRMn+m6XlpZyrpAIIWgDANRm69atSkpK8t2urtutNuGoJyRpwIAB+vjjj1VWVqYOHTro9ddfV3Z2tiTp4MGD+uijj/SXv/wl5PHFKuo8dyGAc7en12y2/RTKaOEYBxAqWwdvlTwej99tY0yVZYFcddVVOnnyZND7CjSFBfVDyBa7mGYKoD6SkpL8grf6qE89IUlLly4NeF+LFi20a9euOo8tllHnuQsBnHtVvqZuDeA4ZgFEiq2DtzZt2qhhw4ZVvvXcvXt3lW9HYS8EbQAAu6CesCdeF3cjgHMvJ3W/cfwBsANbB2+NGzdWVlaWCgsLNXjwYN/ywsJC3XTTTRHdd0FBgQoKClRRURHR/bgFQRsAwK6srCcQGHVebCCAcyerwzeOJwBOYnnwdvjwYW3cuNF3e9OmTSouLlZycrI6deqkiRMnatiwYerRo4d69uypOXPmaMuWLRozZkxEx5WXl6e8vDyVlpaqRYsWEd2XExG0IRhMMwUQLXatJ2KdXV8X6rzoI4Bzn0hMPeX4AOBGlgdva9euVU5Oju925QlvR4wYoXnz5mno0KHau3evpk+frh07dig9PV2LFy9WWpoz2pvdgJANAGB31BP2xOuCMxHAuU9t3W+81gBinccYY6wehJ1VfhP6afEmNW/e3OrhRAVBG8KBbjcgcg4dOqSMzC46ePBg2C48UJ3Kz8A3ln2uxMTofgaWlR3STT9Ij/hjRGyrPMZLPvtGzZtznFmBUAYA/JUfOaynb+8dtTrPis/AQ4dK5e3WOWbqPMs73uwqls79QdAGAABiSSzVeXZHBxwAwO0aWD0Au8rLy1NJSYmKioqsHkpYpSQnVvkBAACIJW6t85xs3OVpjrlSJgAAoaDjzeUI1mAFppkCAIC6oAMOAOA2BG8uQ9AGAAAApyOAAwC4BcFbAE459wdBG+yGbjcAgN05pc4DARwAwPk4x1sAdjz3B+dnAwAAqD871nmoGed/AwA4FR1vNkawBgAAAAAA4Fx0vNkI3WxwOqaZAgCASKHrDQDgRARvFiJoAwAAAIJH+AYAcBqmmgYQ7pPuEqzB7eh2AwA4BRdXAAAA0ULHWwD1Peku3WwAAAD2xMUVnI2uNwCAkxC8hQlBGwAAABAdhG8AAKdgqmkdEa4B/8E0UwAAAAAAqqLjLUhtWzWlow0AAACwCbreAABOQPAGoF7odgMAAFYhfAMA2B3BWwAFBQXyer3Kzs62eigAAAAII+o8AAAQLQRvAXC1KwAAAHeiznMXut4AAHZG8AagzphmCgAAAABAYARvAAAAAByNrjcAgF0RvAGoE7rdAACAnRC+AQDsiOANAAAAAAAAiACCNwAAAACuQNcbAMBuCN4AhIxppgAAwK4I3wAAdkLwFkBBQYG8Xq+ys7OtHgoAAADCiDoPAABEC8FbAHl5eSopKVFRUZHVQwFshW43AIDTUee5H11vAAC7IHgDAAAAAAAAIoDgDQAAAIDr0PUGALADgjcAQWOaKQAAcBLCNwCA1QjeAAAAAAAAgAggeAMQFLrdAACAE9H1BgCwEsEbAAAAAFcjfAMAWIXgDQAAAAAAAIgAgrcACgoK5PV6lZ2dbfVQAMsxzRQA4CbUebGJrjcAgBUI3gLIy8tTSUmJioqKrB4KAAAAwog6L3YRvgEAoo3gDUCN6HYDAAAAAKBuCN4AAAAAxAy63gAA0UTwBgAAAAAAAEQAwRuAgJhmCgAA3IiuNwDAmQYPHqxWrVppyJAhVe6Li4tTZmamMjMzdeedd4a0XYI3AAAAADGH8A0AcLpx48Zp/vz51d7XsmVLFRcXq7i4WC+88EJI2yV4A1Atut0AAAAAALEiJydHzZs3D/t2Cd4AAAAAxCS63gDAGVasWKEbbrhBqamp8ng8WrRoUZV1Zs2apS5duighIUFZWVlauXJl2PZfWlqqrKwsXXXVVVq+fHlIv0vwBgAAACBmEb4BgP2VlZWpe/fueuaZZ6q9f8GCBRo/frwmT56s9evXq3fv3srNzdWWLVt862RlZSk9Pb3Kz/bt22vd/zfffKN169bp2Wef1fDhw1VaWhr02OOCXhNAzGCaKQAAAAAgks4Mr+Lj4xUfH1/turm5ucrNzQ24rRkzZmjUqFG+Cx/MnDlTS5cu1ezZs5Wfny9JWrduXZ3HmpqaKklKT0+X1+vVV199pR49egT1uwRvAAAAAGLauMvT9PSazVYPAwCi7tm1WxXftFlU91l+5LAkqWPHjn7Lp0yZoqlTp4a8vWPHjmndunV64IEH/Jb3799fq1atqvM4K+3fv19NmzZVfHy8tm3bppKSEp1zzjlB/z7BGwA/dLsBAIBYRPgGANG1detWJSUl+W4H6narzZ49e1RRUaGUlBS/5SkpKdq5c2fQ2xkwYIA+/vhjlZWVqUOHDnr99deVnZ2tDRs2aPTo0WrQoIE8Ho9++9vfKjk5OejtErwBAAAAAAAgqpKSkvyCt/ryeDx+t40xVZbVZOnSpdUu79Wrlz777LM6j4uLKwRQUFAgr9er7Oxsq4cCRA3dbgCAWECdh0C40AIAOE+bNm3UsGHDKt1tu3fvrtIFZwWCtwDy8vJUUlKioqIiq4cCAACAMKLOAwDAPRo3bqysrCwVFhb6LS8sLFSvXr0sGtV/MNUUAAAAAP4P53oDAPs5fPiwNm7c6Lu9adMmFRcXKzk5WZ06ddLEiRM1bNgw9ejRQz179tScOXO0ZcsWjRkzxsJRn0LwBkAS00wBAAAqEb4BgL2sXbtWOTk5vtsTJ06UJI0YMULz5s3T0KFDtXfvXk2fPl07duxQenq6Fi9erLQ0608hQPAGAAAAAAAA2+rTp4+MMTWuM3bsWI0dOzZKIwoe53gDQLcbAADAGbjQAgAgHAjeAAAAAKAahG8AgPoieAMAAAAAAAAigOANiHFMMwUAAAiMrjcAQH0QvAEAAAAAAAARQPAGxDC63QAAAGpH1xsAoK4I3gAAAACgFoRvAIC6IHgDAAAAAAAAIoDgDYhRTDMFAAAIDV1vAIBQEbwBAAAAQJAI3wAAoSB4A2IQ3W4AAAAAAEQewRsAAAAAhICuNwBAsFwfvB06dEjZ2dnKzMxUt27d9Pzzz1s9JAAA4ECDBw9Wq1atNGTIkCr3PfXUU7r44ouVnp6ul156yYLRxSbqPFiJ8A0AEIw4qwcQaU2bNtXy5cvVtGlTHTlyROnp6br55pvVunVrq4cGWIJppgBQN+PGjdMdd9yhP/zhD37LP/vsM7388stat26dJKlfv34aNGiQWrZsacEoYwt1HgAAsDvXd7w1bNhQTZs2lSQdPXpUFRUVMsZYPCoAAOA0OTk5at68eZXlGzZsUK9evZSQkKCEhARlZmZqyZIlFoww9lDnwWp0vQEAamN58LZixQrdcMMNSk1Nlcfj0aJFi6qsM2vWLHXp0kUJCQnKysrSypUrQ9rHgQMH1L17d3Xo0EH333+/2rRpE6bRA85CtxsAt4pGPRFIenq63nvvPR04cEAHDhzQu+++q2+//TYs23Y66jwAABDrLA/eysrK1L17dz3zzDPV3r9gwQKNHz9ekydP1vr169W7d2/l5uZqy5YtvnWysrKUnp5e5Wf79u2SpJYtW+qTTz7Rpk2b9PLLL2vXrl1ReWwAACA6olFPBOL1ejVu3Dj17dtXgwcPVnZ2tuLiXH82j6BQ5yEW0PUGAKiJ5VVhbm6ucnNzA94/Y8YMjRo1SnfeeackaebMmVq6dKlmz56t/Px8SfKdU6U2KSkpysjI0IoVK3TrrbdWu055ebnKy8t9t0tLS4N9KAAAIMzO/ByOj49XfHx8lfWiWU9UZ/To0Ro9erQk6c4771TXrl3rvC03oc5DrBh3eZqeXrPZ6mEAAGzI8uCtJseOHdO6dev0wAMP+C3v37+/Vq1aFdQ2du3apSZNmigpKUmlpaVasWKF7r777oDr5+fna9q0afUaN2BHTDMFUFdf7C1TwveeqO7z6JFT/2Z17NjRb/mUKVM0derUkLYVjnqiNrt371bbtm315Zdf6qOPPtKzzz4blu26GXUeAACIBbYO3vbs2aOKigqlpKT4LU9JSdHOnTuD2sa2bds0atQoGWNkjNE999yjjIyMgOtPmjRJEydO9N0uLS2tUvQDAIDo2Lp1q5KSkny3q+t2q0046glJGjBggD7++GOVlZWpQ4cOev3115WdnS1J+uEPf6gDBw4oMTFRc+fOZappEKjz4DZ0vQEAquOIqtDj8f+W3RhTZVkgWVlZKi4uDnpfgaawAE5GtxsAp0pKSvIL3uqjPvWEJC1dujTgfeHqnItF1HlwE8I3AMCZLL+4Qk3atGmjhg0bVvnWc/fu3VW+HQUAAKgO9YQ98boAAIBYYOvgrXHjxsrKylJhYaHf8sLCQvXq1Sui+y4oKJDX6/VNIQEAAM5kZT2BwKjz4FZc5RQAcDrLp5oePnxYGzdu9N3etGmTiouLlZycrE6dOmnixIkaNmyYevTooZ49e2rOnDnasmWLxowZE9Fx5eXlKS8vT6WlpWrRokVE9wVEEtNMAcQCu9YTsc6urwt1HiKNKacAgEqWB29r165VTk6O73blCW9HjBihefPmaejQodq7d6+mT5+uHTt2KD09XYsXL1ZaGt8kAQCAU6gn7InXBQAAxDqPMcZYPQg7q/wmdOfmXWE7uTMQLXS7Ae506NAhZWR20cGDByP62VT5GfjYgjVKaNosYvupztEjh/XLoZdH/DEitlUe4yWffaPmzTnOEH50vQEIVfmRw3r69t5Rq/PGzV2p+CjXedF6jHZh63O8WYlzfwAAALgTdR4AAIgWgrcA8vLyVFJSoqKiIquHAgAAgDCizkO0cKEFAADBG+BSTDMFAACwHuEbAMQ2gjcAAAAAAAAgAgjeAuDcH3Ayut0AAAiMOg/RRtcbAMQugrcAOPcHAACAO1HnwQqEbwAQmwjeAAAAAAAAgAggeANchmmmAAAA9kTXGwDEHoI3AAAAAAAAIAII3gLgpLtwIrrdAACoHXUerETXGwDEFoK3ADjpLgAAgDtR58FqhG8AEDsI3gAAAAAAAIAIIHgDXIJppgAAAM5B1xsAxAaCNwAAAACwAOEbALgfwRvgAnS7AQAAAABgPwRvAXC1KwAAAHeizoOd0PUGAO5G8BYAV7sCAABwJ+o82A3hGwC4F8Eb4HBMMwUAAAAAwJ4I3gAAAADAYnS9AYA7EbwBDka3GwAAAAAA9hUXzEqtWrWSx+MJaoP79u2r14AAAAAQPdR5gH2MuzxNT6/ZbPUwAABhFFTwNnPmTN//7927V4888ogGDBignj17SpJWr16tpUuX6sEHH4zIIAEAABAZ1HmAvRC+AYC7BBW8jRgxwvf/t9xyi6ZPn6577rnHt2zcuHF65plntGzZMk2YMCH8owRQBdNMAQDhQJ0HAAAQOSGf423p0qW67rrrqiwfMGCAli1bFpZB2UFBQYG8Xq+ys7OtHgoAAEBUUOcB9sCFFgDAPUIO3lq3bq3XX3+9yvJFixapdevWYRmUHeTl5amkpERFRUVWDwWogm43AEAkUOcB9kH4BgDuENRU09NNmzZNo0aN0j/+8Q/fuT8+/PBDLVmyRC+88ELYBwgAAIDooM4DAAAIr5A73kaOHKlVq1apZcuWeu211/SXv/xFLVq00AcffKCRI0dGYIgAAACIBuo8wF7oegMA5wup4+348eO666679OCDD+qPf/xjpMYEoAZMMwUARAJ1HmBPXOUUAJwtpI63Ro0aVXveDwAAADgbdR4AAED4hTzVdPDgwVq0aFEEhgKgNnS7AQAiiToPsCemnAKAc4V8cYWuXbvq4Ycf1qpVq5SVlaXExES/+8eNGxe2wQEAACB6qPMAAADCK+Tg7YUXXlDLli21bt06rVu3zu8+j8dDQQYAAOBQ1HmAfXGuNwBwppCDt02bNkViHLZTUFCggoICVVRUWD0UQBLTTAEAkUedB9gb4RsAOE/I53g7nTFGxphwjcVW8vLyVFJSoqKiIquHAgAAEHXUeQAAAPVXp+Bt/vz56tatm5o0aaImTZooIyNDL774YrjHBuD/0O0GAIgW6jzA3rjQAgA4S8hTTWfMmKEHH3xQ99xzj6688koZY/TBBx9ozJgx2rNnjyZMmBCJcQIAACDCqPMAZ2DKKQA4R8jB2+9+9zvNnj1bw4cP9y276aabdPHFF2vq1KkUZAAAAA5FnQcAABBeIU813bFjh3r16lVlea9evbRjx46wDArAfzDNFAAQLdR5gHMw5RQAnCHk4K1r16569dVXqyxfsGCBzjvvvLAMCgAAANFHnQc4C+EbANhfyFNNp02bpqFDh2rFihW68sor5fF49P777+udd96ptlADUHd0uwEAook6DwAAILxC7ni75ZZbtGbNGrVp00aLFi3Sa6+9pjZt2uijjz7S4MGDIzFGAAAARAF1HuA8dL0BgL2F3PEmSVlZWXrppZfCPRYAAABYjDoPAAAgfOoUvFVUVGjRokXasGGDPB6PvF6vbrzxRjVs2DDc4wNiFtNMAQBWoM4DnGfc5Wl6es1mq4cBAKhGyMHbxo0bdf3112vbtm264IILZIzRV199pY4dO+pvf/ubzj333EiMEwAAABFGnQc4F+EbANhTyOd4GzdunM455xxt3bpVH3/8sdavX68tW7aoS5cuGjduXCTGCMQcut0AAFagzgMAAAivkDveli9frg8//FDJycm+Za1bt9bjjz+uK6+8MqyDAwAAQPRQ5wHORtcbANhPyB1v8fHxOnToUJXlhw8fVuPGjcMyKDsoKCiQ1+tVdna21UNBjKHbDQBgFeo8wPm4yikA2EvIwdugQYN01113ac2aNTLGyBijDz/8UGPGjNGNN94YiTFaIi8vTyUlJSoqKrJ6KAAAAFFBnQcAABBeIQdvTz/9tM4991z17NlTCQkJSkhI0JVXXqmuXbvqt7/9bSTGCAAAgCigzgPcga43ALCPkM/x1rJlS73xxhvauHGjNmzYIGOMvF6vunbtGonxATGFaaYAACtR5wEAAIRXyMFbpa5du1KEAQAAuBB1HuB8XGgBAOwh5KmmQ4YM0eOPP15l+ZNPPqlbb701LIMCYhHdbgAAq1HnAe7ClFMAsF7Iwdvy5ct1/fXXV1l+3XXXacWKFWEZFAAAAKKPOg8AACC8Qg7eAl1OvlGjRiotLQ3LoAAAABB91HmA+9D1BgDWCjl4S09P14IFC6osf+WVV+T1esMyKCDWMM0UAGAH1HmAOxG+AYB1Qr64woMPPqhbbrlF//rXv9S3b19J0jvvvKM//elPWrhwYdgHCAAAgOigzgMAAAivkIO3G2+8UYsWLdJjjz2mP//5z2rSpIkyMjK0bNkyXXPNNZEYI+BqdLsBAOyCOg9wL65yCgDWCDl4k6Trr7++2hPvAgAAwNmo8wD3InwDgOgL+Rxvpxs7dqz27NkTrrEAAADAJqjzAAAA6q9ewdtLL73EFa6AemCaKQDArqjzAHfiQgsAEF31Ct6MMeEaBwAAAGyEOg8AAKD+6hW8Aag7ut0AAABgBbreACB6Qg7eysr+ExYcOnRI55xzTlgHBAAAAGtQ5wGxg/ANAKIj5OAtJSVFd9xxh95///1IjCdijhw5orS0NN13331WDwUAADjM1q1b1adPH3m9XmVkZGjhwoV+9w8ePFitWrXSkCFDLBpheFDnAQAAhFfIwduf/vQnHTx4UP369dP555+vxx9/XNu3b4/E2MLq0Ucf1eWXX271MABJTDMFAKeJi4vTzJkzVVJSomXLlmnChAl+3WHjxo3T/PnzLRxheFDnAbGFrjcAiLyQg7cbbrhBf/nLX7R9+3bdfffd+tOf/qS0tDQNGjRIr732mk6cOBGJcdbL119/rX/+858aOHCg1UMBAAAOdPbZZyszM1OS1LZtWyUnJ2vfvn2++3NyctS8eXOLRhc+1HlA7CF8A4DIqvPFFVq3bq0JEybok08+0YwZM7Rs2TINGTJEqampeuihh3TkyJGgtrNixQrdcMMNSk1Nlcfj0aJFi6qsM2vWLHXp0kUJCQnKysrSypUrQxrrfffdp/z8/JB+B4gUut0AIPyiUU9UWrt2rU6ePKmOHTvWc9T2RZ0HAAAQHnUO3nbu3KknnnhCF110kR544AENGTJE77zzjn7zm9/o9ddf1w9/+MOgtlNWVqbu3bvrmWeeqfb+BQsWaPz48Zo8ebLWr1+v3r17Kzc3V1u2bPGtk5WVpfT09Co/27dv1xtvvKHzzz9f559/fl0fKgAAsLlI1xOV9u7dq+HDh2vOnDkRf0xWos4DYgtdbwAQOXGh/sJrr72muXPnaunSpfJ6vcrLy9Ntt92mli1b+tbJzMzUJZdcEtT2cnNzlZubG/D+GTNmaNSoUbrzzjslSTNnztTSpUs1e/Zs37eb69atC/j7H374oV555RUtXLhQhw8f1vHjx5WUlKSHHnqo2vXLy8tVXl7uu11aWhrU4wAAAOF35udwfHy84uPjq6wX6XpCOlUjDB48WJMmTVKvXr1CfSiOQJ0HxK5xl6fp6TWbrR4GALhOyMHb7bffrh//+Mf64IMPlJ2dXe0655xzjiZPnlzvwR07dkzr1q3TAw884Le8f//+WrVqVVDbyM/P9xVu8+bN0+effx6wGKtcf9q0aXUfNFADppkCcKKi7w6rURMT1X0e//7Uv5dnTuecMmWKpk6dGtK2wlFPGGM0cuRI9e3bV8OGDQtp/05CnQcAABBeIQdvO3bsUNOmTWtcp0mTJpoyZUqdB1Vpz549qqioUEpKit/ylJQU7dy5s97br86kSZM0ceJE3+3S0lJXn8MFgRGSAYD1tm7dqqSkJN/t6rrdahOOeuKDDz7QggULlJGR4TtP2Ysvvqhu3bpJkgYMGKCPP/5YZWVl6tChg15//fWAwZWdUecBsYUONwCIvJCDt9qKsUjweDx+t40xVZYFY+TIkbWuE2gKC+yNkAwA3CkpKckveKuP+tQTV111lU6ePBnw/qVLl9ZrbHZBnQe4W6SCtt8sWSNJmnDd5RHZPgA4WcjBWzS1adNGDRs2rPKt5+7du6t8O4rYROAGAKgN9YQ98boAkRftjrbfLFlD+AYAZ6jzVU2joXHjxsrKylJhYaHf8sLCwoif1LigoEBer9eR00Riwa59ZYRuAICgWFlPIDDqPCD8nl6z2e8nGiq73QAA1bO84+3w4cPauHGj7/amTZtUXFys5ORkderUSRMnTtSwYcPUo0cP9ezZU3PmzNGWLVs0ZsyYiI4rLy9PeXl5Ki0tVYsWLSK6LwSHoA0AEIhd64lYZ9fXhToPbmH1OdqqC93oegMAf3UO3jZu3Kh//etfuvrqq9WkSZM6n49j7dq1ysnJ8d2uPOHtiBEjNG/ePA0dOlR79+7V9OnTtWPHDqWnp2vx4sVKS0ur69DhMARuAIDaUE+EF3UeYE9WB23BInwDgP/wGGNMKL+wd+9eDR06VO+++648Ho++/vprnXPOORo1apRatmypX//615EaqyUqvwnduXlX2E7ujNoRtgFAYIcOHVJGZhcdPHgwop9NlZ+Bg595R42aJEZsP9U5/n2ZXr+nX8QfI/zFap1X8tk3at6c4wz2Y+egLZgppoRvQOjKjxzW07f3jlqdN27uSsU3bRax/VQnWo/RLkI+x9uECRMUFxenLVu2+F35aujQoVqyZElYB2clzv1hDc7dBgCAdajzAGtZcY62uuC8bgAQvJCnmr799ttaunSpOnTo4Lf8vPPO0+bN9v1wCBXn/ogegjYAAOyBOg+ILjuHa+HAlFMAqEPwVlZW5vcNaKU9e/YoPj4+LINCbCBwAwDAXqjzgMhyQ9AWarcb4RuAWBfyVNOrr75a8+fP9932eDw6efKknnzySb+T5wKBMJ0UAAB7os4DwsspU0eDxRRTAAhdyB1vTz75pPr06aO1a9fq2LFjuv/++/XFF19o3759+uCDDyIxRksUFBSooKBAFRUVVg/FFQjaAACwP+o8oH7cEK5FAl1vAGJZyB1vXq9Xn376qS677DJde+21Kisr080336z169fr3HPPjcQYLZGXl6eSkhIVFRVZPRRHo7sNAADnoM4DQuO2jraa1LfbjW45ALEq5I43SWrXrp2mTZsW7rHAJQjaAABwLuo8IDC3h2uBEJoBQN2FHLzNnTtXzZo106233uq3fOHChTpy5IhGjBgRtsHBWQjcAABwNuo8wF+sBm2nC2foxpRTALEo5Kmmjz/+uNq0aVNledu2bfXYY4+FZVBwjsqppIRuAAA4H3UeYl0sTR21Ct1zAGJNyB1vmzdvVpcuXaosT0tL05YtW8IyKDvgpLs1I2gDAMB9qPMQawjXakZIBgD1F3LHW9u2bfXpp59WWf7JJ5+odevWYRmUHXDS3erR3QYAgHtR58Ht6GgLXiRDNwI9ALEk5I63H//4xxo3bpyaN2+uq6++WpK0fPly/fznP9ePf/zjsA8Q1iNoAwAgNlDnwW0I1+yL870BiBUhB2+PPPKINm/erH79+iku7tSvnzx5UsOHD+fcHy5D4AYAQGyhzoPTEbSFBx1pABA+IQVvxhjt2LFDc+fO1SOPPKLi4mI1adJE3bp1U1paWqTGiCgibAMAIDZR58FpCNkiI5qhG11vAGJByMHbeeedpy+++ELnnXeezjvvvEiNC1FG4AYAQGyjzoPdEbS5E+EbALcL6eIKDRo00Hnnnae9e/dGajy2UVBQIK/Xq+zsbKuHEjGVF0ogdAMAANR5sDNCt+iwaoopU1sBuFnIVzV94okn9N///d/6/PPPIzEe23Dz1a4I2wAAQHWo84DYRfgFAJER8sUVbrvtNh05ckTdu3dX48aN1aRJE7/79+3bF7bBIbwI2wAAQE2o8wBYhSmnANwq5OBt5syZERgGIoWwDQAABIs6D4hNdul2I3wD4EYhB28jRoyIxDgQZgRuAAAgVNR5QOyxS+gGAG4VcvC2ZcuWGu/v1KlTnQeD+iFsAwAA9UGdB8BqdL0BcJuQg7fOnTvL4/EEvL+ioqJeA0LoCNwAAEA4UOcBscWu3W6EbwDcJOTgbf369X63jx8/rvXr12vGjBl69NFHwzYw1IywDQAAhBt1Huzo6TWbrR6CK9k1dAMAtwk5eOvevXuVZT169FBqaqqefPJJ3XzzzWEZmNUKCgpUUFBgu292CdwAAECkUOcBscEJoRtdbwDcokG4NnT++eerqKgoXJuzXF5enkpKSmzzmHbtKyN0AwAAlqDOA2AFJwSEAFCbkDveSktL/W4bY7Rjxw5NnTpV5513XtgGBrrbAABAdFHnAe5HmAUA0RVy8NayZcsqJ901xqhjx4565ZVXwjawWEbgBgAArECdB7ibE0M3ppwCcLqQg7f33nvP73aDBg101llnqWvXroqLC3lz+D+EbQAAwGrUeQDsiPANgJOFXEFdc801kRhHzCJwAwAAdkGdB7iXE7vdAMAN6vTV5b/+9S/NnDlTGzZskMfj0UUXXaSf//znOvfcc8M9PlcibAMAAHZFnQe4jxtCN7reADhVyFc1Xbp0qbxerz766CNlZGQoPT1da9as0cUXX6zCwsJIjNE1uDIpAACwM+o8AHbmhgARQOwJuePtgQce0IQJE/T4449XWf6LX/xC1157bdgG5xaEbQAAwAmo8wD3cVtYRecbAKcJueNtw4YNGjVqVJXld9xxh0pKSsIyKDsoKCiQ1+tVdnZ2nX6/sruN0A0AADgFdR7gLm4L3QDAiUIO3s466ywVFxdXWV5cXKy2bduGY0y2kJeXp5KSEhUVFYX0e4RtAADAqajzADgBgSIAJwl5qunPfvYz3XXXXfr3v/+tXr16yePx6P3339f//M//6N57743EGG2PoA0AALgBdR7gHm4Pp5hyCsApQg7eHnzwQTVv3ly//vWvNWnSJElSamqqpk6dqnHjxoV9gHZG4AYAANyEOg9wB7eHbgDgJCEHbx6PRxMmTNCECRN06NAhSVLz5s3DPjC7ImwDAABuFet1Huzn6TWbrR4CbIyuNwBOEPI53r7//nsdOXJE0qlCbN++fZo5c6befvvtsA/OTnbvP0LoBgAAXC1W6zzATWKt2y3WHi8A5wk5eLvppps0f/58SdKBAwd02WWX6de//rVuuukmzZ49O+wDBAAAQHRQ5wHORggFAPYTcvD28ccfq3fv3pKkP//5z2rXrp02b96s+fPn6+mnnw77AAEAABAd1HkAnIjAEYCdhRy8HTlyxHeuj7fffls333yzGjRooCuuuEKbN3MOBgAAAKeizgOcK9bDp1h//ADsK+TgrWvXrlq0aJG2bt2qpUuXqn///pKk3bt3KykpKewDBAAAQHRQ5wHOROgEAPYVcvD20EMP6b777lPnzp11+eWXq2fPnpJOfSt6ySWXhH2AAAAAiA7qPMB5CN3+g+cCgB3FhfoLQ4YM0VVXXaUdO3aoe/fuvuX9+vXT4MGDwzo4AAAARA91HgCn+82SNZpw3eVWDwMAfEIO3iSpXbt2ateund+yyy67LCwDAgAAgHWo8wDnoMMLAOwv5KmmAAAAAABrEboFxnMDwE4I3gIoKCiQ1+tVdna21UMBAABAGFHnAe5H+AbALgjeAsjLy1NJSYmKioqsHgoAAADCiDoPTkeoBADOQfAGAAAAAA5B6BY8nisAdkDwBgAAAMB2nl6z2eohwAUI3wBYjeANAAAAAByAEKlueN4AWIngDQAAAABsjvAIAJyJ4A0AAAAA4GoElwCsQvAGAAAAADZGaBQePI8ArEDwBgAAAAA2RVgEAM5G8AYAAAAAiAkEmQCijeANAAAAAGyIkCgyeF4BRBPBGwAAAADYDOEQALgDwRsAAAAA2AihW+TxHAOIFoI3AAAAAEDMIXwDEA0EbwAAAABgE4RBAOAuBG8AAAAAYAOEbtHHcw4g0gjeAAAAAAAxi/ANQCTFRPAWFxenzMxMZWZm6s4777R6OAAAwGG2bt2qPn36yOv1KiMjQwsXLvTdd+jQIWVnZyszM1PdunXT888/b+FIYw91njs9vWaz1UOIOsIfAHCnOKsHEA0tW7ZUcXGx1cMAAAAOFRcXp5kzZyozM1O7d+/WpZdeqoEDByoxMVFNmzbV8uXL1bRpUx05ckTp6em6+eab1bp1a6uHHROo8+AGhG7W+82SNZpw3eVWDwOAC8VExxsAAEB9nH322crMzJQktW3bVsnJydq3b58kqWHDhmratKkk6ejRo6qoqJAxxqqhAgDqiAAUQCRYHrytWLFCN9xwg1JTU+XxeLRo0aIq68yaNUtdunRRQkKCsrKytHLlypD2UVpaqqysLF111VVavnx5mEYOAADsIhr1RKW1a9fq5MmT6tixo2/ZgQMH1L17d3Xo0EH333+/2rRpU9eH4irUeUDtCHvshdcDQLhZPtW0rKxM3bt31+23365bbrmlyv0LFizQ+PHjNWvWLF155ZV67rnnlJubq5KSEnXq1EmSlJWVpfLy8iq/+/bbbys1NVXffPONUlNT9fnnn+v666/XZ599pqSkpIg/NgAAEB3RqCckae/evRo+fLheeOEFv3VatmypTz75RLt27dLNN9+sIUOGKCUlJQKP1Fmo84CaEfIAgPtZHrzl5uYqNzc34P0zZszQqFGjfCfLnTlzppYuXarZs2crPz9fkrRu3boa91FZLKenp8vr9eqrr75Sjx49ql23vLzcr7grLS0N6fEAAIDwOfNzOD4+XvHx8VXWi0Y9UV5ersGDB2vSpEnq1atXteukpKQoIyNDK1as0K233lrj9mIBdR4AJ+J8bwDCyfLgrSbHjh3TunXr9MADD/gt79+/v1atWhXUNvbv36+mTZsqPj5e27ZtU0lJic4555yA6+fn52vatGn1GjcAAG5StO2AGiQcj+o+Tx4tkyS/6ZySNGXKFE2dOjWkbYWjnjDGaOTIkerbt6+GDRvmd9+uXbvUpEkTJSUlqbS0VCtWrNDdd98d0hhjEXUeYh3dbvZG+AYgXGwdvO3Zs0cVFRVVpmqkpKRo586dQW1jw4YNGj16tBo0aCCPx6Pf/va3Sk5ODrj+pEmTNHHiRN/t0tLSKkU/gLr71+4ynds20ephAHCIrVu3+k0brK7brTbhqCc++OADLViwQBkZGb7zlL344ovq1q2btm3bplGjRskYI2OM7rnnHmVkZIQ8zlhDnYdYRugGALHD1sFbJY/H43fbGFNlWSC9evXSZ599FvS+Ak1hAQAA0ZeUlBS283XVp5646qqrdPLkyWrvy8rKUnFxcX2HF7Oo8wDYFV1vAMLB8qua1qRNmzZq2LBhlW89d+/ezQmLAQf61+4yv/8CQDRQT9gTrwtiFd1uzsLrBaC+bB28NW7cWFlZWSosLPRbXlhYGPCkxuFSUFAgr9er7OzsiO4HiFWEbwCixcp6AoFR5yEWEeIAQOyxfKrp4cOHtXHjRt/tTZs2qbi4WMnJyerUqZMmTpyoYcOGqUePHurZs6fmzJmjLVu2aMyYMREdV15envLy8lRaWqoWLVpEdF8AAKB+7FpPxDq7vi7UebACoZtzMeUUQH1YHrytXbtWOTk5vtuVJ7wdMWKE5s2bp6FDh2rv3r2aPn26duzYofT0dC1evFhpaWlWDRlAmHChBQDhQj1hT7wuANyC8A1AXVkevPXp00fGmBrXGTt2rMaOHRulEQEAAKehnrAnXhfgFLrdACB22focb1bi3B9AdHCuNwBAtFHn2dvTazZbPYSwInRzD15LAHVB8BZAXl6eSkpKVFRUZPVQAAAAEEbUeQDqivANQKgI3gBYjq43AADgRoQ0AACCNwC2QPgGAADchNDNvXhtAYSC4C0Azv0BAADgTtR5AOqL8A1AsAjeAuDcH0D00fUGAIgG6jxEGqFMbOB1BhAMgjcAAAAACBPCGADA6QjeANgKXW8AAABwCoJWALUheAMAAACAMCCEiU287gBqQvAWACfdBaxD1xsAIJKo8xAJhC8AgOoQvAXASXcBaxG+AQAihToPQLgRvAIIhOANAAAAAOqB0AUSxwGA6hG8AbAtut4AAIDdEbYAgDsMHjxYrVq10pAhQ6rct2nTJuXk5Mjr9apbt24qKwv+b1WCNwAAAAC28PSazVYPAagXgljAucaNG6f58+dXe9/IkSM1ffp0lZSUaPny5YqPjw96uwRvAGyNrjcAAGBXhCyoDscF4Ew5OTlq3rx5leVffPGFGjVqpN69e0uSkpOTFRcXF/R2Cd4C4GpXAAAA7kSdh3AgXAGA6FmxYoVuuOEGpaamyuPxaNGiRVXWmTVrlrp06aKEhARlZWVp5cqVYdn3119/rWbNmunGG2/UpZdeqsceeyyk3yd4C4CrXQH2QdcbACCcqPNQX4RuqA3HCBBeZWVl6t69u5555plq71+wYIHGjx+vyZMna/369erdu7dyc3O1ZcsW3zpZWVlKT0+v8rN9+/Ya9338+HGtXLlSBQUFWr16tQoLC1VYWBj02IPvjQMAC/1rd5nObZto9TAAAACAoPxmyRpNuO5yq4cB2FZpaanf7fj4+IDnTsvNzVVubm7Abc2YMUOjRo3SnXfeKUmaOXOmli5dqtmzZys/P1+StG7dujqNs0OHDsrOzlbHjh0lSQMHDlRxcbGuvfbaoH6f4A0AAAAAgkQnEwA3KVi2Vp7GTaK6T3Pse0nyBVmVpkyZoqlTp4a8vWPHjmndunV64IEH/Jb3799fq1atqvM4K2VnZ2vXrl3av3+/WrRooRUrVmj06NFB/z7BGwDHoOsNAABYidANoaLrDQhs69atSkpK8t0O5Uqhp9uzZ48qKiqUkpLitzwlJUU7d+4MejsDBgzQxx9/rLKyMnXo0EGvv/66srOzFRcXp8cee0xXX321jDHq37+/Bg0aFPR2Cd4AAAAAAIgQwjegeklJSX7BW315PB6/28aYKstqsnTp0oD31TbVtSZcXAGAo3ChBQAAYAW63QDAntq0aaOGDRtW6W7bvXt3lS44KxC8AQAAAEANCN1QXxxDQOQ0btxYWVlZVa40WlhYqF69elk0qv8geAugoKBAXq9X2dnZVg8FwBnoegMA1Ad1HgArEL4BdXf48GEVFxeruLhYkrRp0yYVFxdry5YtkqSJEyfqhRde0O9//3tt2LBBEyZM0JYtWzRmzBgLR30KwVsAeXl5KikpUVFRkdVDAVANwjcAQF1R5yEUhCUIJ44noG7Wrl2rSy65RJdccomkU0HbJZdcooceekiSNHToUM2cOVPTp09XZmamVqxYocWLFystLc3KYUvi4goAAAAAUC1CEgCwhz59+sgYU+M6Y8eO1dixY6M0ouDR8QbAseh6AwAAgNMQ6AKxheANAAAAgOWeXrPZ6iH4IRxBJHF8AbGD4A1AVESqO42uNwAAEG6EIgCAcCF4A+B4hG8AAABwGgJeIDYQvAEAAADA/yEMQTRxvAHuR/AGwBXoegMAAPVFCAIACDeCtwAKCgrk9XqVnZ1t9VAAAAAQRtR5qA6hG6zCsQe4G8FbAHl5eSopKVFRUZHVQwEQJLreAADBoM4DYDeEb4B7EbwBAAAAiGmEHgCASCF4A+AqdL0BAIBQELrBLjgWAXcieAPgOoRvAAAAcCLCN8B9CN4AAAAAxCRCDgBApBG8AXAlut4AAEBNCN1gVxybgLsQvAEAAAAAYCOEb4B7ELwBcC263gAAcIan12yO6v4INeAEHKeAOxC8AQAAAIgZhBkAgGgieAPganS9AQAAwKkIigHnI3gD4HqEbwAAQCLEgDNx3ALORvAGAAAAwPUILwAAViB4AxAT6HoDAACAUxEcA85F8BZAQUGBvF6vsrOzrR4KAAAAwog6L/YQWsANOI4BZyJ4CyAvL08lJSUqKiqyeigAwoSuNwCARJ0XawgrAABWIngDAAAA4EqEbnAbjmnAeQjeAMQUut4AAADgZIRvgLMQvAGIOYRvAAC4H+EEAMAOCN4AAAAAuAqhG9yOYxxwDoI3ADGJrjcAAAA4GeEb4AwEbwAAAABcgzACAGAnBG8AYhZdbwAAWO/pNZvDti1CN8QajnnA/gjeAAAAAABwKMI3wN4I3gDENLreAABwB8IHAIAdEbwBiHmEbwAAOBuhG2Id7wHAvgjeAAAAAABwOMI3wJ4I3gBAdL0BAOBUhA3Af/B+AOyH4A0AAACAIxEyAADsjuANQMQ5pZvMKeMEAAAAAiGQBuyF4A0AAACA4xAuAIHx/gDsIyaCt02bNiknJ0der1fdunVTWRldLQCqR9cbgOps3bpVffr0kdfrVUZGhhYuXOh3f1xcnDIzM5WZmak777zTolHGJuq82ESoAABwijirBxANI0eO1COPPKLevXtr3759io+Pt3pIAGzsX7vLdG7bRKuHAcBG4uLiNHPmTGVmZmr37t269NJLNXDgQCUmnvq3omXLliouLrZ2kDGKOg8AqvebJWs04brLrR4GEPNc3/H2xRdfqFGjRurdu7ckKTk5WXFxMZE3AgCAMDn77LOVmZkpSWrbtq2Sk5O1b98+awcF6rwYRbcbEDzeL4D1LA/eVqxYoRtuuEGpqanyeDxatGhRlXVmzZqlLl26KCEhQVlZWVq5cmXQ2//666/VrFkz3Xjjjbr00kv12GOPhXH0ANyKKaeAs0S6njjd2rVrdfLkSXXs2NG3rLS0VFlZWbrqqqu0fPnyuj4M16HOQ7gRIgAAnMbyrwTLysrUvXt33X777brllluq3L9gwQKNHz9es2bN0pVXXqnnnntOubm5KikpUadOnSRJWVlZKi8vr/K7b7/9to4fP66VK1equLhYbdu21XXXXafs7Gxde+21EX9sAAAgOiJdT6SmpkqS9u7dq+HDh+uFF17wW+ebb75RamqqPv/8c11//fX67LPPlJSUFIFH6izUeQgnQjegbphyCljL8uAtNzdXubm5Ae+fMWOGRo0a5TtR8cyZM7V06VLNnj1b+fn5kqR169YF/P0OHTooOzvb9630wIEDVVxcHLAgKy8v9yvuSktLQ35MANyBc70B1jvzczg+Pr7ac3hFup6QTtUIgwcP1qRJk9SrVy+/+yqDufT0dHm9Xn311Vfq0aNH7Q/Q5ajzUJun12y2eghATCB8A6xjefBWk2PHjmndunV64IEH/Jb3799fq1atCmob2dnZ2rVrl/bv368WLVpoxYoVGj16dMD18/PzNW3atHqNGwAAN9m5Y5c8jZtEdZ/m2PeS5DedU5KmTJmiqVOnhrStcNQTxhiNHDlSffv21bBhw/zu279/v5o2bar4+Hht27ZNJSUlOuecc0IaYyyizkOoCA0AAE5k6+Btz549qqioUEpKit/ylJQU7dy5M6htxMXF6bHHHtPVV18tY4z69++vQYMGBVx/0qRJmjhxou92aWlplaIfQPBOP1fap3sOS5Iy2jSzajgho+sNsNbWrVv9pmzW5YqV4agnPvjgAy1YsEAZGRm+85S9+OKL6tatmzZs2KDRo0erQYMG8ng8+u1vf6vk5OSQxxlrqPNiG51uAIBYYevgrZLH4/G7bYypsqwmtU1zOF2gKSwAQnd66HbH0g0an+XMP24I3wDrJCUlhe1cafWpJ6666iqdPHmy2vt69eqlzz77rN7ji1XUebGDsA0AEItsHby1adNGDRs2rPKt5+7du6t8OwrAPgJdEfTD3Yd0Rdvm+nTPYUd1vQFwNuoJe+J1iQ2EbQCAWNfA6gHUpHHjxsrKylJhYaHf8sLCwionNQ63goICeb1eZWdnR3Q/gNtUF7rdsXRDlWWV006dIlCYCMD+rKwnEBh1nns9vWaz7wcAgFhnecfb4cOHtXHjRt/tTZs2qbi4WMnJyerUqZMmTpyoYcOGqUePHurZs6fmzJmjLVu2aMyYMREdV15envLy8lRaWqoWLVpEdF+AGwQKpqoL3ZyKKaeAfdm1noh1dn1dqPMig6ANAICqLA/e1q5dq5ycHN/tyhPejhgxQvPmzdPQoUO1d+9eTZ8+XTt27FB6eroWL16stLQ0q4YM4AyBQrfqutoqp5tW3u+0KaeEb4A9UU/YE6+L+xG2AQBQM8uDtz59+sgYU+M6Y8eO1dixY6M0IgChqGkK5sx1W2v9fSeGbwDsh3rCnnhd3ImwDQCA4FkevNlVQUGBCgoKVFFRYfVQAFuq7ZxnoUwxdVr4RtcbADgbdV7oCNsAAKgbW19cwUp5eXkqKSlRUVGR1UMBbKe+oduHuw+FcziW4GILAOBc1HnB4yIJAADUDx1vAIIWybDJaV1vAAC4FUEbAADhQ/AGICjBhm71uYqp08I3ppwCANyCsA0AgMggeAuAc38A/xGJ0O30q5s6GeEbADgPdd4phG0AAEQe53gLgHN/AKdCpWify+zTPYejuj8AQOyJ9TqP87YBABA9dLwBqFaogVt9ppieiSmnAACEF0EbAADWIHgD4KcuHW51Dd3cMt1UInwDANgPYRsAANYjeAPgU5fQLVJTQ53W9QYAgB0QtgEAYC+c4y2AgoICeb1eZWdnWz0UICrqei63meu2hnkk/+G0871F+3x4AIC6cWOdx3nbAACwJzreAsjLy1NeXp5KS0vVokULq4cDREx9wqJwnNfNTdNNJaacAoATuKXOI2gDAMD+CN6AGFaf0C1a3WhMOQUA4D8I2wAAcBaCNyAGhWNKZCSnmJ7JaeEbXW8AgHAibAMAwLkI3oAYE47QLRxTTE/ntummEuEbAKB+CNsAAHAHgjcghoQjdLPqggdO63qTCN8AAKEjcAMAwF0I3gIoKChQQUGBKioqrB4KUG/hvNpmNKeYnsmJ4RsAwH7sVucRtgEA4F4NrB6AXeXl5amkpERFRUVWDwWol3CGbuGeYnq6D3cfCmo9qzru6iqczz8AIDzsUOc9vWaz7wcAALgXHW+AS4U78HFa4GUnTDkFAEh0tgEAEIsI3gAXikToZuUU0zMx5RQA4CQEbgAAxC6CN8BlIjG1MVqhWyhXN3Va+EbXGwDEFsI2AAAgEbwBrhGpc4lF8rxusYbwDQDcjbANAACcieANcIFIhW52P6+b07reAADuQ9gGAABqwlVNAYeL5FUzrTivW7BXN61k93DwTFzlFADcgSuSAgCAYNDxFkBBQYEKCgpUUVFh9VCAakU6wGGKaeQw5RQArFXXOo+gDQAAhIrgLYC8vDzl5eWptLRULVq0sHo4gJ9Ih25O6yJjyikAIBSh1HmEbQAAoD4I3gAHidY0RSummJ4ulKubVnJa+EbXGwDYF2EbAAAIF4I3wCGiFboxxTR6CN8AwD4I2wAAQCRwcQXAAaIVujltiumZnD5+AIA1nl1rbac3AABwL4I3wMb+tbssqqGb1VNMTxfq1U0rOS184yqnAAAAAOBeBG+ATUU7kLFT6BZrCN8AAAAAwJ0I3gCbiWaXWyWndYnVxm2PBwAAAADgTARvgI1Y0flktymmp6vrdFPJeeEbXW8AAAAA4D4EbwEUFBTI6/UqOzvb6qEgRlgVvNg1dItFhG8AEB3UeQAAIFoI3gLIy8tTSUmJioqKrB4KXM6KqaWVnNYVFionPj7CNwCIPOo8AAAQLQRvgIWsDFnsPMU0nJwYvgEAAAAA3IHgDbCAlV1ulZwSutXnPG+VnBa+WX1sAAAAAADCg+ANiDI7hCp3LN1g9RBQCzscJwAAAACA+iF4A6LIDmGK07q/wiVWHzcAAAAAwDoEb0AU2GFqqeTc87qFY7qp5LzwzQ7HDAAAAACg7gjegAizU3jixNAt1tnp+AEAAAAAhIbgDYgQu3S5VXJat1ek8DwAAAAAAKKF4A2IADsFbpJzp5ieLlzTTSXnhW92O54AAAAAAMEheAPCzI4hidNDN9jzuAIAAAAA1IzgDQgTu00treS07q5o4XkBAAAAAEQawRsQBnYM3CR3TDE9XTinm0rOC9/sepwBAAAAAKpH8AbUg1273Cq5KXTDKXY+3gAAAAAA/gjeAigoKJDX61V2drbVQ4FN2T0AcVo3l1V4ngAg9lDnAQCAaCF4CyAvL08lJSUqKiqyeiiwISeEbm7tdgv3dFPJeeGb3Y8/ALA76jwAABAtBG9ACOw+tVRyd+iG/7D7cQgAAAAAIHgDgkbQ4W5O63qTOCYBAAAAwO4I3oAgOCXgiJVut0hMN5WcGb4BAAAAAOyL4A2ogROmllaKldAN/pxyfAIAAABALCJ4AwJwWqBB6BYeTux6c9qxCgAAAACxguANOIOTutwqOTEsqq9ITTeVYvP5BAAAAACEH8EbcBqnBW4SU0wjxWnhmxOPXQAAAABwO4I34P84NbggdEMlpx7DAAAAAOBWBG+IeU6cWlrJaV1Z4RbJ6aYSzy8AAAAAoH4I3hDTnBq4SUwxjRanhW9OPqYBAAAAwG0I3hCTnNzlJhG6oWZOPrYBAAAAwE0I3hBzCCXcJdLTTSXndb0BAAAAAOyB4A0xxQ2hG91u1nBa+OaGYx0AAAAAnI7gDTHB6VNLKxG6IRRuOOYBAAAAwMkI3uB6hA/uF43pppLzut4AAAAAANZyffD25ZdfKjMz0/fTpEkTLVq0yOphIQrc0uVWiW43e3Ba+Oam9wBgpa1bt6pPnz7yer3KyMjQwoULffdRa1iH5x4AANhdnNUDiLQLLrhAxcXFkqTDhw+rc+fOuvbaa60dFCLObWEDoRvq41+7y3Ru20SrhwE4WlxcnGbOnKnMzEzt3r1bl156qQYOHKjExERqDQvx3AMAALtzfcfb6d58803169dPiYn8Aepmbgvd3OTDrQcit+0oTTeVnNf1BqD+zj77bGVmZkqS2rZtq+TkZO3bt6/KetQa1uG5BwAAdmR58LZixQrdcMMNSk1NlcfjqXZ6wKxZs9SlSxclJCQoKytLK1eurNO+Xn31VQ0dOrSeI4ZduW1qaSW63ezJaeGbG98bwOmiWU+sXbtWJ0+eVMeOHavcR63hjzoPAADEOsuDt7KyMnXv3l3PPPNMtfcvWLBA48eP1+TJk7V+/Xr17t1bubm52rJli2+drKwspaenV/nZvn27b53S0lJ98MEHGjhwYMQfExAuhG4IJ8I3uFm06om9e/dq+PDhmjNnTpV9UGtURZ0HAABineXneMvNzVVubm7A+2fMmKFRo0bpzjvvlCTNnDlTS5cu1ezZs5Wfny9JWrduXa37eeONNzRgwAAlJCTUuF55ebnKy8t9t0tLS4N5GEDYOa2jyg4+3H1IV7RtHrX9fbrnsDLaNIva/sKB873Bac78HI6Pj1d8fHyV9aJRT5SXl2vw4MGaNGmSevXqVeX+YGuNWEKdBwAAYp3lwVtNjh07pnXr1umBBx7wW96/f3+tWrUqpG29+uqruuuuu2pdLz8/X9OmTQtp20Ck0O1mf04M34BQnfy2RJ5GVcOuSDLHT4UjZ07nnDJliqZOnRrStsJRTxhjNHLkSPXt21fDhg2rdp1gaw2cQp0HAABigeVTTWuyZ88eVVRUKCUlxW95SkqKdu7cGfR2Dh48qI8++kgDBgyodd1Jkybp4MGDvp+tWwk+EH1MMXUWp3UnMuUUTrJ161a/z+VJkyaFvI1w1BMffPCBFixYoEWLFikzM1OZmZn67LPPfPeHUmvgFOo8AAAQC2zd8VbJ4/H43TbGVFlWkxYtWmjXrl1BrRtoCgsQLYRu9RPt6aZOxZRTOEVSUpKSkpLCsq361BNXXXWVTp48GfD+UGoN+KPOAwAAbmbrjrc2bdqoYcOGVb713L17d5VvRwHASk7regNiCfWEPfG6AACAWGDr4K1x48bKyspSYWGh3/LCwsJqT2ocTgUFBfJ6vcrOzo7ofoDT0e3mbE4L35hyilhhZT2BwKjzAABALLB8qunhw4e1ceNG3+1NmzapuLhYycnJ6tSpkyZOnKhhw4apR48e6tmzp+bMmaMtW7ZozJgxER1XXl6e8vLyVFpaqhYtWkR0X4BE6BZOTDcNHlNO4RZ2rSdinV1fF+o8AAAQLZYHb2vXrlVOTo7v9sSJEyVJI0aM0Lx58zR06FDt3btX06dP144dO5Senq7FixcrLS3NqiEDQEBc5RSwBvWEPfG6AACAWGd58NanTx8ZY2pcZ+zYsRo7dmyURgREH91u7uK08I2uN7gB9YQ98boAAIBYZ+tzvFmJc38gWgjdIuPD3YesHoKjcL43ALGEOg8AAEQLwVsAeXl5KikpUVFRkdVDgYs57WT8CB6vLQDYF3UeAACIFoI3wGJ0u7mX08I3ut4AAAAAILwI3gCLMMU08phuGjrCNwAAAAAIH4K3ADj3ByLJaZ1QqDsnvtaEbwDcjjoPAABEC8FbAJz7w1mcGBTQ7RY7CN8AwF6o8wAAQLQQvAFRxhTT6GK6KQAAAADAKgRvQBQ5sfMJ4eHE156uNwAAAACoH4I3IMrodotdhG8AAAAAEFsI3gLgpLsIN6aYWofppvVD+AbAbajzAABAtBC8BcBJdxFOhG6o5MSuN4nwDYC7UOcBAIBoIXgDIsypQQsix6nHBOEbAAAAAISG4A2IArrdrGe36aaEbwAAAADgfgRvQAQxxRQAAAAAgNhF8AZEiFM7mhA9Tj1G6HoDAAAAgOAQvAXA1a4QDnS72YvdpptKhG8AYAXqPAAAEC0EbwFwtSvUB1NMEQsI3wA4FXUeAACIFoI3IMyc2sEE6zj5mCF8AwAAAIDACN6ACKDbzb7sON1UInwDAAAAADcieAPCiCmmiFWEbwAAAABQFcEbECZO7liCPXAMAQAAAIC7ELwBYVAZmNDt5gx2nW4qOTt8o+sNAAAAAPwRvAFhQugGEL4BAAAAwOkI3gIoKCiQ1+tVdna21UOBzTm5Qwn25PRjivANgN1R5wEAgGgheAsgLy9PJSUlKioqsnoosDGmmDqXnaebSoRvABBJ1HkAACBaCN6AeiJ0A6pH+AYAAAAg1hG8AXX06Z7DhG6IKKd3vUmEbwAAAABiG8EbUAduCETgDBxrAAAAAOBcBG9AiDivm3vY/TxvbkHXGwAAAIBYRfAG1AGhG6LJDV1vhG8AAAAAYhHBGxACNwQgcCY3HHuEbwAAAABiDcEbECSmmLqTk6abEr4BAAAAgLMQvAVQUFAgr9er7Oxsq4cCGyF0A+qP8A2A1ajzAABAtBC8BZCXl6eSkhIVFRVZPRTYgBs6jeAObjkWCd8AWIk6DwAARAvBG1ALppi6n5Omm0ruCd8AAAAAwO0I3oAgELoB4UfXGwAAAAC3I3gDakBnEezKLccm4RsAAAAANyN4AwJgimlscdp0U4nwDQAAAADsjuANqAahGxBdhG8AAAAA3IjgDY7HH+yIZW7pepN4LwMAAABwH4I34Ax0u8UuJ043lQjfAAAAAMCuCN6A0xC6AQAAAACAcCF4AwAXoOsNAAAAAOyH4A34P3S7QXLudFOJ8A0AAAAA7IbgDRChG2BHhG8AAAAAnI7gDfg/hG5wAzd1vUmEbwAAAACcjeAtgIKCAnm9XmVnZ1s9FESY24IK1J+Tp5tK7jumCd8AhBt1HgAAiBaCtwDy8vJUUlKioqIiq4eCCGKKKeAMhG8Awok6DwAARAvBG2IWoRvczG1dbwAAAADgRARvAFANp083ldwXvtH1BgAAAMBpCN4Qk+h2Q6wgfAMAAAAA6xC8IeYQugHORvgGAAAAwCkI3gAgADdMN5Xc1/UmEb4BAAAAcAaCN8QUut0QqwjfAAAAACD6CN4QMwjdAPchfAMAAABgZwRvAFADt0w3ldzZ9QYAAAAAdkbwhphAtxtwihvDN7reAAAAANgVwRtcj9ANcD/CNwAAAAB2RPAGV3Njdw+iz03TTSX3vi8I3wAAAADYDcEbYgLdboA/wjcAAAAAiDyCN7gWU0yB2ET4BgAAAMAuCN7gSoRuCDe3TTeV3Nv1JhG+AQAAALAHgjcAiGFuDt8AAAAAwGoxEbz95je/0cUXXyyv16tx48bJGGP1kBBBdLsBkOh6Q3ht3bpVffr0kdfrVUZGhhYuXOi776mnntLFF1+s9PR0vfTSSxaOMjZR5wEAgHAYPHiwWrVqpSFDhvgt//LLL5WZmen7adKkiRYtWhT0dl0fvH333Xd65plntG7dOn322Wdat26dPvzwQ6uHhQghdEMkuXG6qeTurjfCN4RLXFycZs6cqZKSEi1btkwTJkxQWVmZPvvsM7388stat26d1q5dq9mzZ+vAgQNWDzdmUOcBAIBwGTdunObPn19l+QUXXKDi4mIVFxfr/fffV2Jioq699tqgt+v64E2STpw4oaNHj+r48eM6fvy42rZta/WQAMBWCN+Amp199tnKzMyUJLVt21bJycnat2+fNmzYoF69eikhIUEJCQnKzMzUkiVLrB1sjKHOAwAA4ZCTk6PmzZvXuM6bb76pfv36KTExMejtWh68rVixQjfccINSU1Pl8XiqbdebNWuWunTpooSEBGVlZWnlypVBb/+ss87Sfffdp06dOik1NVU/+MEPdO6554bxEcAu6HYD6ofwDU4W6XridGvXrtXJkyfVsWNHpaen67333tOBAwd04MABvfvuu/r222/r+WjcgzoPAACEQzRrvZq8+uqrGjp0aEi/Y3nwVlZWpu7du+uZZ56p9v4FCxZo/Pjxmjx5stavX6/evXsrNzdXW7Zs8a2TlZWl9PT0Kj/bt2/X/v379dZbb+mbb77Rt99+q1WrVmnFihXReniIMkI3RJpbp5vGAsI3d4t0PVFp7969Gj58uObMmSNJvvOK9e3bV4MHD1Z2drbi4uIi+2AdhDoPAACEQ7RqvZqUlpbqgw8+0MCBA0Mau+WVYW5urnJzcwPeP2PGDI0aNUp33nmnJGnmzJlaunSpZs+erfz8fEnSunXrAv7+woUL1bVrVyUnJ0uSrr/+en344Ye6+uqrq12/vLxc5eXlvtsHDx6UJB0+zB/bdlVWduqP6aNHynTyKH9Y293x7xtZPYR6O3rEY/UQIuajLf+/vXsPiuo8wwD+LHeUiwJKRS4xNWpWFxAk9QaWmIFIDdGYtM1kFGuT6KQZJ7WM1XGstS1xYsw4SRqbGltTM+1EjSVxSBpLE0QDRglh1SKisaAGFUuDclG57ds/MuwI7MLCnsPuOfv8Zs6E/b6zZ98nhz2+87GXFkwNd/xl01pzqqYZEyK0n6/736Rh+xD5znYM+8fVd7YD+LbBuZu/vz/8/f377K52PwF82yMsXrwY69evx+zZs63jK1euxMqVKwEATz/9NCZOnOhAQM+glT6v7Tb7ByIicg/d/yYNW5/XcWf4+7yOOwAc7/OA4en1BvLBBx8gMzMTAQEBg7ujuBEAkp+fb73d1tYm3t7e8ve//73HfqtXr5a0tDSHjnns2DFJTEyU27dvS2dnp2RlZcn7779vd/9NmzYJAG7cuHHjxs3ttwsXLgzp31tH3b59W77zne+4LF9QUFCfsU2bNg1YN6B8P2GxWOTHP/6xzcevr68XEZGzZ8+KyWSSjo4Oh47padQ4L+zzuHHjxo2bXjf2efYByvcU3YqKimTJkiU25xYuXCgHDx4c1PFERFz+irf+NDQ0oKurC5GRkT3GIyMjce3aNYeOMXPmTGRlZWH69Onw8vLC/PnzkZ2dbXf/9evXY82aNdbbN27cQFxcHC5duoTQ0NAh5UhJSUFZWdmQ97E113vs7tv25rr/29TUhJiYGFy+fBkhISHDnsnRcXuZev/8ySefDEuewWYaaEwPmQZzzoYrk5LPJU/K5C7XBz1mUvqaV1ZWhps3byI2Ntb6Kh+1BAQEoKamBu3t7ao+jj0iAoOh5ytM7f0VtD9K9BMlJSXYu3cv4uPjrZ8p8s4778BkMmHRokW4ceMGRo4cid27d/Otpg5in2d/TsvXvKFkGuhnZzOp0RM5k0krfZ47ZmKfx0yecM1jnzd4SvQUAJCZmYkvv/wSra2tiI6ORn5+PlJSUgB8+yr5EydO4MCBA4OuTxOdYe+TYesE9ScvLw95eXkO7WvvpY2hoaFDfiJ7e3sPeN/+9rE113vs7tv25nqPh4SEuCSTo+P2Mtn7We08g6ndkTE9ZBrKOXPV7529OWZyr+uDvTktZ1LrmgcAXl7qf1Rr97d16oEz/cTcuXNhsVhszpWWljpdmydjn6eva569OSWueUPNpEZPZGtcb32eozn01hP1/pmZHK/XkX14zWOfpyZne4pDhw7ZnQsNDUV9ff2Q6nL5lyv0JyIiAt7e3n1WKK9fv95nJdOd/exnP3NqH1tzvcfuvm1vzpE6HOVMJkfH7WXqL+tQOXqcwWQaaEwPmYZyzpwx3M+l3rf1nMldrg/25rScyR2veZ5GL/2E3ujlvPCa59ic3vo8W+Naz6SF3pV9HjPxmke2uHtPYRAZrk/sG5jBYEB+fj4WLVpkHfve976H5ORk7NixwzpmNBrx6KOPWj8gT01NTU0IDQ3FzZs3h7yC7m70lklveQBm0gpm0gZm8jzu2E+Qe54XPT6XmMn96S0PwExawUzaoMdMSnPHnqI/Ln+raUtLC7766ivr7ZqaGpjNZoSFhSE2NhZr1qzB0qVLMWPGDMyaNQs7d+7EpUuXsGrVqmGpz9/fH5s2bRrye43dkd4y6S0PwExawUzawEyewd37CU/l7udFj88lZnJ/essDMJNWMJM26DGTEty9p+iPy1/xdvjwYaSnp/cZz8nJwdtvvw0A2LFjB7Zu3YqrV69i2rRp2L59u92viSciIiLPw37CPfG8EBERkRK03FO4fOGNiIiIiIiIiIhIj9z6yxWIiIiIiIiIiIi0igtvREREREREREREKuDCGxERERERERERkQq48EZERERERERERKQCLrwpaPv27Zg6dSqMRiNWr14NrX9vRXV1NRITE61bYGAg3n//fVeX5bSamhqkp6fDaDTCZDKhtbXV1SU5zcfHx3qenn76aVeXo4hbt24hLi4Oubm5ri7Fac3NzUhJSUFiYiJMJhPeeustV5fktMuXL+P73/8+jEYj4uPjsX//fleXpIjFixdj9OjRePzxx11dypAVFBRg8uTJuO+++7Br1y5Xl0OkG+zztIF9njawz3Nv7PPcF/s8beK3mirkv//9L2bOnInKykr4+voiLS0N27Ztw6xZs1xdmiJaWlpwzz334OLFixg5cqSry3HKvHnz8Lvf/Q6pqan45ptvEBISAh8fH1eX5ZSIiAg0NDS4ugxFbdiwAefPn0dsbCy2bdvm6nKc0tXVhba2NowYMQK3bt3CtGnTUFZWhvDwcFeXNmRXr15FfX09EhMTcf36dSQlJaG6ulrz14eioiK0tLTgL3/5C9577z1XlzNonZ2dMBqNKCoqQkhICJKSknD8+HGEhYW5ujQiTWOfpx3s87SBfZ57Y5/nntjnaRdf8aagzs5O3LlzBx0dHejo6MDYsWNdXZJiDh48iPnz52v+YtvdMKempgIAwsLCNN+M6dH58+dx9uxZZGVluboURXh7e2PEiBEAgDt37qCrq0vzr5QYN24cEhMTAQBjx45FWFgYvvnmG9cWpYD09HQEBwe7uowhO3HiBKZOnYrx48cjODgYWVlZOHTokKvLItIF9nnuj32eNrDPc3/s89wT+zzt8piFtyNHjuCRRx5BVFQUDAaDzZfS79ixAxMmTEBAQACSk5Nx9OhRh48/ZswY5ObmIjY2FlFRUXjooYfw3e9+V8EEfamd6W779u3Dj370IycrHpjamc6fP4+goCBkZ2cjKSkJL774ooLV2zYc56mpqQnJycmYO3cuiouLFarctuHIk5ubiy1btihU8cCGI9ONGzeQkJCA6OhorF27FhEREQpVb9twXh+++OILWCwWxMTEOFl1/4Yzk6s4m/HKlSsYP3689XZ0dDTq6uqGo3Qil2Kfxz4PYJ+nBPZ57PN6Y5+nHPZ5nstjFt5aW1uRkJCA3//+9zbn9+7dixdeeAEbNmxARUUFUlNTsWDBAly6dMm6T3JyMqZNm9Znu3LlChobG1FQUIDa2lrU1dWhtLQUR44c0XSmbk1NTSgpKRmWv0qpnamjowNHjx7FG2+8gWPHjqGwsBCFhYWazgQAtbW1KC8vx5tvvolly5ahqalJs3k++OADTJo0CZMmTVItQ2/DcY5GjRqFkydPoqamBn/7299QX1+v+UwA8L///Q/Lli3Dzp07Vc0znJlcydmMtv7CbjAYVK2ZyB2wz2Ofxz5PG3nY52knE8A+T2ns8zyYeCAAkp+f32PsgQcekFWrVvUYmzJliqxbt86hY+7bt0+ee+456+2tW7fKSy+95HStjlIjU7c9e/bIU0895WyJg6ZGptLSUsnMzLTe3rp1q2zdutXpWh2l5nnq9vDDD0tZWdlQSxwUNfKsW7dOoqOjJS4uTsLDwyUkJEQ2b96sVMkDGo5ztGrVKtm3b99QSxw0tTLduXNHUlNTZc+ePUqUOShqnqeioiJZsmSJsyU6bSgZS0pKZNGiRda51atXy1//+lfVayVyJ+zz2Od1Y5/nHPZ57PPY56mHfZ5n8ZhXvPWnvb0d5eXlyMjI6DGekZGB0tJSh44RExOD0tJS6/v6Dx8+jMmTJ6tRrkOUyNRtuN5+MBAlMqWkpKC+vh6NjY2wWCw4cuQI7r//fjXKdYgSmRobG9HW1gYA+Prrr3HmzBnce++9itfqCCXybNmyBZcvX0ZtbS22bduGZ555Br/61a/UKNchSmSqr6+3/nW6qakJR44c0fz1QUSwfPlyPPjgg1i6dKkaZQ6Kktc8d+VIxgceeAD//ve/UVdXh+bmZnz00UfIzMx0RblEboN9Xv/Y56mHfV5f7PPUxz5Pm9jn6Rs/bRRAQ0MDurq6EBkZ2WM8MjIS165dc+gYM2fORFZWFqZPnw4vLy/Mnz8f2dnZapTrECUyAcDNmzdx4sQJHDhwQOkSB02JTD4+PnjxxReRlpYGEUFGRgYWLlyoRrkOUSJTVVUVVq5cCS8vLxgMBrz66qsu+2YbpX7v3IkSmb7++mv89Kc/hYhARPD8888jPj5ejXIdokSmkpIS7N27F/Hx8dbPp3jnnXdgMpmULtchSv3uZWZm4ssvv0Rrayuio6ORn5+PlJQUpcsdEkcy+vj44JVXXkF6ejosFgvWrl2r6W9VI1IC+zz72Oepi32e+2OfZxv7vOHHPk/fuPB2l97vjxaRQb1nOi8vD3l5eUqX5RRnM4WGhqr+GQWD5WymBQsWYMGCBUqX5RRnMs2ePRunT59Wo6whc/YcdVu+fLlCFTnPmUzJyckwm80qVOUcZzLNnTsXFotFjbKc4uzvnha+GWqgjNnZ2S5dECByV+zz+mKfNzzY59nGPk9d7PP6Yp9HrsK3mgKIiIiAt7d3n9Xy69ev91lx1gpm0ga9ZdJbHoCZtEKPmXrzhIxEatDjc4eZtEFvmfSWB2AmrdBjpt48IaMn48IbAD8/PyQnJ/f51qPCwkLMnj3bRVU5h5m0QW+Z9JYHYCat0GOm3jwhI5Ea9PjcYSZt0FsmveUBmEkr9JipN0/I6Mk85q2mLS0t+Oqrr6y3a2pqYDabERYWhtjYWKxZswZLly7FjBkzMGvWLOzcuROXLl3CqlWrXFh1/5iJmVxBb3kAZmIm9+EJGYnUoMfnDjMxkyvoLQ/ATMzkPjwhI9kxXF+f6mpFRUUCoM+Wk5Nj3eeNN96QuLg48fPzk6SkJCkuLnZdwQ5gJmZyBb3lEWEmZnIfnpCRSA16fO4wEzO5gt7yiDATM7kPT8hIthlERBxdpCMiIiIiIiIiIiLH8DPeiIiIiIiIiIiIVMCFNyIiIiIiIiIiIhVw4Y2IiIiIiIiIiEgFXHgjIiIiIiIiIiJSARfeiIiIiIiIiIiIVMCFNyIiIiIiIiIiIhVw4Y2IiIiIiIiIiEgFXHgjIiIiIiIiIiJSARfeiIgcVFtbC4PBALPZ7OpSiIiIiEhB7POISC1ceCMiIiIiIiIiIlIBF96IqI+uri5YLBZXl+Ey7e3tri6BiIiISBXs89jnEdHw4sIbkQa89957MJlMCAwMRHh4OB566CG0trYCACwWC37zm98gOjoa/v7+SExMxMcff2y97+HDh2EwGHDjxg3rmNlshsFgQG1tLQDg7bffxqhRo1BQUACj0Qh/f39cvHgRbW1tWLt2LWJiYuDv74/77rsPf/rTn6zHOXPmDLKyshAUFITIyEgsXboUDQ0NdnOsWLEC8fHxaGtrAwB0dHQgOTkZTz31VL/5Kysr8YMf/AAhISEIDg5GamoqLly44FB+ADh9+jQefPBB6/+/Z599Fi0tLdb55cuXY9GiRdiyZQuioqIwadIkAMCJEycwffp0BAQEYMaMGaioqOi3TiIiIqLBYp/HPo+I9I0Lb0Ru7urVq3jyySexYsUKVFVV4fDhw3jssccgIgCAV199Fa+88gq2bduGU6dOITMzE9nZ2Th//vygHufWrVvYsmULdu3ahcrKSowdOxbLli3Du+++i9deew1VVVV48803ERQUZK1r3rx5SExMxBdffIGPP/4Y9fX1+OEPf2j3MV577TW0trZi3bp1AICNGzeioaEBO3bssHufuro6pKWlISAgAJ9++inKy8uxYsUKdHZ2OpT/1q1bePjhhzF69GiUlZVh//79+Ne//oXnn3++x+N88sknqKqqQmFhIQoKCtDa2oqFCxdi8uTJKC8vx69//Wvk5uYO6v8pERERUX/Y57HPIyIPIETk1srLywWA1NbW2pyPioqSvLy8HmMpKSny3HPPiYhIUVGRAJDGxkbrfEVFhQCQmpoaERHZvXu3ABCz2Wzdp7q6WgBIYWGhzcfduHGjZGRk9Bi7fPmyAJDq6mq7eUpLS8XX11c2btwoPj4+UlxcbHdfEZH169fLhAkTpL293eb8QPl37twpo0ePlpaWFuv8hx9+KF5eXnLt2jUREcnJyZHIyEhpa2uz7vPHP/5RwsLCpLW11Tr2hz/8QQBIRUVFvzUTEREROYJ9Hvs8ItI/vuKNyM0lJCRg/vz5MJlMeOKJJ/DWW2+hsbERANDU1IQrV65gzpw5Pe4zZ84cVFVVDepx/Pz8EB8fb71tNpvh7e2NefPm2dy/vLwcRUVFCAoKsm5TpkwBAOvbA2yZNWsWcnNz8dvf/ha/+MUvkJaWZp1bsGCB9VhTp0611pGamgpfX98+x3Ikf1VVFRISEjBy5Mge8xaLBdXV1dYxk8kEPz8/6+3u+40YMaJH7URERERKYZ/HPo+I9M/H1QUQUf+8vb1RWFiI0tJS/POf/8Trr7+ODRs24Pjx4wgPDwcAGAyGHvcREeuYl5eXdaxbR0dHn8cJDAzscZzAwMB+67JYLHjkkUfw0ksv9ZkbN25cv/crKSmBt7d3n7dJ7Nq1C7dv3wYAawM2UB1A//nv/rm/+93dsHXfj4iIiEhN7PPY5xGR/vEVb0QaYDAYMGfOHGzevBkVFRXw8/NDfn4+QkJCEBUVhc8++6zH/qWlpbj//vsBAGPGjAHw7Wd1dDObzQM+pslkgsViQXFxsc35pKQkVFZW4p577sHEiRN7bL2bm7u9/PLLqKqqQnFxMQ4dOoTdu3db58aPH289RlxcHAAgPj4eR48etdlEOpLfaDTCbDZbP6QYAEpKSuDl5WX9cF1bjEYjTp48aW0QAeDzzz+3uz8RERHRULDPY59HRDrnqve4EpFjPv/8c8nLy5OysjK5ePGi7Nu3T/z8/OSjjz4SEZHt27dLSEiIvPvuu3L27Fn55S9/Kb6+vnLu3DkREWlvb5eYmBh54oknpLq6WgoKCmTy5Ml9PvsjNDS0z2MvX75cYmJiJD8/X/7zn/9IUVGR7N27V0RE6urqZMyYMfL444/L8ePH5cKFC3Lo0CH5yU9+Ip2dnTazVFRUiJ+fnxw8eFBERHbt2iXBwcFy4cIFu/kbGhokPDxcHnvsMSkrK5Nz587Jnj175OzZsw7lb21tlXHjxsmSJUvk9OnT8umnn8q9994rOTk51sfIycmRRx99tMfjNjc3S0REhDz55JNSWVkpH374oUycOJGf/UFERESKYZ/HPo+I9I8Lb0Ru7syZM5KZmSljxowRf39/mTRpkrz++uvW+a6uLtm8ebOMHz9efH19JSEhQf7xj3/0OMZnn30mJpNJAgICJDU1Vfbv3+9QQ3b79m35+c9/LuPGjRM/Pz+ZOHGi/PnPf7bOnzt3ThYvXiyjRo2SwMBAmTJlirzwwgtisVhsHstoNMqzzz7bY3zx4sUye/Zsu02ciMjJkyclIyNDRowYIcHBwZKammpt4hzJf+rUKUlPT5eAgAAJCwuTZ555Rpqbm63zthoyEZFjx45JQkKC+Pn5SWJiohw4cIANGRERESmGfR77PCLSP4MI3+BORERERERERESkNH7GGxERERERERERkQq48EZERERERERERKQCLrwRERERERERERGpgAtvREREREREREREKuDCGxERERERERERkQq48EZERERERERERKQCLrwRERERERERERGpgAtvREREREREREREKuDCGxERERERERERkQq48EZERERERERERKQCLrwRERERERERERGpgAtvREREREREREREKvg/V5lb0U/VyPcAAAAASUVORK5CYII=", "text/plain": [ - "

" + "
" ] }, "metadata": {}, @@ -186,150 +186,31 @@ } ], "source": [ - "order_plot = 5\n", - "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + "order_plot = 4\n", + "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=order_plot, recur=recur_helmholtz, derivs=derivs_helmholtz, n_initial=n_init_helm, n_order=order_helm)\n", + "x_grid, y_grid, plot_me_lap = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", " \n", - "fig, ax = plt.subplots()\n", - "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", + "cs = ax1.contourf(x_grid, y_grid, plot_me_hem, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "cbar = fig.colorbar(cs)\n", - "plt.gca().set_xscale('log')\n", - "plt.gca().set_yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"Laplace recurrence error order = \"+str(order_plot))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHJCAYAAACBuOOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABo3ElEQVR4nO3de1xUdeL/8ffIZUAFFFEUESRvSQjmiAqKihY2ppZpufv9LuJty4W+rrJuq+vXG6WUlVkrmGZltvvdyDapNXeRSoVkLUFpU8zURUHlEmgiqKDw+f3hj8lxZmAuZ+Ychvfz8ZjH7pw5c+ZzUJlX56oSQggQERERObEOcg+AiIiIyN4YPEREROT0GDxERETk9Bg8RERE5PQYPEREROT0GDxERETk9Bg8RERE5PQYPEREROT0GDxERETk9Bg87diOHTugUqmQn5/v0M89cOAAVCoVDhw44NDPJWpr1qxZA5VKJfcwrPbVV19h8uTJ6Nq1Kzw9PTFgwAA8//zzcg+L2ilXuQdARETO5//+7/8QHx+Pp556Cjt37kTnzp1x9uxZXLp0Se6hUTvF4CEyw/Xr19GxY0e5h6Fz48YNeHh4GP2vf6WN1VFMrbcQAjdv3oSnp6fVy27p522LxsZG3L59G2q1WtLlmuKovxsXL17E008/jWeeeQbp6em66bGxsXb/bCJTuEuLWnTz5k387ne/w9ChQ+Hj4wNfX19ERUXhk08+MZhXpVLh2WefxdatWzFw4ECo1WqEhobigw8+aPVz8vPz8Ytf/AJ9+/aFp6cn+vbti1/+8pc4f/68wbzNv0z79OkDd3d3BAQEYObMmaioqNDNU1NTg6VLlyIkJATu7u7o3bs3Fi9ejLq6ulbHMn78eISFhSEnJwfR0dHo2LEj5s2bZ9Fym5qa8Kc//QlDhw6Fp6cnunTpglGjRuHTTz/V+3mtWbPG4PP79u2LOXPm6J4373rct28f5s2bh+7du6Njx46or6+XZKzNf27vv/8+Bg8ejI4dOyIiIgJ79uwxGNv333+PX/7yl/D394darUZQUBBmz56N+vp63Tzl5eV45plnEBgYCHd3d4SEhGDt2rW4fft2qz97AMjIyEBUVBQ6deqEzp07Y9KkSTh27JjePHPmzEHnzp3x3XffIS4uDl5eXpg4caLe+rz55psYPHgw1Go13nvvPQB3drFMnDgRXl5e6NixI6Kjo/HZZ5/pLbuln7cpJSUl+NWvfoUePXpArVZj8ODBePXVV9HU1KSb59y5c1CpVNiwYQNeeOEFhISEQK1WY//+/QCAzz77DEOHDoVarUZISAheeeUVo58lhEB6erru71bXrl0xc+ZM/Oc//9Gbr6W/G/a2fft21NXV4Q9/+INDPo/IHNzCQy2qr6/H5cuXsXTpUvTu3RsNDQ34/PPP8cQTT+Ddd9/F7Nmz9eb/9NNPsX//fqSkpKBTp05IT0/HL3/5S7i6umLmzJkmP+fcuXMYNGgQfvGLX8DX1xdlZWXYsmULIiMjUVRUBD8/PwB3YicyMhK3bt3CH//4R4SHh6O6uhpZWVm4cuUK/P39cf36dYwbNw4XLlzQzXPixAmsWrUK3333HT7//PNW/0u9rKwMv/rVr/Dcc89h/fr16NChg0XLnTNnDv785z9j/vz5SElJgbu7O44ePYpz585Z/Wcxb948PProo3j//fdRV1cHNzc3ScYK3PmyPXLkCFJSUtC5c2ds2LAB06dPx6lTp3DfffcBAL799luMGTMGfn5+SElJwYABA1BWVoZPP/0UDQ0NUKvVKC8vx4gRI9ChQwesWrUK/fr1w7/+9S+88MILOHfuHN59990W13H9+vX43//9X8ydOxf/+7//i4aGBrz88suIiYnBN998g9DQUN28DQ0NmDZtGp555hksW7ZML6gyMzORm5uLVatWoWfPnujRowcOHjyIhx9+GOHh4Xj77behVquRnp6OqVOn4q9//StmzZpl1s/7Xj/++COio6PR0NCA559/Hn379sWePXuwdOlSnD17Vm8LBwC88cYbGDhwIF555RV4e3tjwIAB+OKLL/DYY48hKioKH3zwARobG7Fhwwa9iG/2zDPPYMeOHVi0aBFeeuklXL58GSkpKYiOjsa3334Lf39/3bzG/m6YIoRAY2Nji38+zVxdW/7qyMnJga+vL77//ns89thjOH78OHx9ffHEE09gw4YN8Pb2NutziCQlqN169913BQBx5MgRs99z+/ZtcevWLTF//nzx4IMP6r0GQHh6eory8nK9+e+//37Rv39/3bT9+/cLAGL//v0tfk5tba3o1KmTeP3113XT582bJ9zc3ERRUZHJ96ampooOHToYrNdHH30kAIi9e/e2uI7jxo0TAMQXX3xh1XJzcnIEALFixYoW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G15eXpg8eTKysrLkHhYREVG7I+d3suKDJycnB1OnTkVAQABUKhUyMzMN5klPT0dISAg8PDyg0WiQm5ure+3SpUvo3bu37nlgYCAuXrzoiKETERE5lbb8naz44Kmrq0NERITJM38yMjKwePFirFixAseOHUNMTAy0Wi1KSkoAGL8iqLXX2yAiImrP2vJ3suIvPKjVanU3HjRm48aNmD9/PhYsWAAA2LRpE7KysrBlyxakpqaid+/eevV44cKFFi+4Vl9fr3e5/6amJly+fBndunVjKBERUYuEELh27RoCAgLsdguNmzdvoqGhQZJlCSEMvtvUarXRW5cAjv9OlpR8lwCyHACxe/du3fP6+nrh4uIiPv74Y735Fi1aJMaOHSuEEOLWrVuif//+4sKFC6Kmpkb0799fVFVVmfyM5gt98cEHH3zwwYe1j9LSUrt8D964cUP09O8p2Tg7d+5sMG316tVmjQWw/3eylBS/haclVVVVaGxsNLhzsL+/v+6me66urnj11VcRGxuLpqYmPPfccy1ePn358uVITk7WPb969SqCgoJw5sQZeHl52WdFyCz//o/xm2qS45z96SYAoOhKncwjIQA48mMtii5dk3sYBKD2xztbLcStm2j6cLndvi8aGhpQXlGO0ydOw9vL26Zl1VyrwYAHBqC0tBTe3j8vy9TWndbY4ztZSm06eJrduzlO3LOJbtq0aZg2bZpZy2relJeWloa0tDTdzSu9vLz0/kKQYx07U4VOnRmccjl95QYAwLNTZxy/XAd1x84yj4gOV17DyepGqNQd5R5Ku1ZbeQEAoHL31Jtu70MgvL28JftO8vaWblmAtN/JUmrTwePn5wcXFxddOTarrKw0KExLJSUlISkpCTU1NZLczJGsU/XTDZRWcWuCnJpjBwCOX+afhdwOV97ZovPdhRqZR0LNsUN32PM7WQqKP0urJe7u7tBoNMjOztab3ny3ZlukpaUhNDQUkZGRNi2HrMfYkdfpKzcYOwrD2FGG2soLjB0j7PmdLAXFb+Gpra3FmTNndM+Li4tRWFgIX19fBAUFITk5GfHx8Rg+fDiioqKwbds2lJSUYOHChTZ9LrfwyIuxI5+7I6cZY0dezaEDMHbk1t5DR67vZCkoPnjy8/MRGxure958QHFCQgJ27NiBWbNmobq6GikpKSgrK0NYWBj27t2L4OBguYZM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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "order_plot = 6\n", - "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", - " \n", - "fig, ax = plt.subplots()\n", - "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "cbar = fig.colorbar(cs)\n", - "plt.gca().set_xscale('log')\n", - "plt.gca().set_yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"Laplace recurrence error order = \"+str(order_plot))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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enq6mDNnjrh9+3aj23LixAnh7OwsPv74YyGEENu3bxdubm7ixx9/NLn9ZWVlolu3bmLatGni2LFj4ocffhA7d+4U33//vVnbX1VVJXr16iWmT58uvv32W/H555+LBx54QMTGxurXERsbKx5//HGD9V6/fl14enqK3/zmN+LkyZPik08+Ef379+c5PETtCIOHqBXl5+eLCRMmiO7duwu1Wi0GDhwo/vrXv+pfr6urE2vWrBG9e/cWTk5OIjg4WPzzn/80WMYXX3whhg4dKlxcXERERITYvXu3WcFz8+ZNsXjxYtGrVy/h7Ows+vfvL95880396z/88IOYOnWq6NKli3B1dRUPPvigWLRokaivr290WQEBAeLpp582mD516lQRHh5uMpKEEOLrr78W0dHRomPHjsLNzU1EREToI8mc7f/mm29EVFSUcHFxER4eHuJ3v/uduH79uv71xoJHCCG+/PJLERwcLJydnUVISIj4+9//zuAhakdUQvDgNhEREdk3nsNDREREdo/BQ0RERHaPwUNERER2j8FDREREdo/BQ0RERHaPwUNERER2j8FDREREdo/BQ0RERHaPwUNERER2j8FDREREdo/BQ0RERHbv/wNHIFVfdXLeOwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "order_plot = 7\n", - "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", - " \n", - "fig, ax = plt.subplots()\n", - "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "cbar = fig.colorbar(cs)\n", - "plt.gca().set_xscale('log')\n", - "plt.gca().set_yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"Laplace recurrence error order = \"+str(order_plot))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "order_plot = 7\n", - "x_grid, y_grid, plot_me = generate_error_grid(res=5, order_plot=order_plot, recur=recur_helmholtz, derivs=derivs_helmholtz, n_initial=n_init_helm, n_order=order_helm)\n", - " \n", - "fig, ax = plt.subplots()\n", - "cs = ax.contourf(x_grid, y_grid, plot_me.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "cbar = fig.colorbar(cs)\n", - "plt.gca().set_xscale('log')\n", - "plt.gca().set_yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"Helmholtz recurrence error order = \"+str(order_plot))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_65942/4137449632.py:6: UserWarning: Log scale: values of z <= 0 have been masked\n", - " cs = ax.contourf(x_grid, y_grid, (plot_me_hem7-plot_me_lap7).T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n" - ] - }, - { - "data": { - "image/png": "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jw/i4uIwZcoU9OvXD+Hh4di4cSMKCgowd+5cs9YVGxuL2NhY1cp3IiKils5a5+yGWDzs5OTkICoqSvW8bnHwtGnTsGXLFkyePBnXr1/H8uXLUVRUhICAAOzatQu+vr6WKpmIiKhFaq5ztlXdZ8eaPLxA+cyZM7zPDhERNaip7rNjOy3ZJJee3//spRYxv1n1mh1L4gJlIiIiaWDYISIiIklj2NGBV2MRERFJA8OODjyNRUREJA0MO0RERCRpDDtEREQkaQw7OnDNDhERkTQw7OjANTtERETSwLBDREREksawQ0RERJLGsKMD1+wQERFJA8OODlyzQ0REJA0MO0RERCRpDDtEREQkaQw7REREJGkMO0RERCRpDDs68GosIiIiaWDY0YFXYxEREUkDww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaw44OvM8OERGRNDDs6MD77BAREUkDww4RERFJGsMOERERSRrDDhEREUkaww4RERFJGsMOERERSRrDDhEREUkaww4RERFJmuTDzunTpxESEqJ6ODg4YMeOHZYui4iIiLQYP3482rdvj0mTJqm1FxYWYujQofD390dQUBC2b9+ud5+2pi7S2vTq1Qu5ubkAgPLycnTp0gVPPvmkZYsiIiIirebPn4+ZM2fis88+U2u3tbXFe++9h5CQEFy7dg2hoaEYOXIkWrdu3WCfkj+y87B///vfGD58uF4fDBERETW9qKgotG3bVqO9U6dOCAkJAQC4u7vDxcUFN27c0KtPi4edjIwMjBkzBp6enpDJZFpPMSUnJ8PPzw8KhQJKpRKZmZmN2tfXX3+NyZMnG1kxERFRy9SUc3Z9cnJyUFtbC29vb722t/hprIqKCgQHB2PGjBmYOHGixuspKSlYsGABkpOTMXDgQHz00UeIiYlBXl4efHx8AABKpRKVlZUa792zZw88PT0BAGVlZThw4AC++uqreuuprKxU66usrMyY4REREVm1R+c5uVwOuVyuddummrPrc/36dUydOhWbNm3SZ3gAAJkQQui9tZnJZDKkpqZi3LhxqrYBAwYgNDQU69evV7X17t0b48aNQ2Jiot59f/7559i9eze2bdtW73YJCQlYtmyZRntpaSmcnJz03h8REbU8ZWVlcHZ2NtucUdd/qyfmQWanPZDoS1RXovbHdRrt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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "order_plot = 7\n", - "x_grid, y_grid, plot_me_hem7 = generate_error_grid(res=5, order_plot=order_plot, recur=recur_helmholtz, derivs=derivs_helmholtz, n_initial=n_init_helm, n_order=order_helm)\n", - "x_grid, y_grid, plot_me_lap7 = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", - " \n", - "fig, ax = plt.subplots()\n", - "cs = ax.contourf(x_grid, y_grid, (plot_me_hem7-plot_me_lap7).T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "\n", + "cs = ax2.contourf(x_grid, y_grid, plot_me_lap, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "cbar = fig.colorbar(cs)\n", - "plt.gca().set_xscale('log')\n", - "plt.gca().set_yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n", - "plt.title(\"Helmholtz-Laplace recurrence error order = \"+str(order_plot))\n", + "ax1.set_xscale('log')\n", + "ax1.set_yscale('log')\n", + "ax1.set_xlabel(\"source x-coord\")\n", + "ax1.set_ylabel(\"source y-coord\")\n", + "\n", + "\n", + "ax2.set_xscale('log')\n", + "ax2.set_yscale('log')\n", + "ax2.set_xlabel(\"source x-coord\")\n", + "ax2.set_ylabel(\"source y-coord\")\n", + "\n", + "ax1.set_title(\"Helmholtz recurrence relative error for order = \"+str(order_plot))\n", + "ax2.set_title(\"Laplace recurrence relative error for order = \"+str(order_plot))\n", + "\n", + "fig.savefig('order'+str(order_plot))\n", "plt.show()" ] }, @@ -338,9 +219,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "(plot_me_hem7-plot_me_lap7).T" - ] + "source": [] } ], "metadata": { From 68cf84f5fe6716bb24c987729686bb795f4632ef Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 22 Dec 2024 23:05:43 -0800 Subject: [PATCH 121/143] Plot Odd/Even Error --- test/order5.png | Bin 46382 -> 47215 bytes test/plot_normal_recurrence.ipynb | 145 ++++++++++++++++++++++++++---- 2 files changed, 130 insertions(+), 15 deletions(-) diff --git a/test/order5.png b/test/order5.png index aaacae9e568e112dacbeb5379978712e7c7a58ed..cedbdcbdcc4634e0952dbbd1d6ae94c87ff893ad 100644 GIT binary patch literal 47215 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

g&SN}@5l@(i$MG($yJaJ|`QK3cxX)HNaF>!H~ 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" ] @@ -186,15 +186,15 @@ } ], "source": [ - "order_plot = 4\n", + "order_plot = 5\n", "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=order_plot, recur=recur_helmholtz, derivs=derivs_helmholtz, n_initial=n_init_helm, n_order=order_helm)\n", "x_grid, y_grid, plot_me_lap = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", " \n", "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", - "cs = ax1.contourf(x_grid, y_grid, plot_me_hem, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs = ax1.contourf(x_grid, y_grid, plot_me_hem.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "cbar = fig.colorbar(cs)\n", "\n", - "cs = ax2.contourf(x_grid, y_grid, plot_me_lap, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs = ax2.contourf(x_grid, y_grid, plot_me_lap.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "cbar = fig.colorbar(cs)\n", "ax1.set_xscale('log')\n", "ax1.set_yscale('log')\n", @@ -214,6 +214,121 @@ "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left(-1\\right)^{n + 1} \\left(\\frac{\\left(-1\\right)^{n - 3} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) s{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) s{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) s{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" + ], + "text/plain": [ + "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*s(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*s(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*s(n - 1)/(x0**3 + x0*x1**2))" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "recur_laplace" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Error vs Order (Odd Only), Slope: 149.36134613278')" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "

" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loc = np.array([1e-8, 1])\n", + "orders_even = [i for i in range(5, 15, 2)]\n", + "err = []\n", + "for o in orders_even:\n", + " err.append(compute_error_coord(recur_laplace, loc, o, derivs_laplace, n_init_lap, order_lap))\n", + "\n", + "orders_even = np.array(orders_even)\n", + "err = np.array(err, dtype=float)\n", + "\n", + "coefficients = np.polyfit(np.log10(orders_even), np.log10(err), 1)\n", + "polynomial = np.poly1d(coefficients)\n", + "log10_y_fit = polynomial(np.log10(orders_even))\n", + "plt.plot(orders_even, 10**log10_y_fit, '*-')\n", + "plt.scatter(orders_even, err)\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title(\"Error vs Order (Odd Only), Slope: \"+str(coefficients[0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Error vs Order (Even Only), Slope: 170.3029259672917')" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAG2CAYAAACzoLZvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABoRElEQVR4nO3deVxUVf8H8M8wwCACg4jsi7iDCChIiSsuKCqmpqI9LqX2pNmTaLaolWkaZqlYKj5UT7aLVpoaLpgW5pIbuOECiQLKIvsm28z5/UHMzxFQwJFh+bxfr3nVnHvm3u8dBubrOefer0QIIUBERETUyOloOwAiIiKi2mDSQkRERE0CkxYiIiJqEpi0EBERUZPApIWIiIiaBCYtRERE1CQwaSEiIqImgUkLERERNQlMWoiIiKhJYNJSja1bt0IikdT4+P3337UdotYIIfD9999j8ODBaNOmDWQyGTp06IB58+YhKSnpsfd/8+ZNSCQSbN269fGDraWjR49CJpPh1q1bqrZBgwbV+PNv3759g8VWXydPnsTEiRNhbW0NfX19WFlZYcKECThx4sRj7bd9+/Z4/vnn6/y63377DUZGRrh9+/ZjHT8pKQkvv/wyunTpglatWsHMzAw9evTAiy++qPb5e++99yCRSB7rWNry559/Yvbs2fD09IRMJoNEIsHNmzer9HvU36nVq1er9U9PT8fzzz8Pc3NzGBoaok+fPvjtt99qFdMPP/yAAQMGwNLSEjKZDDY2NggICMDx48er7b9t2zZ4eHjAwMAANjY2CAoKQkFBgVqfw4cPY+bMmejWrRtat24NW1tbPPPMMzh79myV/Qkh8Mknn6Bbt26QyWSwtrbG3LlzkZ2drdbv+vXrWLRoETw9PWFqagozMzP07dsXP/74Y53ev9TUVLW+paWlePfdd+Hk5AR9fX04Ojpi8eLFuHfvXrXnf+nSJUycOBHt2rWDTCZD+/bt8fLLL6v1ad++fY3HNzAwUPVLSUnB22+/jT59+sDc3BwmJibw9PREWFgYFApFlWOfOnUKw4cPh7GxMYyMjODr64tjx45V6fekPmdPmm6DHq2J+fLLL9GtW7cq7S4uLlqIRvuUSiWee+45hIeHY8qUKdi6dSvkcjkuXLiAjz76CN9//z327t2Lvn37ajvUWhNCICgoCC+++CIcHR3VtnXo0AHfffddldfIZLKGCq9ePv30UwQFBcHb2xtr1qyBo6MjEhMTsWnTJvTr1w8bNmzAK6+80qAxDRkyBN7e3liyZAm++uqreu0jOTkZvXr1gqmpKV577TV07doVubm5iI2Nxfbt23Hjxg3Y29trOPKG99tvv+HQoUPo2bMnTExMavxH0qhRo6pNQt99911ERkZi3LhxqraSkhIMGTIEOTk52LBhAywsLLBp0yaMGDEChw4dwsCBAx8aU2ZmJvr27Yv58+fD3NwcKSkpWLduHQYMGIDffvtN7fXfffcdpk6ditmzZ2P9+vW4fv063nzzTcTGxuLgwYOqfqGhocjMzMT8+fPh4uKCu3fvYu3atXj66adx4MABDB48WNV30aJFCAkJwaJFizB06FDExsbi3XffxenTp3HixAno6ekBAA4ePIhff/0V06ZNQ+/evVFeXo7w8HBMnDgRy5cvx7vvvlvl3Kr7O9+2bVu151OmTEFERATeffdd9O7dGydOnMDKlStx+fJl7N69W63vkSNHMGrUKPTv3x9btmyBubk5EhMTER0drdZv586dKCkpUWtLTExEYGCg2s/u7Nmz+PrrrzF9+nS888470NPTw759+zB37lycPHkS//vf/1R9T58+jQEDBsDb2xvffPMNhBBYs2YNhgwZgiNHjqBPnz6qvk/ic9YgBFXx5ZdfCgDi9OnTdX6tUqkURUVF1W4rKioSSqXysWIrLCx8rNc/jg8++EAAEKtXr66yLTU1VTg6OgpLS0uRnZ390P087BwSEhIEAPHll18+ZrQVHvWeR0RECADi6tWrau0DBw4U3bt310gMDenPP/8UOjo6YvTo0aKsrExtW1lZmRg9erTQ0dERf/75Z7327+joKGbMmFGv1/74449CKpWKxMTEer3+3XffFQDEjRs3qt2uUChU/79s2TLRVP+83X8eH330kQAgEhISavXagoICYWRkJPr166fWvmnTJgFAHD9+XNVWVlYmXFxchLe3d73izMnJEXp6emLatGmqtvLycmFtbS38/PzU+n733XcCgIiIiFC1paWlVdlnfn6+sLS0FEOGDFG1JScnC6lUKv7zn/+o9f3+++8FABEWFqZqu3v3brW/76NGjRKGhoaiuLhY1Vbbv/MnTpwQAMTatWvV2iv/Hh48eFDVVlhYKKytrcWoUaPq9bf+vffeEwDEoUOHVG1ZWVmitLS0St958+YJAGq/T8OHDxeWlpZqf2Pz8vKEubm58PHxUXv9k/icNQRODz0miUSCV155BVu2bIGzszNkMhm++uor1ZDawYMHMXPmTLRr1w6GhoYoKSmBUqnEmjVrVEOdFhYWmD59OpKTk9X2PWjQILi6uiIqKgo+Pj4wNDTEzJkzq40jJCQEEokE8fHxVba9+eab0NfXR0ZGBgAgOjoao0ePhoWFhWqod9SoUVWOf7/S0lJ89NFHcHZ2xhtvvFFlu6WlJYKDg5GWloYvvviiVudw584dTJo0CcbGxpDL5QgMDKwyLFvpzJkzGDNmDMzMzGBgYICePXti+/btan0e9p7XJDQ0FL1790bXrl1r7FOT8+fPQyKRqJ1vpX379kEikaj9KywuLg7PPfec6n13dnbGpk2b1F73+++/QyKR4IcffsDSpUthY2MDExMTDB06FNeuXXtkTMHBwZBIJAgNDYWurvpAqq6uLjZv3lxlSLdyKuXy5cuYMmUK5HI5LC0tMXPmTOTm5tZ4rIKCApiamuKll16qsu3mzZuQSqX46KOPVG0BAQEwMjLCZ5999sjzqE5mZiZ0dHRgYWFR7XYdnYf/Oavr793Ro0fx9NNPo1WrVrC1tcU777xTZTi+tLQUK1euVO2zXbt2eOGFF3D37t16nWNtzuNhwsPDUVBQgNmzZ6u179y5E127dlX7l7auri6mTp2KU6dO1WvaztjYGAYGBmqfs5MnTyIlJQUvvPCCWt+JEyfCyMgIO3fuVLVV93M0MjKCi4uL2lTfyZMnoVAoMHLkSLW+o0ePBgD89NNPqjZzc/NqpwW9vb1RVFSErKysOp4lVFMrtTn+jh07kJKSgtdff73O05NCCHz55Zfo0KGD2ihTmzZtVCNJ9/P29gYAtc/vsWPHMGjQIBgaGqrajI2NMWDAABw/fhwpKSmq9ifxOWsITFoeQqFQoLy8XO1R3Rzirl27EBoainfffRcHDhxA//79VdtmzpwJPT09fPPNN/jxxx+hp6eHuXPn4s0338SwYcOwe/duvP/++9i/fz98fHxUiUWllJQUTJ06Fc899xwiIiKqzItWmjp1KvT19ausBVEoFPj2228REBAAc3NzFBYWYtiwYUhLS8OmTZsQGRmJkJAQODg4ID8/v8b34uzZs8jOzsaYMWNq/GUMCAiAjo4OIiMjH3kO9+7dw9ChQ3Hw4EEEBwdjx44dsLKyQmBgYJX9HjlyBH379kVOTg62bNmCX375BR4eHggMDKx27Ut173l1SktLcejQIfj6+tZ43g/+/MvLy6FUKgEA7u7u6NmzJ7788ssqr9u6dSssLCxUf+hiY2PRu3dvXLp0CWvXrsXevXsxatQovPrqq1i+fHmV1y9ZsgS3bt3C559/jrCwMMTFxSEgIKDaz18lhUKBI0eOwMvLC3Z2dtX2sbe3h6enJw4fPlxlX88++yy6dOmCn376CW+99Ra+//57LFiwoMbjGRkZYebMmfjuu++qJDebN2+Gvr6+WpKtr68PHx8f/PrrrzXu82H69OkDpVKJ8ePH48CBA8jLy6vT6+vye5eamorJkyfjX//6F3755RdMmDABK1euxPz581V9lEolnnnmGaxevRrPPfccfv31V6xevRqRkZEYNGiQ2nqHyoT6Sa/V+uKLL2BiYoKJEyeqtV+6dAlubm5V+le2Xb58uVb7VygUKCsrw82bNzF37lwIITBv3jy149y/30p6enro1q2bantNcnNzce7cOXTv3l3VVlpaCqDqtKyenh4kEgkuXLjwyLiPHDmCdu3aVZsojR49GlKpFGZmZhg/fnyVGGs6fuXz+48fFRUFoOJ96tevH/T19dGmTRtMmTIFd+7ceWiMhw4dwq1btzBz5sxaJTyHDx+Grq4uunTpohZrddPXlW0XL1585H5ro6bPWYNo8LGdJqBy2LC6h1QqVesLQMjlcpGVlVXtPqZPn67WfuXKFQFAvPzyy2rtf/31lwAglixZomobOHCgACB+++23WsU9fvx4YWdnpzbsVzn9sWfPHiGEEGfOnBEAxK5du2q1z0rbtm0TAMSWLVse2s/S0lI4Ozs/8hxCQ0MFAPHLL7+otb/44otVpoe6desmevbsWWW6Y/To0cLa2lp1vjW95zWpfM+3bdtWZVtl3NU9Zs2aper3ySefCADi2rVrqrasrCwhk8nEa6+9pmobPny4sLOzE7m5uWrHeeWVV4SBgYHq83PkyBEBQIwcOVKt3/bt2wUAceLEiRrPJzU1VQAQkydPfuh5BwYGCgCq4fnKqZQ1a9ao9Xv55ZeFgYGB2jD3g9NDf//9t9DR0RHr169Xtd27d0+0bdtWvPDCC1WOvXTpUqGjoyMKCgoeGmN1lEqleOmll4SOjo4AICQSiXB2dhYLFiyoMqz94PRQfX7vqvts6ujoiFu3bgkhhPjhhx8EAPHTTz+p9Tt9+rQAIDZv3qxq++qrr4RUKhVfffVVnc65LsP2lef40ksvVdmmp6dXbfvx48cFAPH999/XKp6uXbuqfg+sra2rTDOuWrVKABApKSlVXuvn5ye6dOny0P3/61//Erq6uuLMmTOqtpiYGAFAvP/++2p9f/vtNwFA6OvrP3Sfn332mQAgNmzYoNa+b98+sXTpUrFnzx7xxx9/iI0bNwo7OzvRunVrERMTo+q3a9cuAUB88803aq//4osvBAC1cxo+fLgAIExNTcUbb7whDh8+LLZs2SLatm0rOnXq9NCp8cDAQCGVSkVycvJDz0cIIQ4cOCB0dHTEggUL1No9PDxEly5d1L4DysrKRIcOHR76c9bU56whMGmpRuWX39dffy1Onz6t9rj/l0mIiqRl3LhxNe7jwT98mzdvFgDEqVOnqrzG2dlZPPXUU6rnAwcOFG3atKl13Hv27BEAxIEDB1RtEydOFFZWVqK8vFwIUTEP3aZNG9G1a1cRGhoqLl++XKt91zZpsbCwEC4uLo88h0mTJgljY+Mq7ZVf2pVJS1xcnAAgPv74Y1FWVqb2qHwvY2NjhRA1v+c12blzpwAgDh8+XGXbwIEDRceOHav8/E+fPi1u3ryp6peZmSlkMplYvHixqq1y/cClS5eEEBVf4rq6uuI///lPlXOoTCor5/orz//B9/nq1as1JliVapu0TJo0SQAQ6enpQoj//4J/cF3Pli1bBACRmpqqaqtuTcuYMWNE586dVclN5R/zs2fPVjn2hg0bBAARHx//0Bgf5ubNm2Lz5s1i5syZolOnTgKAMDQ0FL///ruqz4NJS11/7x722az88vrXv/4lTE1NRWlpaZWfq5WVlZg0aVK9z7FSXb5MFi1aVOMaDT09PTFnzpwq7ZVJyw8//FCreC5duiT++usvsWPHDjFkyBBhbGwsjhw5otpembTc/5mp5OfnJ7p27Vrjvt9++20BQHz66adVtg0YMECYmJiI7du3i+zsbHHs2DHRuXNnIZVKhYGBQY37jIiIEPr6+mLChAm1WmOSkJAgjIyMxJgxY1RtJSUlolOnTsLGxkYcPHhQZGdni3379glLS0shlUpFt27dVH2HDRtW7Rd6ZeLz2WefVXvcyr8jo0aNemSMZ8+eFXK5XPj4+Kit0RHi/3/35s6dK5KTk0ViYqKYNWuWkEqlD/37oanPWUPg9NBDODs7w8vLS+3h6elZpZ+1tXWN+3hwW2ZmZo2vsbGxUW2vzb4f5O/vD2tra9V0RXZ2Nnbv3o3p06dDKpUCAORyOf744w94eHhgyZIl6N69O2xsbLBs2TKUlZXVuG8HBwcAQEJCQo19CgsLkZGRUeUKjurOITMzE5aWllXarays1J6npaUBqLh6QE9PT+1ROVX24NB+bd+zyuH7+y8vvJ+BgUGVn7+Xl5faVUZmZmYYM2YMvv76a9V0y9atW+Ht7a0a4s7MzER5eTk+/fTTKudQOX304Dk8ePVC5fBuTZdYAlBdyvqwnxFQsd7E0NAQZmZmj31MAJg/fz7i4uJU04KbNm1Cnz590KtXryp9K9/rR+3zYRwdHTF37lx88cUXiIuLQ3h4OIqLi/H666/X+Jq6/t497LNZ2TctLQ05OTnQ19ev8nNNTU2t8jN9ksrKyvD111/D3d0dXl5eVba3bdu2yjkCUK3xePCzUJPu3bvD29sbEyZMwP79++Ho6Kg2ZVb5GarpWDUdZ/ny5Vi5ciVWrVpV7ZVtO3bsQN++fTFp0iS0adMGvr6+GD9+PDw8PGBra1vtPg8cOIDx48dj2LBh+O6772o15dK+fXv069cPJ0+eVLXp6+tj3759cHBwgJ+fH9q0aYMJEyZgyZIlaNOmjdrxK89/+PDhavsdPnw4JBIJzp07V+1xv/32W5SUlDxyjUh0dDSGDRuGzp07IyIiospU0MyZM7F69Wp88803sLOzg4ODA2JjY7Fo0SIAqPG9qq1Hfc4aAi951oCH/TI8uK3yQ52SklJl3cGdO3dgbm5e630/SCqVYtq0afjkk0+Qk5OD77//HiUlJVUWxfXo0QPbtm2DEAIXLlzA1q1bsWLFCrRq1QpvvfVWtfv29PREmzZtsHv3btVizwft3r0bSqUSw4YNe+Q5tG3bFqdOnarS/uBC3Mr3Y/HixRg/fny1sT24iLa271nlvuuzOO9+L7zwAnbs2IHIyEg4ODjg9OnTCA0NVW1v06aN6mdz//z//ZycnB4rBqDi5+/r64v9+/cjOTm52nUtycnJOHv2LPz9/VWJ7OMaPHgwXF1dsXHjRhgZGeHcuXP49ttvq+1b+V4/+Dl/HJMmTUJwcPBD10vU9feuMlm+X+Vns3Jf5ubmaNu2Lfbv31/tMY2NjWt/Eo9p7969SE9PxzvvvFPt9h49elS7nqGyzdXVtc7H1NXVRa9evdQWxPfo0UO13/tvDVFeXo6rV69iypQpVfazfPlyvPfee3jvvfewZMmSao9lYWGBiIgIpKenIzU1FY6OjmjVqhU2b96MCRMmVOl/4MABjB07FgMHDsRPP/0EfX39Wp+XEKLKItVOnTrhxIkTuH37NrKystCxY0fk5uZi/vz5GDBggKqfm5sbtm3bVuO+a1r8+sUXX8DS0lK1uLc60dHRGDp0KBwdHXHw4EHI5fJq+7355psICgpCXFwcjI2N4ejoiJdeegmtW7eu9h/ddfGoz1mD0Mr4TiNXl0ueAYh58+bVeh+Vw/yvvvqqWvupU6cEALF06VJVW30uu62cb9y8ebPw8vISffr0qdXrTE1NxcSJEx/ap/ISvw8//LDKtrS0NNUlzzk5OY88h7qsaencuXOVNR7Vqeul6klJSdXOdT8s7uqUl5cLW1tbMWnSJLFo0SJhYGCg9h4IIcTQoUOFu7u7KCkpeei+KqcgduzYodZe20vBKy95DggIUE0J3h9n5SXPx44dU7VXTqXcvXtXrX/l+3n/kHFNlzyHhYUJHR0dMWDAAGFpaVnjeb744ouibdu29boc9M6dO9W25+fni7Zt24qOHTtWOadKdf29q+mzef+alm+//VYAECdPnqzzudRWbYftR40apbY26kGV02P3x1pWVia6d++uNjVWF/fu3RNdunQRrq6uqrbKS55HjBih1rdy/c++ffvU2lesWCEAiLfffrvOx9+wYYPQ0dGpMg154MABYWBgIIYOHSru3btXp33euHFDGBkZibFjxz6y74IFC0Tr1q3V1qBcuXJFSCQS8eKLL6r1/fnnn6tdFyPE/6+BeuONN2o8VnR0tDAzMxNubm4iIyOjDmckxK1bt4RcLhdBQUE19tHU56whcKTlIS5duoTy8vIq7R07dkS7du3qtc+uXbvi3//+Nz799FPo6OjA398fN2/exDvvvAN7e/uHXq1RG926dUOfPn0QHByMpKQkhIWFqW3fu3cvNm/ejLFjx6JDhw4QQuDnn39GTk5OlRGSB7355ps4f/686r+BgYFqN5fLz8/H3r17a/wXwP2mT5+O9evXY/r06Vi1apVquPPAgQNV+v73v/+Fv78/hg8fjueffx62trbIysrClStXcO7cOezYsaNub9I/7Ozs0KFDB5w8eRKvvvpqle337t1TGya+39NPP636f6lUiunTp2PdunUwMTHB+PHjq7wHGzZsQL9+/dC/f3/MnTsX7du3R35+PuLj47Fnzx4cPny4XufwoL59+yIkJARBQUHo168fXnnlFTg4OKhuLvfXX38hJCQEPj4+GjlepalTp2Lx4sWIiorC22+/XeO/bE+ePImBAweqjYZt3boVL7zwAr788suH3m131apVOHbsGAIDA+Hh4YFWrVohISEBGzduRGZmptrl1Q+q6+9d27ZtMXfuXCQmJqJLly6IiIjAZ599hrlz56qmSidPnozvvvsOI0eOxPz58+Ht7Q09PT0kJyfjyJEjeOaZZ1Q33vr6668xc+ZM/O9//8P06dMf+l7evXsXf/zxB4D/HwnZt28f2rVrh3bt2lW5EdydO3ewf/9+BAYGok2bNtXuc+bMmdi0aRMmTpyI1atXw8LCAps3b8a1a9dw6NAhtb5DhgzBH3/8ofa3z8fHB2PGjIGzszPkcjlu3ryJ0NBQ/P3332qXMUulUqxZswbTpk3DSy+9hClTpiAuLg5vvPEGhg0bhhEjRqj6rl27Fu+++y5GjBiBUaNGVfldu/93rPIy+Y4dOyInJwf79u3DF198gQ8++EBtGvLPP//E2LFjYWVlhSVLliAmJkZtny4uLjAxMQEADB06FAMGDICbmxtMTExw8eJFrFmzBhKJBO+//77a69asWQMrKys4ODggLS0N27dvx65du/DNN9+oTbl069YN8+bNw+bNm2FsbAx/f39cv34db7/9Nnr27IlJkyZV+dlU3jJh1qxZ1fzkgGvXrmHo0KEAKn4H4uLiEBcXp9p+//fRpUuX8NNPP8HLywsymQznz5/H6tWr0blz5yrn9CQ+Zw1Ca+lSI/awq4fwwGIq1HGkRYiKm/p8+OGHokuXLkJPT0+Ym5uLqVOniqSkJLV+9b3BWVhYmAAgWrVqVeVqlatXr4opU6aIjh07ilatWgm5XC68vb3F1q1ba7VvpVIpvvvuOzFo0CBhamoq9PX1hZOTk5g7d67qX6C1PYfk5GTx7LPPCiMjI2FsbCyeffZZ1cLAB0cUzp8/LyZNmiQsLCyEnp6esLKyEoMHD1ZbsFqfmwK+8847ok2bNlUWtD3s6iEAVa5kun79umpbZGRktcdKSEgQM2fOFLa2tkJPT0+0a9dO+Pj4iJUrV6r6PO5IS6UTJ06ICRMmCEtLS6GrqyssLCzE+PHj1W4uVkkTIy1CCPH8888LXV3dGq9+iI+Pr/Zqm08//VQAEPv373/oOZ08eVLMmzdPuLu7CzMzMyGVSkW7du3EiBEj1G5adv853a+uv3e///678PLyEjKZTFhbW4slS5ZUe8O+jz/+WLi7uwsDAwNhZGQkunXrJl566SURFxen6lf5Xtbm51f5GajuMXDgwCr9Kxe/Vreg/H6pqali+vTpwszMTBgYGIinn3662s9q5Wf/fq+99ppwd3cXcrlc6OrqCisrKzFu3Di1Ebv7ff/998LNzU3o6+sLKysr8eqrr4r8/Pxqj1PT437//e9/hbOzszA0NBRGRkaif//+1V4BWflzr+lx/6LhoKAg4eLiIoyNjYWurq6wsbERU6dOVbsSsNLy5ctFx44dhUwmE6ampmLEiBEiKiqq2nMvLy8Xq1evFp06dRJ6enrC2tpazJ07t9qbbhYVFQm5XC4GDBhQ7b6EePT30f2fqWvXrokBAwYIMzMzoa+vLzp16iTefvvtaq/We1KfsydNIoQQj535EDVRd+7cgZOTE77++utq7xFDtVNaWqpaxPjgTf8qvfPOO/j666/x999/q92QbNKkSUhISMDp06cbKtyHGjRoEDIyMh55TxEiani8eohatMpibqtWrVLdNI5q7+7du/jzzz8xd+5cpKWl1biQOycnB5s2bcIHH3yglrAIIfD7779j1apVDRUyETVhXNNCLd7bb78NQ0ND3L59u1kU3GtIv/76K1544QVYW1tj8+bN1V7mDFRcKr948WI899xzau0SiQTp6ekNESoRNQOcHiIiIqImgdNDRERE1CQwaSEiIqImgUkLERERNQnNZiGuUqnEnTt3YGxsXKdb3xMREZH2CCGQn58PGxubGksdVNJK0pKQkICZM2ciLS0NUqkUJ0+eROvWraGrq6uqgeHl5YXPP/+81vu8c+cOr/wgIiJqopKSkqqtmXY/rVw9NHDgQKxcuRL9+/dHVlYWTExMoKurC3Nz83pXRs3NzYWpqSmSkpJUt2kmIiKixi0vLw/29vbIycl5ZBmYBh9puXz5MvT09NC/f38AtS+J/iiVU0ImJiZMWoiIiJqY2iztqPNC3KioKAQEBMDGxgYSiQS7du2q0mfz5s1wcnKCgYEBPD09cfToUdW2uLg4GBkZYcyYMejVqxc++OAD1ba8vDx4enqiX79+qkJOREREREA9kpbCwkK4u7tj48aN1W4PDw9HUFAQli5diujoaPTv3x/+/v5ITEwEAJSVleHo0aPYtGkTTpw4gcjISERGRgIAbt68ibNnz2LLli2YPn068vLyHuPUiIiIqDmpc9Li7++PlStXYvz48dVuX7duHWbNmoXZs2fD2dkZISEhsLe3R2hoKADAzs4OvXv3hr29PWQyGUaOHKkqH25jYwMAcHV1hYuLC65fv15jHCUlJcjLy1N7EBERUfOl0fu0lJaW4uzZs/Dz81Nr9/Pzw/HjxwEAvXv3RlpaGrKzs6FUKhEVFQVnZ2dkZ2ejpKQEAJCcnIzY2Fh06NChxmMFBwdDLperHrxyiIiIqHnTaNKSkZEBhUIBS0tLtXZLS0ukpqYCAHR1dfHBBx9gwIABcHNzQ+fOnTF69GhcuXIFXl5ecHd3x+jRo7Fhw4aHLtJdvHgxcnNzVY+kpCRNngoRERE1Mk/k6qEHVwALIdTa/P394e/vr9bHx8cHFy9erPUxZDIZZDLZ4wVKRERETYZGR1rMzc0hlUpVoyqV0tPTq4y+EBEREdWFRpMWfX19eHp6qq4GqhQZGQkfHx9NHoqIiIhamDpPDxUUFCA+Pl71PCEhATExMTAzM4ODgwMWLlyIadOmwcvLC3369EFYWBgSExMxZ84cjQZORERELUudk5YzZ87A19dX9XzhwoUAgBkzZmDr1q0IDAxEZmYmVqxYgZSUFLi6uiIiIgKOjo6ai5qIiIgajEIpcCohC+n5xbAwNoC3kxmkOg1fnFgrtYeehLy8PMjlcuTm5vI2/kRERBqy/1IKlu+JRUpusarNWm6AZQEuGOFq/dj7r8v3t0bXtBAREVHzsf9SCuZ+e04tYQGA1NxizP32HPZfSmnQeJi0EBERURUKpcDyPbGobjqmsm35nlgolA03YcOkhYiIiKo4lZBVZYTlfgJASm4xTiVkNVhMTFqIiIioivT8mhOW+vTTBCYtREREVIWFsYFG+2kCkxYiIiKqwtvJDNZyA9R0YbMEFVcReTvVXCdQ05i0EBERURVSHQmWBbgAQJXEpfL5sgCXBr1fC5MWIiIiqtYIV2uETu0FK7n6FJCV3AChU3tp5D4tdfFEqjwTERFR8zDC1RrDXKwaxR1xmbQQERHRQ0l1JOjTsa22w+D0EBERETUNTFqIiIioSWDSQkRERE0CkxYiIiJqEpi0EBERUZPApIWIiIiaBCYtRERE1CQwaSEiIqJHupCcgylhJ3EhOUdrMTBpISIiokf6+dxtnLiRiZ/P3dZaDLwjLhEREVUrObsI2YVlkEiAn84lAwD2nL+DCZ52EAJo01oPdm0MGyweJi1ERERUrX4fHqnSllVYitGf/ql6fnP1qAaLh9NDREREVK0FQztXaRP//FdXR4KQQI8GjYcjLURERKSmXKFE6O9/45PD8TX22TWvL1xt5Q0YFZMWIiIiuk9SVhEWhMfgzK1sAED/zuY4GpcBiQQQAqr/agOTFiIiIoIQAj+du433dl9GQUk5jGW6eH+sK7yd2uCZjcdhbWqAwN72CD+dhJScYrQ10m/wGCVCaCtf0qy8vDzI5XLk5ubCxMRE2+EQERE1GTlFpVi68xJ+vZgCAPBub4a1k9xhb1ZxZVBJuQL6Uh1IJBIIIVCqUEKmK9XIsevy/c2RFiIiohbsWHwGXtt+Hql5xdDVkWDBsC6YM7AjpDoSVZ/7ExSJRKKxhKWumLQQERG1QCXlCnx84Bo+O5oAAOhg3hohkz3gZmeq3cAegkkLERFRC3MtNR/zt0Xjamo+AOBfTzlg6ShnGOo37rSgcUdHREREGqNUCmw9fhOr919FabkSbVvrY80ENwxxttR2aLXCpIWIiKgFSMsrxqId53E0LgMA4Nu1HdZMcEc7Y5mWI6s9Ji1ERETN3P5LqVj88wVkF5VBpquDt0c5Y+rTjpBIJI9+cSOilaRFV1cXrq6uAAAvLy98/vnnAICEhATMnDkTaWlpkEqlOHnyJFq3bq2NEImIiJq8wpJyLN9zGdvPVBQ7dLU1QUigBzpZGGs5svrRStJiamqKmJiYKu3PP/88Vq5cif79+yMrKwsyWdMZsiIiImpMziVmY0F4DG5lFkEiAeYM7IgFQ7tAX7fplh1sNNNDly9fhp6eHvr37w8AMDMz03JERERETU+5QomNR+Lx6eF4KJQCtqatsHaSO57u0FbboT22OqdbUVFRCAgIgI2NDSQSCXbt2lWlz+bNm+Hk5AQDAwN4enri6NGjatvz8vLg6emJfv364Y8//gAAxMXFwcjICGPGjEGvXr3wwQcf1O+MiIiIWqhbmYWY+N8TCDkUB4VS4BkPG0TM798sEhagHiMthYWFcHd3xwsvvIBnn322yvbw8HAEBQVh8+bN6Nu3L/773//C398fsbGxcHBwAADcvHkTNjY2uHTpEkaNGoWLFy+irKwMR48eRUxMDCwsLDBixAj07t0bw4YNe/yzJCIiasaEENhxNhnLd19GYakCxga6WDnWFc942Go7NI2qc9Li7+8Pf3//GrevW7cOs2bNwuzZswEAISEhOHDgAEJDQxEcHAwAsLGxAQC4urrCxcUF169fh52dHXr37g17e3sAwMiRIxETE1Nj0lJSUoKSkhLV87y8vLqeChERUZOXXViKxT9fxP7LqQAAbyczrJvkDrs2hlqOTPM0uhqntLQUZ8+ehZ+fn1q7n58fjh8/DgDIzs5WJRvJycmIjY1Fhw4d0Lt3b6SlpSE7OxtKpRJRUVFwdnau8VjBwcGQy+WqR2WyQ0RE1FIcjbuL4SFR2H85FXpSCd4c0Q0/vPh0s0xYAA0vxM3IyIBCoYClpfqd9SwtLZGaWpEBXrlyBS+99BJ0dCqqRW7YsEG16PaDDz7AgAEDIISAn58fRo8eXeOxFi9ejIULF6qe5+XlMXEhIqIWobhMgTX7r+F/xyrqBnVs1xobJveEq61cy5E9WU/k6qEHb1YjhFC1+fj44OLFi9W+7lFTT/eTyWS8JJqIiFqcKyl5CNoWg2tpFXWDpj3tiCUjndFKXzuVlxuSRpMWc3NzSKVS1ahKpfT09CqjL0RERFR7SqXA/44lYM3+ayhVKGFupI+PJrjDt5uFtkNrMBpd06Kvrw9PT09ERkaqtUdGRsLHx0eThyIiImoxUnOLMe1/f2Hlr1dQqlBiqLMF9gcNaFEJC1CPkZaCggLEx8ernickJCAmJgZmZmZwcHDAwoULMW3aNHh5eaFPnz4ICwtDYmIi5syZo9HAiYiIWoKIiylY/PNF5N4rg4GeDt4Z7YLnvB2aXN0gTahz0nLmzBn4+vqqnlcuhp0xYwa2bt2KwMBAZGZmYsWKFUhJSYGrqysiIiLg6OiouaiJiIiauYKScry3+zJ+PFtRN8jNTo71gR7o2M5Iy5Fpj0QIIbQdhCbk5eVBLpcjNzcXJiYm2g6HiIio3s7eysKC8PNIzCqCjgR4eVAnzB/aGXrSpls3qCZ1+f5uNLWHiIiIWroyhRKfHo7HxsNxUArA1rQV1gd6wNuJ9fgAJi1ERESNws2MQgSFxyAmKQcAML6nLd57pjtMDPS0G1gjwqSFiIhIi4QQCD+dhBV7Y1FUqoCJgS5WjeuBAHcbbYfW6DBpISIi0pKswlK89dMFHIxNAwA83cEM6yZ5wMa0lZYja5yYtBAREWnBH9fvYtGO87ibXwI9qQSL/Lrixf4doKPT8i5lri0mLURERA2ouEyB1fuuYuvxmwCAThZG2DDZA91tmnfdIE1g0kJERNRAYu/kISg8GtfTCgAAz/u0x1v+3WCg1/zrBmkCkxYiIqInTKkU+PzPG/j4wPV/6gbJ8NFEN/h2bVm34X9cTFqIiIieoDs59/Da9vM4cSMTADDMxRKrx/dAWyOZliNrepi0EBERPSF7L9zBkp8vIq+4HK30pHg3wAWTe9u3yLpBmsCkhYiISMPyi8uw7JfL+Dn6NgDA3U6OkMk94WTeWsuRNW1MWoiIiDTo9M0sLAiPQXL2PehIgFd8O+E/Q5pn3aCGxqSFiIhIA8oUSmw4FIfNv8dDKQB7s1ZYP8kDXu1ZN0hTmLQQERE9pht3CxAUHoMLybkAgGd72eG9MS4wZt0gjWLSQkREVE9CCPxwKgnv743FvTIF5K308MG4HhjlZq3t0JolJi1ERET1kFlQgjd/uohDVyrqBvXt1BYfT3SHtZx1g54UJi1ERER1dORqOl7/8QIyCkqgL9XBGyO6YmZfJ9YNesKYtBAREdXSvVIFgvddwdcnbgEAulgaISSwJ1xsTLQcWcvApIWIiKgWLt3ORVB4DOLTK+oGvdC3Pd4cwbpBDYlJCxER0UMolAJhUTewLvIayhQCFsYyfDzRHQO6tNN2aC0OkxYiIqIa3M65h4XhMfgrIQsAMLy7JYLHu8Gstb6WI2uZmLQQERFV45eY23h71yXkF5fDUF+KZQEumOTFukHaxKSFiIjoPrn3yrDsl0vYFXMHAOBhb4qQQA+0Z90grWPSQkRE9I+/bmRi4fbzuJ1TUTfoP4M745XBnVg3qJFg0kJERC1eabkS6w9dx5Y//oYQgIOZIdYHesDTsY22Q6P7MGkhIqIWLT69AEHh0bh0Ow8AMNHTDsvGdIeRjF+RjQ1/IkRE1CIJIfDtX4lY9WssisuUMDXUQ/C4HvDvwbpBjRWTFiIianHu5pfgzZ8u4PDVdABAv07m+HiiO6zkBlqOjB6GSQsREbUov11Jwxs/XkBmYSn0dXXw5ohueMGnPesGNQFMWoiIqFm7kJyD4IirWDisC3bF3MZ3fyUCALpZGSNksge6WbFuUFPBpIWIiJq1n8/dxokbmZj19Wnk3SsHAMzq54TXh3dl3aAmRmsXnhcVFcHR0RGLFi0CAFy7dg0eHh6qR6tWrbBr1y5thUdERE1YcnYRLibn4nxSDrafSQIA5N0rh1lrPbz/jCte6NueCUsTpLWRllWrVuGpp55SPe/atStiYmIAAAUFBWjfvj2GDRumpeiIiKgp6/fhkWrbswrL8M4vl4BfgJurRzVwVPS4tDLSEhcXh6tXr2LkyJHVbt+9ezeGDBmC1q15y2QiIqobIQSmPuVQ43YdCRAS6NFwAZHG1DlpiYqKQkBAAGxsbCCRSKqdwtm8eTOcnJxgYGAAT09PHD16VG37okWLEBwcXOMxtm/fjsDAwLqGRkRELVxuURle3RaDb/9ZbFsdpQAM9Hhb/qaozj+1wsJCuLu7Y+PGjdVuDw8PR1BQEJYuXYro6Gj0798f/v7+SEys+AD98ssv6NKlC7p06VLt6/Py8nDs2LEaR2GIiIiqc+LvTPhviMKe83ce2Xf5nlgolKIBoiJNqvOaFn9/f/j7+9e4fd26dZg1axZmz54NAAgJCcGBAwcQGhqK4OBgnDx5Etu2bcOOHTtQUFCAsrIymJiY4N133wVQkdQMHz4cBgYPv8FPSUkJSkpKVM/z8vLqeipERNQMlJQrsO7gdYQdvQEhACsTA6TmFT/0NSm5xTiVkIU+Hds2UJSkCRodHystLcXZs2fh5+en1u7n54fjx48DAIKDg5GUlISbN2/i448/xosvvqhKWIDaTw0FBwdDLperHvb29po8FSIiagLi0vIxbtNx/DeqImGZ3NseC4d1rtVr0/MfnthQ46PRpCUjIwMKhQKWlpZq7ZaWlkhNTX3k63Nzc3Hq1CkMHz78kX0XL16M3Nxc1SMpKanecRMRUdMihMBXx29i9Kd/IjYlD20M9fDfaZ5Y/awb7M1qdxGHhTFv2d/UPJFLniUS9VshCyGqtAHA888/r/ZcLpcjLS2tVseQyWSQyWT1jpGIiJqm9PxivL7jAv64fhcAMKBLO3w8wQ0WJhVJiLeTGazlBkjNLUZ1q1YkAKzkBvB2Mmu4oEkjNDrSYm5uDqlUWmVUJT09vcroCxERUV0dvJyKESFH8cf1u9DX1cGyABdsfb63KmEBAKmOBMsCXABUJCj3q3y+LMAFUtYaanI0mrTo6+vD09MTkZGRau2RkZHw8fHR5KGIiKgFKSotx+KfL+Df35xFVmEpulkZY+9/+uGFvk7VFjoc4WqN0Km9qlRttpIbIHRqL4xwtW6o0EmD6jw9VFBQgPj4eNXzhIQExMTEwMzMDA4ODli4cCGmTZsGLy8v9OnTB2FhYUhMTMScOXM0GjgREbUMMUk5WBAeg4SMQgDAvwd0wGt+XSDTffht+Ee4WmOYixVOJWQhPb8YFsYVU0IcYWm66py0nDlzBr6+vqrnCxcuBADMmDEDW7duRWBgIDIzM7FixQqkpKTA1dUVERERcHR01FzURETU7JUrlAj9/W+E/BYHhVLAysQA6ya5w6eTea33IdWR8LLmZkQihGgWd9fJy8uDXC5Hbm4uTExYZpyIqClLyirCgvAYnLmVDQAY5WaNVWNdYWqor+XISNPq8v2ttYKJREREDxJC4Odzt7Fs92UUlJTDSKaL5WO6Y3wv22qvQqWWhUkLERE1CjlFpVi66xJ+vZACAPBybIP1gR6wNzPUcmTUWDBpISIirTsen4GF288jNa8YujoSBA3tjDkDO0JXysKG9P+YtBARkdaUlCvw8YFr+OxoAgDAybw1QgI94G5vqt3AqFFi0kJERFpxPS0fr/4Qjaup+QCAKd4OeGe0Mwz1+dVE1eMng4iIGpRSKfDViZsI3ncVpeVKmLXWx4fPumGYC++cTg/HpIWIiBpMel4xFv14AVH/1A0a1LUd1kxwY/FCqhUmLURE1CD2X0rF4p8vILuoDDJdHSwd5YxpTzvyUmaqNSYtRET0RBWWlGPFnliEn0kCALhYm2DDZA90tjTWcmTU1DBpISKiJyY6MRtB4TG4lVkEieSfukHDukJfl5cyU90xaSEiIo0rVyix6cjf+ORwRd0gG7kB1k7yYB0geixMWoiISKNuZRZiQXgMziXmAAAC3G2w8hlXyA31tBsYNXlMWoiISCOEENhxNhnLd19GYakCxjJdvD/WFWN72mo7NGommLQQEdFjyy4sxZKdF7HvUioAwLu9GdYFusOuDesGkeYwaSEiosdyNO4uFu04j7S8EujqSLDQrwteGtARUh1eykyaxaSFiIjqpbhMgTX7r+F/xyrqBnVo1xobAnuih51cy5FRc8WkhYiI6uxqah6CtsWo6gZNfdoBS0e6oJW+VMuRUXPGpIWIiGpNqRT437EErNl/DaUKJdq21seaCW4Y4sy6QfTkMWkhIqJaSc0txqId5/FnfAYAYHA3C3z4rBvaGcu0HBm1FExaiIjokfZdTMHinReRU1QGAz0dvD3KBf96yoF1g6hBMWkhIqIaFZSU473dl/Hj2WQAgKutCUICe6KThZGWI6OWiEkLERFV6+ytLCwIP4/ErIq6QXMHdkTQ0C6sG0Raw6SFiIjUlCmU+PRwPDYejoNSALamrbA+0APeTmbaDo1aOCYtRESkcjOjEEHhMYhJygEAjPWwwYqxrjAxYN0g0j4mLUREBCEEwk8nYcXeWBSVKmBsoIuVY13xjAfrBlHjwaSFiKiFyyosxVs/XcDB2DQAwFNOZlgX6AFb01ZajoxIHZMWIqIW7I/rFXWD7uaXQE8qwWt+XfFi/w6sG0SNEpMWIqIWqLhMgdX7rmLr8ZsAgI7tWmPD5J5wtWXdIGq8mLQQEbUwsXfyEBQejetpBQCA6X0csdjfmXWDqNFj0kJE1EIolQJf/JmAjw5U1A0yN5Lhowlu8O1moe3QiGqFSQsRUQuQknsPr20/j+N/ZwIAhjpbYPWzbjA3Yt0gajqYtBARNXO/XkjBkp0XkXuvDK30pHhntAumeNuzbhA1OQ1+L+b8/Hz07t0bHh4e6NGjBz777DPVtvXr16N79+5wcXHBq6++CiFEQ4dHRNRs5BeXYeH2GMz7/hxy75XBzU6OX1/th+dY6JCaqAYfaTE0NMQff/wBQ0NDFBUVwdXVFePHj4dSqcTGjRtx+fJl6OnpYcCAATh58iT69OnT0CESETV5Z25mISg8BsnZ96AjAV4e1Anzh3aGnpR1g6jpavCkRSqVwtDQEABQXFwMhUKhGlEpLy9HcXExAKCsrAwWFlwcRkRUF2UKJT75LQ6bjsRDKQC7NhV1g3q3Z90gavrqnHJHRUUhICAANjY2kEgk2LVrV5U+mzdvhpOTEwwMDODp6YmjR4+qbc/JyYG7uzvs7OzwxhtvwNzcHO3atcOiRYvg4OAAGxsbDB06FB07dqz3iRERtTQ37hZgQuhxfHq4ImEZ38sWEfP7M2GhZqPOSUthYSHc3d2xcePGareHh4cjKCgIS5cuRXR0NPr37w9/f38kJiaq+piamuL8+fNISEjA999/j7S0NGRnZ2Pv3r24efMmbt++jePHjyMqKqr+Z0ZE1EIIIfD9X4kY9cmfOJ+cCxMDXWx8rifWTfJgoUNqVuo8PeTv7w9/f/8at69btw6zZs3C7NmzAQAhISE4cOAAQkNDERwcrNbX0tISbm5uquSkU6dOMDOr+BfBqFGjcPLkSQwYMKDa45SUlKCkpET1PC8vr66nQkTU5GUWlODNny7i0JWKukE+Hdti7SR3WMtZN4iaH42uyCotLcXZs2fh5+en1u7n54fjx48DANLS0lQJRl5eHqKiotC1a1fY29vj+PHjqnUuv//+O7p27VrjsYKDgyGXy1UPe3t7TZ4KEVGjd+RaOoaHHMWhK2nQl+pg6UhnfDvrKSYs1GxpdCFuRkYGFAoFLC0t1dotLS2RmpoKAEhOTsasWbMghIAQAq+88grc3NwAACNHjkTPnj2ho6ODIUOGYMyYMTUea/HixVi4cKHqeV5eHhMXImoRissUCI64gq9O3AIAdLYwwobJPeFiY6LlyIierCdy9dCD1/8LIVRtnp6eiImJqfZ1q1atwqpVq2p1DJlMBpmMd3Ikopbl0u1cBIXHID69om7Q8z7t8ZZ/NxjosW4QNX8aTVrMzc0hlUpVoyqV0tPTq4y+EBFR7SmUAp8dvYG1B6+hTCHQzliGjye6Y2CXdtoOjajBaHRNi76+Pjw9PREZGanWHhkZCR8fH00eioioxbidcw//+vwkVu+7ijKFgJ+LJQ4EDWDCQi1OnUdaCgoKEB8fr3qekJCAmJgYmJmZwcHBAQsXLsS0adPg5eWFPn36ICwsDImJiZgzZ45GAyciagl2n7+DpTsvIr+4HIb6UiwLcMEkL9YNopapzknLmTNn4Ovrq3peuRh2xowZ2Lp1KwIDA5GZmYkVK1YgJSUFrq6uiIiIgKOjo+aiJiJq5vKKy/DurkvYFXMHAOBub4qQQA84mbfWcmRE2iMRzaQqYV5eHuRyOXJzc2FiwhX0RNR0/XUjEwu3n8ftnIq6Qa8M7oz/DO7EukHULNXl+7vBaw8REVH1SsuVCDl0HaF//A0hAAczQ6wP9ICnYxtth0bUKDBpISJqBOLTC7AgPAYXb+cCACZ62mHZmO4wkvHPNFEl/jYQEWmREALf/ZWIlb/GorhMCXkrPQSP74GRPay1HRpRo8OkhYhISzIKSvDmjxfw29V0AEC/Tub4eKI7rOQGWo6MqHFi0kJEpAW/XUnDmz9dQEZBKfSlOnhjRFfM7OsEHR1eykxUEyYtREQN6F6pAqsiYvHtyUQAQFdLY2yY4oFuVrzqkehRmLQQET1BF5JzEBxxFYtHdoMEEswPj8aNu4UAgJl9nfDGiK6sG0RUS0xaiIieoJ/P3caJG5l4b/dlXEjORblSwMJYhrWT3NG/M2/DT1QXTFqIiDQsObsI2YVlkEiAX2JuAwDOJeYAAPp0aIu3Rzmju61cixESNU28Iy4RkYa1f+vXR/a5uXpUA0RC1PjV5fub94QmItKwD8b1QE3XAOnqSBAS6NGQ4RA1G5weIiLSoJM3MrHxcBxqGsLeNa8vXDk1RFQvTFqIiDSgtFyJdZHX8d+oirpBVnIDpOYWQyIBhIDqv0RUf5weIiJ6TPHp+Ri3+Ri2/FPoMNDLHt/OegrtjGToYSvHqnGu6GErRzsjGdoa6Ws7XKImiwtxiYjqSQiBb07ewqpfr6CkXAlTQz2sHt8DI1wr6gaVlCugL9WBRCKBEAKlCiVkurwnC9H96vL9zekhIqJ6uJtfgjd+PI8j1+4CAPp3rqgbZGny/3WD7k9QJBIJExaix8SkhYiojg7FVtQNyiwshb6uDhb7d8OMPu1ZN4joCWPSQkRUS0Wl5Vj56xV8/1dF3aBuVsbYMLknuloZazkyopaBSQsRUS1cSM5B0LYY3MioqBv0Yn8nLBrelVM+RA2ISQsR0UMolAKhv8cj5FAcypUCViYGWDvJHX07mWs7NKIWh0kLEVENkrKKsCA8BmduZQMARvWwxqpxrjA15GXLRNrApIWI6AFCCOyMvo13f7mMgpJyGMl0sXxMd4zvZQuJhIttibSFSQsR0X1yi8qwZNdF/HohBQDg6dgGIYEesDczrPO+FEqBUwlZSM8vhoWxAbydzCDlFUZE9cakhYjoH8fjM/DajvNIyS2GVEeCoCGdMXdQR+hK637z8P2XUrB8TyxScotVbdZyAywLcFHdfI6I6oZJCxG1eCXlCqw9eB2fHb0BIQAn89ZYH+gBD3vTeu1v/6UUzP32XJWiiam5xZj77TmETu3FxIWoHpi0EFGLdj0tH/O3xeBKSh4AYIq3Pd4e5YLWsvr9eVQoBZbvia22yrMAIAGwfE8shrlYcaqIqI6YtBBRiySEwFfHbyJ431WUlCth1lofq8f3gF93q8fa76mELLUpoSrHBZCSW4xTCVno07HtYx2LqKVh0kJELU56XjEW/XgBUdcr6gYN7NIOH010g4WxwSNeWYt959ecsNSnHxH9PyYtRNSiHLicird+uoDsojLIdHWwZKQzpvdx1NilzLVNfDSRIBG1NExaiKhFKCwpx/t7Y7HtdBIAwNnaBBsme6CLpWbrBnk7mcFaboDU3OJq17VIAFjJKy5/JqK6qft1fERETUx0YjZGfXIU204nQSIBXhrQAbvm+Wg8YQEAqY4EywJcAFQkKPerfL4swIWLcInqgUkLETVb5QolPvktDhO2nMDNzCJYyw3w3eynsHik8xMtdDjC1RqhU3vBSq4+BWQlN+DlzkSPocGnh5KSkjBt2jSkp6dDV1cX77zzDiZOnAgA+Pjjj/Hll19CIpHgrbfewtSpUxs6PCJqJhIzi7BgewzO/lM3aLSbNVaN7QG5oV6DHH+EqzWGuVjxjrhEGiQRQlQ37frEpKSkIC0tDR4eHkhPT0evXr1w7do13LhxAzNmzMDx48cBAEOGDMGvv/4KU1PTWu03Ly8Pcrkcubm5MDExeYJnQESNmRACP527jfd2V9QNMpbpYsXY7hjrwbpBRI1RXb6/G3ykxdraGtbWFUOjFhYWMDMzQ1ZWFq5cuQIfHx8YGFQMp3p4eGD//v2YPHlyQ4dIRE1UTlEpluy8iIiLqQCA3u3bYN2k+tUNIqLGp85rWqKiohAQEAAbGxtIJBLs2rWrSp/NmzfDyckJBgYG8PT0xNGjR6vd15kzZ6BUKmFvbw9XV1ccOXIEOTk5yMnJweHDh3H79u06nxARtUx/xmVgeEgUIi6mQldHgteHd8W2f/dhwkLUjNQ5aSksLIS7uzs2btxY7fbw8HAEBQVh6dKliI6ORv/+/eHv74/ExES1fpmZmZg+fTrCwsIAAC4uLnj11VcxePBgjBs3Dr1794auLq/IJqKHKy5TYOXeWEz94i+k5ZWgg3lr/PyyD+b5duL6EaJm5rHWtEgkEuzcuRNjx45VtT311FPo1asXQkNDVW3Ozs4YO3YsgoODAQAlJSUYNmwYXnzxRUybNq3afc+ePRvjxo3DqFGjqt1eUlKCkpIS1fO8vDzY29tzTQtRC3ItNR/zt0Xjamo+AOBfTzlg6ShnGOrzHzxETUVd1rRo9JLn0tJSnD17Fn5+fmrtfn5+qgW2Qgg8//zzGDx4cJWEJT09HQBw7do1nDp1CsOHD6/xWMHBwZDL5aqHvb29Jk+FiBoxpVLgf38mIGDjn7iamo+2rfXx+XQvrBrXgwkLUTOm0d/ujIwMKBQKWFpaqrVbWloiNbViYdyxY8cQHh4ONzc31XqYb775Bj169MDYsWORk5OD1q1b48svv3zo9NDixYuxcOFC1fPKkRYiat7S8oqxaMd5HI3LAAD4dm2HNRPc0c5YpuXIiOhJeyL/JHnwskIhhKqtX79+UCqV1b6ucjSmNmQyGWQy/pEiakn2X0rBWz9fRM4/dYPeHuWMqU9rrm4QETVuGk1azM3NIZVKVaMqldLT06uMvhAR1VZBSTlW7LmM7WeSAQCutiYICfRAJwvN34afiBovja5p0dfXh6enJyIjI9XaIyMj4ePjo8lDEVELce6fukHbzyRDIgHmDuqIn+f2ZcJC1ALVeaSloKAA8fHxqucJCQmIiYmBmZkZHBwcsHDhQkybNg1eXl7o06cPwsLCkJiYiDlz5mg0cCJq3soVSnx6OB4bj8RDoRSwNW2FtZPc8XSHttoOjYi0pM5Jy5kzZ+Dr66t6XrkYdsaMGdi6dSsCAwORmZmJFStWICUlBa6uroiIiICjo6PmoiaiZu1mRiGCwmMQk5QDAHjGwwYrnnGFvFXD1A0iosapwWsPPSmsPUTU9AkhsONMMt7bcxlFpQoYG+hi5VhXPONhq+3QiOgJadS1h4iIqpNdWIrFP1/E/ssVC/m9ncywbpI77NrwNvxEVIFJCxFpXdT1u1i04zzS80ugJ5Vg4bCu+PeADrwNPxGpYdJCRFpTXKbAh/uv4stjNwEAHdq1xieTe8LVVq7dwIioUWLSQkRacSUlD/O3ReN6WgEAYNrTjlgy0hmt9KVajoyIGismLUTUoJRKgf8dS8Ca/ddQqlDC3Egfaya4YXA33oCSiB6OSQsRNZjU3GK8tiMGx+IzAQBDulngwwluMDdiSQ4iejQmLUTUICIupmDxzxeRe68MBno6eGe0C57zdmDdICKqNSYtRPRE5ReXYfmeWPx4tqJuUA9bOUIme6BjOyMtR0ZETQ2TFiJ6Ys7eykJQeAySsu5BIgFeHtQR84d0gb6uRsueEVELwaSFiDSuTKHEp7/FYeOReCgFYGvaCusDPeDtZKbt0IioCWPSQkQalfBP3aDz/9QNGtfTFsuf6Q4TA9YNIqLHw6SFiDRCCIHw00lYsTcWRaUKmBjoYuW4HhjjbqPt0IiomWDSQkSPLauwFG/9dAEHY9MAAE93MMO6SR6wMW2l5ciIqDlh0kJEj+X3a+l4/ccLuPtP3aBFfl3xYv8O0GHdICLSMCYtRFQvxWUKrN53FVuP3wQAdLIwwobJHuhuw7pBRPRkMGkhojq7fCcXQdtiEJdeUTfoeZ/2eMu/Gwz0WDeIiJ4cJi1EVGtKpcDnf97ARweuoUwhYG4kw0cT3eDb1ULboRFRC8CkhYhq5U7OPby2/TxO3KioGzTMxRKrx/dAW9YNIqIGwqSFiB5pz/k7WLrzIvKKy9FKT4p3A1wwubc96wYRUYNi0kJENcorLsN7v1zGz9G3AQDudnKETO4JJ/PWWo6MiFoiJi1EVK3TN7MQtC0Gt3PuQUcCvOLbCf8Z0hl6UtYNIiLtYNJCRGrKFEqEHLqO0N//hlIA9matsH6SB7zas24QEWkXkxYiUvn7bgEWhMfgQnIuAODZXnZ4b4wLjFk3iIgaASYtRAQhBL4/lYiVe6/gXpkC8lZ6+GBcD4xys9Z2aEREKkxaiFq4jIISvPXTBRy6kg4A8OnYFmsnucNazrpBRNS4MGkhasGOXE3H6z+eR0ZBKfSlOnh9eFfM6ufEukFE1CgxaSFqge6VKvBBxBV8c/IWAKCLpRFCAnvCxcZEy5EREdWMSQtRC3Ppdi6CwmMQ/0/doBf6tsebI1g3iIgaPyYtRC2EQikQFnUD6yIr6ga1M5bh44nuGNilnbZDIyKqFSYtRC3A7Zx7WBgeg78SsgAAw7tbIni8G8xa62s5MiKi2mPSQtTM/RJzG2/vuoT84nIY6kuxLMAFk7xYN4iImp4Gvx93UlISBg0aBBcXF7i5uWHHjh2qbXv37kXXrl3RuXNnfP755w0dGlGzknuvDEHbojF/Wwzyi8vhYW+KiFf7I7C3AxMWImqSJEII0ZAHTElJQVpaGjw8PJCeno5evXrh2rVrkMlkcHFxwZEjR2BiYoJevXrhr7/+gplZ7W4dnpeXB7lcjtzcXJiY8AoIatn+upGJhdvPq+oG/WdwZ7wyuBPrBhFRo1OX7+8Gnx6ytraGtXXFXTYtLCxgZmaGrKwsJCUloXv37rC1tQUAjBw5EgcOHMCUKVMaOkSiJqu0XIn1h65jyx9/QwjAwcwQ6wM94OnYRtuhERE9tjr/sysqKgoBAQGwsbGBRCLBrl27qvTZvHkznJycYGBgAE9PTxw9erTafZ05cwZKpRL29va4c+eOKmEBADs7O9y+fbuu4RG1WPHpBRgfegyhv1ckLBM97RAxvz8TFiJqNuqctBQWFsLd3R0bN26sdnt4eDiCgoKwdOlSREdHo3///vD390diYqJav8zMTEyfPh1hYWEAKmqfPIjz7kSPJoTANydvYfSnR3Hpdh5MDfUQ+q9e+GiiO4xkXGtPRM1Hnf+i+fv7w9/fv8bt69atw6xZszB79mwAQEhICA4cOIDQ0FAEBwcDAEpKSjBu3DgsXrwYPj4+AABbW1u1kZXk5GQ89dRTNR6npKQEJSUlqud5eXl1PRWiJu9ufgne/OkCDl+tqBvUr5M5Pp7oDiu5gZYjIyLSPI2uyistLcXZs2fh5+en1u7n54fjx48DqPhX4fPPP4/Bgwdj2rRpqj7e3t64dOkSbt++jfz8fERERGD48OE1His4OBhyuVz1sLe31+SpEDV6v11Jw4iQKBy+mg59XR28M9oFX8/0ZsJCRM2WRseOMzIyoFAoYGlpqdZuaWmJ1NRUAMCxY8cQHh4ONzc31XqYb775Bj169MDatWvh6+sLpVKJN954A23btq3xWIsXL8bChQtVz/Py8pi4UItwr1SBlb/G4ru/KqZcu1kZI2SyB7pZ8ao5ImrensiE94NrUYQQqrZ+/fpBqVRW+7oxY8ZgzJgxtTqGTCaDTCZ7vECJmpiLybmYHx6NG3cLAQCz+jnh9eFdWTeIiFoEjSYt5ubmkEqlqlGVSunp6VVGX4io9hRKgS1//I31kddRrhSwNJFh7UQP9Otsru3QiIgajEbXtOjr68PT0xORkZFq7ZGRkaoFt0RUN0lZRZgSdhIfHbiGcqWAv6sV9s8fwISFiFqcOo+0FBQUID4+XvU8ISEBMTExMDMzg4ODAxYuXIhp06bBy8sLffr0QVhYGBITEzFnzhyNBk7U3AkhsCvmNt7ddRn5JeVorS/Fe2O6Y4KnHW8HQEQtUp2TljNnzsDX11f1vHIx7IwZM7B161YEBgYiMzMTK1asQEpKClxdXREREQFHR0fNRU3UzOUWleHtXy5hz/k7AIBeDqZYH+gBx7attRwZEZH2NHjtoSeFtYeoKbuQnIPgiKtYPLIbCksUeG17DO7kFkOqI8Grgztjnm9H6LJuEBE1Q4269hARVfXzuds4cSMTS36+iMspeRACcGxbUTeolwNvw09EBDBpIdKa5OwiZBeWQSIBdkVX3A360p2KOzsPc7bEGyO6orOlsTZDJCJqVJi0EGlJvw+P1Lgt8koaIq+k4ebqUQ0YERFR48ZJciItWfFMd9R0DZCujgQhgR4NGQ4RUaPHkRYiLYiMTUPIoTjUtAp+17y+cLWVN2hMRESNHZMWogZUVFqO9/dewQ+nKuoGtW9riJuZRZBIACGg+i8REVXF6SGiBnI+KQejPvlTlbD8e0AHfDXTG+2MZOhhK8eqca7oYStHOyMZ2hrpazlaIqLGh/dpIXrCFEqB0N/jEXIoDuVKASsTA6yb5A6fThW34S8pV0BfqgOJRAIhBEoVSsh0WQCRiFoG3qeFqJFIyirCgvAYnLmVDQAY5WaNVWNdYWr4/yMp9ycoEomECQsRUQ2YtBA9AUII/HzuNpbtvoyCknIYyXSxfEx3jO9ly7pBRET1xKSFSMNyikqxdNcl/HohBQDg5dgG6wM9YG9mqOXIiIiaNiYtRBp0PD4DC7efR2peMXR1JAga2hlzBj68bpBCKXAqIQvp+cWwMDaAt5MZpDocjSEiehCTFiINKClX4OMD1/DZ0QQAgJN5a4QEesDd3vShr9t/KQXL98QiJbdY1WYtN8CyABeMcLV+kiETETU5vOSZ6DFdT8vHMxuPqRKWKd4O+PXVfrVKWOZ+e04tYQGA1NxizP32HPZfSnlSIRMRNUkcaSGqJ6VS4KsTNxG87ypKy5Uwa62PD591wzAXy0e+VqEUWL4ntto74goAEgDL98RimIsVp4qIiP7BpIWoHtLzirHoxwuIun4XADCoazusmeAGC2ODWr3+VEJWlRGW+wkAKbnFOJWQhT4d22oiZCKiJo9JC1Ed7b+UisU/X0B2URlkujpYOsoZ0552rNOlzOn5NScs9elHRNQSMGkhqqXCknKs2BOL8DNJAAAXaxNsmOyBzpbGdd5XbUdkatuPiKglYNJCVAvRidkICo/BrX+KG/57QAe8Nqwr9HXrt5bd28kM1nIDpOYWV7uuRQLASl5x+TMREVXg1UNED1GuUGLDoThM2HICtzKLYCM3wPezn8Zif+d6JywAINWRYFmAC4CKBOV+lc+XBbhwES4R0X2YtBDV4FZmISb99wTWH7oOhVIgwN0G++YP0NjC2BGu1gid2gtWcvUpICu5AUKn9uJ9WoiIHsDpIaIHCCGw42wylu++jMJSBYxlunh/rCvG9rTV+LFGuFpjmIsV74hLRFQLTFqI7pNdWIolOy9i36VUAIB3ezOsC3SHXZsnVzdIqiPhZc1ERLXApIXoH0fj7mLRjvNIyyuBro4EC/264KUBHTnqQUTUSDBpoRavuEyBNfuv4X/HKm7D36Fda2wI7IkednItR0ZERPdj0kIt2tXUPARti8HV1HwAwNSnHbB0pAta6Uu1HBkRET2ISQu1SEqlwP+OJWDN/msoVSjRtrU+1kxwwxDnR9cNIiIi7WDSQi1Oam4xFu04jz/jMwAAg7tZ4MNn3dDOWKblyIiI6GGYtFCLsu9iChbvvIicojIY6Ong7VEu+NdTDnWqG0RERNrBpIVahIKScry3+zJ+PJsMAHC1NUFIYE90sjDScmRERFRbTFqo2Tt7KwsLws8jMauibtDcgR0RNLTLY92Gn4iIGh6TFmq2yhRKfHo4HhsPx0EpAFvTVlgf6MEihERETZRW/qk5btw4tGnTBhMmTKhVO1Fd3cwoxMQtJ/DJbxUJy1gPG+wL6s+EhYioCdNK0vLqq6/i66+/rnU7UW0JIbDtVCJGfnIUMUk5MDbQxYbJHgiZ3BMmBnraDo+IiB6DVpIWX19fGBsb17qdqDayCkvx0jdn8dbPF1FUqsBTTmbYHzQAz3hovtAhERE1vDonLVFRUQgICICNjQ0kEgl27dpVpc/mzZvh5OQEAwMDeHp64ujRo5qIlahGf1y/i+EhUTgYmwY9qQRv+XfD9y8+DVvTVtoOjYiINKTOSUthYSHc3d2xcePGareHh4cjKCgIS5cuRXR0NPr37w9/f38kJiY+drBEDyouU+C93Zcx43+ncDe/BB3btcbOl/tizkAWOiQiam7qfPWQv78//P39a9y+bt06zJo1C7NnzwYAhISE4MCBAwgNDUVwcHD9I31ASUkJSkpKVM/z8vI0tm9qGmLv5CEoPBrX0woAANP7OGKxvzPrBhERNVMaXdNSWlqKs2fPws/PT63dz88Px48f1+ShEBwcDLlcrnrY29trdP/UeCmVAmFRf2PspmO4nlYAcyMZvny+N1Y848qEhYioGdPofVoyMjKgUChgaaledM7S0hKpqamq58OHD8e5c+dQWFgIOzs77Ny5E717966xvTqLFy/GwoULVc/z8vKYuLQAKbn38Nr28zj+dyYAYKizBVY/6wZzI9YNIiJq7p7IzeUerOMihFBrO3DgQLWvq6m9OjKZDDIZv6hakl8vpGDJzovIvVeGVnpSvDPaBVO87Vk3iIiohdBo0mJubg6pVKo2qgIA6enpVUZfiGorv7gMy3Zfxs/nbgMA3OzkCAn0QId2rBtERNSSaHRNi76+Pjw9PREZGanWHhkZCR8fH00eilqIMzez4L/hKH4+dxs6EuAV3074aa4PExYiohaoziMtBQUFiI+PVz1PSEhATEwMzMzM4ODggIULF2LatGnw8vJCnz59EBYWhsTERMyZM0ejgVPzVqZQ4pPf4rDpSDyUArBrU1E3qHd73oafiKilqnPScubMGfj6+qqeVy6GnTFjBrZu3YrAwEBkZmZixYoVSElJgaurKyIiIuDo6Ki5qKlZu3G3AAvCY3A+ORcAML6XLd4b05234SciauEkQgih7SA0IS8vD3K5HLm5uTAxMdF2OFQPQgj8cCoJ7++Nxb0yBUwMdPHB+B4Y7Waj7dCIiOgJqcv39xO5eoiorjILSvDmTxdx6EoaAMCnY1usneQOazlvw09ERBWYtJDWHbmWjtd3XEBGQQn0pTp4fXhXzOrnBB3ehp+IiO7DpIW0prhMgeCIK/jqxC0AQGcLI2yY3BMuNpzeIyKiqpi0kFZcup2LoPAYxKdX1A163qc93vLvBgM93oafiIiqx6SFGpRCKfDZ0RtYe/AayhQC7Yxl+HiiOwZ2aaft0IiIqJFj0kIN5nbOPby2PQYnb2QBAPxcLLH6WTeYtdbXcmRERNQUMGmhBrH7/B0s3XkR+cXlMNSXYlmACyZ5sW4QERHVHpMWeqLyisvw7q5L2BVzBwDgbm+KkEAPOJm31nJkRETU1DBpoSfmrxuZWLj9PG7n3KuoGzS4M/4zuBP0pBoteUVERC0EkxbSuNJyJUIOXUfoH39DCMDBzBDrAz3g6dhG26EREVETxqSFNCo+vaJu0MXbFXWDJnraYdmY7jCS8aNGRESPh98kpBFCCHz3VyJW/hqL4jIl5K30EDy+B0b2sNZ2aERE1EwwaaHHllFQgjd/vIDfrqYDAPp1MsfHE91hJTfQcmRERNScMGmhx/LblTS8+dMFZBSUQl+qgzdGdMXMvqwbREREmsekherlXqkCqyJi8e3JRABAV0tjbJjigW5WrBtERERPBpMWqrOLybmYHx6NG3cLAQCz+jnh9eFdWTeIiIieKCYtVGsKpcCWP/7G+sjrKFcKWJpU1A3q35l1g4iI6Mlj0kK1kpxdhIXh53HqZkXdIH9XK3wwrgfasG4QERE1ECYt9Ei7om/jnV2XkF9Sjtb6Urw3pjsmeNqxbhARETUoJi1Uo9x7ZXhn1yXsPl9RN6iXgynWB3rAsS3rBhERUcNj0kLVOvF3Jl7bHoM7ucWQ6kjw6uDOmOfbEbqsG0RERFrCpIXUlJYrsTbyGsKibkAIwLFtRd2gXg6sG0RERNrFpIVU4tPz8eoPMYhNyQMABHrZ490AF7Rm3SAiImoE+G1EEELgm5O3sOrXKygpV6KNoR6Cx7thhKuVtkMjIiJSYdLSwqXnF+ONHy/g92t3AQD9O1fUDbI0Yd0gIiJqXJi0tGCRsRV1g7IKS6Gvq4PF/t0wo0971g0iIqJGiUlLC1RUWo73917BD6cq6gZ1szLGhsk90dXKWMuRERER1YxJSwtzPikHQeExSMioqBv0Yn8nLBreFTJd1g0iIqLGjUlLC6FQCoT+Ho+QQ3EoVwpYmRhg7SR39O1kru3QiIiIaoVJSwuQlFWEBeExOHMrGwAwqoc1Vo1zhakh6wYREVHTwaSlGRNC4Odzt7Fs92UUlJTDSKaL5WO6Y3wvW9YNIiKiJodJSzOVW1SGJbsu4tcLKQAAT8c2CAn0gL2ZoZYjIyIiqp9GU0gmKSkJgwYNgouLC9zc3LBjxw5th9RkHY/PwIgNUfj1QgqkOhK8NqwLwv/9NBMWIiJq0hrNSIuuri5CQkLg4eGB9PR09OrVCyNHjkTr1qwoXFsl5QqsPXgdnx2tqBvkZN4a6wM94GFvqu3QiIiIHlujSVqsra1hbW0NALCwsICZmRmysrKYtNTS9bR8zN8Wgyv/1A2a4m2Pt0exbhARETUfGpseioqKQkBAAGxsbCCRSLBr164qfTZv3gwnJycYGBjA09MTR48erXZfZ86cgVKphL29vabCa7aEENh6LAEBn/6JKyl5MGutj7Bpngge78aEhYiImhWNJS2FhYVwd3fHxo0bq90eHh6OoKAgLF26FNHR0ejfvz/8/f2RmJio1i8zMxPTp09HWFiYpkJrttLzijHjy9N4b08sSsqVGNilHfYH9YdfdxY6JCKi5kcihBAa36lEgp07d2Ls2LGqtqeeegq9evVCaGioqs3Z2Rljx45FcHAwAKCkpATDhg3Diy++iGnTpj30GCUlJSgpKVE9z8vLg729PXJzc2FiYqLZE2qEDlxOxVs/XUB2URlkujpYMtIZ0/s48lJmIiJqUvLy8iCXy2v1/d0gVw+Vlpbi7Nmz8PPzU2v38/PD8ePHAVRMczz//PMYPHjwIxMWAAgODoZcLlc9WspUUmFJOd766QJe+uYssovK4GJtgr3/6YcZPu2ZsBARUbPWIElLRkYGFAoFLC0t1dotLS2RmpoKADh27BjCw8Oxa9cueHh4wMPDAxcvXqxxn4sXL0Zubq7qkZSU9ETPoTGITszGqE+OYtvpJEgkwEsDO2DnPB90tmShQyIiav4adKXmgyMBQghVW79+/aBUKmu9L5lMBplMptH4GqtyhRKbjvyNTw7HQaEUsJZX1A3y6ci6QURE1HI0SNJibm4OqVSqGlWplJ6eXmX0hdQlZhYhKDwa5xJzAAAB7jZY+Ywr5IZ62g2MiIiogTXI9JC+vj48PT0RGRmp1h4ZGQkfH5+GCKHJEUJgx5kk+G+IwrnEHBjLdBES6IFPJnswYSEiohZJYyMtBQUFiI+PVz1PSEhATEwMzMzM4ODggIULF2LatGnw8vJCnz59EBYWhsTERMyZM0dTITQb2YWlWLrrIiIuVoxMebc3w9pJ7rwNPxERtWgaS1rOnDkDX19f1fOFCxcCAGbMmIGtW7ciMDAQmZmZWLFiBVJSUuDq6oqIiAg4OjpqKoQnQqEUOJWQhfT8YlgYG8DbyQxSnSd3lc6fcRl4bUcM0vJKoKsjwYJhXTBnYMcnekwiIqKm4Incp0Ub6nKdd23tv5SC5XtikZJbrGqzlhtgWYALRrhaa+QYlYrLFPjowDV88WcCAKCDeWuETPaAm52pRo9DRETUmDS6+7Q0RfsvpWDut+fUEhYASM0txtxvz2H/pRSNHetqah7GbjqmSlj+9ZQD9r7ajwkLERHRfVicphoKpcDyPbGobghKAJAAWL4nFsNcrB5r2kapFPjy+E18uP8qSsuVaNtaH2smuGGIM6+oIiIiehCTlmqcSsiqMsJyPwEgJbcYpxKy0Kdj23odIy2vGIt2nMfRuAwAwOBuFvjwWTe0M24Z954hIiKqKyYt1UjPrzlhqU+/B+27mILFOy8ip6gMBno6WDrKBVOfcuBt+ImIiB6CSUs1LIwNNNqvUkFJOZbvvowdZ5MBAK62JggJ7IlOFkZ1jpGIiKilYdJSDW8nM1jLDZCaW1ztuhYJACt5xeXPtXX2VjYWhMcgMasIEgkwd2BHBA3tAn1droUmIiKqDX5jVkOqI8GyABcAFQnK/SqfLwtwqdUi3HKFEusjr2PSf08gMasItqatsO3Fp/HGiG5MWIiIiOqA35o1GOFqjdCpvWAlV58CspIbIHRqr1rdp+VmRiEmbDmBDb9VFDoc62GDiPn98VSH+i3eJSIiask4PfQQI1ytMczFqs53xBVCYPuZJCzfE4uiUgWMDXSxcqwrnvGwbaDIiYiImh8mLY8g1ZHU6bLmrMJSLP75Ag5cTgMAPOVkhnWBHrA1bfWkQiQiImoRmLRoUNT1u1i04zzS80ugJ5XgNb+ueLF/B9YNIiIi0gAmLRpQXKbA6n1XsfX4TQBAx3atsWFyT7jayrUbGBERUTPCpOUxxd7JQ1B4NK6nFQAApvdxxGJ/Z7TSl2o5MiIiouaFSUs9KZUCX/yZgI8OXEOpQglzIxk+muAG324W2g6NiIioWWLSUg8puffw2vbzOP53JgBgqLMFVj/rBnMj1g0iIiJ6Upi01MKF5BwER1zF4pHdkJR1D0t2XkTuvTK00pPindEumOJtz7pBRERETxiTllr4+dxtnLiRiQXhMfj7biEAwM1OjpBAD3Rox7pBREREDYFJSw2Ss4uQXVgGiQTYGV1R4PDvu4WQAJjoZYeXB3VCe/PW2g2SiIioBWHSUoN+Hx6ptl0A2H4mGdvPJOPm6lENGxQREVELxtpDNQgJ9IBuDTeF09WRICTQo2EDIiIiauE40lKDsT1t0cnCCKM//bPKtl3z+vLGcURERA2MIy21UHlhEC8QIiIi0h6OtDxEWyN9tDOSwdrUAIG97RF+OgkpOcVoa6Sv7dCIiIhaHIkQQmg7CE3Iy8uDXC5Hbm4uTExMNLbfknIF9KU6kEgkEEKgVKGETJe36CciItKEunx/c6TlEe5PUCQSCRMWIiIiLeGaFiIiImoSmLQQERFRk8CkhYiIiJoEJi1ERETUJDBpISIioiaBSQsRERE1CUxaiIiIqElg0kJERERNApMWIiIiahKYtBAREVGT0Gxu419ZQikvL0/LkRAREVFtVX5v16YUYrNJWvLz8wEA9vb2Wo6EiIiI6io/Px9yufyhfZpNlWelUok7d+7A2NgYEolE4/vv3bs3Tp8+rfH9tjR8H2vWkt+b5nzueXl5sLe3R1JSkkYr0BM1F0II5Ofnw8bGBjo6D1+10mxGWnR0dGBnZ/fE9i+VSvkHRwP4PtasJb83LeHcTUxMmv05EtXXo0ZYKnEhbi3NmzdP2yE0C3wfa9aS35uWfO5EVHvNZnqIiKgxysvLg1wuR25uLkdaiB4TR1qIiJ4gmUyGZcuWQSaTaTsUoiaPIy1ERETUJHCkhYiIiJoEJi1ERETUJDBp0YK9e/eia9eu6Ny5Mz7//HNth0NERNQkcE1LAysvL4eLiwuOHDkCExMT9OrVC3/99RfMzMy0HRoREVGjxpGWBnbq1Cl0794dtra2MDY2xsiRI3HgwAFth0VEWjBu3Di0adMGEyZM0HYoRE1Cs0pabt++jalTp6Jt27YwNDSEh4cHzp49q7H9R0VFISAgADY2NpBIJNi1a1e1/TZv3gwnJycYGBjA09MTR48eVW27c+cObG1tVc/t7Oxw+/ZtjcVIRE3Hq6++iq+//lrbYRA1Gc0macnOzkbfvn2hp6eHffv2ITY2FmvXroWpqWm1/Y8dO4aysrIq7VevXkVqamq1ryksLIS7uzs2btxYYxzh4eEICgrC0qVLER0djf79+8Pf3x+JiYkAqq9i+SRqJRFR4+fr6wtjY2Nth0HUZDSbpOXDDz+Evb09vvzyS3h7e6N9+/YYMmQIOnbsWKWvUqnEvHnz8Nxzz0GhUKjar1+/Dl9f3xr/5ePv74+VK1di/PjxNcaxbt06zJo1C7Nnz4azszNCQkJgb2+P0NBQAICtra3ayEpycjKsra3re9pEpCW1GXl92KgrEdVds0ladu/eDS8vL0ycOBEWFhbo2bMnPvvss2r76ujoICIiAtHR0Zg+fTqUSiX+/vtvDB48GGPGjMEbb7xRrxhKS0tx9uxZ+Pn5qbX7+fnh+PHjAABvb29cunQJt2/fRn5+PiIiIjB8+PB6HY+ItOdRI6+PGnUlorprNknLjRs3EBoais6dO+PAgQOYM2fOQ+eLbWxscPjwYRw7dgzPPfccBg8ejCFDhmDLli31jiEjIwMKhQKWlpZq7ZaWlqopJ11dXaxduxa+vr7o2bMnXn/9dbRt27bexyQi7XjUyOujRl2JqO50tR2ApiiVSnh5eeGDDz4AAPTs2ROXL19GaGgopk+fXu1rHBwc8PXXX2PgwIHo0KEDvvjiC42sL3lwH0IItbYxY8ZgzJgxj30cImqcKkdd33rrLbX2+0ddiajums1Ii7W1NVxcXNTanJ2dHzoUm5aWhn//+98ICAhAUVERFixY8FgxmJubQyqVVlnIm56eXmX0hYiar9qMugLA8OHDMXHiRERERMDOzg6nT59u6FCJmpRmM9LSt29fXLt2Ta3t+vXrcHR0rLZ/RkYGhgwZAmdnZ+zYsQNxcXEYNGgQZDIZPv7443rFoK+vD09PT0RGRmLcuHGq9sjISDzzzDP12icRNV2PGnXlPZqI6qbZJC0LFiyAj48PPvjgA0yaNAmnTp1CWFgYwsLCqvRVKpUYMWIEHB0dER4eDl1dXTg7O+PQoUPw9fWFra1ttaMuBQUFiI+PVz1PSEhATEwMzMzM4ODgAABYuHAhpk2bBi8vL/Tp0wdhYWFITEzEnDlzntzJE1GjwlFXoidENCN79uwRrq6uQiaTiW7duomwsLAa+x48eFDcu3evSnt0dLRITEys9jVHjhwRAKo8ZsyYodZv06ZNwtHRUejr64tevXqJP/7447HOi4gaNwBi586dam3e3t5i7ty5am3Ozs7irbfeasDIiJoX1h4iIqqH+0dee/bsiXXr1sHX11c18hoeHo5p06Zhy5YtqlHXzz77DJcvX65x2pqIHo5JCxFRPfz+++/w9fWt0j5jxgxs3boVQMXN5dasWYOUlBS4urpi/fr1GDBgQANHStR8MGkhIiKiJqHZXPJMREREzRuTFiIiImoSmLQQERFRk8CkhYiIiJoEJi1ERETUJDBpISIioiaBSQsRERE1CUxaiIiIqElg0kJERERNApMWIiIiahKYtBAREVGTwKSFiIiImgQmLURERNQk/B/+/58ZkyvmdwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loc = np.array([1e-8, 1])\n", + "orders_even = [i for i in range(6, 15, 2)]\n", + "err = []\n", + "for o in orders_even:\n", + " err.append(compute_error_coord(recur_laplace, loc, o, derivs_laplace, n_init_lap, order_lap))\n", + "\n", + "orders_even = np.array(orders_even)\n", + "err = np.array(err, dtype=float)\n", + "\n", + "coefficients = np.polyfit(np.log10(orders_even), np.log10(err), 1)\n", + "polynomial = np.poly1d(coefficients)\n", + "log10_y_fit = polynomial(np.log10(orders_even))\n", + "plt.plot(orders_even, 10**log10_y_fit, '*-')\n", + "plt.scatter(orders_even, err)\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title(\"Error vs Order (Even Only), Slope: \"+str(coefficients[0]))" + ] + }, { "cell_type": "code", "execution_count": null, From 080bcfe1b313fc136b6e1b896f16e9ad1ef81c4e Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 23 Dec 2024 08:52:11 -0800 Subject: [PATCH 122/143] Update plot_normal_recurrence.ipynb --- test/plot_normal_recurrence.ipynb | 235 ++++++++++++++++++++++++------ 1 file changed, 189 insertions(+), 46 deletions(-) diff --git a/test/plot_normal_recurrence.ipynb b/test/plot_normal_recurrence.ipynb index 6b6e24bf..a1959368 100644 --- a/test/plot_normal_recurrence.ipynb +++ b/test/plot_normal_recurrence.ipynb @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -68,14 +68,47 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs\n", - "derivs_laplace = compute_derivatives(15)" + "derivs_laplace = compute_derivatives(20)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 12\u001b[0m\n\u001b[1;32m 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m [sp\u001b[38;5;241m.\u001b[39mdiff(g_x_y,\n\u001b[1;32m 9\u001b[0m var_t[\u001b[38;5;241m0\u001b[39m], i)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(p)]\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n\u001b[0;32m---> 12\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m \u001b[43mcompute_derivatives_h2d\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m8\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[0;32mIn[5], line 8\u001b[0m, in \u001b[0;36mcompute_derivatives_h2d\u001b[0;34m(p)\u001b[0m\n\u001b[1;32m 5\u001b[0m abs_dist \u001b[38;5;241m=\u001b[39m sp\u001b[38;5;241m.\u001b[39msqrt((var[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m+\u001b[39m\n\u001b[1;32m 6\u001b[0m (var[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 7\u001b[0m g_x_y \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39mj\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m4\u001b[39m) \u001b[38;5;241m*\u001b[39m hankel1(\u001b[38;5;241m0\u001b[39m, k \u001b[38;5;241m*\u001b[39m abs_dist)\n\u001b[0;32m----> 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_x_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n", + "Cell \u001b[0;32mIn[5], line 8\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 5\u001b[0m abs_dist \u001b[38;5;241m=\u001b[39m sp\u001b[38;5;241m.\u001b[39msqrt((var[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m+\u001b[39m\n\u001b[1;32m 6\u001b[0m (var[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 7\u001b[0m g_x_y \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39mj\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m4\u001b[39m) \u001b[38;5;241m*\u001b[39m hankel1(\u001b[38;5;241m0\u001b[39m, k \u001b[38;5;241m*\u001b[39m abs_dist)\n\u001b[0;32m----> 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m [\u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_x_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(p)]\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:2481\u001b[0m, in \u001b[0;36mdiff\u001b[0;34m(f, *symbols, **kwargs)\u001b[0m\n\u001b[1;32m 2417\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2418\u001b[0m \u001b[38;5;124;03mDifferentiate f with respect to symbols.\u001b[39;00m\n\u001b[1;32m 2419\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2478\u001b[0m \n\u001b[1;32m 2479\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2480\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(f, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdiff\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m-> 2481\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2482\u001b[0m kwargs\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 2483\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _derivative_dispatch(f, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/expr.py:3575\u001b[0m, in \u001b[0;36mExpr.diff\u001b[0;34m(self, *symbols, **assumptions)\u001b[0m\n\u001b[1;32m 3573\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdiff\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39massumptions):\n\u001b[1;32m 3574\u001b[0m assumptions\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m-> 3575\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_derivative_dispatch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43massumptions\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1908\u001b[0m, in \u001b[0;36m_derivative_dispatch\u001b[0;34m(expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1906\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtensor\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray_derivatives\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ArrayDerivative\n\u001b[1;32m 1907\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ArrayDerivative(expr, \u001b[38;5;241m*\u001b[39mvariables, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1908\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDerivative\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mvariables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1474\u001b[0m, in \u001b[0;36mDerivative.__new__\u001b[0;34m(cls, expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1472\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexprtools\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m factor_terms\n\u001b[1;32m 1473\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msimplify\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msimplify\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m signsimp\n\u001b[0;32m-> 1474\u001b[0m expr \u001b[38;5;241m=\u001b[39m factor_terms(\u001b[43msignsimp\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 1475\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/simplify/simplify.py:405\u001b[0m, in \u001b[0;36msignsimp\u001b[0;34m(expr, evaluate)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n\u001b[1;32m 404\u001b[0m \u001b[38;5;66;03m# get rid of an pre-existing unevaluation regarding sign\u001b[39;00m\n\u001b[0;32m--> 405\u001b[0m e \u001b[38;5;241m=\u001b[39m \u001b[43mexpr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreplace\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mis_Mul\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mand\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m!=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 406\u001b[0m e \u001b[38;5;241m=\u001b[39m sub_post(sub_pre(e))\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e, (Expr, Relational)) \u001b[38;5;129;01mor\u001b[39;00m e\u001b[38;5;241m.\u001b[39mis_Atom:\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1749\u001b[0m, in \u001b[0;36mBasic.replace\u001b[0;34m(self, query, value, map, simultaneous, exact)\u001b[0m\n\u001b[1;32m 1746\u001b[0m expr \u001b[38;5;241m=\u001b[39m v\n\u001b[1;32m 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n\u001b[0;32m-> 1749\u001b[0m rv \u001b[38;5;241m=\u001b[39m \u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrec_replace\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1750\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (rv, mapping) \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mmap\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m rv\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36mBasic.replace..walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36mBasic.replace..walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", + " \u001b[0;31m[... skipping similar frames: at line 1724 (15 times), Basic.replace..walk at line 1724 (15 times)]\u001b[0m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36mBasic.replace..walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1734\u001b[0m, in \u001b[0;36mBasic.replace..walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m 1732\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rv \u001b[38;5;241m==\u001b[39m e \u001b[38;5;129;01mand\u001b[39;00m e \u001b[38;5;241m!=\u001b[39m newargs[i]:\n\u001b[1;32m 1733\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n\u001b[0;32m-> 1734\u001b[0m rv \u001b[38;5;241m=\u001b[39m \u001b[43mF\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrv\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1740\u001b[0m, in \u001b[0;36mBasic.replace..rec_replace\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1739\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrec_replace\u001b[39m(expr):\n\u001b[0;32m-> 1740\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43m_query\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1741\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mor\u001b[39;00m result \u001b[38;5;241m==\u001b[39m {}:\n\u001b[1;32m 1742\u001b[0m v \u001b[38;5;241m=\u001b[39m _value(expr, result)\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/simplify/simplify.py:405\u001b[0m, in \u001b[0;36msignsimp..\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n\u001b[1;32m 404\u001b[0m \u001b[38;5;66;03m# get rid of an pre-existing unevaluation regarding sign\u001b[39;00m\n\u001b[0;32m--> 405\u001b[0m e \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;28;01mlambda\u001b[39;00m x: x\u001b[38;5;241m.\u001b[39mis_Mul \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;241;43m-\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m!=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m, \u001b[38;5;28;01mlambda\u001b[39;00m x: \u001b[38;5;241m-\u001b[39m(\u001b[38;5;241m-\u001b[39mx))\n\u001b[1;32m 406\u001b[0m e \u001b[38;5;241m=\u001b[39m sub_post(sub_pre(e))\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e, (Expr, Relational)) \u001b[38;5;129;01mor\u001b[39;00m e\u001b[38;5;241m.\u001b[39mis_Atom:\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:520\u001b[0m, in \u001b[0;36mBasic.__ne__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 511\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__ne__\u001b[39m(\u001b[38;5;28mself\u001b[39m, other):\n\u001b[1;32m 512\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"``a != b`` -> Compare two symbolic trees and see whether they are different\u001b[39;00m\n\u001b[1;32m 513\u001b[0m \n\u001b[1;32m 514\u001b[0m \u001b[38;5;124;03m this is the same as:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[38;5;124;03m but faster\u001b[39;00m\n\u001b[1;32m 519\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 520\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mother\u001b[49m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:500\u001b[0m, in \u001b[0;36mBasic.__eq__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 497\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_Number \u001b[38;5;129;01mand\u001b[39;00m other\u001b[38;5;241m.\u001b[39mis_Number) \u001b[38;5;129;01mand\u001b[39;00m (\n\u001b[1;32m 498\u001b[0m \u001b[38;5;28mtype\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mtype\u001b[39m(other)):\n\u001b[1;32m 499\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m--> 500\u001b[0m a, b \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_hashable_content(), \u001b[43mother\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_hashable_content\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 501\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m a \u001b[38;5;241m!=\u001b[39m b:\n\u001b[1;32m 502\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n", + "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/expr.py:150\u001b[0m, in \u001b[0;36mExpr._hashable_content\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 146\u001b[0m exp \u001b[38;5;241m=\u001b[39m exp\u001b[38;5;241m.\u001b[39msort_key(order\u001b[38;5;241m=\u001b[39morder)\n\u001b[1;32m 148\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mclass_key(), args, exp, coeff\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_hashable_content\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 151\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return a tuple of information about self that can be used to\u001b[39;00m\n\u001b[1;32m 152\u001b[0m \u001b[38;5;124;03m compute the hash. If a class defines additional attributes,\u001b[39;00m\n\u001b[1;32m 153\u001b[0m \u001b[38;5;124;03m like ``name`` in Symbol, then this method should be updated\u001b[39;00m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;124;03m accordingly to return such relevant attributes.\u001b[39;00m\n\u001b[1;32m 155\u001b[0m \u001b[38;5;124;03m Defining more than _hashable_content is necessary if __eq__ has\u001b[39;00m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;124;03m been defined by a class. See note about this in Basic.__eq__.\"\"\"\u001b[39;00m\n\u001b[1;32m 157\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_args\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], "source": [ "def compute_derivatives_h2d(p):\n", " k = 1\n", @@ -171,18 +204,19 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 10, "metadata": {}, "outputs": [ { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABN4AAALACAYAAABM/b/3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACtNElEQVR4nOzde3hU5b3//c9wSMIpaESC4RBQPMUIaIgWECW6RYOim4qlBxEUamnij0JqrdYqSNW4tWXT1kCl7kqpbaVaxdaiEI9QkRrQtNXYFlo0IIfIQUMCgoT7+cMnI8NkkpnJmln3WvN+XVeuy1mZrLknQfLmu2bNChhjjAAAAAAAAAA4qoPbCwAAAAAAAAD8iMEbAAAAAAAAkAAM3gAAAAAAAIAEYPAGAAAAAAAAJACDNwAAAAAAACABGLwBAAAAAAAACcDgDQAAAAAAAEgABm8AAAAAAABAAjB4AwAAAAAAABKAwZtDlixZokAgoPXr17f4+SuvvFIDBw6Ma99Tp06N+2sjGTNmjPLz8x3dZyAQ0Ny5c4O3a2pqNHfuXL333nuOPg68a+DAgZo6dWpcX3vfffdp+fLlYdtfeeUVBQIBvfLKK+1aWyr56U9/qsGDBystLU2BQEAfffSR20uKy5gxYzRmzBi3lxGzuXPnKhAIhH1kZGS4vTQA7dRWDyYKvwuRSMc2frT279+vuXPntvjnsvn/Ff6dEL3vf//7GjBggDp16qTjjjvO7eXErT3/HnDT1KlTW+y3M844w+2lwQM6ub0A+FdNTY3uvvtujRkzxvHBIVLPfffdp4kTJ+q///u/Q7afe+65ev3115WXl+fOwjymurpaM2fO1PTp0zVlyhR16tRJPXr0cHtZKen5559Xz549g7c7dOBYGADAP/bv36+7775bksIOlF1xxRV6/fXXddJJJ7mwMu955plndO+99+qOO+5QcXGx0tPT3V5SSurSpYteeumlsG1AWxi8wfP279+vrl27ur2MoE8//VSBQECdOoX/72XbWtvLhueTmZmpL3zhC66uIVbGGH3yySct/qI+cOCAMjIyFAgE4t5/az+Xd955R5L09a9/Xeedd17cjxHt47WHE9+LaLX2M0mUgoIC9erVK2mPBwA2saEhjtba7xzb1tpeBw4ccH1YcOKJJ+rEE090dQ2xampq0uHDh1scejnxZ6S1n8vbb78tSZo5c6Z69+7drsdplqg/18n8/6W1n0kidOjQwXP/7oAdOLzuImOMFi5cqGHDhqlLly46/vjjNXHiRP3nP/9p82sDgYBuvvlmPfroozr99NPVpUsXDR8+XOvWrZMxRg8++KAGDRqk7t276+KLL9amTZta3E9VVZVGjx6trl276uSTT9b999+vI0eOhNyntrZW1113nXr37q309HSdeeaZ+tGPfhR2v6MtWbJE1157rSSpqKgo+FLcJUuWBE+HaOmjrVfGTZ06Vd27d9ff//53jR07Vj169NAll1wiSTp06JDuuecenXHGGUpPT9eJJ56oG264QR9++GHYfn7zm99oxIgR6t69u7p3765hw4bp//7v/4Kfj/QS6GNPbWt+Lr/61a/07W9/W3379lV6ero2bdrkyFoHDhyoK6+8Us8//7zOPfdcdenSRWeccYZ+8YtfhK3tgw8+0E033aT+/fsrLS1NOTk5mjhxonbu3Bm8T319vW655RYNGjRIaWlp6tu3r2bNmqXGxsZWv+/Nzz0/P1+rV6/WyJEj1bVrV914443t2u8nn3yib3/72xo2bJh69uyprKwsjRgxQs8880zI/QKBgBobG/XLX/4y+Gel+edw7Ok1CxYsUCAQaPHP/He/+12lpaVp165dwW0vvPCCLrnkEmVmZqpr164aNWqUXnzxxTa/H7E87+b/X3/2s5/pzDPPVHp6un75y18GT7NYtWqVbrzxRp144onq2rWrDh48qCNHjuiBBx4I/hnp3bu3rr/+em3dujXqn8uxxowZo+uuu06SdP755ysQCIT8Of/FL36hoUOHKiMjQ1lZWZowYYLefffdkH209uc6kj//+c+65JJL1KNHD3Xt2lUjR47Un/70p5D7tPa9MMbogQceUG5urjIyMnTuuefqueeeS8jPBAASLdrffdLnf1c9/PDDOu2005Senq68vDw9/vjjbT7O+vXr9eUvf1kDBw5Uly5dNHDgQH3lK1/R+++/H3ZfLzTEkSNH9NOf/jTYzccdd5y+8IUv6A9/+EPI96ulUyKP7brWfuc4sdbmn9uvfvUrnXnmmeratauGDh2qZ599Nmxt//jHP/SVr3xF2dnZSk9P14ABA3T99dfr4MGDwfvs2LFD3/jGN9SvXz+lpaVp0KBBuvvuu3X48OE2v/fNLfnUU0/pnHPOUUZGRvBVaPHu98MPP1RJSYny8vLUvXt39e7dWxdffLHWrFkTvM97770XHKzdfffdwX5r/jkce6rprFmz1K1bN9XX14c93qRJk5Sdna1PP/00uG3ZsmUaMWKEunXrpu7du+uyyy7TW2+91eb3I9rn/d577ykQCOiBBx7QPffco0GDBik9PV0vv/xy8C0j3nzzTU2cOFHHH3+8TjnlFEmf/f99++23h/wZKS0tDXtbj9Z+LscaOHCgvv/970uSsrOzQ/6cJ6IXm/3hD3/QiBEj1LVrV/Xo0UOXXnqpXn/99ZD7tPa9+PTTT3XrrbeqT58+6tq1qy644AK98cYbCfmZANYzcMSjjz5qJJl169aZTz/9NOxj3LhxJjc3N+Rrvv71r5vOnTubb3/72+b55583v/nNb8wZZ5xhsrOzzY4dO4L3mzJlStjXSjK5ublm5MiR5qmnnjJPP/20Oe2000xWVpaZPXu2ufrqq82zzz5rfv3rX5vs7GwzZMgQc+TIkeDXX3TRReaEE04wp556qvnZz35mKisrTUlJiZFkfvnLXwbvV1dXZ/r27WtOPPFE87Of/cw8//zz5uabbzaSzDe/+c2wNc2ZMyf4dffdd5+RZCoqKszrr79uXn/9dVNXV2c+/vjj4O3mj6VLl5rOnTubcePGtfp9njJliuncubMZOHCgKS8vNy+++KJZuXKlaWpqMpdffrnp1q2bufvuu01lZaV55JFHTN++fU1eXp7Zv39/cB933nmnkWS++MUvmieeeMKsWrXKzJ8/39x5553B++Tm5popU6aEPf5FF11kLrroouDtl19+2Ugyffv2NRMnTjR/+MMfzLPPPmt2797tyFpzc3NNv379TF5enlm6dKlZuXKlufbaa40k8+qrrwbvt3XrVnPSSSeZXr16mfnz55sXXnjBLFu2zNx4443m3XffNcYY09jYaIYNGxZynx//+MemZ8+e5uKLLw7589GSiy66yGRlZZn+/fubn/70p+bll182r776akz7Pfb7+tFHH5mpU6eaX/3qV+all14yzz//vLnllltMhw4dQv4cvv7666ZLly5m3LhxwT8z77zzTsjP4OWXXzbGGPPhhx+atLQ0c8cdd4Ss//DhwyYnJ8d88YtfDG771a9+ZQKBgPnv//5v89RTT5k//vGP5sorrzQdO3Y0L7zwQqvfj1ied/OfkSFDhpjf/OY35qWXXjJvv/128O+Nvn37mptuusk899xz5sknnzSHDx82N910k5Fkbr75ZvP888+bn/3sZ+bEE080/fv3Nx9++GGbP5eWvPPOO+b73/++kWQeffRR8/rrr5tNmzYZY0zw/9evfOUr5k9/+pNZunSpOfnkk03Pnj3Nv/71r+A+Iv25juSVV14xnTt3NgUFBWbZsmVm+fLlZuzYsSYQCJjHH388eL/Wvhdz5swxksy0adPMc889ZxYvXmz69u1r+vTpE/L/oxM/k0iamppa/Lv92I/Dhw9H3Eez5ufTp08f06FDB9O7d28zefJk8/7777f5tQDs1vx3WVVVVcT7RPu7z5jP/q7q37+/ycvLM7/97W/NH/7wB3P55ZcbSeaJJ54I3u/Y34XGGPPEE0+Yu+66yzz99NPm1VdfNY8//ri56KKLzIknnhjye8QrDTF58mQTCATM9OnTzTPPPGOee+45c++995of//jHId+v5hY92rH90drvHCfWKskMHDjQnHfeeeZ3v/udWbFihRkzZozp1KmT+fe//x28X3V1tenevbsZOHCg+dnPfmZefPFF89hjj5kvfelLpr6+3hhjzPbt203//v1Nbm6uefjhh80LL7xgfvCDH5j09HQzderUVr/vzc/9pJNOMieffLL5xS9+YV5++WXzxhtvxLTfY7+v//jHP8w3v/lN8/jjj5tXXnnFPPvss2batGmmQ4cOwT+Dn3zyiXn++eeDv7+b+625O5p/Bps3bzbGGPPXv/7VSDI///nPQx577969Jj093ZSVlQW33XvvvSYQCJgbb7zRPPvss+app54yI0aMMN26dQv2YSTRPu/NmzcH/4wUFRWZJ5980qxatcps3rw5+Hs8NzfXfPe73zWVlZVm+fLl5siRI+ayyy4znTp1MnfeeadZtWqV+eEPf2i6detmzjnnHPPJJ5+0+XNpyZtvvmmmTZtmJJnnn3/evP7662bLli3GGJOQXjTGmF//+tdGkhk7dqxZvny5WbZsmSkoKDBpaWlmzZo1wftF+l4Y81kzBgIB853vfCf4762+ffuazMzMkP8fnfiZRHL48OGo+q2pqSniPppNmTLFdOjQwWRnZ5sOHTqYvn37mtLSUrN79+42vxZg8OaQ5l8erX0cPTx7/fXXjSTzox/9KGQ/W7ZsMV26dDG33nprcFukwVufPn1MQ0NDcNvy5cuNJDNs2LCQX/4LFiwwkszf/va34LaLLrrISDJ/+ctfQvabl5dnLrvssuDt2267rcX7ffOb3zSBQMD885//DFnT0b+Un3jiibAIbMnOnTvNySefbM466yyzd+/eVu87ZcoUI8n84he/CNn+29/+1kgyv//970O2V1VVGUlm4cKFxhhj/vOf/5iOHTuar33ta60+TqyDtwsvvNDxtTavIyMjI+Qf5AcOHDBZWVnmG9/4RnDbjTfeaDp37mxqamoiPqfy8nLToUOHsH8MPPnkk0aSWbFiRcSvbX7uksyLL74Y934jfV+bNf9ynDZtmjnnnHNCPtetW7cWv7alf2x88YtfNP369Qv5JbpixQojyfzxj380xnz2j4isrCwzfvz4kP01NTWZoUOHmvPOOy/iOmN93pJMz549zZ49e0Lu2/z3xvXXXx+y/d133zWSTElJScj2v/zlL0aS+d73vhfcFunnEklL/yjcu3dvcLB5tNraWpOenm6++tWvBrdF+nMdyRe+8AXTu3dvs2/fvuC2w4cPm/z8fNOvX7/g31WRvhd79+41GRkZZsKECSHbX3vtNSMp5P9HJ34mkTQ/77Y+jl5PJEuXLjX33nuvWbFihXnppZfM/fffb7Kyskx2drbZunVrVOsBYKdoBm/Hau13nyTTpUuXkAOyhw8fNmeccYYZPHhwcFtLvwtbepyGhgbTrVu3kGGVFxpi9erVRlLYQbVjxTp4O/Z3jhNrbV5HdnZ2cHhmjDE7duwwHTp0MOXl5cFtF198sTnuuONMXV1dxOf0jW98w3Tv3j3s4MwPf/hDI6nNQVNubq7p2LFjSLPHut9I39dmzX+GL7nkkpDf1x9++GHErz128GaMMeeee64ZOXJkyP0WLlxoJJm///3vxpjP2qRTp07m//2//xdyv3379pk+ffqYL33pSxHXGcvzbh7ynHLKKebQoUMh920eNt11110h25sHjQ888EDI9mXLlhlJZvHixcFtkX4ukTQ/5tHDtET1YlNTk8nJyTFnn312SEvv27fP9O7dO+RnFOl70by22bNnh2xvHugd/f+jEz+TSJqfd1sfrf37pNn8+fPN/PnzzapVq8yqVavMHXfcYbp27WrOOOOMkM4FWsKppg5bunSpqqqqwj4uuOCCkPs9++yzCgQCuu6663T48OHgR58+fTR06NCorkpVVFSkbt26BW+feeaZkqTi4uKQ96do3n7sqQV9+vQJe4+nIUOGhNzvpZdeUl5eXtj9pk6dKmNM2JtLxqqxsVFXXHGFPvnkEz333HNRX6HnmmuuCbn97LPP6rjjjtP48eNDvp/Dhg1Tnz59gt/PyspKNTU1qbS0tF3rbms9Tqy12bBhwzRgwIDg7YyMDJ122mkhP6fnnntORUVFwZ91S5599lnl5+dr2LBhIY972WWXRX0ltOOPP14XX3yxo/t94oknNGrUKHXv3l2dOnVS586d9X//939hpzjG4oYbbtDWrVv1wgsvBLc9+uij6tOnj4qLiyVJa9eu1Z49ezRlypSQdR85ckSXX365qqqqWj19JtbnffHFF+v4449vcV/H/hlpfsn8sac7n3feeTrzzDPDToVt6ecSi9dff10HDhwIe7z+/fvr4osvbvHU29b+zDdrbGzUX/7yF02cOFHdu3cPbu/YsaMmT56srVu36p///Ger+3399df1ySef6Gtf+1rI9pEjRyo3Nzdkm5M/k2PNnTu3xb/bj/14+OGH29zX5MmT9b3vfU/FxcUqKirSd7/7XT333HP68MMP9cADD0S1HgDeFsvvvksuuUTZ2dnB2x07dtSkSZO0adOmsNPJjtbQ0KDvfve7Gjx4sDp16qROnTqpe/fuamxsDHkcLzRE89sLJKvfnOidoqKikIsXZWdnq3fv3sF+279/v1599VV96UtfavW9zp599lkVFRUpJycn5HGbe+bVV19t83kOGTJEp512mqP7/dnPfqZzzz1XGRkZwT/DL774Yrv7be3atSFt8Oijj6qwsFD5+fmSpJUrV+rw4cO6/vrrQ9adkZGhiy66qM0/i7E+76uuukqdO3ducV/H/vlp/nfRsT117bXXqlu3bmE91dLPJRaJ6sV//vOf2rZtmyZPnhxy4afu3bvrmmuu0bp167R///6Qr4nUssf225e+9KWw98F28mdyrIcffjiqfovmqr2zZ8/W7Nmzdemll+rSSy/VPffco6VLl+of//iHfv7zn0e1HqQuLq7gsDPPPFPDhw8P296zZ09t2bIleHvnzp0yxoSE1NFOPvnkNh8rKysr5HZaWlqr2z/55JOQ7SeccELYPtPT03XgwIHg7d27d7f4vms5OTnBz8fr8OHDmjhxov71r39p9erV6t+/f1Rf17VrV2VmZoZs27lzpz766KPgcz1W83t6Nb+HWr9+/eJed0siXZGpPWttFs3P6cMPP2zzOe3cuVObNm2K+Ivq2MdtSUvPsz37feqpp/SlL31J1157rb7zne+oT58+6tSpkxYtWtTi+9hFq7i4WCeddJIeffRRjR07Vnv37tUf/vAHfetb31LHjh2D65akiRMnRtzPnj17QobbR4v1ebd21a5jP9f8/1VLX5OTkxM2RG/vFcHaerzKysqQbS39uW7J3r17ZYyJuN+jH7tZpO9Fnz59wvZx7DYnfybHGjBgQFR/b8R7IYjzzjtPp512mtatWxfX1wPwjlh/97X299/u3bsj/t301a9+VS+++KLuvPNOFRYWKjMzU4FAQOPGjfNcQ3z44Yfq2LFji9+L9oj0e8CJ3mmr3/bu3aumpqaovvd//OMfE/K9j3e/8+fP17e//W3NmDFDP/jBD9SrVy917NhRd955Z7sGb1/72td0yy23aMmSJSovL1dNTY2qqqq0cOHCkHVLUmFhYYv7aOsK4bE+71j7rVOnTmGD1EAgoD59+rTZPLFKVC+2td8jR45o7969IRdQiLbfOnXqFPb/hpM/k2MNHjxYxpg27xfvleUnTJigbt260W9oE4M3l/Tq1UuBQEBr1qxp8Sostlwi+oQTTtD27dvDtm/btk2S2nVFvptuukkvvviiVqxYoaFDh0b9dS39w7ZXr1464YQT9Pzzz7f4Nc1HHJt/EW7durXVQV9GRkbIm9o227VrV4vPOdI/ttuz1liceOKJrR71bn7cLl26RBxoRfOzjPR84t3vY489pkGDBmnZsmUh+27pex+L5ldU/eQnP9FHH32k3/zmNzp48KBuuOGGsHX99Kc/jXh1okiD8eavj+V5tzaQOfZzzUGyffv2sCDftm1bTPuOxtGPd6z2PN7xxx+vDh06xPR3SKTvxY4dO8L2sWPHjpADA07+TI514403RnXxhWiOtkdijIk7/AB4R6y/+yL9/Se1PNyRpI8//ljPPvus5syZo9tuuy3kMfbs2RNyXy80xIknnqimpibt2LGj1X90p6ent/h9jHSgONZ+a+/34GhZWVnq2LFjVN/7IUOG6N57723x880HsloT6fnEu9/HHntMY8aM0aJFi0K279u3r821tOb444/X1VdfraVLl+qee+7Ro48+qoyMDH3lK18JWbckPfnkk2GvfI9GrM871n47fPiwPvzww5DhmzFGO3bsCBsWOtlvTvZiW13YoUOHsDMGWuu3vn37BrcfPnw47P9HJ38mx7rkkkuielXolClTtGTJkqj3ezT6DdFg8OaSK6+8Uvfff78++OADfelLX3J7ORFdcsklKi8v15tvvqlzzz03uH3p0qUKBAIqKiqK+LXNw8Ojj6o2+/73v69HH31Uv/zlL/Vf//Vf7V7nlVdeqccff1xNTU06//zzI95v7Nix6tixoxYtWqQRI0ZEvN/AgQP1t7/9LWTbv/71L/3zn/9s17AxlrXGori4WL/61a/0z3/+U6effnrEx73vvvt0wgknaNCgQY48bnv3GwgElJaWFvILdMeOHS1e2e3YV/m15YYbbtADDzyg3/72t1qyZIlGjBihM844I/j5UaNG6bjjjlNNTY1uvvnmmNYtJe77KSl4GsBjjz0WEmlVVVV69913dccddzj6eCNGjFCXLl302GOPBa9GLH02oH7ppZdafVVga7p166bzzz9fTz31lH74wx+qS5cukj67Atdjjz2mfv36tXmKxRe+8AVlZGTo17/+dchpDGvXrtX7778fMnhL5M9k7ty5Uf05iWdwLknr1q3Txo0bNXPmzLi+HoB3xPK7T5JefPFF7dy5M3gwqKmpScuWLdMpp5wS8dVSgUBAxpiwA7mPPPKImpqaQrZ5oSGKi4tVXl6uRYsWad68eRHv11K/vfTSS2poaEjaWqPVpUsXXXTRRXriiSd07733RuzLK6+8UitWrNApp5wS9dsjRKM9+w0EAmF/tv72t7/p9ddfDzmw3dq/BSK54YYb9Lvf/U4rVqzQY489pgkTJoS8Fc1ll12mTp066d///ndUb3txrER9P6XP/t30wAMP6LHHHtPs2bOD23//+9+rsbGxzavAxypRvXj66aerb9+++s1vfqNbbrkl+HdVY2Ojfv/73wevdNqaMWPGSJJ+/etfq6CgILj9d7/7XdhVcxP5M3n44YejGgjH+++7J598Uvv37494EB9oxuDNJaNGjdJNN92kG264QevXr9eFF16obt26afv27frzn/+ss88+W9/85jfdXqZmz56tpUuX6oorrtC8efOUm5urP/3pT1q4cKG++c1vtvqP5ub3Yli8eLF69OihjIwMDRo0SC+99JLuvfdeTZw4MezUqvT0dJ1zzjkxr/PLX/6yfv3rX2vcuHH61re+pfPOO0+dO3fW1q1b9fLLL+vqq6/WhAkTNHDgQH3ve9/TD37wAx04cEBf+cpX1LNnT9XU1GjXrl3By3hPnjxZ1113nUpKSnTNNdfo/fff1wMPPNDqe3A4vdZYzJs3T88995wuvPBCfe9739PZZ5+tjz76SM8//7zKysp0xhlnaNasWfr973+vCy+8ULNnz9aQIUN05MgR1dbWatWqVfr2t78d1yCwPfttvox6SUmJJk6cqC1btugHP/iBTjrpJG3cuDHkvmeffbZeeeUV/fGPf9RJJ52kHj16RPwHgiSdccYZGjFihMrLy7VlyxYtXrw45PPdu3fXT3/6U02ZMkV79uzRxIkT1bt3b3344Yf661//qg8//DDsSK5Tz7stp59+um666Sb99Kc/VYcOHVRcXKz33ntPd955p/r37x8Sc0447rjjdOedd+p73/uerr/+en3lK1/R7t27dffddysjI0Nz5syJe9/l5eW69NJLVVRUpFtuuUVpaWlauHCh3n77bf32t79t86jl8ccfr1tuuUX33HOPpk+frmuvvVZbtmzR3Llzw05fSOTPZODAgS2edh+PoUOH6rrrrtOZZ56pjIwMvfHGG3rwwQfVp08f3XrrrY48BgB3vfTSS3rvvffCto8bNy6m333SZ/8gvPjii3XnnXeqW7duWrhwof7xj3/o8ccfj/j4mZmZuvDCC/Xggw+qV69eGjhwoF599VX93//9X9j76XqhIUaPHq3Jkyfrnnvu0c6dO3XllVcqPT1db731lrp27ar/9//+n6TP+u3OO+/UXXfdpYsuukg1NTV66KGH1LNnz5jXFu9aYzF//nxdcMEFOv/883Xbbbdp8ODB2rlzp/7whz/o4YcfVo8ePTRv3jxVVlZq5MiRmjlzpk4//XR98skneu+997RixQr97Gc/i+stVNqz3yuvvFI/+MEPNGfOHF100UX65z//qXnz5mnQoEEhQ5UePXooNzdXzzzzjC655BJlZWUF/zxGMnbsWPXr108lJSXasWNHyNkK0me/j+fNm6c77rhD//nPf3T55Zfr+OOP186dO/XGG2+oW7duwZ53+nm35dJLL9Vll12m7373u6qvr9eoUaP0t7/9TXPmzNE555yjyZMnx7XfSBLVix06dNADDzygr33ta7ryyiv1jW98QwcPHtSDDz6ojz76SPfff3+b+zjzzDN13XXXacGCBercubP+67/+S2+//bZ++MMfhr1dSSJ/Jq39WyEW77//vr761a/qy1/+sgYPHqxAIKBXX31VCxYs0FlnnaXp06c78jjwMfeu6+AvbV3F6oorrgi7MqkxxvziF78w559/vunWrZvp0qWLOeWUU8z1119v1q9fH7xPpKualpaWhmxrvtLLgw8+GLK9+UpXR192/qKLLjJnnXVW2Hpaeqz333/ffPWrXzUnnHCC6dy5szn99NPNgw8+GHbZZbVw1aIFCxaYQYMGmY4dOxpJ5tFHHw1e/aalj5a+R8eur1u3bi1+7tNPPzU//OEPzdChQ01GRobp3r27OeOMM8w3vvENs3HjxpD7Ll261BQWFgbvd84555hHH300+PkjR46YBx54wJx88skmIyPDDB8+3Lz00ksRr2p69PfWybXm5uaaK664Iuzrj12HMZ9dEffGG280ffr0MZ07dzY5OTnmS1/6ktm5c2fwPg0NDeb73/++Of30001aWprp2bOnOfvss83s2bNDrpjWkkh/ZmLZb0tXNb3//vvNwIEDTXp6ujnzzDPNz3/+8+CfkaNVV1ebUaNGma5du4ZcPbK1K7ktXrw4eEW4jz/+uMW1v/rqq+aKK64wWVlZpnPnzqZv377miiuuaPFnGu/zbun/V2Na/3ujqanJ/M///I857bTTTOfOnU2vXr3MddddF7x8fLPWfi4tae0xH3nkETNkyJDgc7n66qvDrpbW2p/rSNasWWMuvvji4N9zX/jCF4JXl41mXUeOHDHl5eWmf//+Ji0tzQwZMsT88Y9/bPH/g/b+TJLhy1/+shk8eLDp1q2b6dy5s8nNzTUzZsww27Ztc2U9AJzT1lXum6/gGO3vvua/qxYuXGhOOeUU07lzZ3PGGWeYX//61yH3a+l34datW80111xjjj/+eNOjRw9z+eWXm7fffrvF38VeaIimpibzv//7vyY/Pz94vxEjRoT8Pjl48KC59dZbTf/+/U2XLl3MRRddZKqrqyNe1bSl3zlOrDXS75iWvvc1NTXm2muvNSeccIJJS0szAwYMMFOnTjWffPJJ8D4ffvihmTlzphk0aJDp3LmzycrKMgUFBeaOO+4wDQ0NLa716MdsqSVj2e+xjX/w4EFzyy23mL59+5qMjAxz7rnnmuXLl7f474gXXnjBnHPOOSY9PT3k6pEtXdW02fe+9z0jyfTv3z/s3xvNli9fboqKikxmZqZJT083ubm5ZuLEieaFF15o9fsR7fOO9O8qY1q+wmizAwcOmO9+97smNzfXdO7c2Zx00knmm9/8ptm7d2/I/Vr7ubQk0mMmqheN+ex7fP7555uMjAzTrVs3c8kll5jXXnstqnUZ89mfk29/+9umd+/eJiMjw3zhC18wr7/+eov/H7T3Z5Joe/bsMRMmTDADBw40Xbp0MWlpaebUU081t956q/noo4+Svh54T8CYKN5tEAAAAEBSBQIBlZaW6qGHHnJ7KQAAIE68CyAAAAAAAACQACkxeHv22Wd1+umn69RTT9Ujjzzi9nIAAICF6AVv4ucGAACi4VYz+P5U08OHDysvL08vv/yyMjMzde655+ovf/mLsrKy3F4aAACwBL3gTfzcAABANNxsBt+/4u2NN97QWWedpb59+6pHjx4aN26cVq5c6fayAACARegFb+LnBgAAouFmM1g/eFu9erXGjx+vnJwcBQIBLV++POw+Cxcu1KBBg5SRkaGCggKtWbMm+Llt27apb9++wdv9+vXTBx98kIylAwCAJKEXvImfGwAAiIaXm8H6wVtjY6OGDh0a8WpOy5Yt06xZs3THHXforbfe0ujRo1VcXKza2lpJUktn0gYCgYSuGQAAJBe94E383AAAQDS83AydkvIo7VBcXKzi4uKIn58/f76mTZum6dOnS5IWLFiglStXatGiRSovL1ffvn1Dpphbt27V+eefH3F/Bw8e1MGDB4O3jxw5oj179uiEE04g5AAAVjDGaN++fcrJyVGHDok9hvbJJ5/o0KFDCX2MSIwxYb9709PTlZ6eHnbfZPcCnEHnAQAQis4L7zzJ461nPESSefrpp4O3Dx48aDp27GieeuqpkPvNnDnTXHjhhcYYYz799FMzePBgs3XrVlNfX28GDx5sdu3aFfEx5syZYyTxwQcffPDBh/UfW7ZsScjv22YHDhwwfbL7uPb8unfvHrZtzpw5ba5bSnwvwHnJ+LnReXzwwQcffHjlg86LTPJW61n/irfW7Nq1S01NTcrOzg7Znp2drR07dkiSOnXqpB/96EcqKirSkSNHdOutt+qEE06IuM/bb79dZWVlwdsff/yxBgwYoE3vbFKPHj0S80QQt90fH5AkfbB7v8srQVv+/dEnqtnb6PYy0IaqDxtUs22f28tAKxo+/EDm0090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v/764Larr75aZ511lubOnUuQxYChGwAArduyZYsyMzODtyMdBW3Nrl271NTUpOzs7JDt2dnZ2rFjR1T7+MIXvqBx48bpnHPOUYcOHXTJJZfoqquuinkttqPznEPn2Y+hGwC4y4nOk+xvvZgHb9u3b9fIkSPDto8cOVLbt293ZFGALQgyAHBXZmZmSJC1RyAQejTXGBO2rTX33nuv7r33XkfWYis6zxkM3exH4wGA+5zsPMne1ov54gqDBw/W7373u7Dty5Yt06mnnurIolIBQWY/ggwA/KFXr17q2LFj2BHPurq6sCOjqY7OAwAAXmN768X8ire7775bkyZN0urVqzVq1CgFAgH9+c9/1osvvthiqCEcQzekooa6rW4vAUCKSktLU0FBgSorKzVhwoTg9srKSl199dUursw+dF770Xn24+AqAPiL7a0X8+Dtmmuu0V/+8hf97//+r5YvXy5jjPLy8vTGG2/onHPOScQagaQjyADAWxoaGrRp06bg7c2bN6u6ulpZWVkaMGCAysrKNHnyZA0fPlwjRozQ4sWLVVtbqxkzZri4avvQee3D0M1+NB4AeJOXWy/mwZskFRQU6LHHHnN6LSmBIEsMJy8zT5ABgPesX79eRUVFwdtlZWWSpClTpmjJkiWaNGmSdu/erXnz5mn79u3Kz8/XihUrlJub69aSrUXnAQAA23i59eIavDU1NWn58uV69913FQgElJeXp6uuukodO3Z0en2+wtANAIDEGDNmjIwxrd6npKREJSUlSVqRd9F58aHz7MfBVQDwLi+3XsyDt02bNumKK67Q1q1bdfrpp8sYo3/961/q37+//vSnP+mUU05JxDqBpCDIAACpjM6LD0M3+9F4AAC3xHxV05kzZ+rkk0/Wli1b9Oabb+qtt95SbW2tBg0apJkzZyZijb5AkNmPIAMApDo6L3Y0HgAAaE3Mr3h79dVXtW7dOmVlZQW3nXDCCbr//vs1atQoRxfnFwSZ/Ri6AQBA58Gf6DwAgJtifsVbenq69u0LfyP7hoYGpaWlObIoG1RUVCgvL0+FhYXt2g9DNwAA4BV0XmzoPPsxdAMAuC3mwduVV16pm266SX/5y19kjJExRuvWrdOMGTN01VVXJWKNrigtLVVNTY2qqqrcXgoSjCADAOAzdF70GLrZj8YDANgg5sHbT37yE51yyikaMWKEMjIy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i85DLGg8b6AFAcBdMQ/eFixYkIBlwK84CuouQgsAEAs6D9GKduhG57mLFgQA98U8eJsyZUoi1gEfYujmLkILABArOg/RYOjmDbQgANgh5vd4q62tbfUDkDj1wE0NdVsJLQBIgAkTJuj444/XxIkTwz737LPP6vTTT9epp56qRx55xIXVOYPOQ1toPG+gBQEgdolqvZhf8TZw4EAFAoGIn29qaop1l/AZjoK6h8gCgMSZOXOmbrzxRv3yl78M2X748GGVlZXp5ZdfVmZmps4991x98YtfVFZWlksrjR+dh9bEMnSj89xDDwJAfBLVejEP3t56662Q259++qneeustzZ8/X/fee2+su4OPEGPuIrIAILGKior0yiuvhG1/4403dNZZZ6lv376SpHHjxmnlypX6yle+kuQVth+dh0joPG+gBwEgfolqvZhPNR06dGjIx/Dhw/X1r39dP/zhD/WTn/wk1t1Zq6KiQnl5eSosLHR7KZ7AaQfu4dRSAJBWr16t8ePHKycnR4FAQMuXLw+7z8KFCzVo0CBlZGSooKBAa9asceSxt23bFgwxSerXr58++OADR/adbHQeWkLneQM9CMDPvNx6MQ/eIjnttNNUVVXl1O5cV1paqpqaGl89p0SJNcY4CuocAgsAPtPY2KihQ4fqoYceavHzy5Yt06xZs3THHXforbfe0ujRo1VcXBzyvmUFBQXKz88P+9i2bVurj22MCdvW2umaXkTnpaZ1dfvoPA/gICyAVODl1ov5VNP6+tBfpsYYbd++XXPnztWpp54a6+7gccSYewgsAKng2O5IT09Xenp62P2Ki4tVXFwccT/z58/XtGnTNH36dEnSggULtHLlSi1atEjl5eWSpA0bNsS1xr59+4Yc9dy6davOP//8uPblNjoPzeJ5lRudl3z0IAAvi7bzJG+3XsyDt+OOOy5ssmeMUf/+/fX444/Hujt4GKcduIPAApBsVR82qFOX8CN9iXT4QKMkqX///iHb58yZo7lz58a0r0OHDmnDhg267bbbQraPHTtWa9eubdc6Jem8887T22+/rQ8++ECZmZlasWKF7rrrrnbv1w10HiQazytoQgBO8HrnSfa3XsyDt5dffjnkdocOHXTiiSdq8ODB6tQp5t3BozgK6g4CC0Cq2bJlizIzM4O3Ix0Fbc2uXbvU1NSk7OzskO3Z2dnasWNH1Pu57LLL9Oabb6qxsVH9+vXT008/rcLCQnXq1Ek/+tGPVFRUpCNHjujWW2/VCSecEPM6bUDnId6hG52XXDQhAD9wovMk+1sv5oK66KKLYv0S+AxDN3cQWABSUWZmZkiQtUdLr+SK5f05Vq5cGfFzV111la666qq412YLOi+1MXTzBpoQgF842XmSva0X16HLf//731qwYIHeffddBQIBnXnmmfrWt76lU045Ja5FwDsYuiUfcQUA7dOrVy917Ngx7IhnXV1d2JFR0HmpitNLvYEuBIBwtrdezFc1XblypfLy8vTGG29oyJAhys/P11/+8hedddZZqqysTMQaYQmCLPmIKwBov7S0NBUUFIR1SmVlpUaOHOnSquxE56Wm9jQeB1iThy4EgJbZ3noxv+Lttttu0+zZs3X//feHbf/ud7+rSy+91LHFwR6cepB8xBUARK+hoUGbNm0K3t68ebOqq6uVlZWlAQMGqKysTJMnT9bw4cM1YsQILV68WLW1tZoxY4aLq7YPnZd6GLp5A10IINV5ufViHry9++67+t3vfhe2/cYbb9SCBQucWJMVKioqVFFRoaamJreX4jqGbslFWAFA7NavX6+ioqLg7bKyMknSlClTtGTJEk2aNEm7d+/WvHnztH37duXn52vFihXKzc11a8lWovNSC0M3b6ANAcDbrRfz4O3EE09UdXW1Tj311JDt1dXV6t27t2MLc1tpaalKS0tVX1+vnj17ur0c13B6aXIRVgAQnzFjxsgY0+p9SkpKVFJSkqQVeROdlzpoPG+gDQHgM15uvZgHb1//+td100036T//+Y9GjhypQCCgP//5z/qf//kfffvb307EGuESjoImF2EFAHAbnZca2jt0o/OSgzYEAH+IefB25513qkePHvrRj36k22+/XZKUk5OjuXPnaubMmY4vEO5g6JY8RBUAwBZ0nv8xdPMG+hAA/CPmwVsgENDs2bM1e/Zs7dv32S/uHj16OL4wuIdTD5KHqAIA2ITO8zcazxvoQwDwlw6xfsGBAwe0f/9+SZ+F2J49e7RgwQKtWrXK8cUh+TgKmjxEFQDANnSefzkxdKPzEo8+BAD/iXnwdvXVV2vp0qWSpI8++kjnnXeefvSjH+nqq6/WokWLHF8gkoehW3I01G0lqgAAVqLz/ImhmzfQhwDgTzEP3t58802NHj1akvTkk0+q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5EgdPnzY788POTk5qqys1F//+le9/fbb3i6nxa5duya73a6cnByFh4dr5MiR2rt3ryIiIrxdGuDX6PP8B32ef6DP8230eb6JPs9/8RdvHnTt2jVdvXpVtbW1qq2tVZ8+fbxdkse89957mjhxot+fbK83zMnJyZKkiIgIv2/GAtHRo0d16NAhTZ482duleERwcLA6d+4sSbp69arq6ur8/i8l+vXrp4SEBElSnz59FBERoe+++867RXnAhAkT1LVrV2+X0Wr79u3TsGHD1L9/f3Xt2lWTJ0/W9u3bvV0WEBDo83wffZ5/oM/zffR5vok+z3+1m8Fbbm6upkyZosjISNlstib/lH7Dhg0aOHCgwsLClJiYqF27drl8/N69e2vp0qWKiYlRZGSkJk2apNtvv92DCRqzOtMPbd26VT/96U/drPjmrM509OhRdenSRVOnTtXIkSP1/PPPe7D6prXF81RRUaHExETdc8892rlzp4cqb1pb5Fm6dKkyMjI8VPHNtUWmixcvKj4+XlFRUVq2bJl69erloeqb1pbnh88//1z19fWKjo52s+rmtWUmb3E34+nTp9W/f3/H7aioKJWVlbVF6YBX0efR50n0eZ5An0efdyP6PM+hz2u/2s3graqqSvHx8Vq3bl2T27ds2aLFixdrxYoVKiwsVHJystLS0nTy5EnHPomJiRo+fHijr9OnT+vChQvKyspSaWmpysrKlJeXp9zcXL/OdF1FRYV2797dJr+VsjpTbW2tdu3apfXr1+uzzz5Tdna2srOz/TqTJJWWlqqgoECvvfaaZs2apYqKCr/N889//lODBw/W4MGDLctwo7Z4jrp37679+/fr+PHj+sc//qFz5875fSZJ+vbbbzVr1ixt3LjR0jxtmcmb3M3Y1G/YbTabpTUDvoA+jz6PPs8/8tDn+U8miT7P0+jz2jHTDkkymZmZDdbuuusuM3/+/AZrQ4cONcuXL3fpmFu3bjULFixw3F69erV54YUX3K7VVVZkum7z5s3m8ccfd7fEFrMiU15enklNTXXcXr16tVm9erXbtbrKyufpuvvvv9/k5+e3tsQWsSLP8uXLTVRUlBkwYIDp2bOnCQ8PN6tWrfJUyTfVFs/R/PnzzdatW1tbYotZlenq1asmOTnZbN682RNltoiVz1NOTo555JFH3C3Rba3JuHv3bjNt2jTHtkWL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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "NameError", + "evalue": "name 'derivs_helmholtz' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[10], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m order_plot \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m5\u001b[39m\n\u001b[0;32m----> 2\u001b[0m x_grid, y_grid, plot_me_hem \u001b[38;5;241m=\u001b[39m generate_error_grid(res\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, order_plot\u001b[38;5;241m=\u001b[39morder_plot, recur\u001b[38;5;241m=\u001b[39mrecur_helmholtz, derivs\u001b[38;5;241m=\u001b[39m\u001b[43mderivs_helmholtz\u001b[49m, n_initial\u001b[38;5;241m=\u001b[39mn_init_helm, n_order\u001b[38;5;241m=\u001b[39morder_helm)\n\u001b[1;32m 3\u001b[0m x_grid, y_grid, plot_me_lap \u001b[38;5;241m=\u001b[39m generate_error_grid(res\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, order_plot\u001b[38;5;241m=\u001b[39morder_plot, recur\u001b[38;5;241m=\u001b[39mrecur_laplace, derivs\u001b[38;5;241m=\u001b[39mderivs_laplace, n_initial\u001b[38;5;241m=\u001b[39mn_init_lap, n_order\u001b[38;5;241m=\u001b[39morder_lap)\n\u001b[1;32m 5\u001b[0m fig, (ax1, ax2) \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39msubplots(\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m, figsize\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m15\u001b[39m, \u001b[38;5;241m8\u001b[39m))\n", + "\u001b[0;31mNameError\u001b[0m: name 'derivs_helmholtz' is not defined" + ] } ], "source": [ @@ -239,22 +273,22 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Text(0.5, 1.0, 'Error vs Order (Odd Only), Slope: 149.36134613278')" + "" ] }, - "execution_count": 46, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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557j+PHj1tvn77//PpGRkfTq1avCseXfZzc6Z32R6dC3oEuXLtYBuVFRUZjNZj766CO+/PJLHnjgAev90Tlz5lQ5DbdTp051GmNVfyVW1lb+A2A0Gisce+HCBevrqc65KzN58mSeeuopjh49yqlTpzAajTa/uAFCQ0P55z//CcCvv/7KmjVr+Otf/0pJSQkffPBBpefV6XR07dqV7777jsLCwkrHuezcuZO0tDQefPDBG76GFi1aUFZWRmZmps0vhWt/+TRv3hytVsuECROq7GVo3779Da9XU5s2beLChQv8+OOP1l4WoMrxQNd7Tdf+8rvap59+Svv27Vm9erVN/NcOAm3VqhVmsxmTyVTlB1f599CXX35JaGjo9V/gdaxcuZInnniCSZMm8cEHH9TofS0fMHyjdUVatmzJ/v37axKmVfPmzRkzZgyffPIJr732GitXrsTd3d3mw7m23pvasH79ejQaDYMGDQLU2DQaDdu2bbN+MF7t2rqb+Xo8/PDDzJo1i1WrVjF//nz+/e9/M3bsWJslJar7PXizyn9+//73v5Odnc3nn39OcXGxze+l8q/Le++9x1133VXpecp7ulu2bMmSJUtYsmQJqamprF+/ntmzZ5Oenk58fHyVMURFRREfH8+5c+cqHedy7tw59u3bh8FgsCZUt2rw4MHo9XqWLl2Kt7c3+/fv59NPP6302PLE7NrPAHuRHpda9Oabb9K8eXNeeeUVLBYLnTp14o477uDQoUOV/kXWu3dvfHx87B22VWRkJB4eHhW+ec+dO8emTZuqnDVUXQ8//DDu7u6sWrWKVatW0aZNG4YNG1bl8R07duTPf/4z4eHhN/zgePnll7l06RIvvPBChbaCggJmzJiBp6fndQetlSsfhFm+xkW5zz//3Kbs6elJVFQUBw4coFu3bpV+fa+XENyq8l/g135o/OMf/6jyOVW9put9eGs0GlxdXW0+MEwmU4UZHeVd68uXL6/yXMOHD8fZ2ZmTJ09W+TNxI6tWreKJJ57gscce46OPPqpR0pKQkMBHH31Ev379GDBgwHWP7dy5M5mZmdedqVEdkydP5sKFC8TGxvLpp58ybtw4mjVrZm2vjfemNqxcuZK4uDgefvhha2/myJEjURSF8+fPVxpXeHh4ja/XvHlzxo4dyyeffMI333yDyWSqcJuout+DoP483EzPwOTJ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", "text/plain": [ "
" ] @@ -264,43 +298,52 @@ } ], "source": [ - "loc = np.array([1e-8, 1])\n", - "orders_even = [i for i in range(5, 15, 2)]\n", - "err = []\n", - "for o in orders_even:\n", - " err.append(compute_error_coord(recur_laplace, loc, o, derivs_laplace, n_init_lap, order_lap))\n", + "orders_odd = [i for i in range(6, 20, 2)]\n", + "err1 = []\n", + "err2 = []\n", + "for o in orders_odd:\n", + " err1.append(compute_error_coord(recur_laplace, np.array([1e-4, 1]), o, derivs_laplace, n_init_lap, order_lap))\n", + " err2.append(compute_error_coord(recur_laplace, np.array([1e-8, 1]), o, derivs_laplace, n_init_lap, order_lap))\n", + "\n", + "orders_odd = np.array(orders_odd)\n", + "err1 = np.array(err1, dtype=float)\n", + "err2 = np.array(err2, dtype=float)\n", "\n", - "orders_even = np.array(orders_even)\n", - "err = np.array(err, dtype=float)\n", + "coefficients1 = np.polyfit(np.log10(orders_odd), np.log10(err1), 1)\n", + "coefficients2 = np.polyfit(np.log10(orders_odd), np.log10(err2), 1)\n", + "polynomial1 = np.poly1d(coefficients1)\n", + "log10_y_fit1 = polynomial1(np.log10(orders_odd))\n", + "plt.plot(orders_odd, 10**log10_y_fit1, '*-')\n", + "plt.scatter(orders_odd, err1, label='1e-4')\n", "\n", - "coefficients = np.polyfit(np.log10(orders_even), np.log10(err), 1)\n", - "polynomial = np.poly1d(coefficients)\n", - "log10_y_fit = polynomial(np.log10(orders_even))\n", - "plt.plot(orders_even, 10**log10_y_fit, '*-')\n", - "plt.scatter(orders_even, err)\n", + "polynomial2 = np.poly1d(coefficients2)\n", + "log10_y_fit2 = polynomial2(np.log10(orders_odd))\n", + "plt.plot(orders_odd, 10**log10_y_fit2, '*-')\n", + "plt.scatter(orders_odd, err2, label='1e-8')\n", "plt.xscale('log')\n", "plt.yscale('log')\n", - "plt.title(\"Error vs Order (Odd Only), Slope: \"+str(coefficients[0]))" + "plt.title(\"Rel Error vs Order Laplace 2D (Even Derivatives Only)\")\n", + "plt.legend()" ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Text(0.5, 1.0, 'Error vs Order (Even Only), Slope: 170.3029259672917')" + "" ] }, - "execution_count": 47, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAG2CAYAAACzoLZvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABoRElEQVR4nO3deVxUVf8H8M8wwCACg4jsi7iDCChIiSsuKCqmpqI9LqX2pNmTaLaolWkaZqlYKj5UT7aLVpoaLpgW5pIbuOECiQLKIvsm28z5/UHMzxFQwJFh+bxfr3nVnHvm3u8dBubrOefer0QIIUBERETUyOloOwAiIiKi2mDSQkRERE0CkxYiIiJqEpi0EBERUZPApIWIiIiaBCYtRERE1CQwaSEiIqImgUkLERERNQlMWoiIiKhJYNJSja1bt0IikdT4+P3337UdotYIIfD9999j8ODBaNOmDWQyGTp06IB58+YhKSnpsfd/8+ZNSCQSbN269fGDraWjR49CJpPh1q1bqrZBgwbV+PNv3759g8VWXydPnsTEiRNhbW0NfX19WFlZYcKECThx4sRj7bd9+/Z4/vnn6/y63377DUZGRrh9+/ZjHT8pKQkvv/wyunTpglatWsHMzAw9evTAiy++qPb5e++99yCRSB7rWNry559/Yvbs2fD09IRMJoNEIsHNmzer9HvU36nVq1er9U9PT8fzzz8Pc3NzGBoaok+fPvjtt99qFdMPP/yAAQMGwNLSEjKZDDY2NggICMDx48er7b9t2zZ4eHjAwMAANjY2CAoKQkFBgVqfw4cPY+bMmejWrRtat24NW1tbPPPMMzh79myV/Qkh8Mknn6Bbt26QyWSwtrbG3LlzkZ2drdbv+vXrWLRoETw9PWFqagozMzP07dsXP/74Y53ev9TUVLW+paWlePfdd+Hk5AR9fX04Ojpi8eLFuHfvXrXnf+nSJUycOBHt2rWDTCZD+/bt8fLLL6v1ad++fY3HNzAwUPVLSUnB22+/jT59+sDc3BwmJibw9PREWFgYFApFlWOfOnUKw4cPh7GxMYyMjODr64tjx45V6fekPmdPmm6DHq2J+fLLL9GtW7cq7S4uLlqIRvuUSiWee+45hIeHY8qUKdi6dSvkcjkuXLiAjz76CN9//z327t2Lvn37ajvUWhNCICgoCC+++CIcHR3VtnXo0AHfffddldfIZLKGCq9ePv30UwQFBcHb2xtr1qyBo6MjEhMTsWnTJvTr1w8bNmzAK6+80qAxDRkyBN7e3liyZAm++uqreu0jOTkZvXr1gqmpKV577TV07doVubm5iI2Nxfbt23Hjxg3Y29trOPKG99tvv+HQoUPo2bMnTExMavxH0qhRo6pNQt99911ERkZi3LhxqraSkhIMGTIEOTk52LBhAywsLLBp0yaMGDEChw4dwsCBAx8aU2ZmJvr27Yv58+fD3NwcKSkpWLduHQYMGIDffvtN7fXfffcdpk6ditmzZ2P9+vW4fv063nzzTcTGxuLgwYOqfqGhocjMzMT8+fPh4uKCu3fvYu3atXj66adx4MABDB48WNV30aJFCAkJwaJFizB06FDExsbi3XffxenTp3HixAno6ekBAA4ePIhff/0V06ZNQ+/evVFeXo7w8HBMnDgRy5cvx7vvvlvl3Kr7O9+2bVu151OmTEFERATeffdd9O7dGydOnMDKlStx+fJl7N69W63vkSNHMGrUKPTv3x9btmyBubk5EhMTER0drdZv586dKCkpUWtLTExEYGCg2s/u7Nmz+PrrrzF9+nS888470NPTw759+zB37lycPHkS//vf/1R9T58+jQEDBsDb2xvffPMNhBBYs2YNhgwZgiNHjqBPnz6qvk/ic9YgBFXx5ZdfCgDi9OnTdX6tUqkURUVF1W4rKioSSqXysWIrLCx8rNc/jg8++EAAEKtXr66yLTU1VTg6OgpLS0uRnZ390P087BwSEhIEAPHll18+ZrQVHvWeR0RECADi6tWrau0DBw4U3bt310gMDenPP/8UOjo6YvTo0aKsrExtW1lZmRg9erTQ0dERf/75Z7327+joKGbMmFGv1/74449CKpWKxMTEer3+3XffFQDEjRs3qt2uUChU/79s2TLRVP+83X8eH330kQAgEhISavXagoICYWRkJPr166fWvmnTJgFAHD9+XNVWVlYmXFxchLe3d73izMnJEXp6emLatGmqtvLycmFtbS38/PzU+n733XcCgIiIiFC1paWlVdlnfn6+sLS0FEOGDFG1JScnC6lUKv7zn/+o9f3+++8FABEWFqZqu3v3brW/76NGjRKGhoaiuLhY1Vbbv/MnTpwQAMTatWvV2iv/Hh48eFDVVlhYKKytrcWoUaPq9bf+vffeEwDEoUOHVG1ZWVmitLS0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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAG2CAYAAAB1ZSLWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACAkElEQVR4nO3deVxU5f7A8c+w7yAimwouueHgvi8ZmgiaS6v3dlOz5bZ7zfxV3hbTFjKra7fSsluarXq7uRWglOZe7gWi5oL7AALCsMg2c35/HBkZAWUZGAa+79fLFz7POXPOd2CY+fJ9nnMejaIoCkIIIYQQAgA7awcghBBCCNGYSHIkhBBCCFGOJEdCCCGEEOVIciSEEEIIUY4kR0IIIYQQ5UhyJIQQQghRjiRHQgghhBDlSHIkhBBCCFGOJEdCCCGEEOVIcmQhy5cvR6PRmP45ODgQFBTEX/7yF44dO1arY/7yyy9oNBp++eWXWj2+fDzX/rv//vtrdcym4vDhw9x///2EhITg5OSEn58fY8eOJS4uziLHv+WWW7jlllsscqzqnEur1TbIucq7//77adeuXYOftzp0Oh0vvvgigwcPxs/PDy8vL/r27cvSpUsxGAxm+177u+vi4kJgYCARERHExMSQnp5eo3OvWLGCVq1akZuba9afn5/Pm2++Se/evfHw8MDd3Z1evXrxxhtvkJ+fX+3jazQaXnnllRvu98orr6DRaG643/3332/2/N3d3WnXrh0TJkxg2bJlFBUVVTu2mmiI18/ixYtZvnx5hf5Tp06h0Wgq3dZY1Nd7VG3fm/7880+cnJzYv39/nc5vKyQ5srBly5axa9cufvrpJ5588knWrVvHsGHDuHTpklXiueuuu9i1a1eFfy+99JJV4mkMvv/+e3r37s3u3bt56aWX+Omnn1iyZAkAY8eO5dlnn7VyhKKu9u3bx4oVKxg1ahQrVqzgf//7HyNGjOCxxx7j4YcfrvQxZb+7CQkJfPjhh/Tq1YsFCxbQrVs3fvrpp2qdt6CggH/+858899xzeHp6mvrT0tIYNGgQ8+fPZ8yYMaxevZo1a9YQHR3Na6+9xqBBg0hLS7PIc68NV1dX03vDDz/8wPz583F3d+fhhx+mb9++nDt3zuLnfOmll1i9erXFj1teVclRUFAQu3btYty4cfV6/tpqjO9RnTt35m9/+xtPP/10g5/bKhRhEcuWLVMAZc+ePWb98+bNUwDls88+q/ExN2/erADK5s2baxUToDzxxBO1emx+fn6l/UajUSkoKKjVMcsUFBQoRqOxTseorePHjytubm5Kv379lLy8vArbH330UQVQvvnmm+se50bPYcSIEcqIESPqGq6iKDf+no8YMULp3r27Rc5VE9OmTVNCQ0Mb/LzVkZWVpRQXF1fof+KJJxRAOXPmjKmvqt9dRVGU06dPK23btlU8PT2V1NTUG5538eLFiouLi3Lp0iWz/sjISMXBwUHZtm1bhcds27ZNcXBwUMaMGVONZ6b+Xs+dO/eG+82dO1epzlv8tGnTFHd390q3bdiwQXF0dFQGDhxYrdiqo6r3lvrQvXt3i/0eNhRLvUdVpS7vTXv37lUAZceOHbV6vC2RylE969evH0CFvwr37t3LhAkT8PX1xcXFhd69e7Nq1SprhMj999+Ph4cHiYmJREZG4unpyahRowC1hP/kk0/y0Ucf0a1bN5ydnfn8888B2L59O6NGjcLT0xM3NzeGDBnCjz/+aHbssiGLjRs38sADD9CqVSvc3NwqLdVfvHgRJyenSqtaR44cQaPR8O9//xtQ/0KfPXs27du3x8XFBV9fX/r168c333xz3ef6r3/9i4KCAt5//33c3d0rbH/nnXfw8fHh9ddfr9ZzUBSFt956i9DQUFxcXOjTp0+VZW+9Xm+K2cnJidatWzNz5swKQyrX+57X1t69e/nLX/5Cu3btcHV1pV27dvz1r3/l9OnTZvuVPdeEhASmT5+Or68v7u7ujB8/npMnT97wPB9++CE333wz/v7+uLu7Ex4ezltvvUVJSUmFfePj4xk1ahTe3t64ubnRrVs3YmJiKsRdm9+TFi1a4OjoWKF/wIABANWuhISEhPDOO++Qm5vLxx9/fMP9lyxZwvjx4/Hx8TF7Dhs3buTBBx9k2LBhFR4zbNgwHnjgATZs2MC+fftM/Xq9nocffpiWLVvi4eFBVFQUf/75Z6Xn/fHHH+nVqxfOzs60b9+et99+u1rP70YiIyN5+OGH+e2339i6davZtpUrVzJ48GDc3d3x8PBgzJgxHDhwwGyf6723XDus1rt3b4YPH14hBoPBQOvWrbnjjjtMffPmzWPgwIH4+vri5eVFnz59+PTTT1HKraPerl07Dh06xJYtW0xDhmXnu3ZYbc2aNWg0Gn7++ecK51+yZAkajYY//vjD1Fed16U13qM2b97MY489hp+fHy1btuSOO+7gwoULVZ5LURQ6derEmDFjKmzLy8vD29ubJ554wtTXt29funXrxkcffXTd59AUSHJUz1JSUgC1JFlm8+bNDB06lOzsbD766CPWrl1Lr169mDx5ssXHwBVFobS0tMK/8m8iAMXFxUyYMIGRI0eydu1a5s2bZ9q2Zs0alixZwssvv8yGDRsYPnw4W7ZsYeTIkeTk5PDpp5/yzTff4Onpyfjx41m5cmWFOB544AEcHR354osv+O677yr94GrVqhW33XYbn3/+OUaj0WzbsmXLcHJy4m9/+xsAs2bNYsmSJcyYMYP4+Hi++OIL7r77bjIzM6/7/UhISCAgIIBBgwZVut3NzY3IyEiSkpJITU294XOYN28ezz33HKNHj2bNmjWmYZujR4+aPbagoIARI0bw+eefM2PGDOLi4njuuedYvnw5EyZMqPDzqOx7XhenTp2iS5cuLFq0iA0bNrBgwQJ0Oh39+/cnIyOjwv4PPvggdnZ2fP311yxatIjdu3dzyy23kJ2dfd3znDhxgnvvvZcvvviCH374gQcffJCFCxfyyCOPmO336aefMnbsWIxGIx999BHr169nxowZZklLffyebNq0CQcHB7PfxxsZO3Ys9vb2FZKDa507d47ExEQiIiLM+hMSEgCYNGlSlY8t21a2r6IoTJo0iS+++IJnnnmG1atXM2jQIKKjoys89ueff2bixIl4enry7bffsnDhQlatWsWyZcuq/RyvZ8KECQBmz/+NN97gr3/9K2FhYaxatYovvviC3Nxchg8fTnJystnjr/feUt706dPZvn17hTmaGzdu5MKFC0yfPt3Ud+rUKR555BFWrVrF999/zx133MFTTz3Fq6++atpn9erVdOjQgd69e5uGDKsaxrvtttvw9/ev9Hu2fPly+vTpQ48ePYDqvy6t8R710EMP4ejoyNdff81bb73FL7/8wn333VfluTQaDU899RQJCQkVvu8rVqxAr9ebJUegzlmKi4ur8J7V5FivaNW0lJXmf/31V6WkpETJzc1V4uPjlcDAQOXmm29WSkpKTPt27dpV6d27t1mfoijKbbfdpgQFBSkGg0FRFMsMq1X174svvjDtN23atCqH/gDF29tbycrKMusfNGiQ4u/vr+Tm5pr6SktL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", "text/plain": [ "
" ] @@ -310,23 +353,123 @@ } ], "source": [ - "loc = np.array([1e-8, 1])\n", - "orders_even = [i for i in range(6, 15, 2)]\n", - "err = []\n", - "for o in orders_even:\n", - " err.append(compute_error_coord(recur_laplace, loc, o, derivs_laplace, n_init_lap, order_lap))\n", + "err1 = []\n", + "err2 = []\n", + "orders_odd = [i for i in range(5, 20, 2)]\n", + "\n", + "for o in orders_odd:\n", + " err1.append(compute_error_coord(recur_laplace, np.array([1e-4, 1]), o, derivs_laplace, n_init_lap, order_lap))\n", + " err2.append(compute_error_coord(recur_laplace, np.array([1e-8, 1]), o, derivs_laplace, n_init_lap, order_lap))\n", "\n", - "orders_even = np.array(orders_even)\n", - "err = np.array(err, dtype=float)\n", + "orders_even = np.array(orders_odd)\n", + "err1 = np.array(err1, dtype=float)\n", + "err2 = np.array(err2, dtype=float)\n", "\n", - "coefficients = np.polyfit(np.log10(orders_even), np.log10(err), 1)\n", - "polynomial = np.poly1d(coefficients)\n", - "log10_y_fit = polynomial(np.log10(orders_even))\n", - "plt.plot(orders_even, 10**log10_y_fit, '*-')\n", - "plt.scatter(orders_even, err)\n", + "coefficients1 = np.polyfit(np.log10(orders_even), np.log10(err1), 1)\n", + "coefficients2 = np.polyfit(np.log10(orders_even), np.log10(err2), 1)\n", + "polynomial1 = np.poly1d(coefficients1)\n", + "log10_y_fit1 = polynomial1(np.log10(orders_even))\n", + "plt.plot(orders_even, 10**log10_y_fit1, '*-')\n", + "plt.scatter(orders_even, err1, label='1e-4')\n", + "\n", + "polynomial2 = np.poly1d(coefficients2)\n", + "log10_y_fit2 = polynomial2(np.log10(orders_even))\n", + "plt.plot(orders_even, 10**log10_y_fit2, '*-')\n", + "plt.scatter(orders_even, err2, label='1e-8')\n", "plt.xscale('log')\n", "plt.yscale('log')\n", - "plt.title(\"Error vs Order (Even Only), Slope: \"+str(coefficients[0]))" + "plt.title(\"Rel. Error vs Order Laplace 2D (Odd Derivatives Only)\")\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "def get_slope(loc, orders):\n", + " err = []\n", + " for o in orders:\n", + " err.append(compute_error_coord(recur_laplace, loc, o, derivs_laplace, n_init_lap, order_lap))\n", + " \n", + " err = np.array(err, dtype=float)\n", + " coefficients = np.polyfit(np.log10(orders), np.log10(err), 1)\n", + "\n", + " return coefficients[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "ratios = np.array([1e-8,1e-7,1e-6,1e-5,1e-4,1e-3,1e-2,1e-1])\n", + "slopes = []\n", + "for r in ratios:\n", + " slopes.append(get_slope(np.array([r, 1]), np.array([i for i in range(6, 20, 2)])))" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Slope of Best Fit vs ratio of y0/x0 for even derivatives')" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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6NGjTUxMjLNvx44dzTXXXONW05kzZ0xUVJQZNmyYs23atGmmW7dupnHjxiYoKMh06tTJ/OMf/zDFxcXOPmXtZ0s+r2RdlexrqrJvMebs0eWEhATTuHFjY7fbTceOHc3ChQtd3nfy5Ennfrhk++rSpUuZP1t1iYBSgZJDtY8++qj5/PPPzenTp8vtW3rnfurUKdO+fXvTqFEj88ILL5g1a9aYZ555xvj5+ZnBgwe7vFeSiY6ONm3atDHz5883y5YtM4MGDXL7Qs3IyDDR0dEmJibGvPXWW2bt2rXmz3/+s7Hb7WbMmDHnHc/vfvc7I8k88sgjZtWqVebNN980TZo0MdHR0c4vsh07dpj777/f5bTNuQGmtJIvvczMTFNYWGgKCgrM3r17zciRI43dbjdff/21s+/JkydNx44dTXh4uHnxxRfN2rVrzSuvvGJCQkJMv379nD/AW7duNTabzdx+++1m5cqVZv369WbWrFnm7rvvNsacDTklAeLpp592nqqpqM6SgLJw4UJTWFjoMp3771ASULKyspxfZq+99przM8o77FpYWGgiIiLMnXfe6TavW7dupnPnzs7XV1xxhbnsssvM+++/bzZt2mQ++ugjM2nSpPOeSho9erTzCyApKcmsW7fOrF692hhz9gs2KSnJLFu2zGzatMnMmTPHdOjQwVxxxRXO7fbgwYPm0UcfNZLMxx9/7BxTdna2MaZm23BZStbfqFGjzCeffGLee+89c+mll5qQkBDnabXdu3ebp59+2rlDTklJMfv27St3mZ06dTJXX321W3vXrl1N165dna8dDocZPny4W78VK1YYSc71VuKGG24wd9xxh/P10aNHTbNmzUz37t2d62/06NGmQYMGLtt0jx49XD63RFpampFk3nrrrXLHUtHYK7PuSmoqb5so7zNDQkJMu3btzHvvvWfWrFljJk2aZHx8fMy0adOc/YYNG2aio6NNUVGRy/sff/xxExAQYI4ePWqMqfw+qeRLt0WLFmbQoEFmyZIlZsmSJaZdu3amcePG5pdffim35pK6GzZs6NxHLl261AwcONA0b97cLaA8++yzxmazmfvuu8+sWLHCfPzxx6Znz56mUaNGLqcwK1p3pQPKK6+8YiS5rHtjjFm5cqWRZJYtW+ZsGzNmjHnnnXdMcnKySU5ONn/+859NgwYNTGJiorPPjh07zKWX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H/7wB73yyisun/P222/ro48+cjndMGfOHEVFRTk/uyq8te4aNmyovn376quvvlL79u1dglZZrrzySnXv3l2zZs1SUVGRCgoK3MJ2TfZJVdG3b18tW7aszH3kuQYOHCg/Pz/t37+/UqduqqIk3L388svasmWLvvzyS7efMZvNJj8/P5cQd+rUKb3//vtuy7Pb7R7dt1xxxRVq1aqVdu3apenTp1d6uU2bNtWYMWO0a9cuvfzyy9a6Tb2Or4GxtHbt2pn4+Hjz+uuvm/Xr15u1a9eaF154wURGRpqLLrrI5Wr+8u6ACAoKMi+++KJJTk42U6dONf7+/lW6i2fBggXOfocPHzYxMTGmdevW5vXXXzfr1q0zn3zyiXnttdfMjTfeWOFdLMacvYvHZrOZCRMmmNWrV5u33nrLREREmOjoaOdV+cZU7yLZkjt+UlJSzJIlS8xNN91kJJnf//73zr55eXmmU6dOplmzZuavf/2rSU5ONqtXrzZvv/22GT58uPn888+NMcY888wz5t577zVz5841GzduNEuWLDF9+/Y1/v7+Ji0tzRhz9o6gBg0amKuvvtps2LDBpKammp9++qncOqt6m7ExxvznP/8xkszQoUPNli1bTGpqqst6Ks+oUaNMREREmRfV7dq1y1x77bXmb3/7m/nXv/5l1q1bZ5566inj4+Pj1re0ktsiSzt9+rRp2bKliYmJMfPmzTOrVq0y48ePN5dffrnbmErWw7hx48zWrVtNamqqycnJMcbUbBsuS8mdKHfffbdZuXKlef/9981ll13mdidKVS6SLVFycbfKuf0yPz/ftG3b1kRHR5sPPvjAJCcnm2HDhrk9qO3mm282Q4YMcXv/mjVrjI+Pj8u6K7nws/TF3/379zeNGzc2f//738369evN2LFjjSQzd+7c846jvLFXdt2Vt02UZ/fu3aZx48amW7duZtasWWbDhg1m2bJl5sUXXzR9+/Z16//WW28ZSaZZs2amV69ebvMru0869zbj0kpvo2X55ptvTIMGDUybNm3MggULzLJly8zAgQNNdHS020Xf06dPN35+fmbcuHFm8eLFZuPGjWbhwoVm0qRJLo89qGjdlb5ItsR3333nXB+lL1o1xph169YZSea2224za9asMfPnzzddunQxrVq1cqtz9OjRxm63mwULFpht27Y5v0/Kuki2REX7FmPO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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(ratios, slopes)\n", + "plt.xscale('log')\n", + "plt.title(\"Slope of Best Fit vs ratio of y0/x0 for even derivatives\")" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "coefficients_new = np.polyfit(np.log10(ratios), slopes, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-24.8655584 , -1.18514632])" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coefficients_new" ] }, { From 11f0e3148e00e26e272410b8ddf299944fbe1468 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Mon, 23 Dec 2024 10:27:52 -0800 Subject: [PATCH 123/143] Stickw grid --- test/order4.png | Bin 42912 -> 42921 bytes test/order6.png | Bin 47212 -> 47591 bytes test/order7.png | Bin 46876 -> 46733 bytes test/plot_normal_recurrence.ipynb | 100 ++++++++++-------------------- test/plot_taylor_recurrence.ipynb | 88 ++++++++++++++------------ 5 files changed, 81 insertions(+), 107 deletions(-) diff --git a/test/order4.png b/test/order4.png index 24b497f98a6330a83eb40702cc6846b6f14f8ac6..a7552342b6619a1f62e18c3a617e84808c76bea2 100644 GIT binary patch literal 42921 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 Mv`zKqhM$iAAFz(YTmS$7 diff --git a/test/order6.png b/test/order6.png index ffa85eb997b5fe79867198f64a3ee1b9a8774199..fcaf79f69fda64612bf22666d3458bd06b341e0c 100644 GIT binary patch literal 47591 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 literal 47212 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 diff --git a/test/order7.png b/test/order7.png index 1c188aa17238469f314452cd068a604944530978..bfc3d0ff2a4181fb92254b480be92d349f816d2e 100644 GIT binary patch literal 46733 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 literal 46876 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 G^1lG5kc(yj diff --git a/test/plot_normal_recurrence.ipynb b/test/plot_normal_recurrence.ipynb index a1959368..7da9577e 100644 --- a/test/plot_normal_recurrence.ipynb +++ b/test/plot_normal_recurrence.ipynb @@ -68,47 +68,15 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs\n", - "derivs_laplace = compute_derivatives(20)" + "l_max = 15\n", + "derivs_laplace = compute_derivatives(l_max)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[5], line 12\u001b[0m\n\u001b[1;32m 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m [sp\u001b[38;5;241m.\u001b[39mdiff(g_x_y,\n\u001b[1;32m 9\u001b[0m var_t[\u001b[38;5;241m0\u001b[39m], i)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(p)]\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n\u001b[0;32m---> 12\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m \u001b[43mcompute_derivatives_h2d\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m8\u001b[39;49m\u001b[43m)\u001b[49m\n", - "Cell \u001b[0;32mIn[5], line 8\u001b[0m, in \u001b[0;36mcompute_derivatives_h2d\u001b[0;34m(p)\u001b[0m\n\u001b[1;32m 5\u001b[0m abs_dist \u001b[38;5;241m=\u001b[39m sp\u001b[38;5;241m.\u001b[39msqrt((var[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m+\u001b[39m\n\u001b[1;32m 6\u001b[0m (var[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 7\u001b[0m g_x_y \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39mj\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m4\u001b[39m) \u001b[38;5;241m*\u001b[39m hankel1(\u001b[38;5;241m0\u001b[39m, k \u001b[38;5;241m*\u001b[39m abs_dist)\n\u001b[0;32m----> 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_x_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n", - "Cell \u001b[0;32mIn[5], line 8\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 5\u001b[0m abs_dist \u001b[38;5;241m=\u001b[39m sp\u001b[38;5;241m.\u001b[39msqrt((var[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m+\u001b[39m\n\u001b[1;32m 6\u001b[0m (var[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m-\u001b[39mvar_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 7\u001b[0m g_x_y \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39mj\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m4\u001b[39m) \u001b[38;5;241m*\u001b[39m hankel1(\u001b[38;5;241m0\u001b[39m, k \u001b[38;5;241m*\u001b[39m abs_dist)\n\u001b[0;32m----> 8\u001b[0m derivs_helmholtz \u001b[38;5;241m=\u001b[39m [\u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_x_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_t\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39msubs(var_t[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(p)]\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m derivs_helmholtz\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:2481\u001b[0m, in \u001b[0;36mdiff\u001b[0;34m(f, *symbols, **kwargs)\u001b[0m\n\u001b[1;32m 2417\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2418\u001b[0m \u001b[38;5;124;03mDifferentiate f with respect to symbols.\u001b[39;00m\n\u001b[1;32m 2419\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2478\u001b[0m \n\u001b[1;32m 2479\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2480\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(f, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdiff\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m-> 2481\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiff\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2482\u001b[0m kwargs\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 2483\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _derivative_dispatch(f, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/expr.py:3575\u001b[0m, in \u001b[0;36mExpr.diff\u001b[0;34m(self, *symbols, **assumptions)\u001b[0m\n\u001b[1;32m 3573\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdiff\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39msymbols, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39massumptions):\n\u001b[1;32m 3574\u001b[0m assumptions\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevaluate\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m-> 3575\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_derivative_dispatch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msymbols\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43massumptions\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1908\u001b[0m, in \u001b[0;36m_derivative_dispatch\u001b[0;34m(expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1906\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtensor\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray_derivatives\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ArrayDerivative\n\u001b[1;32m 1907\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ArrayDerivative(expr, \u001b[38;5;241m*\u001b[39mvariables, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1908\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDerivative\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mvariables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/function.py:1474\u001b[0m, in \u001b[0;36mDerivative.__new__\u001b[0;34m(cls, expr, *variables, **kwargs)\u001b[0m\n\u001b[1;32m 1472\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexprtools\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m factor_terms\n\u001b[1;32m 1473\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msimplify\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msimplify\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m signsimp\n\u001b[0;32m-> 1474\u001b[0m expr \u001b[38;5;241m=\u001b[39m factor_terms(\u001b[43msignsimp\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 1475\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/simplify/simplify.py:405\u001b[0m, in \u001b[0;36msignsimp\u001b[0;34m(expr, evaluate)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n\u001b[1;32m 404\u001b[0m \u001b[38;5;66;03m# get rid of an pre-existing unevaluation regarding sign\u001b[39;00m\n\u001b[0;32m--> 405\u001b[0m e \u001b[38;5;241m=\u001b[39m \u001b[43mexpr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreplace\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mis_Mul\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mand\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m!=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 406\u001b[0m e \u001b[38;5;241m=\u001b[39m sub_post(sub_pre(e))\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e, (Expr, Relational)) \u001b[38;5;129;01mor\u001b[39;00m e\u001b[38;5;241m.\u001b[39mis_Atom:\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1749\u001b[0m, in \u001b[0;36mBasic.replace\u001b[0;34m(self, query, value, map, simultaneous, exact)\u001b[0m\n\u001b[1;32m 1746\u001b[0m expr \u001b[38;5;241m=\u001b[39m v\n\u001b[1;32m 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n\u001b[0;32m-> 1749\u001b[0m rv \u001b[38;5;241m=\u001b[39m \u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrec_replace\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1750\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (rv, mapping) \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mmap\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m rv\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36mBasic.replace..walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36mBasic.replace..walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", - " \u001b[0;31m[... skipping similar frames: at line 1724 (15 times), Basic.replace..walk at line 1724 (15 times)]\u001b[0m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36mBasic.replace..walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[43m[\u001b[49m\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1724\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1724\u001b[0m newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[43mwalk\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mF\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m 1726\u001b[0m rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1734\u001b[0m, in \u001b[0;36mBasic.replace..walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m 1732\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rv \u001b[38;5;241m==\u001b[39m e \u001b[38;5;129;01mand\u001b[39;00m e \u001b[38;5;241m!=\u001b[39m newargs[i]:\n\u001b[1;32m 1733\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n\u001b[0;32m-> 1734\u001b[0m rv \u001b[38;5;241m=\u001b[39m \u001b[43mF\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrv\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:1740\u001b[0m, in \u001b[0;36mBasic.replace..rec_replace\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 1739\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrec_replace\u001b[39m(expr):\n\u001b[0;32m-> 1740\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43m_query\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexpr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1741\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mor\u001b[39;00m result \u001b[38;5;241m==\u001b[39m {}:\n\u001b[1;32m 1742\u001b[0m v \u001b[38;5;241m=\u001b[39m _value(expr, result)\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/simplify/simplify.py:405\u001b[0m, in \u001b[0;36msignsimp..\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\n\u001b[1;32m 404\u001b[0m \u001b[38;5;66;03m# get rid of an pre-existing unevaluation regarding sign\u001b[39;00m\n\u001b[0;32m--> 405\u001b[0m e \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;28;01mlambda\u001b[39;00m x: x\u001b[38;5;241m.\u001b[39mis_Mul \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;241;43m-\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m!=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m, \u001b[38;5;28;01mlambda\u001b[39;00m x: \u001b[38;5;241m-\u001b[39m(\u001b[38;5;241m-\u001b[39mx))\n\u001b[1;32m 406\u001b[0m e \u001b[38;5;241m=\u001b[39m sub_post(sub_pre(e))\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e, (Expr, Relational)) \u001b[38;5;129;01mor\u001b[39;00m e\u001b[38;5;241m.\u001b[39mis_Atom:\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:520\u001b[0m, in \u001b[0;36mBasic.__ne__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 511\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__ne__\u001b[39m(\u001b[38;5;28mself\u001b[39m, other):\n\u001b[1;32m 512\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"``a != b`` -> Compare two symbolic trees and see whether they are different\u001b[39;00m\n\u001b[1;32m 513\u001b[0m \n\u001b[1;32m 514\u001b[0m \u001b[38;5;124;03m this is the same as:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[38;5;124;03m but faster\u001b[39;00m\n\u001b[1;32m 519\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 520\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mother\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/basic.py:500\u001b[0m, in \u001b[0;36mBasic.__eq__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 497\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_Number \u001b[38;5;129;01mand\u001b[39;00m other\u001b[38;5;241m.\u001b[39mis_Number) \u001b[38;5;129;01mand\u001b[39;00m (\n\u001b[1;32m 498\u001b[0m \u001b[38;5;28mtype\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mtype\u001b[39m(other)):\n\u001b[1;32m 499\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m--> 500\u001b[0m a, b \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_hashable_content(), \u001b[43mother\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_hashable_content\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 501\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m a \u001b[38;5;241m!=\u001b[39m b:\n\u001b[1;32m 502\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n", - "File \u001b[0;32m~/miniforge3/envs/inteq/lib/python3.11/site-packages/sympy/core/expr.py:150\u001b[0m, in \u001b[0;36mExpr._hashable_content\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 146\u001b[0m exp \u001b[38;5;241m=\u001b[39m exp\u001b[38;5;241m.\u001b[39msort_key(order\u001b[38;5;241m=\u001b[39morder)\n\u001b[1;32m 148\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m expr\u001b[38;5;241m.\u001b[39mclass_key(), args, exp, coeff\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_hashable_content\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 151\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return a tuple of information about self that can be used to\u001b[39;00m\n\u001b[1;32m 152\u001b[0m \u001b[38;5;124;03m compute the hash. If a class defines additional attributes,\u001b[39;00m\n\u001b[1;32m 153\u001b[0m \u001b[38;5;124;03m like ``name`` in Symbol, then this method should be updated\u001b[39;00m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;124;03m accordingly to return such relevant attributes.\u001b[39;00m\n\u001b[1;32m 155\u001b[0m \u001b[38;5;124;03m Defining more than _hashable_content is necessary if __eq__ has\u001b[39;00m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;124;03m been defined by a class. See note about this in Basic.__eq__.\"\"\"\u001b[39;00m\n\u001b[1;32m 157\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_args\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], + "outputs": [], "source": [ "def compute_derivatives_h2d(p):\n", " k = 1\n", @@ -121,7 +89,8 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs_helmholtz\n", - "derivs_helmholtz = compute_derivatives_h2d(8)" + "h_max = 8\n", + "derivs_helmholtz = compute_derivatives_h2d(h_max)" ] }, { @@ -204,19 +173,18 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 22, "metadata": {}, "outputs": [ { - "ename": "NameError", - "evalue": "name 'derivs_helmholtz' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[10], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m order_plot \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m5\u001b[39m\n\u001b[0;32m----> 2\u001b[0m x_grid, y_grid, plot_me_hem \u001b[38;5;241m=\u001b[39m generate_error_grid(res\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, order_plot\u001b[38;5;241m=\u001b[39morder_plot, recur\u001b[38;5;241m=\u001b[39mrecur_helmholtz, derivs\u001b[38;5;241m=\u001b[39m\u001b[43mderivs_helmholtz\u001b[49m, n_initial\u001b[38;5;241m=\u001b[39mn_init_helm, n_order\u001b[38;5;241m=\u001b[39morder_helm)\n\u001b[1;32m 3\u001b[0m x_grid, y_grid, plot_me_lap \u001b[38;5;241m=\u001b[39m generate_error_grid(res\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, order_plot\u001b[38;5;241m=\u001b[39morder_plot, recur\u001b[38;5;241m=\u001b[39mrecur_laplace, derivs\u001b[38;5;241m=\u001b[39mderivs_laplace, n_initial\u001b[38;5;241m=\u001b[39mn_init_lap, n_order\u001b[38;5;241m=\u001b[39morder_lap)\n\u001b[1;32m 5\u001b[0m fig, (ax1, ax2) \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39msubplots(\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m, figsize\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m15\u001b[39m, \u001b[38;5;241m8\u001b[39m))\n", - "\u001b[0;31mNameError\u001b[0m: name 'derivs_helmholtz' is not defined" - ] + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABN4AAALACAYAAABM/b/3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACtNElEQVR4nOzde3hU5b3//c9wSMIpaESC4RBQPMUIaIgWECW6RYOim4qlBxEUamnij0JqrdYqSNW4tWXT1kCl7kqpbaVaxdaiEI9QkRrQtNXYFlo0IIfIQUMCgoT7+cMnI8NkkpnJmln3WvN+XVeuy1mZrLknQfLmu2bNChhjjAAAAAAAAAA4qoPbCwAAAAAAAAD8iMEbAAAAAAAAkAAM3gAAAAAAAIAEYPAGAAAAAAAAJACDNwAAAAAAACABGLwBAAAAAAAACcDgDQAAAAAAAEgABm8AAAAAAABAAjB4AwAAAAAAABKAwZtDlixZokAgoPXr17f4+SuvvFIDBw6Ma99Tp06N+2sjGTNmjPLz8x3dZyAQ0Ny5c4O3a2pqNHfuXL333nuOPg68a+DAgZo6dWpcX3vfffdp+fLlYdtfeeUVBQIBvfLKK+1aWyr56U9/qsGDBystLU2BQEAfffSR20uKy5gxYzRmzBi3lxGzuXPnKhAIhH1kZGS4vTQA7dRWDyYKvwuRSMc2frT279+vuXPntvjnsvn/Ff6dEL3vf//7GjBggDp16qTjjjvO7eXErT3/HnDT1KlTW+y3M844w+2lwQM6ub0A+FdNTY3uvvtujRkzxvHBIVLPfffdp4kTJ+q///u/Q7afe+65ev3115WXl+fOwjymurpaM2fO1PTp0zVlyhR16tRJPXr0cHtZKen5559Xz549g7c7dOBYGADAP/bv36+7775bksIOlF1xxRV6/fXXddJJJ7mwMu955plndO+99+qOO+5QcXGx0tPT3V5SSurSpYteeumlsG1AWxi8wfP279+vrl27ur2MoE8//VSBQECdOoX/72XbWtvLhueTmZmpL3zhC66uIVbGGH3yySct/qI+cOCAMjIyFAgE4t5/az+Xd955R5L09a9/Xeedd17cjxHt47WHE9+LaLX2M0mUgoIC9erVK2mPBwA2saEhjtba7xzb1tpeBw4ccH1YcOKJJ+rEE090dQ2xampq0uHDh1scejnxZ6S1n8vbb78tSZo5c6Z69+7drsdplqg/18n8/6W1n0kidOjQwXP/7oAdOLzuImOMFi5cqGHDhqlLly46/vjjNXHiRP3nP/9p82sDgYBuvvlmPfroozr99NPVpUsXDR8+XOvWrZMxRg8++KAGDRqk7t276+KLL9amTZta3E9VVZVGjx6trl276uSTT9b999+vI0eOhNyntrZW1113nXr37q309HSdeeaZ+tGPfhR2v6MtWbJE1157rSSpqKgo+FLcJUuWBE+HaOmjrVfGTZ06Vd27d9ff//53jR07Vj169NAll1wiSTp06JDuuecenXHGGUpPT9eJJ56oG264QR9++GHYfn7zm99oxIgR6t69u7p3765hw4bp//7v/4Kfj/QS6GNPbWt+Lr/61a/07W9/W3379lV6ero2bdrkyFoHDhyoK6+8Us8//7zOPfdcdenSRWeccYZ+8YtfhK3tgw8+0E033aT+/fsrLS1NOTk5mjhxonbu3Bm8T319vW655RYNGjRIaWlp6tu3r2bNmqXGxsZWv+/Nzz0/P1+rV6/WyJEj1bVrV914443t2u8nn3yib3/72xo2bJh69uyprKwsjRgxQs8880zI/QKBgBobG/XLX/4y+Gel+edw7Ok1CxYsUCAQaPHP/He/+12lpaVp165dwW0vvPCCLrnkEmVmZqpr164aNWqUXnzxxTa/H7E87+b/X3/2s5/pzDPPVHp6un75y18GT7NYtWqVbrzxRp144onq2rWrDh48qCNHjuiBBx4I/hnp3bu3rr/+em3dujXqn8uxxowZo+uuu06SdP755ysQCIT8Of/FL36hoUOHKiMjQ1lZWZowYYLefffdkH209uc6kj//+c+65JJL1KNHD3Xt2lUjR47Un/70p5D7tPa9MMbogQceUG5urjIyMnTuuefqueeeS8jPBAASLdrffdLnf1c9/PDDOu2005Senq68vDw9/vjjbT7O+vXr9eUvf1kDBw5Uly5dNHDgQH3lK1/R+++/H3ZfLzTEkSNH9NOf/jTYzccdd5y+8IUv6A9/+EPI96ulUyKP7brWfuc4sdbmn9uvfvUrnXnmmeratauGDh2qZ599Nmxt//jHP/SVr3xF2dnZSk9P14ABA3T99dfr4MGDwfvs2LFD3/jGN9SvXz+lpaVp0KBBuvvuu3X48OE2v/fNLfnUU0/pnHPOUUZGRvBVaPHu98MPP1RJSYny8vLUvXt39e7dWxdffLHWrFkTvM97770XHKzdfffdwX5r/jkce6rprFmz1K1bN9XX14c93qRJk5Sdna1PP/00uG3ZsmUaMWKEunXrpu7du+uyyy7TW2+91eb3I9rn/d577ykQCOiBBx7QPffco0GDBik9PV0vv/xy8C0j3nzzTU2cOFHHH3+8TjnlFEmf/f99++23h/wZKS0tDXtbj9Z+LscaOHCgvv/970uSsrOzQ/6cJ6IXm/3hD3/QiBEj1LVrV/Xo0UOXXnqpXn/99ZD7tPa9+PTTT3XrrbeqT58+6tq1qy644AK98cYbCfmZANYzcMSjjz5qJJl169aZTz/9NOxj3LhxJjc3N+Rrvv71r5vOnTubb3/72+b55583v/nNb8wZZ5xhsrOzzY4dO4L3mzJlStjXSjK5ublm5MiR5qmnnjJPP/20Oe2000xWVpaZPXu2ufrqq82zzz5rfv3rX5vs7GwzZMgQc+TIkeDXX3TRReaEE04wp556qvnZz35mKisrTUlJiZFkfvnLXwbvV1dXZ/r27WtOPPFE87Of/cw8//zz5uabbzaSzDe/+c2wNc2ZMyf4dffdd5+RZCoqKszrr79uXn/9dVNXV2c+/vjj4O3mj6VLl5rOnTubcePGtfp9njJliuncubMZOHCgKS8vNy+++KJZuXKlaWpqMpdffrnp1q2bufvuu01lZaV55JFHTN++fU1eXp7Zv39/cB933nmnkWS++MUvmieeeMKsWrXKzJ8/39x5553B++Tm5popU6aEPf5FF11kLrroouDtl19+2Ugyffv2NRMnTjR/+MMfzLPPPmt2797tyFpzc3NNv379TF5enlm6dKlZuXKlufbaa40k8+qrrwbvt3XrVnPSSSeZXr16mfnz55sXXnjBLFu2zNx4443m3XffNcYY09jYaIYNGxZynx//+MemZ8+e5uKLLw7589GSiy66yGRlZZn+/fubn/70p+bll182r776akz7Pfb7+tFHH5mpU6eaX/3qV+all14yzz//vLnllltMhw4dQv4cvv7666ZLly5m3LhxwT8z77zzTsjP4OWXXzbGGPPhhx+atLQ0c8cdd4Ss//DhwyYnJ8d88YtfDG771a9+ZQKBgPnv//5v89RTT5k//vGP5sorrzQdO3Y0L7zwQqvfj1ied/OfkSFDhpjf/OY35qWXXjJvv/128O+Nvn37mptuusk899xz5sknnzSHDx82N910k5Fkbr75ZvP888+bn/3sZ+bEE080/fv3Nx9++GGbP5eWvPPOO+b73/++kWQeffRR8/rrr5tNmzYZY0zw/9evfOUr5k9/+pNZunSpOfnkk03Pnj3Nv/71r+A+Iv25juSVV14xnTt3NgUFBWbZsmVm+fLlZuzYsSYQCJjHH388eL/Wvhdz5swxksy0adPMc889ZxYvXmz69u1r+vTpE/L/oxM/k0iamppa/Lv92I/Dhw9H3Eez5ufTp08f06FDB9O7d28zefJk8/7777f5tQDs1vx3WVVVVcT7RPu7z5jP/q7q37+/ycvLM7/97W/NH/7wB3P55ZcbSeaJJ54I3u/Y34XGGPPEE0+Yu+66yzz99NPm1VdfNY8//ri56KKLzIknnhjye8QrDTF58mQTCATM9OnTzTPPPGOee+45c++995of//jHId+v5hY92rH90drvHCfWKskMHDjQnHfeeeZ3v/udWbFihRkzZozp1KmT+fe//x28X3V1tenevbsZOHCg+dnPfmZefPFF89hjj5kvfelLpr6+3hhjzPbt203//v1Nbm6uefjhh80LL7xgfvCDH5j09HQzderUVr/vzc/9pJNOMieffLL5xS9+YV5++WXzxhtvxLTfY7+v//jHP8w3v/lN8/jjj5tXXnnFPPvss2batGmmQ4cOwT+Dn3zyiXn++eeDv7+b+625O5p/Bps3bzbGGPPXv/7VSDI///nPQx577969Jj093ZSVlQW33XvvvSYQCJgbb7zRPPvss+app54yI0aMMN26dQv2YSTRPu/NmzcH/4wUFRWZJ5980qxatcps3rw5+Hs8NzfXfPe73zWVlZVm+fLl5siRI+ayyy4znTp1MnfeeadZtWqV+eEPf2i6detmzjnnHPPJJ5+0+XNpyZtvvmmmTZtmJJnnn3/evP7662bLli3GGJOQXjTGmF//+tdGkhk7dqxZvny5WbZsmSkoKDBpaWlmzZo1wftF+l4Y81kzBgIB853vfCf4762+ffuazMzMkP8fnfiZRHL48OGo+q2pqSniPppNmTLFdOjQwWRnZ5sOHTqYvn37mtLSUrN79+42vxZg8OaQ5l8erX0cPTx7/fXXjSTzox/9KGQ/W7ZsMV26dDG33nprcFukwVufPn1MQ0NDcNvy5cuNJDNs2LCQX/4LFiwwkszf/va34LaLLrrISDJ/+ctfQvabl5dnLrvssuDt2267rcX7ffOb3zSBQMD885//DFnT0b+Un3jiibAIbMnOnTvNySefbM466yyzd+/eVu87ZcoUI8n84he/CNn+29/+1kgyv//970O2V1VVGUlm4cKFxhhj/vOf/5iOHTuar33ta60+TqyDtwsvvNDxtTavIyMjI+Qf5AcOHDBZWVnmG9/4RnDbjTfeaDp37mxqamoiPqfy8nLToUOHsH8MPPnkk0aSWbFiRcSvbX7uksyLL74Y934jfV+bNf9ynDZtmjnnnHNCPtetW7cWv7alf2x88YtfNP369Qv5JbpixQojyfzxj380xnz2j4isrCwzfvz4kP01NTWZoUOHmvPOOy/iOmN93pJMz549zZ49e0Lu2/z3xvXXXx+y/d133zWSTElJScj2v/zlL0aS+d73vhfcFunnEklL/yjcu3dvcLB5tNraWpOenm6++tWvBrdF+nMdyRe+8AXTu3dvs2/fvuC2w4cPm/z8fNOvX7/g31WRvhd79+41GRkZZsKECSHbX3vtNSMp5P9HJ34mkTQ/77Y+jl5PJEuXLjX33nuvWbFihXnppZfM/fffb7Kyskx2drbZunVrVOsBYKdoBm/Hau13nyTTpUuXkAOyhw8fNmeccYYZPHhwcFtLvwtbepyGhgbTrVu3kGGVFxpi9erVRlLYQbVjxTp4O/Z3jhNrbV5HdnZ2cHhmjDE7duwwHTp0MOXl5cFtF198sTnuuONMXV1dxOf0jW98w3Tv3j3s4MwPf/hDI6nNQVNubq7p2LFjSLPHut9I39dmzX+GL7nkkpDf1x9++GHErz128GaMMeeee64ZOXJkyP0WLlxoJJm///3vxpjP2qRTp07m//2//xdyv3379pk+ffqYL33pSxHXGcvzbh7ynHLKKebQoUMh920eNt11110h25sHjQ888EDI9mXLlhlJZvHixcFtkX4ukTQ/5tHDtET1YlNTk8nJyTFnn312SEvv27fP9O7dO+RnFOl70by22bNnh2xvHugd/f+jEz+TSJqfd1sfrf37pNn8+fPN/PnzzapVq8yqVavMHXfcYbp27WrOOOOMkM4FWsKppg5bunSpqqqqwj4uuOCCkPs9++yzCgQCuu6663T48OHgR58+fTR06NCorkpVVFSkbt26BW+feeaZkqTi4uKQ96do3n7sqQV9+vQJe4+nIUOGhNzvpZdeUl5eXtj9pk6dKmNM2JtLxqqxsVFXXHGFPvnkEz333HNRX6HnmmuuCbn97LPP6rjjjtP48eNDvp/Dhg1Tnz59gt/PyspKNTU1qbS0tF3rbms9Tqy12bBhwzRgwIDg7YyMDJ122mkhP6fnnntORUVFwZ91S5599lnl5+dr2LBhIY972WWXRX0ltOOPP14XX3yxo/t94oknNGrUKHXv3l2dOnVS586d9X//939hpzjG4oYbbtDWrVv1wgsvBLc9+uij6tOnj4qLiyVJa9eu1Z49ezRlypSQdR85ckSXX365qqqqWj19JtbnffHFF+v4449vcV/H/hlpfsn8sac7n3feeTrzzDPDToVt6ecSi9dff10HDhwIe7z+/fvr4osvbvHU29b+zDdrbGzUX/7yF02cOFHdu3cPbu/YsaMmT56srVu36p///Ger+3399df1ySef6Gtf+1rI9pEjRyo3Nzdkm5M/k2PNnTu3xb/bj/14+OGH29zX5MmT9b3vfU/FxcUqKirSd7/7XT333HP68MMP9cADD0S1HgDeFsvvvksuuUTZ2dnB2x07dtSkSZO0adOmsNPJjtbQ0KDvfve7Gjx4sDp16qROnTqpe/fuamxsDHkcLzRE89sLJKvfnOidoqKikIsXZWdnq3fv3sF+279/v1599VV96UtfavW9zp599lkVFRUpJycn5HGbe+bVV19t83kOGTJEp512mqP7/dnPfqZzzz1XGRkZwT/DL774Yrv7be3atSFt8Oijj6qwsFD5+fmSpJUrV+rw4cO6/vrrQ9adkZGhiy66qM0/i7E+76uuukqdO3ducV/H/vlp/nfRsT117bXXqlu3bmE91dLPJRaJ6sV//vOf2rZtmyZPnhxy4afu3bvrmmuu0bp167R///6Qr4nUssf225e+9KWw98F28mdyrIcffjiqfovmqr2zZ8/W7Nmzdemll+rSSy/VPffco6VLl+of//iHfv7zn0e1HqQuLq7gsDPPPFPDhw8P296zZ09t2bIleHvnzp0yxoSE1NFOPvnkNh8rKysr5HZaWlqr2z/55JOQ7SeccELYPtPT03XgwIHg7d27d7f4vms5OTnBz8fr8OHDmjhxov71r39p9erV6t+/f1Rf17VrV2VmZoZs27lzpz766KPgcz1W83t6Nb+HWr9+/eJed0siXZGpPWttFs3P6cMPP2zzOe3cuVObNm2K+Ivq2MdtSUvPsz37feqpp/SlL31J1157rb7zne+oT58+6tSpkxYtWtTi+9hFq7i4WCeddJIeffRRjR07Vnv37tUf/vAHfetb31LHjh2D65akiRMnRtzPnj17QobbR4v1ebd21a5jP9f8/1VLX5OTkxM2RG/vFcHaerzKysqQbS39uW7J3r17ZYyJuN+jH7tZpO9Fnz59wvZx7DYnfybHGjBgQFR/b8R7IYjzzjtPp512mtatWxfX1wPwjlh/97X299/u3bsj/t301a9+VS+++KLuvPNOFRYWKjMzU4FAQOPGjfNcQ3z44Yfq2LFji9+L9oj0e8CJ3mmr3/bu3aumpqaovvd//OMfE/K9j3e/8+fP17e//W3NmDFDP/jBD9SrVy917NhRd955Z7sGb1/72td0yy23aMmSJSovL1dNTY2qqqq0cOHCkHVLUmFhYYv7aOsK4bE+71j7rVOnTmGD1EAgoD59+rTZPLFKVC+2td8jR45o7969IRdQiLbfOnXqFPb/hpM/k2MNHjxYxpg27xfvleUnTJigbt260W9oE4M3l/Tq1UuBQEBr1qxp8Sostlwi+oQTTtD27dvDtm/btk2S2nVFvptuukkvvviiVqxYoaFDh0b9dS39w7ZXr1464YQT9Pzzz7f4Nc1HHJt/EW7durXVQV9GRkbIm9o227VrV4vPOdI/ttuz1liceOKJrR71bn7cLl26RBxoRfOzjPR84t3vY489pkGDBmnZsmUh+27pex+L5ldU/eQnP9FHH32k3/zmNzp48KBuuOGGsHX99Kc/jXh1okiD8eavj+V5tzaQOfZzzUGyffv2sCDftm1bTPuOxtGPd6z2PN7xxx+vDh06xPR3SKTvxY4dO8L2sWPHjpADA07+TI514403RnXxhWiOtkdijIk7/AB4R6y/+yL9/Se1PNyRpI8//ljPPvus5syZo9tuuy3kMfbs2RNyXy80xIknnqimpibt2LGj1X90p6ent/h9jHSgONZ+a+/34GhZWVnq2LFjVN/7IUOG6N57723x880HsloT6fnEu9/HHntMY8aM0aJFi0K279u3r821tOb444/X1VdfraVLl+qee+7Ro48+qoyMDH3lK18JWbckPfnkk2GvfI9GrM871n47fPiwPvzww5DhmzFGO3bsCBsWOtlvTvZiW13YoUOHsDMGWuu3vn37BrcfPnw47P9HJ38mx7rkkkuielXolClTtGTJkqj3ezT6DdFg8OaSK6+8Uvfff78++OADfelLX3J7ORFdcsklKi8v15tvvqlzzz03uH3p0qUKBAIqKiqK+LXNw8Ojj6o2+/73v69HH31Uv/zlL/Vf//Vf7V7nlVdeqccff1xNTU06//zzI95v7Nix6tixoxYtWqQRI0ZEvN/AgQP1t7/9LWTbv/71L/3zn/9s17AxlrXGori4WL/61a/0z3/+U6effnrEx73vvvt0wgknaNCgQY48bnv3GwgElJaWFvILdMeOHS1e2e3YV/m15YYbbtADDzyg3/72t1qyZIlGjBihM844I/j5UaNG6bjjjlNNTY1uvvnmmNYtJe77KSl4GsBjjz0WEmlVVVV69913dccddzj6eCNGjFCXLl302GOPBa9GLH02oH7ppZdafVVga7p166bzzz9fTz31lH74wx+qS5cukj67Atdjjz2mfv36tXmKxRe+8AVlZGTo17/+dchpDGvXrtX7778fMnhL5M9k7ty5Uf05iWdwLknr1q3Txo0bNXPmzLi+HoB3xPK7T5JefPFF7dy5M3gwqKmpScuWLdMpp5wS8dVSgUBAxpiwA7mPPPKImpqaQrZ5oSGKi4tVXl6uRYsWad68eRHv11K/vfTSS2poaEjaWqPVpUsXXXTRRXriiSd07733RuzLK6+8UitWrNApp5wS9dsjRKM9+w0EAmF/tv72t7/p9ddfDzmw3dq/BSK54YYb9Lvf/U4rVqzQY489pgkTJoS8Fc1ll12mTp066d///ndUb3txrER9P6XP/t30wAMP6LHHHtPs2bOD23//+9+rsbGxzavAxypRvXj66aerb9+++s1vfqNbbrkl+HdVY2Ojfv/73wevdNqaMWPGSJJ+/etfq6CgILj9d7/7XdhVcxP5M3n44YejGgjH+++7J598Uvv37494EB9oxuDNJaNGjdJNN92kG264QevXr9eFF16obt26afv27frzn/+ss88+W9/85jfdXqZmz56tpUuX6oorrtC8efOUm5urP/3pT1q4cKG++c1vtvqP5ub3Yli8eLF69OihjIwMDRo0SC+99JLuvfdeTZw4MezUqvT0dJ1zzjkxr/PLX/6yfv3rX2vcuHH61re+pfPOO0+dO3fW1q1b9fLLL+vqq6/WhAkTNHDgQH3ve9/TD37wAx04cEBf+cpX1LNnT9XU1GjXrl3By3hPnjxZ1113nUpKSnTNNdfo/fff1wMPPNDqe3A4vdZYzJs3T88995wuvPBCfe9739PZZ5+tjz76SM8//7zKysp0xhlnaNasWfr973+vCy+8ULNnz9aQIUN05MgR1dbWatWqVfr2t78d1yCwPfttvox6SUmJJk6cqC1btugHP/iBTjrpJG3cuDHkvmeffbZeeeUV/fGPf9RJJ52kHj16RPwHgiSdccYZGjFihMrLy7VlyxYtXrw45PPdu3fXT3/6U02ZMkV79uzRxIkT1bt3b3344Yf661//qg8//DDsSK5Tz7stp59+um666Sb99Kc/VYcOHVRcXKz33ntPd955p/r37x8Sc0447rjjdOedd+p73/uerr/+en3lK1/R7t27dffddysjI0Nz5syJe9/l5eW69NJLVVRUpFtuuUVpaWlauHCh3n77bf32t79t86jl8ccfr1tuuUX33HOPpk+frmuvvVZbtmzR3Llzw05fSOTPZODAgS2edh+PoUOH6rrrrtOZZ56pjIwMvfHGG3rwwQfVp08f3XrrrY48BgB3vfTSS3rvvffCto8bNy6m333SZ/8gvPjii3XnnXeqW7duWrhwof7xj3/o8ccfj/j4mZmZuvDCC/Xggw+qV69eGjhwoF599VX93//9X9j76XqhIUaPHq3Jkyfrnnvu0c6dO3XllVcqPT1db731lrp27ar/9//+n6TP+u3OO+/UXXfdpYsuukg1NTV66KGH1LNnz5jXFu9aYzF//nxdcMEFOv/883Xbbbdp8ODB2rlzp/7whz/o4YcfVo8ePTRv3jxVVlZq5MiRmjlzpk4//XR98skneu+997RixQr97Gc/i+stVNqz3yuvvFI/+MEPNGfOHF100UX65z//qXnz5mnQoEEhQ5UePXooNzdXzzzzjC655BJlZWUF/zxGMnbsWPXr108lJSXasWNHyNkK0me/j+fNm6c77rhD//nPf3T55Zfr+OOP186dO/XGG2+oW7duwZ53+nm35dJLL9Vll12m7373u6qvr9eoUaP0t7/9TXPmzNE555yjyZMnx7XfSBLVix06dNADDzygr33ta7ryyiv1jW98QwcPHtSDDz6ojz76SPfff3+b+zjzzDN13XXXacGCBercubP+67/+S2+//bZ++MMfhr1dSSJ/Jq39WyEW77//vr761a/qy1/+sgYPHqxAIKBXX31VCxYs0FlnnaXp06c78jjwMfeu6+AvbV3F6oorrgi7MqkxxvziF78w559/vunWrZvp0qWLOeWUU8z1119v1q9fH7xPpKualpaWhmxrvtLLgw8+GLK9+UpXR192/qKLLjJnnXVW2Hpaeqz333/ffPWrXzUnnHCC6dy5szn99NPNgw8+GHbZZbVw1aIFCxaYQYMGmY4dOxpJ5tFHHw1e/aalj5a+R8eur1u3bi1+7tNPPzU//OEPzdChQ01GRobp3r27OeOMM8w3vvENs3HjxpD7Ll261BQWFgbvd84555hHH300+PkjR46YBx54wJx88skmIyPDDB8+3Lz00ksRr2p69PfWybXm5uaaK664Iuzrj12HMZ9dEffGG280ffr0MZ07dzY5OTnmS1/6ktm5c2fwPg0NDeb73/++Of30001aWprp2bOnOfvss83s2bNDrpjWkkh/ZmLZb0tXNb3//vvNwIEDTXp6ujnzzDPNz3/+8+CfkaNVV1ebUaNGma5du4ZcPbK1K7ktXrw4eEW4jz/+uMW1v/rqq+aKK64wWVlZpnPnzqZv377miiuuaPFnGu/zbun/V2Na/3ujqanJ/M///I857bTTTOfOnU2vXr3MddddF7x8fLPWfi4tae0xH3nkETNkyJDgc7n66qvDrpbW2p/rSNasWWMuvvji4N9zX/jCF4JXl41mXUeOHDHl5eWmf//+Ji0tzQwZMsT88Y9/bPH/g/b+TJLhy1/+shk8eLDp1q2b6dy5s8nNzTUzZsww27Ztc2U9AJzT1lXum6/gGO3vvua/qxYuXGhOOeUU07lzZ3PGGWeYX//61yH3a+l34datW80111xjjj/+eNOjRw9z+eWXm7fffrvF38VeaIimpibzv//7vyY/Pz94vxEjRoT8Pjl48KC59dZbTf/+/U2XLl3MRRddZKqrqyNe1bSl3zlOrDXS75iWvvc1NTXm2muvNSeccIJJS0szAwYMMFOnTjWffPJJ8D4ffvihmTlzphk0aJDp3LmzycrKMgUFBeaOO+4wDQ0NLa716MdsqSVj2e+xjX/w4EFzyy23mL59+5qMjAxz7rnnmuXLl7f474gXXnjBnHPOOSY9PT3k6pEtXdW02fe+9z0jyfTv3z/s3xvNli9fboqKikxmZqZJT083ubm5ZuLEieaFF15o9fsR7fOO9O8qY1q+wmizAwcOmO9+97smNzfXdO7c2Zx00knmm9/8ptm7d2/I/Vr7ubQk0mMmqheN+ex7fP7555uMjAzTrVs3c8kll5jXXnstqnUZ89mfk29/+9umd+/eJiMjw3zhC18wr7/+eov/H7T3Z5Joe/bsMRMmTDADBw40Xbp0MWlpaebUU081t956q/noo4+Svh54T8CYKN5tEAAAAEBSBQIBlZaW6qGHHnJ7KQAAIE68CyAAAAAAAACQACkxeHv22Wd1+umn69RTT9Ujjzzi9nIAAICF6AVv4ucGAACi4VYz+P5U08OHDysvL08vv/yyMjMzde655+ovf/mLsrKy3F4aAACwBL3gTfzcAABANNxsBt+/4u2NN97QWWedpb59+6pHjx4aN26cVq5c6fayAACARegFb+LnBgAAouFmM1g/eFu9erXGjx+vnJwcBQIBLV++POw+Cxcu1KBBg5SRkaGCggKtWbMm+Llt27apb9++wdv9+vXTBx98kIylAwCAJKEXvImfGwAAiIaXm8H6wVtjY6OGDh0a8WpOy5Yt06xZs3THHXforbfe0ujRo1VcXKza2lpJUktn0gYCgYSuGQAAJBe94E383AAAQDS83AydkvIo7VBcXKzi4uKIn58/f76mTZum6dOnS5IWLFiglStXatGiRSovL1ffvn1Dpphbt27V+eefH3F/Bw8e1MGDB4O3jxw5oj179uiEE04g5AAAVjDGaN++fcrJyVGHDok9hvbJJ5/o0KFDCX2MSIwxYb9709PTlZ6eHnbfZPcCnEHnAQAQis4L7zzJ461nPESSefrpp4O3Dx48aDp27GieeuqpkPvNnDnTXHjhhcYYYz799FMzePBgs3XrVlNfX28GDx5sdu3aFfEx5syZYyTxwQcffPDBh/UfW7ZsScjv22YHDhwwfbL7uPb8unfvHrZtzpw5ba5bSnwvwHnJ+LnReXzwwQcffHjlg86LTPJW61n/irfW7Nq1S01NTcrOzg7Znp2drR07dkiSOnXqpB/96EcqKirSkSNHdOutt+qEE06IuM/bb79dZWVlwdsff/yxBgwYoE3vbFKPHj0S80QQt90fH5AkfbB7v8srQVv+/dEnqtnb6PYy0IaqDxtUs22f28tAKxo+/EDm0090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v/764Larr75aZ511lubOnUuQxYChGwAArduyZYsyMzODtyMdBW3Nrl271NTUpOzs7JDt2dnZ2rFjR1T7+MIXvqBx48bpnHPOUYcOHXTJJZfoqquuinkttqPznEPn2Y+hGwC4y4nOk+xvvZgHb9u3b9fIkSPDto8cOVLbt293ZFGALQgyAHBXZmZmSJC1RyAQejTXGBO2rTX33nuv7r33XkfWYis6zxkM3exH4wGA+5zsPMne1ov54gqDBw/W7373u7Dty5Yt06mnnurIolIBQWY/ggwA/KFXr17q2LFj2BHPurq6sCOjqY7OAwAAXmN768X8ire7775bkyZN0urVqzVq1CgFAgH9+c9/1osvvthiqCEcQzekooa6rW4vAUCKSktLU0FBgSorKzVhwoTg9srKSl199dUursw+dF770Xn24+AqAPiL7a0X8+Dtmmuu0V/+8hf97//+r5YvXy5jjPLy8vTGG2/onHPOScQagaQjyADAWxoaGrRp06bg7c2bN6u6ulpZWVkaMGCAysrKNHnyZA0fPlwjRozQ4sWLVVtbqxkzZri4avvQee3D0M1+NB4AeJOXWy/mwZskFRQU6LHHHnN6LSmBIEsMJy8zT5ABgPesX79eRUVFwdtlZWWSpClTpmjJkiWaNGmSdu/erXnz5mn79u3Kz8/XihUrlJub69aSrUXnAQAA23i59eIavDU1NWn58uV69913FQgElJeXp6uuukodO3Z0en2+wtANAIDEGDNmjIwxrd6npKREJSUlSVqRd9F58aHz7MfBVQDwLi+3XsyDt02bNumKK67Q1q1bdfrpp8sYo3/961/q37+//vSnP+mUU05JxDqBpCDIAACpjM6LD0M3+9F4AAC3xHxV05kzZ+rkk0/Wli1b9Oabb+qtt95SbW2tBg0apJkzZyZijb5AkNmPIAMApDo6L3Y0HgAAaE3Mr3h79dVXtW7dOmVlZQW3nXDCCbr//vs1atQoRxfnFwSZ/Ri6AQBA58Gf6DwAgJtifsVbenq69u0LfyP7hoYGpaWlObIoG1RUVCgvL0+FhYXt2g9DNwAA4BV0XmzoPPsxdAMAuC3mwduVV16pm266SX/5y19kjJExRuvWrdOMGTN01VVXJWKNrigtLVVNTY2qqqrcXgoSjCADAOAzdF70GLrZj8YDANgg5sHbT37yE51yyikaMWKEMjIy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i85DLGg8b6AFAcBdMQ/eFixYkIBlwK84CuouQgsAEAs6D9GKduhG57mLFgQA98U8eJsyZUoi1gEfYujmLkILABArOg/RYOjmDbQgANgh5vd4q62tbfUDkDj1wE0NdVsJLQBIgAkTJuj444/XxIkTwz737LPP6vTTT9epp56qRx55xIXVOYPOQ1toPG+gBQEgdolqvZhf8TZw4EAFAoGIn29qaop1l/AZjoK6h8gCgMSZOXOmbrzxRv3yl78M2X748GGVlZXp5ZdfVmZmps4991x98YtfVFZWlksrjR+dh9bEMnSj89xDDwJAfBLVejEP3t56662Q259++qneeustzZ8/X/fee2+su4OPEGPuIrIAILGKior0yiuvhG1/4403dNZZZ6lv376SpHHjxmnlypX6yle+kuQVth+dh0joPG+gBwEgfolqvZhPNR06dGjIx/Dhw/X1r39dP/zhD/WTn/wk1t1Zq6KiQnl5eSosLHR7KZ7AaQfu4dRSAJBWr16t8ePHKycnR4FAQMuXLw+7z8KFCzVo0CBlZGSooKBAa9asceSxt23bFgwxSerXr58++OADR/adbHQeWkLneQM9CMDPvNx6MQ/eIjnttNNUVVXl1O5cV1paqpqaGl89p0SJNcY4CuocAgsAPtPY2KihQ4fqoYceavHzy5Yt06xZs3THHXforbfe0ujRo1VcXBzyvmUFBQXKz88P+9i2bVurj22MCdvW2umaXkTnpaZ1dfvoPA/gICyAVODl1ov5VNP6+tBfpsYYbd++XXPnztWpp54a6+7gccSYewgsAKng2O5IT09Xenp62P2Ki4tVXFwccT/z58/XtGnTNH36dEnSggULtHLlSi1atEjl5eWSpA0bNsS1xr59+4Yc9dy6davOP//8uPblNjoPzeJ5lRudl3z0IAAvi7bzJG+3XsyDt+OOOy5ssmeMUf/+/fX444/Hujt4GKcduIPAApBsVR82qFOX8CN9iXT4QKMkqX///iHb58yZo7lz58a0r0OHDmnDhg267bbbQraPHTtWa9eubdc6Jem8887T22+/rQ8++ECZmZlasWKF7rrrrnbv1w10HiQazytoQgBO8HrnSfa3XsyDt5dffjnkdocOHXTiiSdq8ODB6tQp5t3BozgK6g4CC0Cq2bJlizIzM4O3Ix0Fbc2uXbvU1NSk7OzskO3Z2dnasWNH1Pu57LLL9Oabb6qxsVH9+vXT008/rcLCQnXq1Ek/+tGPVFRUpCNHjujWW2/VCSecEPM6bUDnId6hG52XXDQhAD9wovMk+1sv5oK66KKLYv0S+AxDN3cQWABSUWZmZkiQtUdLr+SK5f05Vq5cGfFzV111la666qq412YLOi+1MXTzBpoQgF842XmSva0X16HLf//731qwYIHeffddBQIBnXnmmfrWt76lU045Ja5FwDsYuiUfcQUA7dOrVy917Ngx7IhnXV1d2JFR0HmpitNLvYEuBIBwtrdezFc1XblypfLy8vTGG29oyJAhys/P11/+8hedddZZqqysTMQaYQmCLPmIKwBov7S0NBUUFIR1SmVlpUaOHOnSquxE56Wm9jQeB1iThy4EgJbZ3noxv+Lttttu0+zZs3X//feHbf/ud7+rSy+91LHFwR6cepB8xBUARK+hoUGbNm0K3t68ebOqq6uVlZWlAQMGqKysTJMnT9bw4cM1YsQILV68WLW1tZoxY4aLq7YPnZd6GLp5A10IINV5ufViHry9++67+t3vfhe2/cYbb9SCBQucWJMVKioqVFFRoaamJreX4jqGbslFWAFA7NavX6+ioqLg7bKyMknSlClTtGTJEk2aNEm7d+/WvHnztH37duXn52vFihXKzc11a8lWovNSC0M3b6ANAcDbrRfz4O3EE09UdXW1Tj311JDt1dXV6t27t2MLc1tpaalKS0tVX1+vnj17ur0c13B6aXIRVgAQnzFjxsgY0+p9SkpKVFJSkqQVeROdlzpoPG+gDQHgM15uvZgHb1//+td100036T//+Y9GjhypQCCgP//5z/qf//kfffvb307EGuESjoImF2EFAHAbnZca2jt0o/OSgzYEAH+IefB25513qkePHvrRj36k22+/XZKUk5OjuXPnaubMmY4vEO5g6JY8RBUAwBZ0nv8xdPMG+hAA/CPmwVsgENDs2bM1e/Zs7dv32S/uHj16OL4wuIdTD5KHqAIA2ITO8zcazxvoQwDwlw6xfsGBAwe0f/9+SZ+F2J49e7RgwQKtWrXK8cUh+TgKmjxEFQDANnSefzkxdKPzEo8+BAD/iXnwdvXVV2vp0qWSpI8++kjnnXeefvSjH+nqq6/WokWLHF8gkoehW3I01G0lqgAAVqLz/ImhmzfQhwDgTzEP3t58802NHj1akvTkk0+q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5EgdPnzY788POTk5qqys1F//+le9/fbb3i6nxa5duya73a6cnByFh4dr5MiR2rt3ryIiIrxdGuDX6PP8B32ef6DP8230eb6JPs9/8RdvHnTt2jVdvXpVtbW1qq2tVZ8+fbxdkse89957mjhxot+fbK83zMnJyZKkiIgIv2/GAtHRo0d16NAhTZ482duleERwcLA6d+4sSbp69arq6ur8/i8l+vXrp4SEBElSnz59FBERoe+++867RXnAhAkT1LVrV2+X0Wr79u3TsGHD1L9/f3Xt2lWTJ0/W9u3bvV0WEBDo83wffZ5/oM/zffR5vok+z3+1m8Fbbm6upkyZosjISNlstib/lH7Dhg0aOHCgwsLClJiYqF27drl8/N69e2vp0qWKiYlRZGSkJk2apNtvv92DCRqzOtMPbd26VT/96U/drPjmrM509OhRdenSRVOnTtXIkSP1/PPPe7D6prXF81RRUaHExETdc8892rlzp4cqb1pb5Fm6dKkyMjI8VPHNtUWmixcvKj4+XlFRUVq2bJl69erloeqb1pbnh88//1z19fWKjo52s+rmtWUmb3E34+nTp9W/f3/H7aioKJWVlbVF6YBX0efR50n0eZ5An0efdyP6PM+hz2u/2s3graqqSvHx8Vq3bl2T27ds2aLFixdrxYoVKiwsVHJystLS0nTy5EnHPomJiRo+fHijr9OnT+vChQvKyspSaWmpysrKlJeXp9zcXL/OdF1FRYV2797dJr+VsjpTbW2tdu3apfXr1+uzzz5Tdna2srOz/TqTJJWWlqqgoECvvfaaZs2apYqKCr/N889//lODBw/W4MGDLctwo7Z4jrp37679+/fr+PHj+sc//qFz5875fSZJ+vbbbzVr1ixt3LjR0jxtmcmb3M3Y1G/YbTabpTUDvoA+jz6PPs8/8tDn+U8miT7P0+jz2jHTDkkymZmZDdbuuusuM3/+/AZrQ4cONcuXL3fpmFu3bjULFixw3F69erV54YUX3K7VVVZkum7z5s3m8ccfd7fEFrMiU15enklNTXXcXr16tVm9erXbtbrKyufpuvvvv9/k5+e3tsQWsSLP8uXLTVRUlBkwYIDp2bOnCQ8PN6tWrfJUyTfVFs/R/PnzzdatW1tbYotZlenq1asmOTnZbN682RNltoiVz1NOTo555JFH3C3Rba3JuHv3bjNt2jTHtkWL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", + "text/plain": [ + "

" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -273,22 +241,22 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 56, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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557j+PHj1tvn77//PpGRkfTq1avCseXfZzc6Z32R6dC3oEuXLtYBuVFRUZjNZj766CO+/PJLHnjgAev90Tlz5lQ5DbdTp051GmNVfyVW1lb+A2A0Gisce+HCBevrqc65KzN58mSeeuopjh49yqlTpzAajTa/uAFCQ0P55z//CcCvv/7KmjVr+Otf/0pJSQkffPBBpefV6XR07dqV7777jsLCwkrHuezcuZO0tDQefPDBG76GFi1aUFZWRmZmps0vhWt/+TRv3hytVsuECROq7GVo3779Da9XU5s2beLChQv8+OOP1l4WoMrxQNd7Tdf+8rvap59+Svv27Vm9erVN/NcOAm3VqhVmsxmTyVTlB1f599CXX35JaGjo9V/gdaxcuZInnniCSZMm8cEHH9TofS0fMHyjdUVatmzJ/v37axKmVfPmzRkzZgyffPIJr732GitXrsTd3d3mw7m23pvasH79ejQaDYMGDQLU2DQaDdu2bbN+MF7t2rqb+Xo8/PDDzJo1i1WrVjF//nz+/e9/M3bsWJslJar7PXizyn9+//73v5Odnc3nn39OcXGxze+l8q/Le++9x1133VXpecp7ulu2bMmSJUtYsmQJqamprF+/ntmzZ5Oenk58fHyVMURFRREfH8+5c+cqHedy7tw59u3bh8FgsCZUt2rw4MHo9XqWLl2Kt7c3+/fv59NPP6302PLE7NrPAHuRHpda9Oabb9K8eXNeeeUVLBYLnTp14o477uDQoUOV/kXWu3dvfHx87B22VWRkJB4eHhW+ec+dO8emTZuqnDVUXQ8//DDu7u6sWrWKVatW0aZNG4YNG1bl8R07duTPf/4z4eHhN/zgePnll7l06RIvvPBChbaCggJmzJiBp6fndQetlSsfhFm+xkW5zz//3Kbs6elJVFQUBw4coFu3bpV+fa+XENyq8l/g135o/OMf/6jyOVW9put9eGs0GlxdXW0+MEwmU4UZHeVd68uXL6/yXMOHD8fZ2ZmTJ09W+TNxI6tWreKJJ57gscce46OPPqpR0pKQkMBHH31Ev379GDBgwHWP7dy5M5mZmdedqVEdkydP5sKFC8TGxvLpp58ybtw4mjVrZm2vjfemNqxcuZK4uDgefvhha2/myJEjURSF8+fPVxpXeHh4ja/XvHlzxo4dyyeffMI333yDyWSqcJuout+DoP483EzPwOTJ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", + "image/png": "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Fu+//77tVljR8114q2jOnDlYLJYSfwb//ve/4+bmxokTJ2x93333HQMHDsTX1xcvLy969epV7Hfa8ePH+fOf/0xoaCju7u40atSIXr168d133130PZ85cyYWi4V58+bh4mJ/I8TFxYW5c+disVh44YUXbP3PPPMMFouF2NhY7rjjDvz8/AgKCmL8+PGkpaWV+lyZmZn4+/tz//33Fzt26NAhnJ2dmT17tq1v2LBheHt78+677170NVQlJS4VKD4+HoA2bdrY+lavXk2vXr1ITU3l7bff5quvvqJTp06MGjXqiuajFBYWUlBQUOzrQtu3b+dvf/sbEydOZPny5dxyyy22Y1OnTiUhIYG3336bpUuXEhgYyMyZM7nnnnsIDw/niy++4LXXXuPXX38lMjKy2PydvLw8hg8fzoABA/jqq6+YPn16ibEOHTqUwMBAFixYUOzYwoUL6dKlCx06dABg8ODBbNu2jRdffJFVq1Yxb948OnfuTGpqaqnvRWJiIrGxsURFReHl5VXiOZGRkQQGBrJq1apLvgbDMBgxYoQtyfjyyy+57rrriImJKXbduLg4rr32Wnbt2sXLL7/M119/zZAhQ5g4cWKJ70dJ7/mV2LdvH4MHD+Zf//oXy5cvZ9KkSXz66acMGzas2Ln5+fkMHjyYgQMHsnjxYh5++GHeeecdRo0addHnyM3N5dSpU0yZMoXFixfzn//8h969e3PzzTfzwQcf2J17991388gjj3DttdeyaNEi/vvf/zJ8+HAOHTpkO+f555/njjvuICwsjE8//ZQPP/yQjIwM+vTpU665SAUFBaxbt47w8PDLetzw4cMBLpm4rFy5kvz8/BJvzcKlfxbHjx9PdnZ2sT9WUlNT+eqrr7jrrrtwdXUFLu+9yc/PZ/jw4QwcOJCvvvqK8ePH8+qrrzJr1qzLeh9KMnz4cAzDYN26dba++++/n0mTJnHDDTewePFi5s6dS2xsLD179iz2x1piYiJ33XUXd955J8uWLePBBx8s9hyurq7cdddd/O9//yuW1P3nP/8hJyeHcePGAWX/Hty4cSOenp4MHjyYjRs3snHjxlJvT9111124ubkV+z1stVr56KOPGDZsGA0bNgTgo48+IioqCl9fX95//30+/fRTAgICiI6OtkteRo8ezeLFi3n66adZuXIl7733HjfccAMnT54s9b22Wq2s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kr+/Dh06hJeXl+33ZZELf6bd3d2B4j//F3rkkUfYt2+f7fb5W2+9RWRkJF26dCl2btH32aWuWVVUDn0F2rVrZ5uQ279/f6xWK++99x6ff/45t956q+3+6NSpU0stw73mmmsqNcbS/kos6VjRD0BiYmKxc48dO2Z7PWW5dknGjRvHgw8+yO7duzl48CCJiYl2v7gBmjdvzr/+9S8Afv/9dz799FOeeeYZ8vLyePvtt0u8bkhICOHh4axcuZLs7OwS57ls3LiR5ORkbrvttku+hgYNGlBQUMDJkyftfilc+Munfv36ODs7M3r06FJHGVq2bHnJ5yuvH374gWPHjrFmzRrbKAtQ6nygi72mC3/5ne+jjz6iZcuWLFq0yC7+CyeBNmrUCKvVSlJSUqkfXEXfQ59//jnNmze/+Au8iAULFnDvvfcyduxY3n777XK9r0UThi+1rkjDhg3Zvn17ecK0qV+/PjfddBMffPABzz33HAsWLMDDw8Puw7mi3puKsGTJEiwWC3379gXM2CwWC+vWrbN9MJ7vwr7L+fe44447mDx5MgsXLmTGjBl8+OGHjBgxwm5JibJ+D16uop/f119/ndTUVD755BNyc3Ptfi8V/bu88cYbXHfddSVep2iku2HDhsyZM4c5c+aQkJDAkiVLePzxx0lJSWH58uWlxtC/f3+WL1/OkSNHSpzncuTIEbZt20ZMTIwtobpSAwYMICIigjfffBNvb2+2b9/ORx99VOK5RYnZhZ8BjqIRlwr04osvUr9+fZ5++mkKCwu55ppruPrqq/nll19K/IusW7du+Pj4ODpsm8jISDw9PYt98x45coQffvih1Kqhsrrjjjvw8PBg4cKFLFy4kCZNmhAVFVXq+W3atOGpp56iffv2l/zgePLJJzl9+jRTpkwpdiwrK4uJEyfi5eV10UlrRYomYRatcVHkk08+sWt7eXnRv39/duzYQYcOHUr8971YQnClin6BX/ih8c4775T6mNJe08U+vC0WC25ubnYfGElJScUqOoqG1ufNm1fqtaKjo3FxceHAgQOl/kxcysKFC7n33nu56667eO+998qVtKxatYr33nuPnj170rt374ue27ZtW06ePHnRSo2yGDduHMeOHWPZsmV89NFHjBw5En9/f9vxinhvKsKCBQv49ttvueOOO2yjmUOHDsUwDI4ePVpiXO3bty/389WvX58RI0bwwQcf8PXXX5OUlFTsNlFZvwfB/Hm4nJGBcePGkZOTw3/+8x8WLlxIZGQkbdu2tR3v1asX/v7+xMXFlfrv4ubmVuy6zZo14+GHH+bGG2+85O+vqVOnYhgGDz74YLHJt1arlQceeADDMJg6dWqZX1dZTJw4kW+++YapU6cSFBRU7A+7IgcPHqRBgwbFpiI4ikZcKlD9+vWZOnUqjz32GJ988gl33XUX77zzDjExMURHR3P33XfTpEkTTp06xe7du9m+fTufffZZuZ5r3759xeZPgDlsXd6Fr/z9/fnHP/7BE088wZgxY7jjjjs4efIk06dPx8PDg2nTppXruudff+TIkSxcuJDU1FSmTJmCk9O53PnXX3/l4Ycf5rbbbuPqq6/Gzc2NH374gV9//ZXHH3/8ote+44472L59Oy+99BKHDh1i/PjxBAUFsXfvXl599VUOHDjAJ598QqtWrS4ZZ1RUFH379uWxxx4jKyuLbt26sX79ej788MNi57722mv07t2bPn368MADD9CiRQsyMjLYv38/S5cuLXFF18tx4MABPv/882L9YWFh9OzZk/r16zNhwgSmTZuGq6srH3/8Mb/88kuJ13Jzc+Pll18mMzOTa6+9lg0bNvDcc88RExNz0Q/vopL6Bx98kFtvvZXDhw/zz3/+k5CQELtKsz59+jB69Giee+45kpOTGTp0KO7u7uzYsQMvLy/+8pe/0KJFC5599lmefPJJDh48aJsblpyczObNm6lXr16p1WlgznO455576NSpE/fffz+bN2+2O965c2e7RK6wsND2c5Kbm0tCQgLffvstn376Ke3atSvTsgT9+vXDMAx+/vnnEhPthISEEn8WGzVqZLcgZFRUFE2bNuXBBx8kKSmp2Gjjlb43l+vMmTO2uM+cOcPBgwdZvHgxX3/9Nddff73dCGevXr3485//zLhx49i6dSt9+/alXr16JCYm8tNPP9G+fXseeOCBcscyfvx4Fi1axMMPP0zTpk254YYb7I6X9XsQzHkza9asYenSpYSEhODj43PRke22bdsSGRnJzJkzOXz4MPPnz7c77u3tzRtvvMHYsWM5deoUt956K4GBgRw/fpxffvmF48ePM2/ePNLS0ujfvz933nknbdu2xcfHhy1btrB8+fJLLnzZq1cv5syZw6RJk+jduzcPP/wwzZo1sy1A9/PPPzNnzhx69ux5me/sxd11111MnTqVtWvX8tRTT5WYgIG5ou/1119foSPGV8RBk4JrtNIWoDMMc2Z2s2bNjKuvvtooKCgwDMMwfvnlF+P22283AgMDDVdXVyM4ONgYMGCA8fbbb9seV1FVRedXdDRv3twYMmRIqdcobRG79957z+jQoYPh5uZm+Pn5GTfddJMRGxtrd86lKjZKs3LlSlusv//+u92x5ORk4+677zbatm1r1KtXz/D29jY6dOhgvPrqq7b38lKWLVtmDB482GjQoIHh6upqNGnSxBg9enSx+C/1GlJTU43x48cb/v7+hpeXl3HjjTcae/bsKXEBuvj4eGP8+PFGkyZNDFdXV6NRo0ZGz549jeeee852TnkWDrzYv3NRDBs2bDAiIyMNLy8vo1GjRsa9995rbN++3QCMBQsWFHutv/76q9GvXz/D09PTCAgIMB544IFilQIlVRW98MILRosWLQx3d3ejXbt2xrvvvmurajif1Wo1Xn31VSMiIsL2/RMZGWmr0CiyePFio3///oavr6/h7u5uNG/e3Lj11luN77777qLvSVE1TWlf8fHxpZ7r6elpNGvWzBg2bJjx73//28jNzS3Tv4PVajVatGhhPPjgg3b9l6oq+tOf/lTsWk888YQBGKGhoXaVLJf73pT2vVvSv0lJiip/ir7q1atntGrVyrj11luNzz77rNTY/v3vfxs9evQw6tWrZ3h6ehqtW7c2xowZY2zdutXu2qVVLF1YVVTEarUaoaGhF61KK+v34M6dO41evXoZXl5eBmB7vov9jp0/f77te+TCCsEiP/74ozFkyBAjICDA9rtlyJAhtp/pnJwcY8KECUaHDh0MX19fw9PT07jmmmuMadOmlXkBvo0bNxq33nqrERQUZLi4uBiBgYHGzTffbGzYsKHYuUWv/fjx43b9RZ9P5/8sXKxS8O677zZcXFyMI0eOlHh8//79BmD873//K9NrqAoWwyjj1HoRqbHuvvtuPv/8czIzMx0dSo308ssvM2PGDI4ePYqnp6ejwxGpEHl5ebRo0YLevXuXOvr4j3/8gw8++IADBw4UWxzPUTTHRUTkEh566CH8/PyKrYgsUhMdP36cn376iQceeIDk5ORSb8Wnpqby1ltv8fzzz1ebpAWUuIiIXJKHhwcffvhhiRU1IjXNN998Q58+ffj222+ZO3duiSXQYC4xMXXq1BI3EXUk3SoSERGRGkMjLiIiIlJjKHERERGRGkOJi4iIiNQY1WeacAUpLCzk2LFj+Pj4VJ/FckREROSiDMMgIyODxo0b2y1OeqFal7gcO3as2EZ6IiIiUjMcPnz4oivA17rEpWjvn8OHD5d552IRERFxrPT0dEJDQy+5h1+tS1yKbg/5+voqcREREalhLjXNQ5NzRUREpMZQ4iIiIiI1hhIXERERqTFq3RyXsrJareTn5zs6jBrF1dUVZ2dnR4chIiJ1WJ1LXAzDICkpidTUVEeHUiP5+/sTHBysNXJERMQh6lziUpS0BAYG4uXlpQ/gMjIMg+zsbFJSUgAICQlxcEQiIlIX1anExWq12pKWBg0aODqcGsfT0xOAlJQUAgMDddtIRESqXJ2anFs0p8XLy8vBkdRcRe+d5geJiIgj1KnEpYhuD5Wf3jsREXGkOnWrSERERMqp0Ap/bIDMZPAOguY9wanqpwwocREREZGLi1sCy/8O6cfO9fk2hkGzIGx4lYZSJ28V1URr165l2LBhNG7cGIvFwuLFiyv0+uvXr8fFxYVOnTpV6HVFRKSGi1sCn46xT1oA0hPN/rglVRqOEpdysBYabDxwkq92HmXjgZNYC41Kf86srCw6duzIm2++WeHXTktLY8yYMQwcOLDCry0iIjVYodUcaaGkz7mzfcsfN8+rIrpVdJmW70pk+tI4EtNybH0hfh5MGxbGoIjKW9skJiaGmJiYUo/n5eXx1FNP8fHHH5OamkpERASzZs2iX79+l7z2/fffz5133omzs3OFj+SIiEgN9seG4iMtdgxIP2qe17JPlYSkEZfLsHxXIg98tN0uaQFISsvhgY+2s3xXooMig3HjxrF+/Xr++9//8uuvv3LbbbcxaNAg9u3bd9HHLViwgAMHDjBt2rQqilRERGqMzOSKPa8CKHEpI2uhwfSlcRcbLGP60rgquW10oQMHDvCf//yHzz77jD59+tC6dWumTJlC7969WbBgQamP27dvH48//jgff/wxLi4afBMRkQt4B1XseRVAiUsZbY4/VWyk5XwGkJiWw+b4U1UX1Fnbt2/HMAzatGmDt7e37evHH3/kwIEDAHb9EyZMwGq1cueddzJ9+nTatGlT5TGLiEgN0LynWT1EaWt4WcC3iXleFdGf2WWUklF60lKe8ypSYWEhzs7ObNu2rdgy/N7e3gDs3LnT1ufr60tGRgZbt25lx44dPPzww7brGIaBi4sLK1euZMCAAVX2GkREpBpycjZLnj8dg5m8nH9X4WwyM+iFKl3PRYlLGQX6eFToeRWpc+fOWK1WUlJS6NOn5MlRV111lV27sLCQ3377za5v7ty5/PDDD3z++ee0bNmy0uIVEZEaJGw43P5BKeu4vFDl67gocSmj7i0DCPHzICktp8R5LhYg2M+D7i0DKuX5MzMz2b9/v60dHx/Pzp07CQgIoE2bNvzpT39izJgxvPzyy3Tu3JkTJ07www8/0L59ewYPHlzsek5OTkRERNj1BQYG4uHhUaxfRETquLDh0HaIVs6tSZydLEwbFsYDH20vbbCMacPCcHaqnL18tm7dSv/+/W3tyZMnAzB27FgWLlzIggULeO6553j00Uc5evQoDRo0IDIyssSkRURE5LI5OVdZyfPFWAzDqPoymEqUnp6On58faWlp+Pr62h3LyckhPj6eli1b4uFRvls6jlrHpbqoiPdQRETkQhf7/D6fRlwu06CIEG4MC2Zz/ClSMnII9DFvD1XWSIuIiIico8SlHJydLES2buDoMEREROocreMiIiIiNYYSFxEREakxlLiIiIhI2RzdDguHmv91ECUuIiIiUja//BcOrYNfFzksBE3OFRERkdKlJkD2ScACsV+Yfbv+Bx3vAAzwagD+zaosHCUuIiIiUro57Yv3ZR2H+defaz+TVmXhOPRWkYuLC506daJTp07ce++9tv5XX32V8PBwwsLCmDhxIrVsjTwREZGa4+Z3wVLK0v5OLubxKuTQERd/f3+7XYsBjh8/zptvvklsbCyurq707duXTZs2ERkZ6ZggRURE6qr8M5C8C0obQLj3e2jcqUpDqpaTcwsKCsjJySE/P5/8/HwCAwMdHZLDrV27lmHDhtG4cWMsFguLFy+ukOt+/PHHdOzYES8vL0JCQhg3bhwnT56skGuLiEgNFr8W5kbC+teAwrOdRavEOy59KPczl+WDdO7cubY9bbp27cq6devsjqenp9O1a1d69+7Njz/+CECjRo2YMmUKzZo1o3Hjxtxwww20bt26vGFWjkIrxK+D3z43/1torfSnzMrKomPHjrz55psVds2ffvqJMWPGcM899xAbG8tnn33Gli1b7G7biYhIHXPmNHz1MLw/DE7Hg09jGP4m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Qo4dO4aPjw8Wi6VCr33ttdeyZcuWCr1mXaX3snR19b2pza87PT2d0NBQDh8+XGG71ovUNoZhkJGRQePGjXFyKn0mS60bcXFycqJp06aVcm1nZ2f90qkgei9LV1ffm7rwun19fWv9axS5EhcbaSmiybmX4aGHHnJ0CLWG3svS1dX3pq6+bhG5PLXuVpGISHWTnp6On58faWlpGnERuUIacRERqWTu7u5MmzYNd3d3R4ciUuNpxEVERERqDI24iIiISI2hxEVERERqDCUuDvT1119zzTXXcPXVV/Pee+85OhwREZFqT3NcHKSgoICwsDBWr16Nr68vXbp04eeffyYgIMDRoYmIiFRbGnFxkM2bNxMeHk6TJk3w8fFh8ODBrFixwtFhiYgDjBw5kvr163Prrbc6OhSRaq9WJi5Hjx7lrrvuokGDBnh5edGpUye2bdtWYddfu3Ytw4YNo3HjxlgsFhYvXlzieXPnzqVly5Z4eHjQtWtX1q1bZzt27NgxmjRpYms3bdqUo0ePVliMIlJzTJw4kQ8++MDRYYjUCLUucTl9+jS9evXC1dWVb7/9lri4OF5++WX8/f1LPH/9+vXk5+cX69+zZw9JSUklPiYrK4uOHTvy5ptvlhrHokWLmDRpEk8++SQ7duygT58+xMTEkJCQAJS8+2VF760kIjVD//798fHxcXQYIjVCrUtcZs2aRWhoKAsWLKB79+60aNGCgQMH0rp162LnFhYW8tBDD3HnnXditVpt/b///jv9+/cv9S+gmJgYnnvuOW6++eZS43jllVe45557uPfee2nXrh1z5swhNDSUefPmAdCkSRO7EZYjR44QEhJS3pctIg5SlhHYi42+isjlqXWJy5IlS+jWrRu33XYbgYGBdO7cmXfffbfEc52cnFi2bBk7duxgzJgxFBYWcuDAAQYMGMDw4cN57LHHyhVDXl4e27ZtIyoqyq4/KiqKDRs2ANC9e3d27drF0aNHycjIYNmyZURHR5fr+UTEcS41Anup0VcRuTy1LnE5ePAg8+bN4+qrr2bFihVMmDDhovePGzduzA8//MD69eu58847GTBgAAMHDuTtt98udwwnTpzAarUSFBRk1x8UFGS7/eTi4sLLL79M//796dy5M3/7299o0KBBuZ9TRBzjUiOwlxp9FZHL4+LoACpaYWEh3bp14/nnnwegc+fOxMbGMm/ePMaMGVPiY5o1a8YHH3zA9ddfT6tWrfjXv/5VIfNNLryGYRh2fcOHD2f48OFX/DwiUj0Vjb4+/vjjdv3nj76KyOWpdSMuISEhhIWF2fW1a9fuosOyycnJ/PnPf2bYsGFkZ2fz17/+9YpiaNiwIc7OzsUm96akpBQbhRGR2qsso68A0dHR3HbbbSxbtoymTZuyZcuWqg5VpMaodSMuvXr1Yu/evXZ9v//+O82bNy/x/BMnTjBw4EDatWvHZ599xr59++jXrx/u7u689NJL5YrBzc2Nrl27smrVKkaOHGnrX7VqFTfddFO5rikiNdelRl+1hpNI2dW6xOWvf/0rPXv25Pnnn+f2229n8+bNzJ8/n/nz5xc7t7CwkEGDBtG8eXMWLVqEi4sL7dq147vvvqN///40adKkxNGXzMxM9u/fb2vHx8ezc+dOAgICaNasGQCTJ09m9OjRdOvWjcjISObPn09CQgITJkyovBcvItWKRl9FKoFRCy1dutSIiIgw3N3djbZt2xrz588v9dyVK1caZ86cKda/Y8cOIyEhocTHrF692gCKfY0dO9buvLfeesto3ry54ebmZnTp0sX48ccfr+h1iUj1BhhffvmlXV/37t2NBx54wK6vXbt2xuOPP16FkYnUHtqrSETkCpw/Atu5c2deeeUV+vfvbxuBXbRoEaNHj+btt9+2jb6+++67xMbGlnoLW0RKp8RFROQKrFmzhv79+xfrHzt2LAsXLgTMBehefPFFEhMTiYiI4NVXX6Vv375VHKlI7aDERURERGqMWlcOLSIiIrWXEhcRERGpMZS4iIiISI2hxEVERERqDCUuIiIiUmMocREREZEaQ4mLiIiI1BhKXERERKTGUOIiIiIiNYYSFxEREakxlLiIiIhIjaHERURERGoMJS4iIiJSY/w/JFlFKIGhHkIAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -298,7 +266,7 @@ } ], "source": [ - "orders_odd = [i for i in range(6, 20, 2)]\n", + "orders_odd = [i for i in range(6, l_max, 2)]\n", "err1 = []\n", "err2 = []\n", "for o in orders_odd:\n", @@ -328,22 +296,22 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 57, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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Gn7++ecK51+yZAkajYY//vjD1Fed16U13qM2b97MY489hp+fHy1btuSOO+7gwoULVZ5LURQ6derEmDFjKmzLy8vD29ubJ554wtTXt29funXrxkcffXTd59AUSHJUz1JSUgC1JFlm8+bNDB06lOzsbD766CPWrl1Lr169mDx5ssXHwBVFobS0tMK/8m8iAMXFxUyYMIGRI0eydu1a5s2bZ9q2Zs0alixZwssvv8yGDRsYPnw4W7ZsYeTIkeTk5PDpp5/yzTff4Onpyfjx41m5cmWFOB544AEcHR354osv+O677yr94GrVqhW33XYbn3/+OUaj0WzbsmXLcHJy4m9/+xsAs2bNYsmSJcyYMYP4+Hi++OIL7r77bjIzM6/7/UhISCAgIIBBgwZVut3NzY3IyEiSkpJITU294XOYN28ezz33HKNHj2bNmjWmYZujR4+aPbagoIARI0bw+eefM2PGDOLi4njuuedYvnw5EyZMqPDzqOx7XhenTp2iS5cuLFq0iA0bNrBgwQJ0Oh39+/cnIyOjwv4PPvggdnZ2fP311yxatIjdu3dzyy23kJ2dfd3znDhxgnvvvZcvvviCH374gQcffJCFCxfyyCOPmO336aefMnbsWIxGIx999BHr169nxowZZklLffyebNq0CQcHB7PfxxsZO3Ys9vb2FZKDa507d47ExEQiIiLM+hMSEgCYNGlSlY8t21a2r6IoTJo0iS+++IJnnnmG1atXM2jQIKKjoys89ueff2bixIl4enry7bffsnDhQlatWsWyZcuq/RyvZ8KECQBmz/+NN97gr3/9K2FhYaxatYovvviC3Nxchg8fTnJystnjr/feUt706dPZvn17hTmaGzdu5MKFC0yfPt3Ud+rUKR555BFWrVrF999/zx133MFTTz3Fq6++atpn9erVdOjQgd69e5uGDKsaxrvtttvw9/ev9Hu2fPly+vTpQ48ePYDqvy6t8R710EMP4ejoyNdff81bb73FL7/8wn333VfluTQaDU899RQJCQkVvu8rVqxAr9ebJUegzlmKi4ur8J7V5FivaNW0lJXmf/31V6WkpETJzc1V4uPjlcDAQOXmm29WSkpKTPt27dpV6d27t1mfoijKbbfdpgQFBSkGg0FRFMsMq1X174svvjDtN23atCqH/gDF29tbycrKMusfNGiQ4u/vr+Tm5pr6SktL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", + "image/png": "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", "text/plain": [ "
" ] @@ -355,7 +323,7 @@ "source": [ "err1 = []\n", "err2 = []\n", - "orders_odd = [i for i in range(5, 20, 2)]\n", + "orders_odd = [i for i in range(5, l_max, 2)]\n", "\n", "for o in orders_odd:\n", " err1.append(compute_error_coord(recur_laplace, np.array([1e-4, 1]), o, derivs_laplace, n_init_lap, order_lap))\n", @@ -384,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -401,19 +369,19 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "ratios = np.array([1e-8,1e-7,1e-6,1e-5,1e-4,1e-3,1e-2,1e-1])\n", "slopes = []\n", "for r in ratios:\n", - " slopes.append(get_slope(np.array([r, 1]), np.array([i for i in range(6, 20, 2)])))" + " slopes.append(get_slope(np.array([r, 1]), np.array([i for i in range(6, l_max, 2)])))" ] }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -422,13 +390,13 @@ "Text(0.5, 1.0, 'Slope of Best Fit vs ratio of y0/x0 for even derivatives')" ] }, - "execution_count": 65, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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6NGjTUxMjLNvx44dzTXXXONW05kzZ0xUVJQZNmyYs23atGmmW7dupnHjxiYoKMh06tTJ/OMf/zDFxcXOPmXtZ0s+r2RdlexrqrJvMebs0eWEhATTuHFjY7fbTceOHc3ChQtd3nfy5Ennfrhk++rSpUuZP1t1iYBSgZJDtY8++qj5/PPPzenTp8vtW3rnfurUKdO+fXvTqFEj88ILL5g1a9aYZ555xvj5+ZnBgwe7vFeSiY6ONm3atDHz5883y5YtM4MGDXL7Qs3IyDDR0dEmJibGvPXWW2bt2rXmz3/+s7Hb7WbMmDHnHc/vfvc7I8k88sgjZtWqVebNN980TZo0MdHR0c4vsh07dpj777/f5bTNuQGmtJIvvczMTFNYWGgKCgrM3r17zciRI43dbjdff/21s+/JkydNx44dTXh4uHnxxRfN2rVrzSuvvGJCQkJMv379nD/AW7duNTabzdx+++1m5cqVZv369WbWrFnm7rvvNsacDTklAeLpp592nqqpqM6SgLJw4UJTWFjoMp3771ASULKyspxfZq+99przM8o77FpYWGgiIiLMnXfe6TavW7dupnPnzs7XV1xxhbnsssvM+++/bzZt2mQ++ugjM2nSpPOeSho9erTzCyApKcmsW7fOrF692hhz9gs2KSnJLFu2zGzatMnMmTPHdOjQwVxxxRXO7fbgwYPm0UcfNZLMxx9/7BxTdna2MaZm23BZStbfqFGjzCeffGLee+89c+mll5qQkBDnabXdu3ebp59+2rlDTklJMfv27St3mZ06dTJXX321W3vXrl1N165dna8dDocZPny4W78VK1YYSc71VuKGG24wd9xxh/P10aNHTbNmzUz37t2d62/06NGmQYMGLtt0jx49XD63RFpampFk3nrrrXLHUtHYK7PuSmoqb5so7zNDQkJMu3btzHvvvWfWrFljJk2aZHx8fMy0adOc/YYNG2aio6NNUVGRy/sff/xxExAQYI4ePWqMqfw+qeRLt0WLFmbQoEFmyZIlZsmSJaZdu3amcePG5pdffim35pK6GzZs6NxHLl261AwcONA0b97cLaA8++yzxmazmfvuu8+sWLHCfPzxx6Znz56mUaNGLqcwK1p3pQPKK6+8YiS5rHtjjFm5cqWRZJYtW+ZsGzNmjHnnnXdMcnKySU5ONn/+859NgwYNTGJiorPPjh07zKWXXmo6derk/DksCVClA0pV9i3r1683AQEB5tprrzULFy40q1atMmPGjHH75WrcuHGmYcOG5sUXXzQbNmwwK1asMH/5y1/Mq6++WuG/Q20joFTg6NGj5pprrnEmXH9/f9OrVy+TlJRkcnNzXfqW3rm/+eabRpJZtGiRS7/nnnvOSDJr1qxxtkkyDRo0MJmZmc62M2fOmNatW5vLLrvM2TZu3Dhz0UUXufxWZ4wxL7zwgpFU4fUDJb/5PPzwwy7tX3zxhZFk/vjHPzrbyjsqUpbyfisPDg42H3/8sUvfpKQk4+Pj43ZNyz//+U8jyaxcudJlPBXttKp7DUpZ0969e40xrgHFmKpfgzJx4kTToEEDl7r37NljJDl/8EuOLL388suVWua5Ro8ebSSZd999t8J+xcXFprCw0Pzwww9Gklm6dKlzXkXXoNRkGy7txIkTpkGDBm5B5scffzR2u90lDJSEzYqudSrd99yjTdu2bTOSzJw5c5xt/v7+Zty4cW7v37p1q9tRmKNHjxo/Pz/z0UcfufT99NNPjZ+fn5kwYYJ59913jSTzj3/8w6VPq1atzMCBA90+5/Dhw85rnioznnPHXpV1V9ltosTAgQNNs2bNnKG0xCOPPGICAwPN8ePHjTHGLFu2zO3fuORowa233upsq+w+qeRLt127di7X2JT825V1tPhcI0eOLHcfee72/OOPPxo/Pz/z6KOPurw/NzfXOBwOM2LECGdbReuudEA5evSoCQgIcNlPGmPMiBEjTNOmTcs9gl1UVGQKCwvN//zP/5iwsDCXoyjlXYNSOqAYU7l9izHGtG7d2nTq1MmtniFDhpjIyEhn4IyLizNDhw4ts2Yr4S6eCoSFhWnLli1KTU3VX/7yF9188836/vvvNWXKFLVr105Hjx4t973r169Xo0aNnHeIlBgzZowkud1NcP3116tp06bO176+vho5cqT27dunQ4cOSZJWrFihvn37KioqSmfOnHFO8fHxkqRNmzaVW8+GDRtcPr9Et27ddOWVV1Z4d0NlrF27Vqmpqdq2bZtWrFihG264QbfffrsWL17s7LNixQrFxcWpY8eOLvUPHDhQNptNGzdulCR17dpVkjRixAgtWrRIP/30U41qO9dzzz2n1NRUlyk6Otojy77vvvt06tQpLVy40Nk2a9Ys2e123XHHHZKk0NBQtWzZUs8//7xefPFFffXVVyouLq7S59x6661ubVlZWXrwwQcVHR0tPz8/+fv7KyYmRpL07bffVms8Vd2Gz5WSkqJTp065bW/R0dHq169ftbe3UaNGKSIiQq+99pqz7dVXX1WTJk00cuRIl742m63c5Zw7b+nSpQoICNCgQYNc+lx99dV69tln9fLLL+uhhx7SXXfdpfvvv7/CZVVlXnmqs+7K2iZKy8/P17p16zRs2DA1bNjQ5Wdw8ODBys/P1+effy5Jio+Pl8Ph0KxZs5zvX716tQ4fPqz77rvP2VbVfdKNN97ock1O+/btJUk//PBDhbVv2LCh3H3kuVavXq0zZ87onnvucaknMDBQvXv3du5jzlWZdRcWFqaEhATNmTPH+fN64sQJLV26VPfcc4/LNYrr16/XDTfcoJCQEPn6+srf319/+tOfdOzYMWVlZZ33s8pSmX3Lvn379O9//1t33nmnJLn9+2ZkZOi7776TdHa//69//UtPPvmkNm7cqFOnTlWrLm8joFTCVVddpSeeeEIffvihDh8+rN///vc6cOBAhRfKHjt2TA6Hw20HFRERIT8/Px07dsyl3eFwuC2jpK2k75EjR7R8+XL5+/u7TG3btpWkCgNTyTIiIyPd5kVFRbnVU1UdOnTQVVddpa5du+rGG2/Uhx9+qMsuu0zjx4939jly5Ii+/vprt/qDgoJkjHHWf91112nJkiXOHU2zZs0UFxen+fPn16hGSbr00kt11VVXuUx2u73Gy5Wktm3bqmvXrs6delFRkebOnaubb75ZoaGhks5+Ya1bt04DBw7UjBkz1LlzZzVp0kSPPfaYcnNzz/sZDRs2VHBwsEtbcXGxBgwYoI8//liPP/641q1bp23btjm/bKq786nqNlz6vZLntze73a5x48Zp3rx5+uWXX/Tzzz9r0aJFeuCBB1z+HcPCwsr8jOPHj0uS899Dkv75z38qPj6+zAtL77zzTgUEBKigoEB/+MMf3OZX5XMqq6rrrqxtorzlnjlzRq+++qrbz+DgwYMl/Xcf4ufnp7vvvluLFy923vY8e/ZsRUZGauDAgc5lVnWfFBYW5vK65N/sfNtoybZYWum2I0eOSDr7S07pmhYuXOhWT2XXnXQ2JPz0009KTk6WJM2fP18FBQUuQXLbtm0aMGCAJOntt9/WZ599ptTUVD311FOVGmd5KrNvKRn75MmT3cb+8MMPS/rvv8ff/vY3PfHEE1qyZIn69u2r0NBQDR06VHv37q1Wfd7CXTxV5O/vr6lTp+qll15y3u1SlrCwMH3xxRcyxrjs4LOysnTmzBnnHS8lMjMz3ZZR0lbyQx0eHq727dvr2WefLfMzo6KiKqxHkjIyMtSsWTOXeYcPH3arp6Z8fHzUtm1bffjhh8rKylJERITCw8PVoEEDvfvuu2W+59wabr75Zt18880qKCjQ559/rqSkJN1xxx1q0aKF864MK7r33nv18MMP69tvv9V//vMfZWRk6N5773XpExMTo3feeUeS9P3332vRokWaNm2aTp8+rTfffLPC5Zf1G3laWpp27dql2bNna/To0c72ffv21WgsVd2GS79XOru9lVbT7e2hhx7SX/7yF7377rvKz8/XmTNn9OCDD7r0adeunb755hu395a0xcXFSZKys7O1bt26Mp85UVRUpDvvvFONGzeW3W7X/fffr88++0wBAQEunzN//nydOXPG5bfo0p9TFVVdd5U9StO4cWP5+vrq7rvvdvnF4VyxsbHO/7/33nv1/PPPa8GCBRo5cqSWLVumCRMmuBwBqck+qSrCwsIq3EeeW490NnSWHEGsSFWOcA0cOFBRUVGaNWuWBg4cqFmzZql79+4ud78tWLBA/v7+WrFihQIDA53tS5YsqfTnlOd8+5aSsU+ZMkW33HJLmcu44oorJEmNGjVSYmKiEhMTdeTIEefRlISEBP373/+uca2eQkCpQEZGRpm/xZQcMq/oh+/666/XokWLtGTJEg0bNszZ/t577znnn2vdunU6cuSI8xBmUVGRFi5cqJYtWzoDxZAhQ7Ry5Uq1bNlSjRs3rtJY+vXrJ0maO3eu8xSKJKWmpurbb791JnxPKSoq0jfffCO73e78DWXIkCGaPn26wsLCXHaEFbHb7erdu7cuvvhirV69Wl999ZV69uxZ6d+8aqI6nzFq1ChNnDhRs2fP1n/+8x9dcsklzt+oynL55Zfr6aef1kcffaQdO3ZUq86SnWzpI0FvvfWWW9+qjKmq2/C5evbsqQYNGmju3LkaPny4s/3QoUNav36922mjqoiMjNTw4cP1+uuv6/Tp00pISFDz5s1d+gwbNkwPP/ywvvjiC3Xv3l3S2UPec+fOVffu3Z0/u8uXL5fNZtOQIUPcPmfq1KnasmWL1qxZo0aNGum6667TH/7wB73yyisun/P222/ro48+cjndMGfOHEVFRTk/uyq8te4aNmyovn376quvvlL79u1dglZZrrzySnXv3l2zZs1SUVGRCgoK3MJ2TfZJVdG3b18tW7aszH3kuQYOHCg/Pz/t37+/UqduqqIk3L388svasmWLvvzyS7efMZvNJj8/P5cQd+rUKb3//vtuy7Pb7R7dt1xxxRVq1aqVdu3apenTp1d6uU2bNtWYMWO0a9cuvfzyy9a6Tb2Or4GxtHbt2pn4+Hjz+uuvm/Xr15u1a9eaF154wURGRpqLLrrI5Wr+8u6ACAoKMi+++KJJTk42U6dONf7+/lW6i2fBggXOfocPHzYxMTGmdevW5vXXXzfr1q0zn3zyiXnttdfMjTfeWOFdLMacvYvHZrOZCRMmmNWrV5u33nrLREREmOjoaOdV+cZU7yLZkjt+UlJSzJIlS8xNN91kJJnf//73zr55eXmmU6dOplmzZuavf/2rSU5ONqtXrzZvv/22GT58uPn888+NMcY888wz5t577zVz5841GzduNEuWLDF9+/Y1/v7+Ji0tzRhz9o6gBg0amKuvvtps2LDBpKammp9++qncOqt6m7ExxvznP/8xkszQoUPNli1bTGpqqst6Ks+oUaNMREREmRfV7dq1y1x77bXmb3/7m/nXv/5l1q1bZ5566inj4+Pj1re0ktsiSzt9+rRp2bKliYmJMfPmzTOrVq0y48ePN5dffrnbmErWw7hx48zWrVtNamqqycnJMcbUbBsuS8mdKHfffbdZuXKlef/9981ll13mdidKVS6SLVFycbfKuf0yPz/ftG3b1kRHR5sPPvjAJCcnm2HDhrk9qO3mm282Q4YMcXv/mjVrjI+Pj8u6K7nws/TF3/379zeNGzc2f//738369evN2LFjjSQzd+7c846jvLFXdt2Vt02UZ/fu3aZx48amW7duZtasWWbDhg1m2bJl5sUXXzR9+/Z16//WW28ZSaZZs2amV69ebvMru0869zbj0kpvo2X55ptvTIMGDUybNm3MggULzLJly8zAgQNNdHS020Xf06dPN35+fmbcuHFm8eLFZuPGjWbhwoVm0qRJLo89qGjdlb5ItsR3333nXB+lL1o1xph169YZSea2224za9asMfPnzzddunQxrVq1cqtz9OjRxm63mwULFpht27Y5v0/Kuki2REX7FmPO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", + "image/png": "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ZmINrt3NEx7k05hlEZGdY0AhsnOODhosjgoBAIuQYnq9OCqEz0MhokbFgEJEGBwagFXju0KvMz+No9e5YtX4rnwOChE1Oj6ojYgAXAspg0L0fJIsEakCAwoRKRwdNOjV1tfWZRAR8RQPERERqU+dA8r+/fsRFRUFg8EAjUaDpKQks/kigpiYGBgMBri5uaFv3744fvy4WZ/S0lLMnDkTzZo1g4eHB4YPH45z587VayBERER066hzQLl06RI6deqEFStWVDl/6dKlWLZsGVasWIGMjAzo9XoMGjQIRUVFSp/o6GgkJiZi06ZNOHjwIIqLizFs2DCUl5ff/EiIiIjolqERkZv+AxsajQaJiYkYOXIkgGtHTwwGA6KjozF//nwA146W+Pv7Y8mSJZg6dSqMRiOaN2+O9evXY8yYMQCAnJwcBAYGYseOHYiMjLzh5xYWFkKn08FoNMLLy+tmyyciIqJGVJfvb6teg5KdnY28vDxEREQobVqtFn369EFaWhoA4MiRIygrKzPrYzAYEBoaqvSprLS0FIWFhWYTERER3bqsGlDy8vIAAP7+/mbt/v7+yry8vDy4uLjA29u72j6VxcfHQ6fTKVNgYKA1yyYiIiKVaZC7eDQa8+cmiIhFW2U19Vm4cCGMRqMynT171mq1EhERkfpYNaDo9XoAsDgSkp+frxxV0ev1uHLlCgoKCqrtU5lWq4WXl5fZRERERLcuqwaUoKAg6PV6pKSkKG1XrlxBamoqevfuDQDo1q0bnJ2dzfrk5uYiKytL6UNERET2rc5Pki0uLsbp06eV19nZ2Th69Ch8fHzQsmVLREdHIy4uDsHBwQgODkZcXBzc3d0xduxYAIBOp8OUKVMwe/Zs+Pr6wsfHB3PmzEFYWBgGDhxovZERERFRk1XngPL111+jX79+yutZs2YBACZNmoS1a9di3rx5uHz5MqZPn46CggL06NEDycnJ8PT0VN7zxhtvwMnJCaNHj8bly5cxYMAArF27Fo6OjlYYEhERETV19XoOiq3wOShERERNj82eg0JERERkDQwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6TrYugIhITcorBOnZF5FfVAI/T1eEB/nA0UFj67KI7A4DChHR/9mZlYvYbSeQayxR2gJ0rlgcFYLBoQE2rIzI/vAUDxERroWTaQmZZuEEAPKMJZiWkImdWbk2qozIPjGgEJHdK68QxG47AalinqktdtsJlFdU1YOIGgIDChHZvfTsixZHTq4nAHKNJUjPvth4RRHZOQYUIrJ7+UXVh5Ob6UdE9ceAQkR2z8/T1ar9iKj+GFCIyO6FB/kgQOeK6m4m1uDa3TzhQT6NWRaRXWNAISK75+igweKoEACwCCmm14ujQvg8FKJGxIBCRARgcGgAVo3vCr3O/DSOXueKVeO78jkoRI3M6gHl6tWreOGFFxAUFAQ3Nze0adMGL7/8MioqKpQ+IoKYmBgYDAa4ubmhb9++OH78uLVLISKqk8GhATg4vz82PtUTbz7aGRuf6omD8/sznBDZgNWfJLtkyRKsXr0a69atQ4cOHfD111/j8ccfh06nw1//+lcAwNKlS7Fs2TKsXbsWd911F/7xj39g0KBBOHnyJDw9Pa1dEhFRrTk6aNCrra+tyyCye1Y/gnL48GGMGDECDz74IFq3bo2HH34YERER+PrrrwFcO3qyfPlyLFq0CA899BBCQ0Oxbt06/Pnnn9iwYYO1yyEiIqImyOoB5b777sPu3btx6tQpAMCxY8dw8OBBDB06FACQnZ2NvLw8REREKO/RarXo06cP0tLSqlxmaWkpCgsLzSYiIiK6dVn9FM/8+fNhNBrRvn17ODo6ory8HK+88goee+wxAEBeXh4AwN/f3+x9/v7+OHPmTJXLjI+PR2xsrLVLJSIiIpWy+hGUzZs3IyEhARs2bEBmZibWrVuH119/HevWrTPrp9GY364nIhZtJgsXLoTRaFSms2fPWrtsIiIiUhGrH0GZO3cuFixYgEcffRQAEBYWhjNnziA+Ph6TJk2CXq8HcO1ISkDA/78yPj8/3+KoiolWq4VWq7V2qURERKRSVj+C8ueff8LBwXyxjo6Oym3GQUFB0Ov1SElJUeZfuXIFqamp6N27t7XLISIioibI6kdQoqKi8Morr6Bly5bo0KEDvvnmGyxbtgxPPPEEgGundqKjoxEXF4fg4GAEBwcjLi4O7u7uGDt2rLXLISIioibI6gHl7bffxosvvojp06cjPz8fBoMBU6dOxUsvvaT0mTdvHi5fvozp06ejoKAAPXr0QHJyMp+BQkRERAAAjYiIrYuoq8LCQuh0OhiNRnh5edm6HCIiIqqFunx/82/xEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeo42boAIiJSj/IKQXr2ReQXlcDP0xXhQT5wdNDYuiyyQwwoREQEANiZlYvYbSeQayxR2gJ0rlgcFYLBoQE2rIzsEU/xEBERdmblYlpCplk4AYA8YwmmJWRiZ1aujSoje8WAQkRk58orBLHbTkCqmGdqi912AuUVVfUgahgMKEREdi49+6LFkZPrCYBcYwnSsy82XlFk9xhQiIjsXH5R9eHkZvoRWUODBJRff/0V48ePh6+vL9zd3dG5c2ccOXJEmS8iiImJgcFggJubG/r27Yvjx483RClERHQDfp6uVu1HZA1WDygFBQW499574ezsjP/+9784ceIE/vnPf+L2229X+ixduhTLli3DihUrkJGRAb1ej0GDBqGoqMja5RAR0Q2EB/kgQOeK6m4m1uDa3TzhQT6NWRbZOY2IWPWqpwULFuDQoUM4cOBAlfNFBAaDAdHR0Zg/fz4AoLS0FP7+/liyZAmmTp16w88oLCyETqeD0WiEl5eXNcsnIrJLprt4AJhdLGsKLavGd+WtxlRvdfn+tvoRlK1bt+Kee+7BI488Aj8/P3Tp0gXvv/++Mj87Oxt5eXmIiIhQ2rRaLfr06YO0tLQql1laWorCwkKziYiIrGdwaABWje8Kvc78NI5e58pwQjZh9Qe1/fTTT1i1ahVmzZqFv/3tb0hPT8dzzz0HrVaLiRMnIi8vDwDg7+9v9j5/f3+cOXOmymXGx8cjNjbW2qUSEdF1BocGYFCInk+SJVWwekCpqKjAPffcg7i4OABAly5dcPz4caxatQoTJ05U+mk05hu8iFi0mSxcuBCzZs1SXhcWFiIwMNDapRMR2T1HBw16tfW1dRlE1j/FExAQgJCQELO2u+++G7/88gsAQK/XA4ByJMUkPz/f4qiKiVarhZeXl9lEREREty6rB5R7770XJ0+eNGs7deoUWrVqBQAICgqCXq9HSkqKMv/KlStITU1F7969rV0OERERNUFWP8Xz/PPPo3fv3oiLi8Po0aORnp6O9957D++99x6Aa6d2oqOjERcXh+DgYAQHByMuLg7u7u4YO3astcshIiKiJsjqAaV79+5ITEzEwoUL8fLLLyMoKAjLly/HuHHjlD7z5s3D5cuXMX36dBQUFKBHjx5ITk6Gp6entcshIiKiJsjqz0FpDHwOChERUdNj0+egEBEREdUXAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREamOk60LICIiUovyCkF69kXkF5XAz9MV4UE+cHTQ2Losu8SAQkREBGBnVi5it51ArrFEaQvQuWJxVAgGhwbYsDL7xFM8RERk93Zm5WJaQqZZOAGAPGMJpiVkYmdWro0qs18NHlDi4+Oh0WgQHR2ttIkIYmJiYDAY4Obmhr59++L48eMNXQoREZGF8gpB7LYTkCrmmdpit51AeUVVPaihNGhAycjIwHvvvYeOHTuatS9duhTLli3DihUrkJGRAb1ej0GDBqGoqKghyyEiIrKQnn3R4sjJ9QRArrEE6dkXG68oariAUlxcjHHjxuH999+Ht7e30i4iWL58ORYtWoSHHnoIoaGhWLduHf78809s2LChocohIiKqUn5R9eHkZvqRdTRYQJkxYwYefPBBDBw40Kw9OzsbeXl5iIiIUNq0Wi369OmDtLS0KpdVWlqKwsJCs4mIiMga/DxdrdqPrKNBAsqmTZuQmZmJ+Ph4i3l5eXkAAH9/f7N2f39/ZV5l8fHx0Ol0yhQYGGj9oomIyC6FB/kgQOeK6m4m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", "text/plain": [ "
" ] @@ -445,7 +413,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -454,16 +422,16 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([-24.8655584 , -1.18514632])" + "array([-21.44648644, -1.55708767])" ] }, - "execution_count": 68, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index c29991ea..79061bee 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -35,19 +35,19 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "var = _make_sympy_vec(\"x\", 2)\n", "s = sp.Function(\"s\")\n", - "g = sp.Function(\"s\")\n", - "n = sp.symbols(\"n\")" + "n = sp.symbols(\"n\")\n", + "i = sp.symbols(\"i\")" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -101,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -110,7 +110,7 @@ "4" ] }, - "execution_count": 6, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -122,19 +122,19 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 4.14251966063262 \\cdot 10^{-15}$" + "$\\displaystyle 7.21644966006352 \\cdot 10^{-16}$" ], "text/plain": [ - "4.14251966063262e-15" + "7.21644966006352e-16" ] }, - "execution_count": 7, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -159,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -188,7 +188,7 @@ " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" ] }, - "execution_count": 9, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -210,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -222,7 +222,7 @@ "(-1)**n*x1**2*s(n, i - 1)/factorial(i - 1) + (-1)**n*s(n, i - 3)/factorial(i - 3) + (-3*(-1)**n*n + 5*(-1)**n)*s(n - 1, i - 2)/factorial(i - 2) + (-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2)*s(n - 1, i)/factorial(i) + (3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n)*s(n - 2, i - 1)/factorial(i - 1) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*s(n - 3, i)/factorial(i)" ] }, - "execution_count": 10, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -276,20 +276,21 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 39, "metadata": {}, "outputs": [ { - "ename": "NameError", - "evalue": "name 'i' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[12], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m column_recur \u001b[38;5;241m=\u001b[39m \u001b[43mgrid_recur_to_column_recur\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgrid_recur\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43ms_terms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m column_recur\n", - "Cell \u001b[0;32mIn[11], line 6\u001b[0m, in \u001b[0;36mgrid_recur_to_column_recur\u001b[0;34m(grid_recur, s_terms)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m s_t \u001b[38;5;129;01min\u001b[39;00m s_terms:\n\u001b[1;32m 5\u001b[0m bag\u001b[38;5;241m.\u001b[39madd(\u001b[38;5;241m-\u001b[39m((\u001b[38;5;241m0\u001b[39m\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m]))\n\u001b[0;32m----> 6\u001b[0m grid_recur_simp \u001b[38;5;241m=\u001b[39m grid_recur_simp\u001b[38;5;241m.\u001b[39msubs(s(n\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m0\u001b[39m],\u001b[43mi\u001b[49m\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m]), (\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m(s_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m*\u001b[39ms((n\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m],(i\u001b[38;5;241m-\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m])\u001b[38;5;241m+\u001b[39ms_t[\u001b[38;5;241m1\u001b[39m]))\n\u001b[1;32m 7\u001b[0m shift \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mmin\u001b[39m(bag)\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m sp\u001b[38;5;241m.\u001b[39msolve(sp\u001b[38;5;241m.\u001b[39msimplify(grid_recur_simp \u001b[38;5;241m*\u001b[39m sp\u001b[38;5;241m.\u001b[39mfactorial(i))\u001b[38;5;241m.\u001b[39msubs(n, n\u001b[38;5;241m+\u001b[39mshift), s(n,i))[\u001b[38;5;241m0\u001b[39m]\n", - "\u001b[0;31mNameError\u001b[0m: name 'i' is not defined" - ] + "data": { + "text/latex": [ + "$\\displaystyle \\frac{\\left(- i^{2} - 2 i n + 3 i - n^{2} + 3 n - 2\\right) s{\\left(n - 2,i \\right)}}{x_{1}^{2}}$" + ], + "text/plain": [ + "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -306,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ @@ -320,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -332,7 +333,7 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 115, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -343,32 +344,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle \\frac{- n^{3} s{\\left(n - 2,0 \\right)} + 5 n^{2} s{\\left(n - 2,0 \\right)} - 8 n s{\\left(n - 2,0 \\right)} + 4 s{\\left(n - 2,0 \\right)}}{x_{1}^{2} \\left(n - 2\\right)}$" + "$\\displaystyle \\frac{- 12 s{\\left(-1,2 \\right)} - 36 s{\\left(1,2 \\right)}}{3 x_{1}^{2}}$" ], "text/plain": [ - "(-n**3*s(n - 2, 0) + 5*n**2*s(n - 2, 0) - 8*n*s(n - 2, 0) + 4*s(n - 2, 0))/(x1**2*(n - 2))" + "(-12*s(-1, 2) - 36*s(1, 2))/(3*x1**2)" ] }, - "execution_count": 117, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "get_taylor_recurrence(helmholtz2d)" + "get_taylor_recurrence(helmholtz2d).subs(i, 2).subs(n, 3)" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 6: Check Edge Cases for Grid Recurrence" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [] } ], From 587504d8afc61d3f1b1c61585dc142d5a380d78a Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 27 Dec 2024 23:07:24 -0800 Subject: [PATCH 124/143] Produce plots next time --- test/plot_taylor_recurrence.ipynb | 291 ++++++++++++++++++++++++++---- 1 file changed, 257 insertions(+), 34 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index 79061bee..b7a7a328 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -76,11 +76,11 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ - "def compute_derivatives_h2d(p):\n", + "def compute_derivatives_h2d(p, k=1.0):\n", " var = _make_sympy_vec(\"x\", 2)\n", " var_t = _make_sympy_vec(\"t\", 2)\n", " abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", @@ -101,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -110,39 +110,39 @@ "4" ] }, - "execution_count": 33, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "recur, order = get_shifted_recurrence_exp_from_pde(laplace2d)\n", - "order" + "recur_lap, order_lap = get_shifted_recurrence_exp_from_pde(laplace2d)\n", + "order_lap" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 7.21644966006352 \\cdot 10^{-16}$" + "$\\displaystyle -5.69422980989387 \\cdot 10^{-16}$" ], "text/plain": [ - "7.21644966006352e-16" + "-5.69422980989387e-16" ] }, - "execution_count": 34, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Sanity check that recurrence is correct\n", - "derivs_lap = compute_derivatives(5)\n", - "exp = recur.subs(n, 4)\n", + "derivs_lap = compute_derivatives(15)\n", + "exp = recur_lap.subs(n, 4)\n", "exp.subs(s(4), derivs_lap[4]).subs(s(3), derivs_lap[3]).subs(s(2), derivs_lap[2]).subs(s(1), derivs_lap[1]).subs(var[0],np.random.rand()).subs(var[1],np.random.rand())" ] }, @@ -159,11 +159,11 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "def get_grid(recur):\n", + "def get_grid(recur, order):\n", " poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)])\n", " coeff_s_n = [poly_in_s_n.coeff_monomial(poly_in_s_n.gens[i]) for i in range(order)]\n", "\n", @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -188,13 +188,13 @@ " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" ] }, - "execution_count": 36, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "grid = get_grid(recur)\n", + "grid = get_grid(recur_lap, order_lap)\n", "grid" ] }, @@ -210,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -222,7 +222,7 @@ "(-1)**n*x1**2*s(n, i - 1)/factorial(i - 1) + (-1)**n*s(n, i - 3)/factorial(i - 3) + (-3*(-1)**n*n + 5*(-1)**n)*s(n - 1, i - 2)/factorial(i - 2) + (-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2)*s(n - 1, i)/factorial(i) + (3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n)*s(n - 2, i - 1)/factorial(i - 1) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*s(n - 3, i)/factorial(i)" ] }, - "execution_count": 37, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -276,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -288,7 +288,7 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 39, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -307,13 +307,13 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def get_taylor_recurrence(pde):\n", " recur, order = get_shifted_recurrence_exp_from_pde(pde)\n", - " grid = get_grid(recur)\n", + " grid = get_grid(recur, order)\n", " grid_recur, s_terms = convert(grid)\n", " column_recur = grid_recur_to_column_recur(grid_recur, s_terms)\n", " return column_recur" @@ -321,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -333,7 +333,7 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 41, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -344,19 +344,19 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle \\frac{- 12 s{\\left(-1,2 \\right)} - 36 s{\\left(1,2 \\right)}}{3 x_{1}^{2}}$" + "$\\displaystyle \\frac{- 8 s{\\left(-1,2 \\right)} - 12 s{\\left(1,2 \\right)}}{x_{1}^{2}}$" ], "text/plain": [ - "(-12*s(-1, 2) - 36*s(1, 2))/(3*x1**2)" + "(-8*s(-1, 2) - 12*s(1, 2))/x1**2" ] }, - "execution_count": 46, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -375,6 +375,229 @@ { "cell_type": "markdown", "metadata": {}, + "source": [ + "## Laplace" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[log(sqrt(x1**2)), 0, x1**(-2), 0, -6/x1**4, 0, 120/x1**6, 0],\n", + " [0, -1/x1**2, 0, 6/x1**4, 0, -120/x1**6, 0, 5040/x1**8],\n", + " [x1**(-2), 0, -6/x1**4, 0, 120/x1**6, 0, -5040/x1**8, 0],\n", + " [0, 6/x1**4, 0, -120/x1**6, 0, 5040/x1**8, 0, -362880/x1**10],\n", + " [-6/x1**4, 0, 120/x1**6, 0, -5040/x1**8, 0, 362880/x1**10, 0],\n", + " [0, -120/x1**6, 0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12],\n", + " [120/x1**6, 0, -5040/x1**8, 0, 362880/x1**10, 0, -39916800/x1**12, 0],\n", + " [0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12, 0, -6227020800/x1**14]]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "width_lap_grid = 8\n", + "length_lap_grid = 8\n", + "true_grid_lap = [[sp.diff(derivs_lap[i], var[0], j).subs(var[0], 0) for j in range(width_lap_grid)] for i in range(length_lap_grid)]\n", + "true_grid_lap" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{\\left(- i^{2} - 2 i n + 3 i - n^{2} + 3 n - 2\\right) s{\\left(n - 2,i \\right)}}{x_{1}^{2}}$" + ], + "text/plain": [ + "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_taylor_recurrence(laplace2d)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 0$" + ], + "text/plain": [ + "0" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_taylor_recurrence(laplace2d).subs(n, 2).subs(i, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Helmholtz" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[0.25*I*hankel1(0, 1.0*sqrt(x1**2)),\n", + " 0,\n", + " 0.25*I*(0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2),\n", + " 0],\n", + " [0,\n", + " -0.25*I*(hankel1(-1, 1.0*sqrt(x1**2))/2 - hankel1(1, 1.0*sqrt(x1**2))/2)/sqrt(x1**2),\n", + " 0,\n", + " I*(-(0.75*(0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - 0.75*(0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) + 0.375*(hankel1(-1, 1.0*sqrt(x1**2)) - hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(3/2))],\n", + " [0.25*I*(0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2),\n", + " 0,\n", + " 0.25*I*(((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (1.0*hankel1(-1, 1.0*sqrt(x1**2)) - 1.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**2),\n", + " 0],\n", + " [0,\n", + " 0.25*I*(-(1.0*(0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - 1.0*(0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) + (1.5*hankel1(-1, 1.0*sqrt(x1**2)) - 1.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**2),\n", + " 0,\n", + " I*(0.75*((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) + 0.75*((0.75*hankel1(-2, 1.0*sqrt(x1**2)) - 0.75*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.75*hankel1(0, 1.0*sqrt(x1**2)) - 0.75*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) - 0.75*(3.0*hankel1(-1, 1.0*sqrt(x1**2)) - 3.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(4.5*hankel1(-1, 1.0*sqrt(x1**2)) - 4.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(((0.125*hankel1(-3, 1.0*sqrt(x1**2)) - 0.125*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - ((0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(1, 1.0*sqrt(x1**2)) - 0.125*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 0.5*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(0, 1.0*sqrt(x1**2)) - 0.5*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.5*hankel1(-1, 1.0*sqrt(x1**2)) + 0.25*hankel1(1, 1.0*sqrt(x1**2)))/x1**2 - (0.25*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)) + 0.25*hankel1(3, 1.0*sqrt(x1**2)))/x1**2)/sqrt(x1**2) - 0.75*((0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.25*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) + (0.25*hankel1(1, 1.0*sqrt(x1**2)) - 0.25*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/x1**2 + 1.5*(0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**4 + 0.75*(1.0*hankel1(-2, 1.0*sqrt(x1**2)) - 2.0*hankel1(0, 1.0*sqrt(x1**2)) + 1.0*hankel1(2, 1.0*sqrt(x1**2)))/x1**4)]]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "derivs_helm = compute_derivatives_h2d(5)\n", + "width_helm_grid = 4\n", + "length_helm_grid = 4\n", + "true_grid_helm = [[sp.diff(derivs_helm[i], var[0], j).subs(var[0], 0) for j in range(width_helm_grid)] for i in range(length_helm_grid)]\n", + "true_grid_helm" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{- i^{2} s{\\left(n - 4,i \\right)} - i^{2} s{\\left(n - 2,i \\right)} - 2 i n s{\\left(n - 4,i \\right)} - 2 i n s{\\left(n - 2,i \\right)} + 4 i s{\\left(n - 4,i \\right)} + 3 i s{\\left(n - 2,i \\right)} - n^{2} s{\\left(n - 4,i \\right)} - n^{2} s{\\left(n - 2,i \\right)} + 4 n s{\\left(n - 4,i \\right)} + 3 n s{\\left(n - 2,i \\right)} - 3 s{\\left(n - 4,i \\right)} - 2 s{\\left(n - 2,i \\right)}}{x_{1}^{2}}$" + ], + "text/plain": [ + "(-i**2*s(n - 4, i) - i**2*s(n - 2, i) - 2*i*n*s(n - 4, i) - 2*i*n*s(n - 2, i) + 4*i*s(n - 4, i) + 3*i*s(n - 2, i) - n**2*s(n - 4, i) - n**2*s(n - 2, i) + 4*n*s(n - 4, i) + 3*n*s(n - 2, i) - 3*s(n - 4, i) - 2*s(n - 2, i))/x1**2" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_taylor_recurrence(helmholtz2d)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{- 3 s{\\left(0,0 \\right)} - 6 s{\\left(2,0 \\right)}}{x_{1}^{2}}$" + ], + "text/plain": [ + "(-3*s(0, 0) - 6*s(2, 0))/x1**2" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_taylor_recurrence(helmholtz2d).subs(n, 4).subs(i, 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 38.8984483730777 + 0.0925062333610791 i$" + ], + "text/plain": [ + "38.8984483730777 + 0.0925062333610791*I" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_taylor_recurrence(helmholtz2d).subs(n, 4).subs(i, 0).subs(s(0,0), true_grid_helm[0][0]).subs(s(2,0), true_grid_helm[2][0]).subs(var[1], 0.4).evalf()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 38.8984483730777 + 0.0925062333610797 i$" + ], + "text/plain": [ + "38.8984483730777 + 0.0925062333610797*I" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.diff(derivs_helm[4], var[0], 0).subs(var[0], 0).subs(var[1], 0.4).evalf()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [] } ], From bc24ab23cec525acc93d1199f8014cf7d2f01ca3 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 29 Dec 2024 15:46:17 -0800 Subject: [PATCH 125/143] Code up evaluation of grid_recurrence --- test/plot_taylor_recurrence.ipynb | 203 +++++++++++++++++++++++++++--- 1 file changed, 183 insertions(+), 20 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index b7a7a328..2df60dec 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -128,10 +128,10 @@ { "data": { "text/latex": [ - "$\\displaystyle -5.69422980989387 \\cdot 10^{-16}$" + "$\\displaystyle -1.02418074021671 \\cdot 10^{-14}$" ], "text/plain": [ - "-5.69422980989387e-16" + "-1.02418074021671e-14" ] }, "execution_count": 7, @@ -381,7 +381,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -397,7 +397,7 @@ " [0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12, 0, -6227020800/x1**14]]" ] }, - "execution_count": 29, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -411,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -423,7 +423,7 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 30, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -434,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -446,7 +446,7 @@ "0" ] }, - "execution_count": 31, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -455,6 +455,169 @@ "get_taylor_recurrence(laplace2d).subs(n, 2).subs(i, 0)" ] }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[log(sqrt(x1**2)), 0, x1**(-2), 0, -6/x1**4, 0, 120/x1**6, 0],\n", + " [0, -1/x1**2, 0, 6/x1**4, 0, -120/x1**6, 0, 5040/x1**8]]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "initial_grid = true_grid_lap[0:2]\n", + "initial_grid" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[-0.693147180559945,\n", + " 0,\n", + " 4.00000000000000,\n", + " 0,\n", + " -96.0000000000000,\n", + " 0,\n", + " 7680.00000000000,\n", + " 0],\n", + " [0,\n", + " -4.00000000000000,\n", + " 0,\n", + " 96.0000000000000,\n", + " 0,\n", + " -7680.00000000000,\n", + " 0,\n", + " 1290240.00000000]]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# assume len(initial_grid) >= 1\n", + "initial_grid_subs = []\n", + "initial_grid_width = len(initial_grid[0])\n", + "initial_grid_length = len(initial_grid)\n", + "coord_dict = {var[1]: 0.5}\n", + "\n", + "for i_x in range(initial_grid_length):\n", + " tmp = []\n", + " for j_x in range(initial_grid_width):\n", + " tmp.append(initial_grid[i_x][j_x].subs(var[1],coord_dict[var[1]]))\n", + " initial_grid_subs.append(tmp)\n", + "\n", + "initial_grid_subs" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "grid_recurrence_laplace_2d = get_taylor_recurrence(laplace2d)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "n_derivs_compute = 5\n", + "grid_recurrence_laplace_2d = get_taylor_recurrence(laplace2d)\n", + "order_grid_recur = 2\n", + "\n", + "for n_x in range(initial_grid_length, n_derivs_compute):\n", + " appMe = []\n", + " for i_x in range(initial_grid_width):\n", + " exp_i_n = grid_recurrence_laplace_2d.subs(n, n_x).subs(i, i_x)\n", + " if exp_i_n == 0:\n", + " exp_i_n = sp.diff(derivs_lap[n_x], var[0], i_x).subs(var[0], 0)\n", + " kys = [s(n_x-k,i_x) for k in range(1,order_grid_recur+1)]\n", + " vals = [initial_grid_subs[n_x-k][i_x] for k in range(1, order_grid_recur+1)]\n", + " my_dict = dict(zip(kys, vals))\n", + " res = exp_i_n.subs(my_dict).subs(coord_dict)\n", + " appMe.append(res)\n", + "\n", + "\n", + " initial_grid_subs.append(appMe)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[-0.693147180559945,\n", + " 0,\n", + " 4.00000000000000,\n", + " 0,\n", + " -96.0000000000000,\n", + " 0,\n", + " 7680.00000000000,\n", + " 0],\n", + " [0,\n", + " -4.00000000000000,\n", + " 0,\n", + " 96.0000000000000,\n", + " 0,\n", + " -7680.00000000000,\n", + " 0,\n", + " 1290240.00000000],\n", + " [4.00000000000000,\n", + " 0,\n", + " -96.0000000000000,\n", + " 0,\n", + " 7680.00000000000,\n", + " 0,\n", + " -1290240.00000000,\n", + " 0],\n", + " [0,\n", + " 96.0000000000000,\n", + " 0,\n", + " -7680.00000000000,\n", + " 0,\n", + " 1290240.00000000,\n", + " 0,\n", + " -371589120.000000],\n", + " [-96.0000000000000,\n", + " 0,\n", + " 7680.00000000000,\n", + " 0,\n", + " -1290240.00000000,\n", + " 0,\n", + " 371589120.000000,\n", + " 0]]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "initial_grid_subs" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -464,7 +627,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -488,7 +651,7 @@ " I*(0.75*((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) + 0.75*((0.75*hankel1(-2, 1.0*sqrt(x1**2)) - 0.75*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.75*hankel1(0, 1.0*sqrt(x1**2)) - 0.75*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) - 0.75*(3.0*hankel1(-1, 1.0*sqrt(x1**2)) - 3.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(4.5*hankel1(-1, 1.0*sqrt(x1**2)) - 4.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(((0.125*hankel1(-3, 1.0*sqrt(x1**2)) - 0.125*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - ((0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(1, 1.0*sqrt(x1**2)) - 0.125*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 0.5*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(0, 1.0*sqrt(x1**2)) - 0.5*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.5*hankel1(-1, 1.0*sqrt(x1**2)) + 0.25*hankel1(1, 1.0*sqrt(x1**2)))/x1**2 - (0.25*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)) + 0.25*hankel1(3, 1.0*sqrt(x1**2)))/x1**2)/sqrt(x1**2) - 0.75*((0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.25*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) + (0.25*hankel1(1, 1.0*sqrt(x1**2)) - 0.25*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/x1**2 + 1.5*(0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**4 + 0.75*(1.0*hankel1(-2, 1.0*sqrt(x1**2)) - 2.0*hankel1(0, 1.0*sqrt(x1**2)) + 1.0*hankel1(2, 1.0*sqrt(x1**2)))/x1**4)]]" ] }, - "execution_count": 51, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -503,7 +666,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -515,7 +678,7 @@ "(-i**2*s(n - 4, i) - i**2*s(n - 2, i) - 2*i*n*s(n - 4, i) - 2*i*n*s(n - 2, i) + 4*i*s(n - 4, i) + 3*i*s(n - 2, i) - n**2*s(n - 4, i) - n**2*s(n - 2, i) + 4*n*s(n - 4, i) + 3*n*s(n - 2, i) - 3*s(n - 4, i) - 2*s(n - 2, i))/x1**2" ] }, - "execution_count": 39, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -526,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -538,7 +701,7 @@ "(-3*s(0, 0) - 6*s(2, 0))/x1**2" ] }, - "execution_count": 41, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -549,7 +712,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -561,7 +724,7 @@ "38.8984483730777 + 0.0925062333610791*I" ] }, - "execution_count": 53, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -572,7 +735,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -584,7 +747,7 @@ "38.8984483730777 + 0.0925062333610797*I" ] }, - "execution_count": 54, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } From c0cf35cf160f0063b8ec72422ef6f2c5c5dc3b5f Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 31 Dec 2024 20:20:25 -0800 Subject: [PATCH 126/143] Update plot_taylor_recurrence.ipynb --- test/plot_taylor_recurrence.ipynb | 330 +++++++++++------------------- 1 file changed, 125 insertions(+), 205 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index 2df60dec..243315e2 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -128,10 +128,10 @@ { "data": { "text/latex": [ - "$\\displaystyle -1.02418074021671 \\cdot 10^{-14}$" + "$\\displaystyle 3.70536934468646 \\cdot 10^{-15}$" ], "text/plain": [ - "-1.02418074021671e-14" + "3.70536934468646e-15" ] }, "execution_count": 7, @@ -411,211 +411,135 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 41, "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\frac{\\left(- i^{2} - 2 i n + 3 i - n^{2} + 3 n - 2\\right) s{\\left(n - 2,i \\right)}}{x_{1}^{2}}$" - ], - "text/plain": [ - "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_taylor_recurrence(laplace2d)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle 0$" - ], - "text/plain": [ - "0" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_taylor_recurrence(laplace2d).subs(n, 2).subs(i, 0)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[log(sqrt(x1**2)), 0, x1**(-2), 0, -6/x1**4, 0, 120/x1**6, 0],\n", - " [0, -1/x1**2, 0, 6/x1**4, 0, -120/x1**6, 0, 5040/x1**8]]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "initial_grid = true_grid_lap[0:2]\n", - "initial_grid" + "def create_subs_grid(width, length, derivs, coord_dict):\n", + " initial_grid = [[sp.diff(derivs[i], var[0], j).subs(var[0], 0) for j in range(width)] for i in range(length)]\n", + "\n", + " # assume len(initial_grid) >= 1\n", + " initial_grid_subs = []\n", + " initial_grid_width = len(initial_grid[0])\n", + " initial_grid_length = len(initial_grid)\n", + " coord_dict = {var[1]: 1}\n", + "\n", + " for i_x in range(initial_grid_length):\n", + " tmp = []\n", + " for j_x in range(initial_grid_width):\n", + " tmp.append((initial_grid[i_x][j_x].subs(var[1],coord_dict[var[1]])).evalf())\n", + " initial_grid_subs.append(tmp)\n", + " \n", + " return initial_grid_subs\n" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[-0.693147180559945,\n", - " 0,\n", - " 4.00000000000000,\n", - " 0,\n", - " -96.0000000000000,\n", - " 0,\n", - " 7680.00000000000,\n", - " 0],\n", - " [0,\n", - " -4.00000000000000,\n", - " 0,\n", - " 96.0000000000000,\n", - " 0,\n", - " -7680.00000000000,\n", - " 0,\n", - " 1290240.00000000]]" + "[[0, 0, 1.00000000000000, 0, -6.00000000000000, 0],\n", + " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000]]" ] }, - "execution_count": 30, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# assume len(initial_grid) >= 1\n", - "initial_grid_subs = []\n", - "initial_grid_width = len(initial_grid[0])\n", - "initial_grid_length = len(initial_grid)\n", - "coord_dict = {var[1]: 0.5}\n", - "\n", - "for i_x in range(initial_grid_length):\n", - " tmp = []\n", - " for j_x in range(initial_grid_width):\n", - " tmp.append(initial_grid[i_x][j_x].subs(var[1],coord_dict[var[1]]))\n", - " initial_grid_subs.append(tmp)\n", - "\n", - "initial_grid_subs" + "coord_dict = {var[1]: 1}\n", + "initial_grid_subs_laplace = create_subs_grid(6, 2, derivs_lap, coord_dict)\n", + "initial_grid_subs_laplace" ] }, { - "cell_type": "code", - "execution_count": 31, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "grid_recurrence_laplace_2d = get_taylor_recurrence(laplace2d)" + "### Package into Function" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ - "n_derivs_compute = 5\n", - "grid_recurrence_laplace_2d = get_taylor_recurrence(laplace2d)\n", - "order_grid_recur = 2\n", + "def extend_grid(initial_grid_in, grid_recur, coord_dict, n_derivs_compute, order_grid_recur):\n", + " initial_grid_subs = [row[:] for row in initial_grid_in] #deep copy\n", + "\n", + " initial_grid_width = len(initial_grid_subs[0])\n", + " initial_grid_length = len(initial_grid_subs)\n", "\n", - "for n_x in range(initial_grid_length, n_derivs_compute):\n", - " appMe = []\n", - " for i_x in range(initial_grid_width):\n", - " exp_i_n = grid_recurrence_laplace_2d.subs(n, n_x).subs(i, i_x)\n", - " if exp_i_n == 0:\n", - " exp_i_n = sp.diff(derivs_lap[n_x], var[0], i_x).subs(var[0], 0)\n", - " kys = [s(n_x-k,i_x) for k in range(1,order_grid_recur+1)]\n", - " vals = [initial_grid_subs[n_x-k][i_x] for k in range(1, order_grid_recur+1)]\n", - " my_dict = dict(zip(kys, vals))\n", - " res = exp_i_n.subs(my_dict).subs(coord_dict)\n", - " appMe.append(res)\n", + " for n_x in range(initial_grid_length, n_derivs_compute):\n", + " appMe = []\n", + " for i_x in range(initial_grid_width):\n", + " exp_i_n = grid_recur.subs(n, n_x).subs(i, i_x)\n", + " if exp_i_n == 0:\n", + " exp_i_n = sp.diff(derivs_lap[n_x], var[0], i_x).subs(var[0], 0)\n", + " assert n_x-order_grid_recur >= 0\n", + " kys = [s(n_x-k,i_x) for k in range(1,order_grid_recur+1)]\n", + " vals = [initial_grid_subs[n_x-k][i_x] for k in range(1, order_grid_recur+1)]\n", + " my_dict = dict(zip(kys, vals))\n", + " res = exp_i_n.subs(my_dict).subs(coord_dict)\n", + " appMe.append(res)\n", "\n", + " initial_grid_subs.append(appMe)\n", "\n", - " initial_grid_subs.append(appMe)\n" + " return initial_grid_subs\n" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[-0.693147180559945,\n", + "[[-0.0220642410539192 + 0.191299421639492*I,\n", " 0,\n", - " 4.00000000000000,\n", + " -0.195303205325072 - 0.110012646436233*I,\n", " 0,\n", - " -96.0000000000000,\n", - " 0,\n", - " 7680.00000000000,\n", + " 1.23801195511219 + 0.0861776136989254*I,\n", " 0],\n", " [0,\n", - " -4.00000000000000,\n", - " 0,\n", - " 96.0000000000000,\n", + " 0.195303205325072 + 0.110012646436233*I,\n", " 0,\n", - " -7680.00000000000,\n", + " -1.23801195511219 - 0.0861776136989254*I,\n", " 0,\n", - " 1290240.00000000],\n", - " [4.00000000000000,\n", + " 21.8306910223677 + 0.0733625774350065*I],\n", + " [1,\n", " 0,\n", - " -96.0000000000000,\n", + " 1.17181923195043 + 0.6600758786174*I,\n", " 0,\n", - " 7680.00000000000,\n", - " 0,\n", - " -1290240.00000000,\n", + " -24.7602391022438 - 1.72355227397851*I,\n", " 0],\n", " [0,\n", - " 96.0000000000000,\n", - " 0,\n", - " -7680.00000000000,\n", + " -1.17181923195043 - 0.6600758786174*I,\n", " 0,\n", - " 1290240.00000000,\n", + " 24.7602391022438 + 1.72355227397851*I,\n", " 0,\n", - " -371589120.000000],\n", - " [-96.0000000000000,\n", + " -916.889022939445 - 3.08122825227027*I],\n", + " [-6,\n", " 0,\n", - " 7680.00000000000,\n", + " -23.4363846390087 - 13.201517572348*I,\n", " 0,\n", - " -1290240.00000000,\n", - " 0,\n", - " 371589120.000000,\n", + " 1039.93004229424 + 72.3891955070973*I,\n", " 0]]" ] }, - "execution_count": 33, + "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "initial_grid_subs" + "extend_grid(initial_grid_subs_laplace, get_taylor_recurrence(laplace2d), coord_dict, 5, 2)" ] }, { @@ -627,7 +551,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, "metadata": {}, "outputs": [ { @@ -651,7 +575,7 @@ " I*(0.75*((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) + 0.75*((0.75*hankel1(-2, 1.0*sqrt(x1**2)) - 0.75*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.75*hankel1(0, 1.0*sqrt(x1**2)) - 0.75*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) - 0.75*(3.0*hankel1(-1, 1.0*sqrt(x1**2)) - 3.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(4.5*hankel1(-1, 1.0*sqrt(x1**2)) - 4.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(((0.125*hankel1(-3, 1.0*sqrt(x1**2)) - 0.125*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - ((0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(1, 1.0*sqrt(x1**2)) - 0.125*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 0.5*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(0, 1.0*sqrt(x1**2)) - 0.5*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.5*hankel1(-1, 1.0*sqrt(x1**2)) + 0.25*hankel1(1, 1.0*sqrt(x1**2)))/x1**2 - (0.25*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)) + 0.25*hankel1(3, 1.0*sqrt(x1**2)))/x1**2)/sqrt(x1**2) - 0.75*((0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.25*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) + (0.25*hankel1(1, 1.0*sqrt(x1**2)) - 0.25*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/x1**2 + 1.5*(0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**4 + 0.75*(1.0*hankel1(-2, 1.0*sqrt(x1**2)) - 2.0*hankel1(0, 1.0*sqrt(x1**2)) + 1.0*hankel1(2, 1.0*sqrt(x1**2)))/x1**4)]]" ] }, - "execution_count": 19, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } @@ -666,94 +590,90 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\frac{- i^{2} s{\\left(n - 4,i \\right)} - i^{2} s{\\left(n - 2,i \\right)} - 2 i n s{\\left(n - 4,i \\right)} - 2 i n s{\\left(n - 2,i \\right)} + 4 i s{\\left(n - 4,i \\right)} + 3 i s{\\left(n - 2,i \\right)} - n^{2} s{\\left(n - 4,i \\right)} - n^{2} s{\\left(n - 2,i \\right)} + 4 n s{\\left(n - 4,i \\right)} + 3 n s{\\left(n - 2,i \\right)} - 3 s{\\left(n - 4,i \\right)} - 2 s{\\left(n - 2,i \\right)}}{x_{1}^{2}}$" - ], - "text/plain": [ - "(-i**2*s(n - 4, i) - i**2*s(n - 2, i) - 2*i*n*s(n - 4, i) - 2*i*n*s(n - 2, i) + 4*i*s(n - 4, i) + 3*i*s(n - 2, i) - n**2*s(n - 4, i) - n**2*s(n - 2, i) + 4*n*s(n - 4, i) + 3*n*s(n - 2, i) - 3*s(n - 4, i) - 2*s(n - 2, i))/x1**2" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_taylor_recurrence(helmholtz2d)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\frac{- 3 s{\\left(0,0 \\right)} - 6 s{\\left(2,0 \\right)}}{x_{1}^{2}}$" - ], - "text/plain": [ - "(-3*s(0, 0) - 6*s(2, 0))/x1**2" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_taylor_recurrence(helmholtz2d).subs(n, 4).subs(i, 0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 68, "metadata": {}, "outputs": [ { "data": { - "text/latex": [ - "$\\displaystyle 38.8984483730777 + 0.0925062333610791 i$" - ], "text/plain": [ - "38.8984483730777 + 0.0925062333610791*I" + "[[-0.0220642410539192 + 0.191299421639492*I,\n", + " 0,\n", + " -0.195303205325072 - 0.110012646436233*I,\n", + " 0],\n", + " [0,\n", + " 0.195303205325072 + 0.110012646436233*I,\n", + " 0,\n", + " -1.23801195511219 - 0.0861776136989254*I],\n", + " [-0.195303205325072 - 0.110012646436233*I,\n", + " 0,\n", + " 1.23801195511219 + 0.0861776136989254*I,\n", + " 0],\n", + " [0,\n", + " -1.23801195511219 - 0.0861776136989254*I,\n", + " 0,\n", + " 21.8306910223677 + 0.0733625774350065*I]]" ] }, - "execution_count": 22, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "get_taylor_recurrence(helmholtz2d).subs(n, 4).subs(i, 0).subs(s(0,0), true_grid_helm[0][0]).subs(s(2,0), true_grid_helm[2][0]).subs(var[1], 0.4).evalf()" + "coord_dict = {var[1]: 1}\n", + "initial_grid_subs_helmholtz = create_subs_grid(4, 4, derivs_helm, coord_dict)\n", + "initial_grid_subs_helmholtz" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 70, "metadata": {}, "outputs": [ { "data": { - "text/latex": [ - "$\\displaystyle 38.8984483730777 + 0.0925062333610797 i$" - ], "text/plain": [ - "38.8984483730777 + 0.0925062333610797*I" + "[[-0.0220642410539192 + 0.191299421639492*I,\n", + " 0,\n", + " -0.195303205325072 - 0.110012646436233*I,\n", + " 0],\n", + " [0,\n", + " 0.195303205325072 + 0.110012646436233*I,\n", + " 0,\n", + " -1.23801195511219 - 0.0861776136989254*I],\n", + " [-0.195303205325072 - 0.110012646436233*I,\n", + " 0,\n", + " 1.23801195511219 + 0.0861776136989254*I,\n", + " 0],\n", + " [0,\n", + " -1.23801195511219 - 0.0861776136989254*I,\n", + " 0,\n", + " 21.8306910223677 + 0.0733625774350065*I],\n", + " [1.23801195511219 + 0.0861776136989253*I,\n", + " 0,\n", + " -21.8306910223677 - 0.0733625774350066*I,\n", + " 0],\n", + " [0,\n", + " 21.8306910223677 + 0.0733625774350066*I,\n", + " 0,\n", + " -873.558604510518 - 0.0650117728078867*I],\n", + " [-21.8306910223677 - 0.0733625774350053*I,\n", + " 0,\n", + " 873.558604510518 + 0.0650117728078907*I,\n", + " 0],\n", + " [0,\n", + " -873.558604510518 - 0.0650117728078907*I,\n", + " 0,\n", + " 61520.8859903481 + 0.0590052637624332*I]]" ] }, - "execution_count": 23, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sp.diff(derivs_helm[4], var[0], 0).subs(var[0], 0).subs(var[1], 0.4).evalf()" + "extend_grid(initial_grid_subs_helmholtz, get_taylor_recurrence(helmholtz2d), coord_dict, 8, 4)" ] }, { From ca86b252ca4b027d96196740631ef1d2902cc7b0 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 31 Dec 2024 20:53:43 -0800 Subject: [PATCH 127/143] Added code to compute taylor lp. Need plot now --- test/plot_taylor_recurrence.ipynb | 137 +++++++++++------------------- 1 file changed, 49 insertions(+), 88 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index 243315e2..c923ddf0 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -128,10 +128,10 @@ { "data": { "text/latex": [ - "$\\displaystyle 3.70536934468646 \\cdot 10^{-15}$" + "$\\displaystyle 5.10702591327572 \\cdot 10^{-15}$" ], "text/plain": [ - "3.70536934468646e-15" + "5.10702591327572e-15" ] }, "execution_count": 7, @@ -411,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -435,7 +435,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -445,13 +445,13 @@ " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000]]" ] }, - "execution_count": 42, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "coord_dict = {var[1]: 1}\n", + "coord_dict = {var[0]: 2, var[1]: 1}\n", "initial_grid_subs_laplace = create_subs_grid(6, 2, derivs_lap, coord_dict)\n", "initial_grid_subs_laplace" ] @@ -465,7 +465,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -495,45 +495,20 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[-0.0220642410539192 + 0.191299421639492*I,\n", - " 0,\n", - " -0.195303205325072 - 0.110012646436233*I,\n", - " 0,\n", - " 1.23801195511219 + 0.0861776136989254*I,\n", - " 0],\n", - " [0,\n", - " 0.195303205325072 + 0.110012646436233*I,\n", - " 0,\n", - " -1.23801195511219 - 0.0861776136989254*I,\n", - " 0,\n", - " 21.8306910223677 + 0.0733625774350065*I],\n", - " [1,\n", - " 0,\n", - " 1.17181923195043 + 0.6600758786174*I,\n", - " 0,\n", - " -24.7602391022438 - 1.72355227397851*I,\n", - " 0],\n", - " [0,\n", - " -1.17181923195043 - 0.6600758786174*I,\n", - " 0,\n", - " 24.7602391022438 + 1.72355227397851*I,\n", - " 0,\n", - " -916.889022939445 - 3.08122825227027*I],\n", - " [-6,\n", - " 0,\n", - " -23.4363846390087 - 13.201517572348*I,\n", - " 0,\n", - " 1039.93004229424 + 72.3891955070973*I,\n", - " 0]]" + "[[0, 0, 1.00000000000000, 0, -6.00000000000000, 0],\n", + " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000],\n", + " [1, 0, -6.00000000000000, 0, 120.000000000000, 0],\n", + " [0, 6.00000000000000, 0, -120.000000000000, 0, 5040.00000000000],\n", + " [-6, 0, 120.000000000000, 0, -5040.00000000000, 0]]" ] }, - "execution_count": 63, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -551,7 +526,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -575,7 +550,7 @@ " I*(0.75*((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) + 0.75*((0.75*hankel1(-2, 1.0*sqrt(x1**2)) - 0.75*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.75*hankel1(0, 1.0*sqrt(x1**2)) - 0.75*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) - 0.75*(3.0*hankel1(-1, 1.0*sqrt(x1**2)) - 3.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(4.5*hankel1(-1, 1.0*sqrt(x1**2)) - 4.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(((0.125*hankel1(-3, 1.0*sqrt(x1**2)) - 0.125*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - ((0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(1, 1.0*sqrt(x1**2)) - 0.125*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 0.5*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(0, 1.0*sqrt(x1**2)) - 0.5*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.5*hankel1(-1, 1.0*sqrt(x1**2)) + 0.25*hankel1(1, 1.0*sqrt(x1**2)))/x1**2 - (0.25*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)) + 0.25*hankel1(3, 1.0*sqrt(x1**2)))/x1**2)/sqrt(x1**2) - 0.75*((0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.25*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) + (0.25*hankel1(1, 1.0*sqrt(x1**2)) - 0.25*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/x1**2 + 1.5*(0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**4 + 0.75*(1.0*hankel1(-2, 1.0*sqrt(x1**2)) - 2.0*hankel1(0, 1.0*sqrt(x1**2)) + 1.0*hankel1(2, 1.0*sqrt(x1**2)))/x1**4)]]" ] }, - "execution_count": 64, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -590,7 +565,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -614,7 +589,7 @@ " 21.8306910223677 + 0.0733625774350065*I]]" ] }, - "execution_count": 68, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -627,53 +602,39 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 23, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[-0.0220642410539192 + 0.191299421639492*I,\n", - " 0,\n", - " -0.195303205325072 - 0.110012646436233*I,\n", - " 0],\n", - " [0,\n", - " 0.195303205325072 + 0.110012646436233*I,\n", - " 0,\n", - " -1.23801195511219 - 0.0861776136989254*I],\n", - " [-0.195303205325072 - 0.110012646436233*I,\n", - " 0,\n", - " 1.23801195511219 + 0.0861776136989254*I,\n", - " 0],\n", - " [0,\n", - " -1.23801195511219 - 0.0861776136989254*I,\n", - " 0,\n", - " 21.8306910223677 + 0.0733625774350065*I],\n", - " [1.23801195511219 + 0.0861776136989253*I,\n", - " 0,\n", - " -21.8306910223677 - 0.0733625774350066*I,\n", - " 0],\n", - " [0,\n", - " 21.8306910223677 + 0.0733625774350066*I,\n", - " 0,\n", - " -873.558604510518 - 0.0650117728078867*I],\n", - " [-21.8306910223677 - 0.0733625774350053*I,\n", - " 0,\n", - " 873.558604510518 + 0.0650117728078907*I,\n", - " 0],\n", - " [0,\n", - " -873.558604510518 - 0.0650117728078907*I,\n", - " 0,\n", - " 61520.8859903481 + 0.0590052637624332*I]]" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "source": [ + "extended_grid_helmholtz = extend_grid(initial_grid_subs_helmholtz, get_taylor_recurrence(helmholtz2d), coord_dict, 8, 4)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "inp_grid = np.array(extended_grid_helmholtz, dtype=complex)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "r, c = inp_grid.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], "source": [ - "extend_grid(initial_grid_subs_helmholtz, get_taylor_recurrence(helmholtz2d), coord_dict, 8, 4)" + "def compute_taylor_lp(inp_grid, coord_dict):\n", + " return np.sum(inp_grid * np.reshape(np.array([coord_dict[var[0]]**i for i in range(c)]), (1, c)), axis = 1)" ] }, { From f74e8edf82ea6ef1cb6daf836a2cc47d680bcb67 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 1 Jan 2025 12:55:14 -0800 Subject: [PATCH 128/143] Produced plot --- test/plot_taylor_recurrence.ipynb | 576 +++++++++++++++++++++++++++--- 1 file changed, 522 insertions(+), 54 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index c923ddf0..0fac5fef 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -35,9 +35,19 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "var = _make_sympy_vec(\"x\", 2)\n", "s = sp.Function(\"s\")\n", @@ -47,9 +57,19 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "w = make_identity_diff_op(2)\n", "laplace2d = laplacian(w)\n", @@ -60,9 +80,19 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "def compute_derivatives(p):\n", " var = _make_sympy_vec(\"x\", 2)\n", @@ -76,9 +106,19 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "def compute_derivatives_h2d(p, k=1.0):\n", " var = _make_sympy_vec(\"x\", 2)\n", @@ -101,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -110,9 +150,18 @@ "4" ] }, - "execution_count": 6, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -122,21 +171,30 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 5.10702591327572 \\cdot 10^{-15}$" + "$\\displaystyle 5.55111512312578 \\cdot 10^{-16}$" ], "text/plain": [ - "5.10702591327572e-15" + "5.55111512312578e-16" ] }, - "execution_count": 7, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -159,9 +217,19 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "def get_grid(recur, order):\n", " poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)])\n", @@ -176,7 +244,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -188,9 +256,18 @@ " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" ] }, - "execution_count": 9, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -210,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -222,9 +299,18 @@ "(-1)**n*x1**2*s(n, i - 1)/factorial(i - 1) + (-1)**n*s(n, i - 3)/factorial(i - 3) + (-3*(-1)**n*n + 5*(-1)**n)*s(n - 1, i - 2)/factorial(i - 2) + (-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2)*s(n - 1, i)/factorial(i) + (3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n)*s(n - 2, i - 1)/factorial(i - 1) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*s(n - 3, i)/factorial(i)" ] }, - "execution_count": 10, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -260,9 +346,19 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "def grid_recur_to_column_recur(grid_recur, s_terms):\n", " grid_recur_simp = grid_recur\n", @@ -276,7 +372,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -288,9 +384,18 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 12, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -307,9 +412,19 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "def get_taylor_recurrence(pde):\n", " recur, order = get_shifted_recurrence_exp_from_pde(pde)\n", @@ -321,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -333,9 +448,18 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 14, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -344,7 +468,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -356,9 +480,18 @@ "(-8*s(-1, 2) - 12*s(1, 2))/x1**2" ] }, - "execution_count": 15, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -381,7 +514,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -397,9 +530,18 @@ " [0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12, 0, -6227020800/x1**14]]" ] }, - "execution_count": 16, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -411,9 +553,19 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "def create_subs_grid(width, length, derivs, coord_dict):\n", " initial_grid = [[sp.diff(derivs[i], var[0], j).subs(var[0], 0) for j in range(width)] for i in range(length)]\n", @@ -435,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -445,9 +597,18 @@ " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000]]" ] }, - "execution_count": 33, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -465,9 +626,19 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "def extend_grid(initial_grid_in, grid_recur, coord_dict, n_derivs_compute, order_grid_recur):\n", " initial_grid_subs = [row[:] for row in initial_grid_in] #deep copy\n", @@ -495,7 +666,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -508,9 +679,18 @@ " [-6, 0, 120.000000000000, 0, -5040.00000000000, 0]]" ] }, - "execution_count": 20, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -526,7 +706,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -550,9 +730,18 @@ " I*(0.75*((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) + 0.75*((0.75*hankel1(-2, 1.0*sqrt(x1**2)) - 0.75*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.75*hankel1(0, 1.0*sqrt(x1**2)) - 0.75*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) - 0.75*(3.0*hankel1(-1, 1.0*sqrt(x1**2)) - 3.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(4.5*hankel1(-1, 1.0*sqrt(x1**2)) - 4.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(((0.125*hankel1(-3, 1.0*sqrt(x1**2)) - 0.125*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - ((0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(1, 1.0*sqrt(x1**2)) - 0.125*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 0.5*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(0, 1.0*sqrt(x1**2)) - 0.5*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.5*hankel1(-1, 1.0*sqrt(x1**2)) + 0.25*hankel1(1, 1.0*sqrt(x1**2)))/x1**2 - (0.25*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)) + 0.25*hankel1(3, 1.0*sqrt(x1**2)))/x1**2)/sqrt(x1**2) - 0.75*((0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.25*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) + (0.25*hankel1(1, 1.0*sqrt(x1**2)) - 0.25*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/x1**2 + 1.5*(0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**4 + 0.75*(1.0*hankel1(-2, 1.0*sqrt(x1**2)) - 2.0*hankel1(0, 1.0*sqrt(x1**2)) + 1.0*hankel1(2, 1.0*sqrt(x1**2)))/x1**4)]]" ] }, - "execution_count": 21, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -565,7 +754,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -589,9 +778,18 @@ " 21.8306910223677 + 0.0733625774350065*I]]" ] }, - "execution_count": 22, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -602,46 +800,316 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "extended_grid_helmholtz = extend_grid(initial_grid_subs_helmholtz, get_taylor_recurrence(helmholtz2d), coord_dict, 8, 4)" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "inp_grid = np.array(extended_grid_helmholtz, dtype=complex)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "r, c = inp_grid.shape" ] }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 52, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [ "def compute_taylor_lp(inp_grid, coord_dict):\n", - " return np.sum(inp_grid * np.reshape(np.array([coord_dict[var[0]]**i for i in range(c)]), (1, c)), axis = 1)" + " inp_grid = np.array(inp_grid)\n", + " _, c = inp_grid.shape\n", + " return np.sum(inp_grid * np.reshape(np.array([coord_dict[var[0]]**i/math.factorial(i) for i in range(c)]), (1, c)), axis = 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Step Final: Create an Interface that Ignores the Taylor Series Grid Structure" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "def compute_lp_orders(pde, loc, num_of_derivs, derivs_list, recur_order, taylor_order):\n", + " var = _make_sympy_vec(\"x\", 2)\n", + " coord_dict_t = {var[0]: loc[0], var[1]: loc[1]}\n", + "\n", + " initial_grid_subs = create_subs_grid(taylor_order, recur_order, derivs_list, coord_dict_t)\n", + "\n", + " extended_grid = extend_grid(initial_grid_subs, get_taylor_recurrence(pde), coord_dict_t, num_of_derivs, recur_order)\n", + "\n", + " return compute_taylor_lp(extended_grid, coord_dict_t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Test for Laplace 2D" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "def evaluate_true(coord_dict, p, derivs_list):\n", + " retMe = []\n", + " for i in range(p):\n", + " exp = derivs_list[i]\n", + " f = sp.lambdify(var, exp)\n", + " retMe.append(f(coord_dict[var[0]], coord_dict[var[1]]))\n", + " return np.array(retMe)" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "def compute_error_coord_tg(loc, pde, derivs_list, n_of_derivs, taylor_order, recur_order):\n", + " exp = compute_lp_orders(pde, loc, n_of_derivs+1, derivs_list, recur_order, taylor_order)\n", + " coord_dict_test = {var[0]: loc[0], var[1]: loc[1]}\n", + " true = evaluate_true(coord_dict_test, n_of_derivs+1, derivs_lap)\n", + "\n", + " return (np.abs(exp[-1]-true[-1])/np.abs(true[-1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 1.29081957436961 \\cdot 10^{-14}$" + ], + "text/plain": [ + "1.29081957436961e-14" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "loc = np.array([1e-4, 1])\n", + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 6, 4, 2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "def generate_error_grid(res, order_plot, pde, derivs, taylor_order, recur_order):\n", + " x_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", + " y_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", + " res=len(x_grid)\n", + " plot_me = np.empty((res, res))\n", + " for i in range(res):\n", + " for j in range(res):\n", + " if abs(x_grid[i]) == abs(y_grid[j]):\n", + " plot_me[i, j] = 1e-16\n", + " else:\n", + " plot_me[i,j] = compute_error_coord_tg(np.array([x_grid[i],y_grid[j]]), pde, derivs, order_plot, taylor_order, recur_order)\n", + " if plot_me[i,j] == 0:\n", + " plot_me[i, j] = 1e-16\n", + " return x_grid, y_grid, plot_me" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'source y-coord')" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "x_grid, y_grid, plot_me_lap = generate_error_grid(8, 8, laplace2d, derivs_lap, 2, 2)\n", + "plt.contourf(x_grid, y_grid, plot_me_lap.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "plt.colorbar()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.xlabel(\"source x-coord\")\n", + "plt.ylabel(\"source y-coord\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], "source": [] } ], From b3364f8117b49ec483bd43fd115771486f38f0a7 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 1 Jan 2025 17:03:10 -0800 Subject: [PATCH 129/143] Plot working --- test/plot_taylor_recurrence.ipynb | 512 ++++++------------------------ 1 file changed, 102 insertions(+), 410 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index 0fac5fef..9fbe639a 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -35,19 +35,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "var = _make_sympy_vec(\"x\", 2)\n", "s = sp.Function(\"s\")\n", @@ -57,19 +47,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "w = make_identity_diff_op(2)\n", "laplace2d = laplacian(w)\n", @@ -80,19 +60,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def compute_derivatives(p):\n", " var = _make_sympy_vec(\"x\", 2)\n", @@ -106,19 +76,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def compute_derivatives_h2d(p, k=1.0):\n", " var = _make_sympy_vec(\"x\", 2)\n", @@ -141,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -150,18 +110,9 @@ "4" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -171,30 +122,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 5.55111512312578 \\cdot 10^{-16}$" + "$\\displaystyle 4.44089209850063 \\cdot 10^{-16}$" ], "text/plain": [ - "5.55111512312578e-16" + "4.44089209850063e-16" ] }, - "execution_count": 10, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -217,19 +159,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def get_grid(recur, order):\n", " poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)])\n", @@ -244,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -256,18 +188,9 @@ " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" ] }, - "execution_count": 12, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -287,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -299,18 +222,9 @@ "(-1)**n*x1**2*s(n, i - 1)/factorial(i - 1) + (-1)**n*s(n, i - 3)/factorial(i - 3) + (-3*(-1)**n*n + 5*(-1)**n)*s(n - 1, i - 2)/factorial(i - 2) + (-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2)*s(n - 1, i)/factorial(i) + (3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n)*s(n - 2, i - 1)/factorial(i - 1) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*s(n - 3, i)/factorial(i)" ] }, - "execution_count": 13, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -346,19 +260,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def grid_recur_to_column_recur(grid_recur, s_terms):\n", " grid_recur_simp = grid_recur\n", @@ -372,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -384,18 +288,9 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 15, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -412,19 +307,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def get_taylor_recurrence(pde):\n", " recur, order = get_shifted_recurrence_exp_from_pde(pde)\n", @@ -436,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -448,18 +333,9 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 17, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -468,7 +344,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -480,18 +356,9 @@ "(-8*s(-1, 2) - 12*s(1, 2))/x1**2" ] }, - "execution_count": 18, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -514,7 +381,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -530,18 +397,9 @@ " [0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12, 0, -6227020800/x1**14]]" ] }, - "execution_count": 19, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -553,19 +411,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def create_subs_grid(width, length, derivs, coord_dict):\n", " initial_grid = [[sp.diff(derivs[i], var[0], j).subs(var[0], 0) for j in range(width)] for i in range(length)]\n", @@ -587,7 +435,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -597,18 +445,9 @@ " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000]]" ] }, - "execution_count": 21, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -626,19 +465,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def extend_grid(initial_grid_in, grid_recur, coord_dict, n_derivs_compute, order_grid_recur):\n", " initial_grid_subs = [row[:] for row in initial_grid_in] #deep copy\n", @@ -666,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -679,18 +508,9 @@ " [-6, 0, 120.000000000000, 0, -5040.00000000000, 0]]" ] }, - "execution_count": 23, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -706,7 +526,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -730,18 +550,9 @@ " I*(0.75*((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) + 0.75*((0.75*hankel1(-2, 1.0*sqrt(x1**2)) - 0.75*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.75*hankel1(0, 1.0*sqrt(x1**2)) - 0.75*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) - 0.75*(3.0*hankel1(-1, 1.0*sqrt(x1**2)) - 3.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(4.5*hankel1(-1, 1.0*sqrt(x1**2)) - 4.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(((0.125*hankel1(-3, 1.0*sqrt(x1**2)) - 0.125*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - ((0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(1, 1.0*sqrt(x1**2)) - 0.125*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 0.5*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(0, 1.0*sqrt(x1**2)) - 0.5*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.5*hankel1(-1, 1.0*sqrt(x1**2)) + 0.25*hankel1(1, 1.0*sqrt(x1**2)))/x1**2 - (0.25*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)) + 0.25*hankel1(3, 1.0*sqrt(x1**2)))/x1**2)/sqrt(x1**2) - 0.75*((0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.25*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) + (0.25*hankel1(1, 1.0*sqrt(x1**2)) - 0.25*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/x1**2 + 1.5*(0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**4 + 0.75*(1.0*hankel1(-2, 1.0*sqrt(x1**2)) - 2.0*hankel1(0, 1.0*sqrt(x1**2)) + 1.0*hankel1(2, 1.0*sqrt(x1**2)))/x1**4)]]" ] }, - "execution_count": 24, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -754,7 +565,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -778,18 +589,9 @@ " 21.8306910223677 + 0.0733625774350065*I]]" ] }, - "execution_count": 25, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -800,76 +602,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "extended_grid_helmholtz = extend_grid(initial_grid_subs_helmholtz, get_taylor_recurrence(helmholtz2d), coord_dict, 8, 4)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "inp_grid = np.array(extended_grid_helmholtz, dtype=complex)" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 25, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "r, c = inp_grid.shape" ] }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 26, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def compute_taylor_lp(inp_grid, coord_dict):\n", " inp_grid = np.array(inp_grid)\n", @@ -886,19 +648,9 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 27, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def compute_lp_orders(pde, loc, num_of_derivs, derivs_list, recur_order, taylor_order):\n", " var = _make_sympy_vec(\"x\", 2)\n", @@ -920,19 +672,9 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 28, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def evaluate_true(coord_dict, p, derivs_list):\n", " retMe = []\n", @@ -945,37 +687,9 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 36, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def compute_error_coord_tg(loc, pde, derivs_list, n_of_derivs, taylor_order, recur_order):\n", " exp = compute_lp_orders(pde, loc, n_of_derivs+1, derivs_list, recur_order, taylor_order)\n", @@ -987,52 +701,33 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 1.29081957436961 \\cdot 10^{-14}$" + "$\\displaystyle 2.10000031158992 \\cdot 10^{-7}$" ], "text/plain": [ - "1.29081957436961e-14" + "2.10000031158992e-7" ] }, - "execution_count": 85, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ "loc = np.array([1e-4, 1])\n", - "compute_error_coord_tg(loc, laplace2d, derivs_lap, 6, 4, 2)" + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 6, 2, 2)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "def generate_error_grid(res, order_plot, pde, derivs, taylor_order, recur_order):\n", " x_grid = [10**(pw) for pw in np.linspace(-8, 0, res)]\n", @@ -1052,64 +747,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 8, laplace2d, derivs_lap, 2, 2)\n", + "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 8, laplace2d, derivs_lap, 6, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, "metadata": {}, "outputs": [ { "data": { + "image/png": "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AH5Hf+IfJk8bAgAAuE3KweFPfvITXXTRRZo8ebJyc3OVm5urqVOn6uKLL9aPf/zjdNSIASA0tCc05HxDAHA3+hN4HdOGAADAjVI+43DEiBH6zW9+o71792rPnj2yLEvBYFAXX3xxOurDABAaAgBMQX/iD0wbAgAAuEvKwWG3iy++mGYcrscWZQAwC/0JvIhpQwAA4FYpb1W+7bbb9J3vfCfu+ve//3195StfsaUoDBzThoSGAGAS+hPvM3XakNAQAAC4WcrB4bZt23TDDTfEXf/yl7+shoYGW4rCwBAa2hsacr4hALgf/QkAAABgv5SDw7a2NmVnZ8ddP+OMMxSNRm0pCv1HaAgAMBH9ibcxbQgAAOBOKQeHJSUl2rhxY9z1X/3qVwoGg7YUBQwEW5QBwDz0J/AaQkMAAOAFKX84yoMPPqjZs2frjTfe0Be+8AVJ0u9//3v953/+p5544gnbC0TymDYkNAQAU9GfeJep04YAAABekHJweNNNN2nz5s369re/rSeffFJDhgzRhAkT9PTTT+vzn/98OmpEEggN0xMacr4hAHgD/Qm8hGlDAADgFSkHh5J0ww039HoAOQAAgFPoT7zHxGlDQkMAAOAlKZ9xeLLFixertbXVrlrQT0wbskUZAPAp+hNvMDE0BAAA8JoBBYf//u//zicVOozQkNAQANAT/QncimlDAACQDq+++qomTpwYuw0ZMkSbN2+25bX7tVW5m2VZthSB/iE0TG9oyPmGAOBN9Cfux7QhAACAfS677DI1NzdLktra2nTBBRfoS1/6ki2vPaCJQwAAAACnx7QhAADIhN/+9re67rrrdOaZ9gxDpRwctre3x/752LFjuvDCC20pBKlh2pAtygCAT9GfeIeJ04aEhgAAmK2hoUEzZ85UYWGhAoFAr9uIa2trNW7cOOXm5ioUCmn79u39eq/HH39cc+bMGWDFn0o5OCwoKNCdd96pP/7xj7YVkQkffvihiouLde+99zpdyoARGhIaAgB6oj8BAABAJkWj0R63jo6OhM9tb29XaWmpHn744V4f37hxo5YuXaoHHnhAu3fv1rRp01RZWamWlpbYc0KhkEpKSuJu7777bo+aduzYoeuvv962daZ8xuF//ud/asOGDbruuutUXFysO++8U7fffrsKCwttKyodHnroIX32s591uowBIzTMTGjI+YYA4C30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6KKLbFxBctK9zpM9/vjjmjNnzgArTl261/j666/rrLPO0k033aSrrrpK3/72t22sPnmZ+F5Go1GFQiFdc8012rZtm02VJy8Ta7z33ntVU1NjU8X9k4l1fvDBByotLdWYMWN03333adSoUTZVn5xM/tmza9cuHT9+XGPHjh1g1anL5DrdYqBrfvfdd3X++efH7o8ZM0bvvPNOJkr3BPqTT9Gf9I3+JHPoTz7l9f5EMqNHMbE/kehRgEwxJjhsb29XaWmpHn744V4f37hxo5YuXaoHHnhAu3fv1rRp01RZWamWlpbYc0KhkEpKSuJu7777rt5//3099dRTevPNN/XOO+9o586damhoyNTyYtK9zm7RaFQ7duxw5Lek6V7jxx9/rO3btyscDut//ud/VF9fr/r6+kwtLyYT38s333xTTU1N+tnPfqbbb79d0Wg0I2vrlu41/uY3v9Gll16qSy+9NFNL6lUmvpcjRozQSy+9pH379umXv/ylDh06lJG1dcvUnz1HjhzR7bffrvXr16d9Tb3J1DrdZKBr7m26JBAIpLVmL6E/OYH+5AT6E/qTTDKhP5HM6FFM7E8kehQgYywDSbI2bdrU49rVV19tLVq0qMe1z3zmM9ayZcuSes3HH3/cWrx4cez+9773Peu73/3ugGsdiHSss9tjjz1m/f3f//1ASxywdKxx586d1owZM2L3v/e971nf+973BlzrQKTze9nty1/+stXY2NjfEgcsHWtctmyZNWbMGKu4uNgaOXKklZeXZ61cudKukvslE9/LRYsWWY8//nh/SxywdK3xo48+sqZNm2Y99thjdpQ5YOn8Xj7zzDPW7NmzB1qi7fqz5h07dli33HJL7LElS5ZY//Ef/5H2Wr2I/oT+pC/0J86gP/FPf2JZZvQoJvYnlkWPAqSTMROHfens7FRTU5MqKip6XK+oqNDOnTuTeo2xY8dq586dsfM7nn32WV122WXpKLff7FhnN6e2AZ2OHWssKyvToUOH9P777+v48eNqaGjQ5Zdfno5y+82Odb7//vvq6OiQJL399tuKRCK68MILba+1v+xYY01Njfbv368333xTP/jBD/TVr35V3/zmN9NRbr/Zsc5Dhw7FpjGi0agaGhpc9eePHWu0LEt33HGHvvCFL2ju3LnpKHPA7Pwz1iuSWfPVV1+tP//5z3rnnXd07NgxbdmyRTNmzHCiXM+hP6E/ORn9iTvQn/inP5HM6FFM7E8kehTATpyoLKm1tVVdXV0qKCjocb2goEAHDx5M6jU+97nP6frrr9eVV16pQYMG6brrrtNNN92UjnL7zY51StLRo0f1wgsv6Ne//rXdJQ6YHWscPHiwvv3tb+vaa6+VZVmqqKjQjTfemI5y+82Ode7Zs0df+9rXNGjQIAUCAf34xz921SeI2fXfq9vZsc63335bCxYskGVZsixLd999tyZMmJCOcvvFjjXu2LFDGzdu1IQJE2Ln1/zbv/2bxo8fb3e5/WbXf7MzZszQiy++qPb2do0ZM0abNm1SWVmZ3eXaIpk1Dx48WD/84Q9VXl6u48eP67777vPdJ2qmC/0J/cnJ6E/cgf7EP/2JZEaPYmJ/ItGjAHYiODzJqecZWJaV0hkHDz30kB566CG7y7LdQNc5fPhwR84nScVA11hZWanKykq7y7LdQNY5ZcoUvfzyy+koy1YD/V52u+OOO2yqKD0Gss5QKKTm5uY0VGWvgazxmmuu0fHjx9NRlu0G+t+sFz/N73Rrvummm1wXVnkJ/Uly6E/cg/4kefQn7mBCj2JifyLRowB2YKuypFGjRikrKyvuNy6HDx+O+w2Fl5mwThPWKJmxThPWKJmxThPWKJmzzpOZuOZMMuXfrwnrNGGNkhnrNGGNEuv00zpNWGNvTF03kA4Eh5Kys7MVCoXiPpmuvr5eU6ZMcagq+5mwThPWKJmxThPWKJmxThPWKJmzzpOZuOZMMuXfrwnrNGGNkhnrNGGNEuv00zpNWGNvTF03kA7GbFVua2vT3r17Y/f37dun5uZm5efnq6ioSNXV1Zo7d64mTZqkyZMna/369WppadGiRYscrDp1JqzThDVKZqzThDVKZqzThDVK5qzzZCauOZNM+fdrwjpNWKNkxjpNWKPEOv20ThPW2BtT1w1kXKY+vtlpzzzzjCUp7jZv3rzYc8LhsFVcXGxlZ2dbV111lbVt2zbnCu4nE9Zpwhoty4x1mrBGyzJjnSas0bLMWefJTFxzJpny79eEdZqwRssyY50mrNGyWKef1mnCGntj6rqBTAtYlmUlGzICAAAAAAAAMANnHAIAAAAAAACIQ3AIAAAAAAAAIA7BIQAAAAAAAIA4BIcAAAAAAAAA4hAcAgAAAAAAAIhDcAgAAAAAAAAgDsEhAAAAAAAAgDgEhwAAAAAAAADiEBwCAAAAAAAAiENwCAAOePPNNxUIBNTc3Ox0KQAAAJLoTwAA8QgOAQAAAAAAAMQhOASQVl1dXTp+/LjTZTims7PT6RIAAMAp6E/oTwAAySE4BAzz5JNPavz48RoyZIhGjhypL37xi2pvb5ckHT9+XKtWrdKYMWOUk5OjiRMn6ne/+13sa5999lkFAgF98MEHsWvNzc0KBAJ68803JUkbNmzQiBEj9NRTTykYDConJ0dvvfWWOjo6dN9992ns2LHKycnRJZdcon/913+NvU4kEtH111+vs846SwUFBZo7d65aW1sTruPOO+/UhAkT1NHRIUn6+OOPFQqF9Pd///d9rv+VV17RDTfcoLy8PA0bNkzTpk3TG2+8kdT6Jenll1/WF77whdi/v7vuukttbW2xx++44w7dcsstqqmpUWFhoS699FJJ0gsvvKArr7xSubm5mjRpknbv3t1nnQAAmIT+hP4EAOBOBIeAQQ4cOKC/+7u/05133qk9e/bo2Wef1a233irLsiRJP/7xj/XDH/5QP/jBD/SnP/1JM2bM0E033aTXX389pff58MMPVVNTo0ceeUSvvPKKRo8erdtvv12/+tWv9JOf/ER79uzRz372M5111lmxuj7/+c9r4sSJ2rVrl373u9/p0KFD+pu/+ZuE7/GTn/xE7e3tWrZsmSTpwQcfVGtrq2praxN+zTvvvKNrr71Wubm5+sMf/qCmpibdeeed+uSTT5Ja/4cffqgvf/nLOvvss9XY2KgnnnhCTz/9tO6+++4e7/P73/9ee/bsUX19vZ566im1t7frxhtv1GWXXaampiatWLFC9957b0r/TgEA8Cv6E/oTAICLWQCM0dTUZEmy3nzzzV4fLywstB566KEe18rKyqzFixdblmVZzzzzjCXJev/992OP796925Jk7du3z7Isy3r00UctSVZzc3PsOa+++qolyaqvr+/1fR988EGroqKix7X9+/dbkqxXX3014Xp27txpnXHGGdaDDz5oDR482Nq2bVvC51qWZd1///3WuHHjrM7Ozl4fP936169fb5199tlWW1tb7PH//u//tgYNGmQdPHjQsizLmjdvnlVQUGB1dHTEnrNu3TorPz/fam9vj11bu3atJcnavXt3nzUDAOB39Cf0JwAA92LiEDBIaWmprrvuOo0fP15f+cpX9POf/1zvv/++JCkajerdd9/V1KlTe3zN1KlTtWfPnpTeJzs7WxMmTIjdb25uVlZWlj7/+c/3+vympiY988wzOuuss2K3z3zmM5IU26bTm8mTJ+vee+/Vv/zLv+gf//Efde2118Yeq6ysjL3WFVdcEatj2rRpOuOMM+JeK5n179mzR6WlpTrzzDN7PH78+HG9+uqrsWvjx49XdnZ27H731w0dOrRH7QAAgP6E/gQA4GaDnS4AQOZkZWWpvr5eO3fu1NatW/XTn/5UDzzwgJ5//nmNHDlSkhQIBHp8jWVZsWuDBg2KXev28ccfx73PkCFDerzOkCFD+qzr+PHjmjlzpr773e/GPXbeeef1+XU7duxQVlZW3HalRx55RH/9618lKdaIn64Oqe/1n/zPfX3dyY1799cBAIDe0Z/QnwAA3IuJQ8AwgUBAU6dO1cqVK7V7925lZ2dr06ZNysvLU2Fhof74xz/2eP7OnTt1+eWXS5LOOeccSSfO/OnW3Nx82vccP368jh8/rm3btvX6+FVXXaVXXnlFF1xwgS6++OIet1Ob3JN9//vf1549e7Rt2zbV1dXp0UcfjT12/vnnx16juLhYkjRhwgRt3769179MJLP+YDCo5ubm2GHtkrRjxw4NGjQodsh4b4LBoF566aXYXxQk6bnnnkv4fAAATEN/Qn8CAHApp/ZIA8i85557znrooYesxsZG66233rIef/xxKzs729qyZYtlWZb1ox/9yMrLy7N+9atfWX/5y1+sf/7nf7bOOOMM67XXXrMsy7I6OzutsWPHWl/5ylesV1991Xrqqaesyy67LO4MoeHDh8e99x133GGNHTvW2rRpk/W///u/1jPPPGNt3LjRsizLeuedd6xzzjnHuu2226znn3/eeuONN6y6ujpr/vz51ieffNLrWnbv3m1lZ2dbv/3tby3LsqxHHnnEGjZsmPXGG28kXH9ra6s1cuRI69Zbb7UaGxut1157zXrsscesv/zlL0mtv7293TrvvPOs2bNnWy+//LL1hz/8wbrwwgutefPmxd5j3rx51s0339zjfY8dO2aNGjXK+ru/+zvrlVdesf77v//buvjiizlDCAAAi/6E/gQA4GYEh4BBIpGINWPGDOucc86xcnJyrEsvvdT66U9/Gnu8q6vLWrlypXX++edbZ5xxhlVaWmr9f//f/9fjNf74xz9a48ePt3Jzc61p06ZZTzzxRFKN+V//+lfrnnvusc477zwrOzvbuvjii63/9//+X+zx1157zZo1a5Y1YsQIa8iQIdZnPvMZa+nSpdbx48d7fa1gMGjdddddPa7PmjXLmjJlSsJm3rIs66WXXrIqKiqsoUOHWsOGDbOmTZsWa+aTWf+f/vQnq7y83MrNzbXy8/Otr371q9axY8dij/fWmFuWZf3P//yPVVpaamVnZ1sTJ060fv3rX9OYAwBg0Z9YFv0JAMC9ApbF4RYAAAAAAAAAeuKMQwAAAAAAAABxCA4BAAAAAAAAxCE4BAAAAAAAABCH4BAAAAAAAABAHIJDAAAAAAAAAHEIDgEAAAAAAADEITgEAAAAAAAAEIfgEAAAAAAAAEAcgkMAAAAAAAAAcQgOAQAAAAAAAMQhOAQAAAAAAAAQ5/8HNedrepFtV+QAAAAASUVORK5CYII=", "text/plain": [ - "Text(0, 0.5, 'source y-coord')" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" + "
" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ - "x_grid, y_grid, plot_me_lap = generate_error_grid(8, 8, laplace2d, derivs_lap, 2, 2)\n", - "plt.contourf(x_grid, y_grid, plot_me_lap.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "plt.colorbar()\n", - "plt.xscale('log')\n", - "plt.yscale('log')\n", - "plt.xlabel(\"source x-coord\")\n", - "plt.ylabel(\"source y-coord\")\n" + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", + "cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap1.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "\n", + "cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap2.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "\n", + "fig.subplots_adjust(right=0.8)\n", + "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", + "fig.colorbar(cs1, cax=cbar_ax)\n", + "\n", + "\n", + "ax1.set_xscale('log')\n", + "ax1.set_yscale('log')\n", + "ax1.set_xlabel(\"source x-coord\")\n", + "ax1.set_ylabel(\"source y-coord\")\n", + "\n", + "\n", + "ax2.set_xscale('log')\n", + "ax2.set_yscale('log')\n", + "ax2.set_xlabel(\"source x-coord\")\n", + "ax2.set_ylabel(\"source y-coord\")\n", + "\n", + "\n", + "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mnotebook controller is DISPOSED. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [] } ], From b48fffc6d895d2cfa8c00908da3a171762e38473 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 2 Jan 2025 15:43:15 -0800 Subject: [PATCH 130/143] More does not equal better for taylor recurrence --- test/plot_taylor_recurrence.ipynb | 61 +++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index 9fbe639a..dbbb64c3 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -128,10 +128,10 @@ { "data": { "text/latex": [ - "$\\displaystyle 4.44089209850063 \\cdot 10^{-16}$" + "$\\displaystyle -5.55805401702969 \\cdot 10^{-15}$" ], "text/plain": [ - "4.44089209850063e-16" + "-5.55805401702969e-15" ] }, "execution_count": 7, @@ -687,7 +687,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -701,31 +701,54 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 2.10000031158992 \\cdot 10^{-7}$" + "$\\displaystyle 8.26446325111216 \\cdot 10^{-8}$" ], "text/plain": [ - "2.10000031158992e-7" + "8.26446325111216e-8" ] }, - "execution_count": 52, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "loc = np.array([1e-4, 1])\n", - "compute_error_coord_tg(loc, laplace2d, derivs_lap, 6, 2, 2)" + "loc = np.array([1e-4, 1.1])\n", + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 4, 2, 2)" ] }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle 1.73553721858137 \\cdot 10^{-8}$" + ], + "text/plain": [ + "1.73553721858137e-8" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 4, 8, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -747,22 +770,30 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 47, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BOMB\n" + ] + } + ], "source": [ "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 8, laplace2d, derivs_lap, 2, 2)\n", - "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 8, laplace2d, derivs_lap, 6, 2)" + "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 8, laplace2d, derivs_lap, 4, 2)" ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAAKzCAYAAABf1JARAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB/UklEQVR4nO3dfXTU5Z3//9cQTAJKwIBEIyTibR0DQYfYAmJJbUOjoiJ22T27iAi1lHgoZl0Xj8dys7XpLaWtEwp1v1J3t1vULrTH5dcQWyUUVg2RWOtQFRcNKjcbVIbEmmj4/P7gZCRMJswkn5nPzfV8nDPnOJ+ZzLwvo+TNK+/rmoBlWZYAAAAAAAAA4CSDnC4AAAAAAAAAgPsQHAIAAAAAAACIQ3AIAAAAAAAAIA7BIQAAAAAAAIA4BIcAAAAAAAAA4hAcAgAAAAAAAIhDcAgAAAAAAAAgDsEhAAAAAAAAgDgEhwAAAAAAAADiEBwCAAAAAAAAiENwCAAAAAAAACCOEcHhU089pcsuu0yXXHKJHnnkEafLAQAAoD8BAACA6wUsy7KcLiKdPvnkEwWDQT3zzDPKy8vTVVddpeeff175+flOlwYAAAxFfwIAAAAv8P3E4QsvvKArrrhC559/voYNG6brr79edXV1TpcFAAAMRn8CAAAAL3B9cNjQ0KCZM2eqsLBQgUBAmzdvjntObW2txo0bp9zcXIVCIW3fvj322Lvvvqvzzz8/dn/MmDF65513MlE6AADwKfoTAAAAmGCw0wWcTnt7u0pLSzV//nzNnj077vGNGzdq6dKlqq2t1dSpU7Vu3TpVVlYqEomoqKhIve3EDgQCCd+vo6NDHR0dsfvHjx/Xe++9p5EjR/b5dQAAmMyyLB07dkyFhYUaNMj1v5ccMPoTAADcz7T+BEgLy0MkWZs2bepx7eqrr7YWLVrU49pnPvMZa9myZZZlWdaOHTusW265JfbYkiVLrP/4j/9I+B7Lly+3JHHjxo0bN27c+nHbv3+/fT/4PUKiP+HGjRs3btzcfDOxPwHs4qkPRwkEAtq0aZNuueUWSVJnZ6eGDh2qJ554QrNmzYo97xvf+Iaam5u1bds2ffLJJ7r88sv17LPPxg4ff+655zRy5Mhe3+PU3+gfPXpURUVFCky/S4HB2SnXPOj8YMpf43bnnlfgdAmOKBszwukSXKHsnLOcLsFxV4w80+kSXGHcKO/9exh99lCnS/CtY8eO6ZKSi/XBBx9o+PDhTpeTUU72J1kLHlEg28z/ri851+yfR+PP8d6fwQMVPNvfa75keK7TJfTbBSOGOF1CD+e4rB44p63tmK66+goj+xPALq7fqtyX1tZWdXV1qaCgZ5BVUFCggwcPSpIGDx6sH/7whyovL9fx48d13333JWzKJSknJ0c5OTlx1wODsxU4I/56t0FjSvq5Cm847/zznC7BcWcM8XezmozPjR7mdAmOmzDK7L+odrtotHf+fyjI906tfsC22Qz3J9lDFcgxLzi87Dyzfx5NHG3Gz6ISH/35fZkLg6wLz3ZfTXbgl4ToDf0J0H+eDg67nfqHgGVZPa7ddNNNuummm2x7P7+HhKciNJQ+N3aE0yU4jtAQ3bwQGhIWwg0y3Z/A//wcGHo1JHRbIOjXMBAA4BxPB4ejRo1SVlZW7Lf33Q4fPhz3W/5UhcNhhcNhdXV1STqx5TiQzQ9iExEaohvThu4PDQkM4QaZ7E9MZOK0oR8DQ7cHhW4LBJEcpg0BwH6eDg6zs7MVCoVUX1/f4wyh+vp63XzzzQN67aqqKlVVVSkajRp9FgLThpCYNpQIDd2MsBBuQ3+SPoSG3uS2kNCvoSDThgCAdHB9cNjW1qa9e/fG7u/bt0/Nzc3Kz89XUVGRqqurNXfuXE2aNEmTJ0/W+vXr1dLSokWLFjlYtT8QGjJtKBEaSoSG3dw2bUhgCCfRn2SeaaGhlwNDp4JCvwaCSA7ThgCQHq4PDnft2qXy8vLY/erqaknSvHnztGHDBs2ZM0dHjhzRqlWrdODAAZWUlGjLli0qLi52qmT4BKEhoSE+5ZbQkLAQbkF/gnTxWmDolmlC00ND06cNCQ0BIH0ClmVZThfhRiefIfTaa69p8Lxao844ZNqQ4FAiOJSYNpScDw0JC70hGo3q3OICHT16VHl5eU6X41tx/cnXf2nEpyqbMm3ohdDQLUHhqQgOzV4/wSESOXYsqkuDRfQnwAAQHJ5G9xlCBIdmITQkNJQIDbs5FRwSGHoLwWFmxfoTA4JDE0JDNweGbg0KT2VycEho6O8/AzEwBIfAwLl+qzIyj9BwhNMlOI7QEN0yHRoSFgIwidsCQ6+EhKcyOTQ0HaEhAKQfwSEA9IJpw8yGhgSGAHrj52lDN4SGXg0K8SnTpw0BAOlHcJjAyWcImYRpwxFOl+A4pg0JDaXMhIaEhUDqTOpP/BoaOhUY+jUkZNrQXEwbAkBmcMbhaZh0xiGh4QinS3AcoSGhYbd0BYeEhf7FGYeZ5fczDv0YGmY6MPRrUHgqk4ND06cNCQ6RDM44BAaOiUMAQA/pCA0JDAGYLN2hoSkhIT5FaEhoCACZQnAISUwbMm3ItKHEtKFkb2hIWAigP/w0beiGcwz9zORpQ5MRGgJAZhEcAiA0FKGhnQgMAfSXX0JDAkOkk+nThgCAzCI4TMCkw8eZNhzhdAmOIjQkNOw2kGlDwkIgM/zcnxAa9o+p25SZNjQT04YAkHmDnC7AraqqqhSJRNTY2Oh0KWlFaDjC6RIAV+hvaFiQfyahIZBBpvQnXjRx9FlMGiLtTJ42JDQEAGcQHAIGY9qQaUMpfZ+gDADJ8vK0IYFh5jFtCAAw0axZs3T22Wfrtttuy+j7EhwajGnDEU6X4ChCQ0JDAHADr4eGTjJ1m7KpmDYEALMtWbJEjz32WMbfl+AQRjI9NAS6ca4hACd5NTRkyhDIHEJDADihvLxcw4ZlvnciODSU6dOGpmPakGlDiS3KAJAqAkPnmbpN2eRpQwDwg4aGBs2cOVOFhYUKBALavHlz3HNqa2s1btw45ebmKhQKafv27ZkvtBd8qnICfv7UQtOZPm1IaEhoKBEaAl7lp/7Ea9OGBIZA5jFtCGTWRx99pM7OTqfL8ATLshQIBHpcy8nJUU5OTq/Pb29vV2lpqebPn6/Zs2fHPb5x40YtXbpUtbW1mjp1qtatW6fKykpFIhEVFRWlZQ3JCliWZTlagctFo1ENHz5cg+fVKpDtj9/0mTxtSGjorb+kpQOh4Ql2BIdsVcbJotGozi0u0NGjR5WXl+d0Ob4X60++/ksFcrz3F2svhYZuDQxNPN+QaUPzEBxioI4di+rSYBH9SRI++ugjXXDBOB06dNDpUjzhrLPOUltbW49ry5cv14oVK077tYFAQJs2bdItt9wSu/bZz35WV111ldauXRu7dvnll+uWW25RTU1N7Nqzzz6rhx9+WE8++eSA15AsJg4NY3JoCOAEQkMATvJKaOjWwBAwBaEhkFmdnZ06dOigXvvz68obRsjal+ixqC4tuUT79+/vEUgnmjY8nc7OTjU1NWnZsmU9rldUVGjnzp0DqtUOBIcwBtOG3viLWjoxbcgWZQBIBqGh+zBtaBZCQ8A5ecPymM5MUl6ePf+uWltb1dXVpYKCgh7XCwoKdPDgpxOgM2bM0Isvvqj29naNGTNGmzZtUllZ2YDf/3QIDg1i8rQhoSGhIaEhoSEA57l92tArgaGJ25QBAPC7U89MPPUcxbq6ukyXJIngEIABCA0BwHluDg29EhjCLEwbAoAZRo0apaysrB7ThZJ0+PDhuClEJwxyugBkBtOG5mLaEJK904acbwggVYSGGAgTtykTGgKAObKzsxUKhVRfX9/jen19vaZMmeJQVZ9i4hC+Rmjo3r+oZQrThmxRBoDeeDUwZJsyAADe09bWpr1798bu79u3T83NzcrPz1dRUZGqq6s1d+5cTZo0SZMnT9b69evV0tKiRYsWOVj1CQSHCYTDYYXDYXV1dTldyoCZPG0IsxEaEhoCfuPF/sRt04ZeDQxNxbShOZg2BOBnu3btUnl5eex+dXW1JGnevHnasGGD5syZoyNHjmjVqlU6cOCASkpKtGXLFhUXFztVckzAsizL6SLcLBqNavjw4Ro8r1aBbO/9EDc5NGTa0F1/Ucs0QsMT0hEcslUZvYlGozq3uEBHjx7lk/gyINaffP2XCuS49y/bhIb2M23ikODQDISGSJdjx6K6NFhEf5KE7t7i4FuH+Hd1Gqb1vUwcwpcIDd31FzU4g9AQgJPcFBr6ITA0EaEhAADOIzj0MZOnDU1GaMi0ocQWZQCQ/BcYmjZtCDMwbQgA7sanKsN3TJ82NB2hIaEhAOe5YdrQb6Eh/I9pQwCAGzFx6FOmThuaHhoybYh0YpsygGQ4HRoSGPqDiduUTcS0IQC4H8GhD5kaGpqO0JBpQ4lpQwDm8ntgyDZlfzNx2pDQEAC8ga3K8A3Tpw1NR2hIaAjAeU5NG/o9NDQN04YAALgHE4c+w7ShmUyfNiQ0JDQE4DwnQkMCQ/gB04YAADdj4jCBcDisYDCosrIyp0tBEkyeNjQ9NERmcL4h4A5u7U+cPtcQgHcQGgKAtxAcJlBVVaVIJKLGxkanS0maqdOGJoeGYNpQYtoQMIkX+xMMnEnnG5q2TdnEaUMAgLcQHAIeZvq0IaEhoSEA5zFtCCBZTBsCgPcQHPoE04bmITQkNCQ0BOA0QkPYiWlDfyM0BABvIjj0AUJD85geGiKzON8QQG8IDTPDpG3KJjEtNAQAeBfBIQDPYdqQaUMAgL+YNm1oGqYNAcC7CA49jmlD85g+bUhoSGgIwHlumDacOJqfB/Ampg0BAF5CcAjPITSEyQgNATjNDaEhAO9g2hAAvI3g0MNMnTaEuZg2zDzONwRwMkLDzDLlfEOTtimbNm1IaAgA3kdw6FGmhoZMG5qL0JBpQwAAAABAZhEcwjMIDc1FaEhoCMB5TBsiHZg29C+mDQHAHwgOPcjUaUPAVISGAJxGaJh5pmxThj8RGgKAfxAcwhOYNjQX04bO4XxDABKhIdKHaUMAANyP4NBjTJw2JDQ0F6Eh04YA0JuJo/n5ALgV04YA4C8EhwmEw2EFg0GVlZU5XQoMRWjIXwoJDQGcKtP9CdOGwMCZNG1IaAgA/kNwmEBVVZUikYgaGxudLiWGaUPAHISGAHqTyf6E0NA5JpxvaNI2ZQAAvIzg0CMIDc3CtCHThk7jfEPAbISGgD2YNgQAeB3BIeAyhIaEhkwbAgD8jGlDAAC8g+DQA5g2hCkIDQkNATiPaUNnmbBN2RRMGwIA/IDgEK5jcmho+rSh6QgNATiN0BCwB6EhAMAvCA5dzsRpQ1OZHhoybegenG8ImMkroeHE0fy88DK2KQMA4C0Eh3AVk6cNTUZoyLQhAAB+wbQhAMBPCA5djGlDc5g+bWg6QkMATvPKtKHf+f18Q6YN/YXQEADMQHDoUiaGhqZOG5oeGpo+bUhoCMBphIaAfUyaNgQAmIHgEK5AaGgm00NDN+J8QwBAOjBt6C9MGwKAOQgOXcjEaUOYh9CQaUMAzmPa0D38vk3ZBEwbAgD8iOAQjmPaECYiNATgNEJDAP3BtCEAmIXg0GVMmzYkNDST6dOGhIYAnObV0HDiaLN/fniVCduUTZk2JDQEAPMQHLqIaaEhzGR6aOhmnG8IAAAAADgZwSEcw7SheQgNmTYE4DyvThv6mZ/PN2Ta0D+YNgQAMxEcuoRp04aEhjARoSEApxEaAugPQkMAMBfBIYCMMH3akNAQgNMIDZFpTBsCAOB9RgSHs2bN0tlnn63bbrvN6VJ6xbShGUyeNjQ9NPQCzjcEMs/t/Qkyw8/blOEPTBsCgNmMCA6XLFmixx57zOkyIEJDmIlpQwC9yWR/wrQhYD8Tpg0JDQEARgSH5eXlGjbMnQ2zadOGJjI9NDR92pDQEEAimepP/BIaThxt9s8Tr/H7NmUTQkMAACQXBIcNDQ2aOXOmCgsLFQgEtHnz5rjn1NbWaty4ccrNzVUoFNL27dszX2gamBYamjptaDJCQ0JDwKv80p/4JTT0K7Ypw82YNgQASNJgpwtob29XaWmp5s+fr9mzZ8c9vnHjRi1dulS1tbWaOnWq1q1bp8rKSkUiERUVFUmSQqGQOjo64r5269atKiwsTKmejo6OHq8VjUZTXBF6Y2poaPK0oemhoZdwviEQj/4E6D+mDQEA8A/Hg8PKykpVVlYmfHz16tVasGCBFi5cKElas2aN6urqtHbtWtXU1EiSmpqabKunpqZGK1eutO31EjFt2tBEJoeGYNoQ8Do/9CdMGwLoL6YNAQDdHN+q3JfOzk41NTWpoqKix/WKigrt3LkzLe95//336+jRo7Hb/v370/I+JjF12tBkpk8bEhoC/uaF/oTQEEgPE6YNCQ0BACdzfOKwL62trerq6lJBQUGP6wUFBTp48GDSrzNjxgy9+OKLam9v15gxY7Rp0yaVlZX1+tycnBzl5OQMqO7TMWna0NTQ0ORpQ0JDQkPA79zenxAaeoNfzzf0+zZlAABM4+rgsFsgEOhx37KsuGt9qaurs7skICFCQ3gJ5xsC/Ud/ApiFaUMAgIlcvVV51KhRysrKivvt/eHDh+N+y2+3cDisYDCY8Df//cW0IeBfTBsCZnBzf8K0IZzEtKG3ERoCAHrj6uAwOztboVBI9fX1Pa7X19drypQpaX3vqqoqRSIRNTY22vaahIb+x7ShuQgNAXO4tT/xc2g4cbS/fsb4dZuyn5kwbQgAQG8c36rc1tamvXv3xu7v27dPzc3Nys/PV1FRkaqrqzV37lxNmjRJkydP1vr169XS0qJFixY5WDUQj9DQXISGgP94rT/xc2gIb2Da0NuYNgQAJOJ4cLhr1y6Vl5fH7ldXV0uS5s2bpw0bNmjOnDk6cuSIVq1apQMHDqikpERbtmxRcXGxUyX3C9OG/mZyaAjv4nxDIDFT+hMAp+f3aUNCQwBAXxwPDqdPny7Lsvp8zuLFi7V48eIMVXRCOBxWOBxWV1dXRt/X60wMDU3HtCHhG+BHXupPmDYEAABAurj6jEMn2XnGoUnThiYyedqQ0JDQEEBmndqfXHKu2X8Oe5Efzzf08zZlpg0BAKYjOEwzk0JDE6cNCQ0BAAAAAIBfOb5V2S9MCQhNDAdPZnJQ2I3A8AQvTxtytiEAr/DLpyn7bcrQjxOGfp0sZKIQADBQBIcJ9HaGkCnhYG9MDwwlQkOJ0LCbF0NDwkLAH0w6g9nroaFfwkK/hYR+DQi7ERQCgLlmzZqlZ599Vtddd52efPJJ216X4DCBqqoqVVVVKRqNavjw4Tr3vAKnS3IMoSGhIT7lpdCQsBDwn1P7Ez/ycmDo9bDQLyGh38NBAAB6s2TJEt155536xS9+YevrEhyiT4SGhIbdmDb0TmhIYAjAq7wYGno5LPRLUNjN9MCQaUMAMFt5ebmeffZZ21+XD0cBcFqEhu5XkH9m7AYAXjNx9FmeCg1L8s+M3bzishFD4m5+QmhIaAgAbtbQ0KCZM2eqsLBQgUBAmzdvjntObW2txo0bp9zcXIVCIW3fvj3zhfaCiUMkxLQh04YSoWE3t04bEhQC8DqvBIZeCwlNYnpoCABwRjQa7XE/JydHOTk5vT63vb1dpaWlmj9/vmbPnh33+MaNG7V06VLV1tZq6tSpWrdunSorKxWJRFRUVCRJCoVC6ujoiPvarVu3qrCw0IYV9Y7gMAGTDh/vDaEhoSE+5bbQkLAQMJef+hMvBIZeCQtNCwrRE9OGAOx0+P0P9ddPspwuw9WOHftQkjR27Nge15cvX64VK1b0+jWVlZWqrKxM+JqrV6/WggULtHDhQknSmjVrVFdXp7Vr16qmpkaS1NTUZEP1qSM4TMCEw8eB02Ha0D2hIWEhAMk//YmbQ0OvhIU4wfRpQ0JDAHDO/v37lZeXF7ufaNrwdDo7O9XU1KRly5b1uF5RUaGdO3cOqEY7EBwiDtOGTBtKhIZuQWAIwE/cGhh6OSxk2hAAAGfk5eX1CA77q7W1VV1dXSooKOhxvaCgQAcPHkz6dWbMmKEXX3xR7e3tGjNmjDZt2qSysrIB10dwiB4IDQkN8Smnpg0JCwH4kdtCQy+HhTiBaUOmDQHATwKBQI/7lmXFXetLXV2d3SVJIjgE0AumDZ0JDQkMAfiRmwJDv4WFTBsCAOB9o0aNUlZWVtx04eHDh+OmEJ0wyOkC4B5MGzJtKBEaSpkNDQvyz4zdAMBv3BAaluSfGbvBP5g2ZNoQAPwiOztboVBI9fX1Pa7X19drypQpDlX1KSYOE/DTpxYmg9CQ0FAiNMwUQkIA/eWV/sTpwJCQEH5GaAgA3tPW1qa9e/fG7u/bt0/Nzc3Kz89XUVGRqqurNXfuXE2aNEmTJ0/W+vXr1dLSokWLFjlY9QkEhwn45VMLkRxCQ3RL57QhgSGAgfJCf+JUaGhaWGjyNmXTpw0BAN6za9culZeXx+5XV1dLkubNm6cNGzZozpw5OnLkiFatWqUDBw6opKREW7ZsUXFxsVMlxxAcgmlDSGLaUEpPaEhYCMAUTgSGpoWFANOGAOBN06dPl2VZfT5n8eLFWrx4cYYqSh7BoeEIDZk2lAgN04HAEIBJnN6abBqmDc1EaAgAcALBIYxGaEho2M2OaUPCQgCmITAEAADwN4JDgzFtCJwwkNCQsBCAqZwODU3dpsy0oZmYNgQAOIXg0FCEhkwbSkwbSv0PDQkMAZjK6cAQMA2hIQDASYOcLgBwAqEhoSEAIHWEhnCKydOGAAA4ieAwgXA4rGAwqLKyMqdLsR3ThiA0PCEdn6IMAOnkVH8ycfRZhIYuYOo2ZZNDQ6YNAQBOIzhMoKqqSpFIRI2NjU6XApsxbQiJ0BCANznRn7gxMDT1fEMAAIBM44xDw5g+bUhoyLShNPDQkPMNAZjAjYGhyZg2NA/ThgAAN2Di0CCEhoSGhIYAgGQQGgLOIjQEALgFE4cAjMIWZQBIzAuBoYnblJk2BAAATmHi0BBMGzJtyLQhoSEA9MULoSFgAqYNAQBuwsShAQgNCQ0JDe0LDTnfEIDfEBjCjUydNiQ0BAC4DROHgM8RGgIAEiE0dD9TtykDAAB3YOLQ55g2ZNoQbFEGgFN5NTA08XxDEzFtCACAezBxmEA4HFYwGFRZWZnTpfQboSGhIdOGhIYA/MWO/sSroaGJmDYEAABOIzhMoKqqSpFIRI2NjU6XAvQLoaH9oSHnGwJw2kD6k4mjzyI0hOsxbQgAgLsQHPoU04ZmTxsSGgIATuaHwJBtyvArQkMAgJtxxqEPERqaHRriBLYoA4A/AkNTmbhN2dRpQwAA3IyJQ/gKoSHThhKhIQBIhIaAFzBtCABwOyYOfcb0aUPTERqmLzTkfEMAXkFg6H1MG5qB0BAA4AVMHPqI6aEh04YAANP5NTTkfEN/MzE0BADAK5g4hC8QGjJtKLFFGYC5/BoYmsjEaUMTMW0IAPAKJg59wvRpQ9MRGhIaAjAXoSG8zMRpQ0JDAICXEBz6gOmhoenThoSG6Q8NOd8QgFuNP8f/fz6xTRkAAMA5BIfwNNNDQwAA4B+mbVNm2hAAAPcjOPQ406cNTce0IVuUAQAAAABIF4JDDzM9NDR92pDQkNAQAPzOpG3KTBv6H9OGAAAvIjiEJxEaEhpmKjTkfEMAADBQhIYAAK8iOEwgHA4rGAyqrKzM6VJ6ZfK0oemhIQDAXG7vT9A/TBsCAAC3IjhMoKqqSpFIRI2NjU6XAvTAtCFblAGYi/4E8B6mDQEAXkZw6EFMG5qL0DCzoSHblAHAOSadb2gS06YNCQ0BAF5HcOgxhIYwGZOGAAC/MW2bMgAA8BaCQ8AjmDYEAABexrQhAADeQ3DoIUwbmovQkGlDADCJKduUmTb0L0JDAIBfEBx6BKGhuQgNnQkNOd8QAAD7mDZtCACAXxAcAnA1Jg0BAH5k0rShaaEh04YAAD8hOPQApg3NxbQhAAAAAABwCsGhyxEamovQkGlDADCRKecbmoJpQwAAvI3gEK5EaEho6GRoyPmGAIB0MmmbskkIDQEAfkRw6GImTxvCbEwaAgDgfaZNGwIA4EcEhy5lcmjItCHThgAAM5mwTZlpQ39i2hAA4FcEh3AVQkNCQ6YNAQDwPpOmDQkNAQB+RnDoQiZPG5qM0NAdoSHnGwIAAAAAcALBocuYHBqaPm1oOjeEhgAApJMp25SZNgQAwD8IDuEKpoeGTBsCAExnwvmGAAAAXkNw6CImTxuajNCQaUMAgP8xbeg/TBsCAEzg++Bw//79mj59uoLBoCZMmKAnnnjC6ZJ6ZXJoaPq0oencFBpyviGATPFKfwKgd4SGAABTDHa6gHQbPHiw1qxZo4kTJ+rw4cO66qqrdP311+vMMwkI3MD00ND0aUM3hYYAkEn0Jz35fZsy04YAAMCrfB8cnnfeeTrvvPMkSaNHj1Z+fr7ee+89VzXmpk4bEhqaHRoCgMm80J8A6B3ThgAAkzi+VbmhoUEzZ85UYWGhAoGANm/eHPec2tpajRs3Trm5uQqFQtq+fXu/3mvXrl06fvy4xo4dO8Cq7WNqaGg6QkOmDQG4m+n9CZAqU6YNCQ0BAKZxfOKwvb1dpaWlmj9/vmbPnh33+MaNG7V06VLV1tZq6tSpWrdunSorKxWJRFRUVCRJCoVC6ujoiPvarVu3qrCwUJJ05MgR3X777XrkkUf6rKejo6PHa0Wj0YEsDwmYPm1oOjeGhpxvCOBk9CewiwnblE0JDQEAMFHAsizL6SK6BQIBbdq0Sbfcckvs2mc/+1ldddVVWrt2beza5ZdfrltuuUU1NTVJvW5HR4e+9KUv6atf/armzp3b53NXrFihlStXxl0fs+zXGpRrb7Bg6rSh6aGh6dOGbgwNJYJDYKCi0ajOLS7Q0aNHlZeX53Q5tnJzf/I3tb9X9hBv/1zhfEPvMyU4ZNoQ8J5jx6K6NFjky/7EbtFoVMOHD9efmvdp2DCz/85+OseOHdOEieOM+e/K8a3Kfens7FRTU5MqKip6XK+oqNDOnTuTeg3LsnTHHXfoC1/4wmmbckm6//77dfTo0dht//79/ar9dEwNDU1nemgIAH7g5/4E9iI09A9CQwCAqRzfqtyX1tZWdXV1qaCgoMf1goICHTx4MKnX2LFjhzZu3KgJEybEzif6t3/7N40fP77X5+fk5CgnJ2dAdSMxk6cNCQ3dO20IAKmgPwEAAIApXB0cdgsEAj3uW5YVdy2Ra665RsePH09HWf1m6rShyaEh3B0ask0ZQH/4rT9xgp+3KTNt6B9MGwIATObqrcqjRo1SVlZW3G/vDx8+HPdbfruFw2EFg0GVlZWl9X1gBtOnDd0cGgJAquhPAAAAYApXB4fZ2dkKhUKqr6/vcb2+vl5TpkxJ63tXVVUpEomosbHR1tdl2tA8poeGAOA3fuxPgFQxbQgAgHscO3ZMZWVlmjhxosaPH6+f//zntr2241uV29ratHfv3tj9ffv2qbm5Wfn5+SoqKlJ1dbXmzp2rSZMmafLkyVq/fr1aWlq0aNEiB6vuH0JDmIhpQwBeZFJ/4hS2KcPtCA0BAF4xdOhQbdu2TUOHDtWHH36okpIS3XrrrRo5cuSAX9vx4HDXrl0qLy+P3a+urpYkzZs3Txs2bNCcOXN05MgRrVq1SgcOHFBJSYm2bNmi4uJip0pGCkwPDU2fNvRCaMj5hgB6Q38CJGbKtCEAAF6RlZWloUNP/MLro48+UldXlyzLsuW1Hd+qPH36dFmWFXfbsGFD7DmLFy/Wm2++qY6ODjU1Nenaa69Ne112nyFk6rShyQgNCeQAeJcp/Qnsx7ShPzBtCACwU0NDg2bOnKnCwkIFAgFt3rw57jm1tbUaN26ccnNzFQqFtH379pTe44MPPlBpaanGjBmj++67T6NGjbKldseDQ7ey8wwhU0NDk6cNTQ8NAQDpwRmHcJoJ04aEhgCAZESj0R63jo6OhM9tb29XaWmpHn744V4f37hxo5YuXaoHHnhAu3fv1rRp01RZWamWlpbYc0KhkEpKSuJu7777riRpxIgReumll7Rv3z798pe/1KFDh2xZp+NbleFPJoeGYNoQANA3P59vCACAl+1rbdeZf2XGrC/t7e2SpLFjx/a4vnz5cq1YsaLXr6msrFRlZWXC11y9erUWLFighQsXSpLWrFmjuro6rV27VjU1NZKkpqampOorKCjQhAkT1NDQoK985StJfU1fCA7TzNRpQ5OZPm3opdCQ8w0BAHby+zZlpg0BAPjU/v37lZeXF7ufk5PTr9fp7OxUU1OTli1b1uN6RUWFdu7cmdRrHDp0SEOGDFFeXp6i0agaGhr09a9/vV/1nIrgMIFwOKxwOKyurq5+v4apoaHJ04aEhgRxAJBOdvQnAHpHaAgASEVeXl6P4LC/Wltb1dXVpYKCgh7XCwoKdPDgwaRe4+2339aCBQti53LffffdmjBhwoBrkwgOE6qqqlJVVZWi0aiGDx/udDmeQWgIAED6+KE/8es2ZaYNAQDAQAQCgR73LcuKu5ZIKBRSc3NzGqriw1HSxsRpQ5NDQzBtCACAX5kQGjJtCABwyqhRo5SVlRU3XXj48OG4KUQnEBymgYmhoelMnzb0YmjI+YYAALv4fdoQAACkT3Z2tkKhkOrr63tcr6+v15QpUxyq6lNsVYYtTJ42JDQkgAMAwK+YNgQAYODa2tq0d+/e2P19+/apublZ+fn5KioqUnV1tebOnatJkyZp8uTJWr9+vVpaWrRo0SIHqz6B4DCB/h4+buK0IaEhAACZ4fUPR/Hr+YbwLkJDAEAm7Nq1S+Xl5bH71dXVkqR58+Zpw4YNmjNnjo4cOaJVq1bpwIEDKikp0ZYtW1RcXOxUyTEBy7Isp4tws+7Dx8cs+7UG5fbd7JoYGkoEhybz8rQhW5UBe0WjUZ1bXKCjR4/a8uly6Ft3f/I3tb9X9hDv/CzyY3Do523KTBsC8Lpjx6K6NFhEf5KE7t7iN0//WWeeae7f8ZPR3n5MN3+xxJj/rjjjEANCaGguQkMAAOBlhIYAAJwewaFNTJw2JDQEAADJYtrQW/w+bUhoCABAcggObWBiaAizeXnaEAAAAAAAJIcPR0lS2ZgROmOIuWGJydOF3ZgyPMHLoSFblAEg8/w0aejHCUM/TxYyVQgAwMARHCbg9U8ttBOhIbp5MTQkLATgJ17pT/wQFvotJPRzQNiNoBAAAPsRHCZQVVWlqqqq2CcLmYrQ8ASmDb0XGhIYAvAjt/YnXg8K/RISmhAOJkJoCABAehAcAqdBaOgdhIUAkDleDgv9EhR2MzkwlAgNAQBIJ4JDJMS0IaFhNzdPGxIWAkDmeDEs9FtIeCrTQ0MAAJBeBIfoFaEhurk1NCQwBIDM8FJY6PeQEPGYNgQAIL0IDoEEmDZ0X2hIWAgAmeGVsND0oND0aUNCQwAA0o/gEHGYNiQ0dBsCQwBIP6+EhQAAAMgcgkP0QGiIbk5PGxIWAkD6eTksZNrQ7PUzbQgAQGYQHCYQDocVDofV1dXldCnIMKYNnQsNCQsBoG929CdeDgsBidAQAIBMGuR0AW5VVVWlSCSixsZGp0vJGKYNCQ0lZ0LDgvwzCQ0BIAn97U9K8s+M3eB9pk8bAgCAzGHiEJIIDSVCw0wjKASA9PJzSGj6NmWTMW0IAEBmERyC0BAxmZg2JDAEgPTxc1iIE5g2BAAAmURwCIhpQym9oSFhIQCkj2lhocnThqaHhkwbAgCQeQSHhmPakNAwXQgLASD9gmfzZy3MQGgIAIAzCA4NRmhIaNjNzmlDAkMAAOxn+rQhAABwBsEhYDg7QkPCQgBAJpi8TdlkTBsCAOAcgkNDMW3ItKE08NCQwBAAgPQzedqQ0BAAAGcNcroAtwqHwwoGgyorK3O6FNsRGhIaDlRB/pmEhgDgAD/3J6fDtCEAAEDmERwmUFVVpUgkosbGRqdLgc0IDU/o77QhgSEAOIf+xDxMGwIAACcRHBqGaUNI9n4YCgAA6ca0oXkIDQEAcAeCQ4MQGjJtKBEaAgDgFSZPGwIAAHcgODQEoSGhIQAAgBcwbQgAgHsQHAIG4VOUAQBeY+o2ZaYNAQCAGxAcGoBpQ6YNJbYoAwAA92PaEAAAdyE49DlCQ0JDidAQAOBNTBuahdAQAAD3ITiErxEaAgAAAAAA9A/BoY8xbQjJvmlDzjcEAGQS04ZmYdoQAAB3Ijj0KUJDpg0ltigDAOAlhIYAAMBtCA59iNCQ0FAiNAQAAAAAAANDcAjfITQEAMDbTNymzLQhAABwI4JDn2HaEJL904acbwgAAAAAgHkIDhMIh8MKBoMqKytzupSkERoybSixRRkA/MyL/UmqmDY0B9OGAAC4H8FhAlVVVYpEImpsbHS6FCSJ0JDQEAD8jv4EfkFoCACANxAc+gTThgAAwOuYNgQAAHAXgkMfIDRk2lBK37Qh5xsCAAA7MW0IAIB3EBzC8wgN2aIMAIAXmThtSGgIAIC3EBx6nOnThoSGhIYAAH8wcZsyAACA2xEcepjpoSEAAIBXMW0IAAC8gODQowgNmTaU0j9tyPmGAIBMYNrQ/wgNAQDwJoJDeBKhIVuUAQDwKhOnDQEAgDcRHHqQ6dOGhIaEhgAAwDuYNgQAwLsIDj3G9NAQAAD4i2nblJk2BAAAXkJwCE9h2jBz04acbwgAgL1MDA2ZNgQAwNsIDj3E9GlDQkO2KAMA/MW0aUPTEBoCAOB9BIceQWhIaEhoCACAd5k4bQgAALyP4BAAAAAZx7ShvzFtCACAPxAcegDThkwbZnrakPMNAQCwj2nThoSGAAD4B8GhyxEaEhqyRRkAAAAAADiB4NDFTA8NQWgIAPAnk7YpM20IAAC8zPfB4bFjx1RWVqaJEydq/Pjx+vnPf+50SUgS04YAAL+iP4EfERoCAOA/g50uIN2GDh2qbdu2aejQofrwww9VUlKiW2+9VSNHjnS6tD6ZPm1IaOjctCHnGwJA+nm1P7ED04YAAADe4fuJw6ysLA0deuK3nx999JG6urpkWZbDVfWN0JDQkC3KAOBvXuxPgL4wbQgAgD85Hhw2NDRo5syZKiwsVCAQ0ObNm+OeU1tbq3Hjxik3N1ehUEjbt29P6T0++OADlZaWasyYMbrvvvs0atQom6oH7EdoCADOoz9JD6YNAQAA0mPw4MGaOHGiJk6cqIULF9r3ura9Uj+1t7ertLRU8+fP1+zZs+Me37hxo5YuXara2lpNnTpV69atU2VlpSKRiIqKiiRJoVBIHR0dcV+7detWFRYWasSIEXrppZd06NAh3XrrrbrttttUUFDQaz0dHR09Xisajdq00uQwbci0oZPYpgwAJ9CfAMlj2hAAAOeNGDFCzc3Ntr+u48FhZWWlKisrEz6+evVqLViwIJaWrlmzRnV1dVq7dq1qamokSU1NTUm9V0FBgSZMmKCGhgZ95Stf6fU5NTU1WrlyZYqrsAehIaEh04YA4A70JxgIk6YNCQ0BAPA3x7cq96Wzs1NNTU2qqKjocb2iokI7d+5M6jUOHToU+618NBpVQ0ODLrvssoTPv//++3X06NHYbf/+/f1fAJJGaEhoCABeQX/SPyZtUwYAADhZJo7BiUajCoVCuuaaa7Rt2zabKnfBxGFfWltb1dXVFbdtp6CgQAcPHkzqNd5++20tWLBAlmXJsizdfffdmjBhQsLn5+TkKCcnZ0B194fp04amIzQEAO8wqT9B6pg2BADADKceHdNXv5aJY3DefPNNFRYW6s9//rNuuOEGvfzyy8rLyxvwOl0dHHYLBAI97luWFXctkVAolJY93nYyPTRk2tAdON8QAFLj9/7ETqZMGxIaAgC87pUj7cr9a3L9jKk++rBdkjR27Nge15cvX64VK1b0+jWZOAansLBQklRSUqJgMKjXXntNkyZNSmpNfXF1cDhq1ChlZWXF/fb+8OHDCQ8Pt0s4HFY4HFZXV1da34fQkNCQaUMA8BYT+hMAAAD0bf/+/T0m+vq7O6T7GJxly5b1uJ7KMTjvv/++hg4dqpycHL399tuKRCK68MIL+1XPqVx9xmF2drZCoZDq6+t7XK+vr9eUKVPS+t5VVVWKRCJqbGxM6/vAbISGAOA99CfoDdOGAACYJS8vr8etv8GhHcfg7NmzR5MmTVJpaaluvPFG/fjHP1Z+fn6/6jmV4xOHbW1t2rt3b+z+vn371NzcrPz8fBUVFam6ulpz587VpEmTNHnyZK1fv14tLS1atGiRg1Xbg2lDs6cNCQ0BwL1M7k/sZso2ZVMQGgIAkB4DOQZnypQpevnll9NRlvPB4a5du1ReXh67X11dLUmaN2+eNmzYoDlz5ujIkSNatWqVDhw4oJKSEm3ZskXFxcVOlWwLQkOzQ0O34XxDAOjJ1P4E/WPStCEAALCXk8fgJMPx4HD69OmyLKvP5yxevFiLFy/OUEUncIZQ+hAaMm0IAG5Hf2IPpg39hWlDAADsd/IxOLNmzYpdr6+v18033+xgZSc4Hhy6VVVVlaqqqhSNRjV8+HBbX9v0aUPTERoCAPornf0J+odpQwAAcDpePgaH4DDDTA8NTZ82JDQEAJiCaUN/YdoQAID+8/IxOASHyBjTQ0O34nxDAAD6x5RpQ0JDAAAGxq3H4CRjkNMFuFU4HFYwGFRZWZltr2nytCGhIdOGAICBS0d/AgAAACRCcJhAVVWVIpGIGhsbbXk9k0NDEBoCAOxhd3+SLiZsU2baEAAAmIDgMANMDw1NnzYkNAQAAF5EaAgAAAgOkVamh4Zux/mGAAC7MW0IAADgHwSHaWb6tKHpmDYEAABexLQhAACQCA4TsuPwcdNDQ9OnDQkNAQB2c/uHozBtCAAA4C8Ehwl45fBxtyI0JDQEANiP/sRZpoSGTBsCAIBuBIdpYvK0oemhoVdwviEAADgVoSEAADgZwWEamBwagmlDAICZ/L5N2ZRpQwAAgJMRHMJWpk8bEhoCAACvYtoQAACciuDQZiZPGxIaEhoCAMzEtKH3ERoCAIDeEBwm0J9PLSQ0hFdwviEAeJPbP1UZAAAA/kJwmECqn1pocmgIpg0BAJnBpypnHtOGAADAZASHGDDTpw0JDQEAJvP7NmW/IzQEAAB9ITi0gcnThoSGhIYAAPiVCdOGAAAAfSE4HCBCQ3gN5xsCAOzCtKG3MW0IAABOh+AQ6CemDQEA8C+mDQEAAKTByTzp7LPPViAQSOoF33vvvQEV5CVMG5qL0BAAnEd/4iymDb2NaUMAAJCMpILDNWvWxP75yJEj+ta3vqUZM2Zo8uTJkqT/+Z//UV1dnR588MG0FOlGhIYAADiL/gTp4vdpQ0JDAACQrKSCw3nz5sX+efbs2Vq1apXuvvvu2LUlS5bo4Ycf1tNPP6177rnH/iodEA6HFQ6H1dXV5XQpcBkvTxtyviEAP6E/AQAAANIr5TMO6+rq9OUvfznu+owZM/T000/bUpQbVFVVKRKJqLGxMe4xpg3N5eXQEAD8jP4ks/y8TZlpQwAAgE8lNXF4spEjR2rTpk36p3/6px7XN2/erJEjR9pWmNuUnXOWcoeaG5qZHhhK3g4NmTQE4Hem9ieZ4seg0M8BIeEgAACwS8rB4cqVK7VgwQI9++yzsTOEnnvuOf3ud7/TI488YnuBcB6hoTdDQ8JCACahP7GP30JCPweE3QgKAQBAuqQcHN5xxx26/PLL9ZOf/ET/9V//JcuyFAwGtWPHDn32s59NR41wEKGh9xAYAjAR/Un/+SUoNCEg7A2hIQAASKeUgsOPP/5Yd911lx588EH9x3/8R7pqgksQGp7ghWlDwkIAJqM/SZ5fQsJupoaFAAAAmZLSh6OcccYZ2rRpU7pqAVzH7aFhQf6ZhIYAjEd/0rvLRgyJu/kJoSHThgAAIP1S/lTlWbNmafPmzWkoBW7CtKF7Q8PusJDAEAA+RX8SHxTC3wgNAQBAJqR8xuHFF1+sf/mXf9HOnTsVCoV05pk9w4slS5bYVhycQWjoPoSEANA3U/uTS4bnauiZ5oWETBsCAABkRsrB4SOPPKIRI0aoqalJTU1NPR4LBAK+aczD4bDC4bC6urqcLiWjCA1PcMu0IYEhACSH/gQmYdoQAABkSsrB4b59+9JRh+tUVVWpqqpK0WhUw4cPd7ocZJDToSFhIQCkjv7EHKZPGxIaAgCATEo5ODyZZVmSTvwmH97HtKGzoSGBIQDYg/4EAAAAsEfKH44iSY899pjGjx+vIUOGaMiQIZowYYL+7d/+ze7akEGEhs7gg04AwD70J/7HtCHThgAAILNSnjhcvXq1HnzwQd19992aOnWqLMvSjh07tGjRIrW2tuqee+5JR51A2mVq2pCQEADsR38CvyM0BAAATkg5OPzpT3+qtWvX6vbbb49du/nmm3XFFVdoxYoVNOYexLRhZkJDAkMASB/6E/8zfdoQAADACSkHhwcOHNCUKVPirk+ZMkUHDhywpShkDqFhehEWAkBm0J/Az5g2BAAATkn5jMOLL75Yjz/+eNz1jRs36pJLLrGlKGQGoeEJ6Zg25NxCAMgs+hN/Y9oQAADAGSlPHK5cuVJz5sxRQ0ODpk6dqkAgoD/+8Y/6/e9/32vDDriZnaEhQSEAOIf+BH7FtCEAAHBSysHh7Nmz9fzzz+tHP/qRNm/eLMuyFAwG9cILL+jKK69MR41IA6YN7QkNCQsBwB3oT/zL5GlDQkMAAOC0lINDSQqFQvr3f/93u2tBhhAaDhyBIQC4D/0JAAAAYK9+BYddXV3avHmz9uzZo0AgoGAwqJtuuklZWVl21webERqe0N9pQwJDAHAv+hP/YdoQAADAWSkHh3v37tUNN9ygt99+W5dddpksy9Jrr72msWPH6r//+7910UUXpaNOwDbp+DAUAICz6E/8h9AQAADAeSl/qvKSJUt04YUXav/+/XrxxRe1e/dutbS0aNy4cVqyZEk6aoRNmDYcWGjItCEAuBf9CQAAAGC/lCcOt23bpueee075+fmxayNHjtR3vvMdTZ061dbinBQOhxUOh9XV1eV0KbYgNAQA+Bn9ib8wbQgAAOAOKU8c5uTk6NixY3HX29ralJ2dbUtRblBVVaVIJKLGxkanS4FN2KIMAP5FfwI/IDQEAABuk3JweOONN+quu+7S888/L8uyZFmWnnvuOS1atEg33XRTOmrEADFtSGgIAH5Hf+IfJk8bAgAAuE3KweFPfvITXXTRRZo8ebJyc3OVm5urqVOn6uKLL9aPf/zjdNSIASA0tCc05HxDAHA3+hN4HdOGAADAjVI+43DEiBH6zW9+o71792rPnj2yLEvBYFAXX3xxOurDABAaAgBMQX/iD0wbAgAAuEvKwWG3iy++mGYcrscWZQAwC/0JvIhpQwAA4FYpb1W+7bbb9J3vfCfu+ve//3195StfsaUoDBzThoSGAGAS+hPvM3XakNAQAAC4WcrB4bZt23TDDTfEXf/yl7+shoYGW4rCwBAa2hsacr4hALgf/QkAAABgv5SDw7a2NmVnZ8ddP+OMMxSNRm0pCv1HaAgAMBH9ibcxbQgAAOBOKQeHJSUl2rhxY9z1X/3qVwoGg7YUBQwEW5QBwDz0J/AaQkMAAOAFKX84yoMPPqjZs2frjTfe0Be+8AVJ0u9//3v953/+p5544gnbC0TymDYkNAQAU9GfeJep04YAAABekHJweNNNN2nz5s369re/rSeffFJDhgzRhAkT9PTTT+vzn/98OmpEEggN0xMacr4hAHgD/Qm8hGlDAADgFSkHh5J0ww039HoAOQAAgFPoT7zHxGlDQkMAAOAlKZ9xeLLFixertbXVrlrQT0wbskUZAPAp+hNvMDE0BAAA8JoBBYf//u//zicVOozQkNAQANAT/QncimlDAACQDq+++qomTpwYuw0ZMkSbN2+25bX7tVW5m2VZthSB/iE0TG9oyPmGAOBN9Cfux7QhAACAfS677DI1NzdLktra2nTBBRfoS1/6ki2vPaCJQwAAAACnx7QhAADIhN/+9re67rrrdOaZ9gxDpRwctre3x/752LFjuvDCC20pBKlh2pAtygCAT9GfeIeJ04aEhgAAmK2hoUEzZ85UYWGhAoFAr9uIa2trNW7cOOXm5ioUCmn79u39eq/HH39cc+bMGWDFn0o5OCwoKNCdd96pP/7xj7YVkQkffvihiouLde+99zpdyoARGhIaAgB6oj8BAABAJkWj0R63jo6OhM9tb29XaWmpHn744V4f37hxo5YuXaoHHnhAu3fv1rRp01RZWamWlpbYc0KhkEpKSuJu7777bo+aduzYoeuvv962daZ8xuF//ud/asOGDbruuutUXFysO++8U7fffrsKCwttKyodHnroIX32s591uowBIzTMTGjI+YYA4C30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6KKLbFxBctK9zpM9/vjjmjNnzgArTl261/j666/rrLPO0k033aSrrrpK3/72t22sPnmZ+F5Go1GFQiFdc8012rZtm02VJy8Ta7z33ntVU1NjU8X9k4l1fvDBByotLdWYMWN03333adSoUTZVn5xM/tmza9cuHT9+XGPHjh1g1anL5DrdYqBrfvfdd3X++efH7o8ZM0bvvPNOJkr3BPqTT9Gf9I3+JHPoTz7l9f5EMqNHMbE/kehRgEwxJjhsb29XaWmpHn744V4f37hxo5YuXaoHHnhAu3fv1rRp01RZWamWlpbYc0KhkEpKSuJu7777rt5//3099dRTevPNN/XOO+9o586damhoyNTyYtK9zm7RaFQ7duxw5Lek6V7jxx9/rO3btyscDut//ud/VF9fr/r6+kwtLyYT38s333xTTU1N+tnPfqbbb79d0Wg0I2vrlu41/uY3v9Gll16qSy+9NFNL6lUmvpcjRozQSy+9pH379umXv/ylDh06lJG1dcvUnz1HjhzR7bffrvXr16d9Tb3J1DrdZKBr7m26JBAIpLVmL6E/OYH+5AT6E/qTTDKhP5HM6FFM7E8kehQgYywDSbI2bdrU49rVV19tLVq0qMe1z3zmM9ayZcuSes3HH3/cWrx4cez+9773Peu73/3ugGsdiHSss9tjjz1m/f3f//1ASxywdKxx586d1owZM2L3v/e971nf+973BlzrQKTze9nty1/+stXY2NjfEgcsHWtctmyZNWbMGKu4uNgaOXKklZeXZ61cudKukvslE9/LRYsWWY8//nh/SxywdK3xo48+sqZNm2Y99thjdpQ5YOn8Xj7zzDPW7NmzB1qi7fqz5h07dli33HJL7LElS5ZY//Ef/5H2Wr2I/oT+pC/0J86gP/FPf2JZZvQoJvYnlkWPAqSTMROHfens7FRTU5MqKip6XK+oqNDOnTuTeo2xY8dq586dsfM7nn32WV122WXpKLff7FhnN6e2AZ2OHWssKyvToUOH9P777+v48eNqaGjQ5Zdfno5y+82Odb7//vvq6OiQJL399tuKRCK68MILba+1v+xYY01Njfbv368333xTP/jBD/TVr35V3/zmN9NRbr/Zsc5Dhw7FpjGi0agaGhpc9eePHWu0LEt33HGHvvCFL2ju3LnpKHPA7Pwz1iuSWfPVV1+tP//5z3rnnXd07NgxbdmyRTNmzHCiXM+hP6E/ORn9iTvQn/inP5HM6FFM7E8kehTATpyoLKm1tVVdXV0qKCjocb2goEAHDx5M6jU+97nP6frrr9eVV16pQYMG6brrrtNNN92UjnL7zY51StLRo0f1wgsv6Ne//rXdJQ6YHWscPHiwvv3tb+vaa6+VZVmqqKjQjTfemI5y+82Ode7Zs0df+9rXNGjQIAUCAf34xz921SeI2fXfq9vZsc63335bCxYskGVZsixLd999tyZMmJCOcvvFjjXu2LFDGzdu1IQJE2Ln1/zbv/2bxo8fb3e5/WbXf7MzZszQiy++qPb2do0ZM0abNm1SWVmZ3eXaIpk1Dx48WD/84Q9VXl6u48eP67777vPdJ2qmC/0J/cnJ6E/cgf7EP/2JZEaPYmJ/ItGjAHYiODzJqecZWJaV0hkHDz30kB566CG7y7LdQNc5fPhwR84nScVA11hZWanKykq7y7LdQNY5ZcoUvfzyy+koy1YD/V52u+OOO2yqKD0Gss5QKKTm5uY0VGWvgazxmmuu0fHjx9NRlu0G+t+sFz/N73Rrvummm1wXVnkJ/Uly6E/cg/4kefQn7mBCj2JifyLRowB2YKuypFGjRikrKyvuNy6HDx+O+w2Fl5mwThPWKJmxThPWKJmxThPWKJmzzpOZuOZMMuXfrwnrNGGNkhnrNGGNEuv00zpNWGNvTF03kA4Eh5Kys7MVCoXiPpmuvr5eU6ZMcagq+5mwThPWKJmxThPWKJmxThPWKJmzzpOZuOZMMuXfrwnrNGGNkhnrNGGNEuv00zpNWGNvTF03kA7GbFVua2vT3r17Y/f37dun5uZm5efnq6ioSNXV1Zo7d64mTZqkyZMna/369WppadGiRYscrDp1JqzThDVKZqzThDVKZqzThDVK5qzzZCauOZNM+fdrwjpNWKNkxjpNWKPEOv20ThPW2BtT1w1kXKY+vtlpzzzzjCUp7jZv3rzYc8LhsFVcXGxlZ2dbV111lbVt2zbnCu4nE9Zpwhoty4x1mrBGyzJjnSas0bLMWefJTFxzJpny79eEdZqwRssyY50mrNGyWKef1mnCGntj6rqBTAtYlmUlGzICAAAAAAAAMANnHAIAAAAAAACIQ3AIAAAAAAAAIA7BIQAAAAAAAIA4BIcAAAAAAAAA4hAcAgAAAAAAAIhDcAgAAAAAAAAgDsEhAAAAAAAAgDgEhwAAAAAAAADiEBwCAAAAAAAAiENwCAAOePPNNxUIBNTc3Ox0KQAAAJLoTwAA8QgOAQAAAAAAAMQhOASQVl1dXTp+/LjTZTims7PT6RIAAMAp6E/oTwAAySE4BAzz5JNPavz48RoyZIhGjhypL37xi2pvb5ckHT9+XKtWrdKYMWOUk5OjiRMn6ne/+13sa5999lkFAgF98MEHsWvNzc0KBAJ68803JUkbNmzQiBEj9NRTTykYDConJ0dvvfWWOjo6dN9992ns2LHKycnRJZdcon/913+NvU4kEtH111+vs846SwUFBZo7d65aW1sTruPOO+/UhAkT1NHRIUn6+OOPFQqF9Pd///d9rv+VV17RDTfcoLy8PA0bNkzTpk3TG2+8kdT6Jenll1/WF77whdi/v7vuukttbW2xx++44w7dcsstqqmpUWFhoS699FJJ0gsvvKArr7xSubm5mjRpknbv3t1nnQAAmIT+hP4EAOBOBIeAQQ4cOKC/+7u/05133qk9e/bo2Wef1a233irLsiRJP/7xj/XDH/5QP/jBD/SnP/1JM2bM0E033aTXX389pff58MMPVVNTo0ceeUSvvPKKRo8erdtvv12/+tWv9JOf/ER79uzRz372M5111lmxuj7/+c9r4sSJ2rVrl373u9/p0KFD+pu/+ZuE7/GTn/xE7e3tWrZsmSTpwQcfVGtrq2praxN+zTvvvKNrr71Wubm5+sMf/qCmpibdeeed+uSTT5Ja/4cffqgvf/nLOvvss9XY2KgnnnhCTz/9tO6+++4e7/P73/9ee/bsUX19vZ566im1t7frxhtv1GWXXaampiatWLFC9957b0r/TgEA8Cv6E/oTAICLWQCM0dTUZEmy3nzzzV4fLywstB566KEe18rKyqzFixdblmVZzzzzjCXJev/992OP796925Jk7du3z7Isy3r00UctSVZzc3PsOa+++qolyaqvr+/1fR988EGroqKix7X9+/dbkqxXX3014Xp27txpnXHGGdaDDz5oDR482Nq2bVvC51qWZd1///3WuHHjrM7Ozl4fP936169fb5199tlWW1tb7PH//u//tgYNGmQdPHjQsizLmjdvnlVQUGB1dHTEnrNu3TorPz/fam9vj11bu3atJcnavXt3nzUDAOB39Cf0JwAA92LiEDBIaWmprrvuOo0fP15f+cpX9POf/1zvv/++JCkajerdd9/V1KlTe3zN1KlTtWfPnpTeJzs7WxMmTIjdb25uVlZWlj7/+c/3+vympiY988wzOuuss2K3z3zmM5IU26bTm8mTJ+vee+/Vv/zLv+gf//Efde2118Yeq6ysjL3WFVdcEatj2rRpOuOMM+JeK5n179mzR6WlpTrzzDN7PH78+HG9+uqrsWvjx49XdnZ27H731w0dOrRH7QAAgP6E/gQA4GaDnS4AQOZkZWWpvr5eO3fu1NatW/XTn/5UDzzwgJ5//nmNHDlSkhQIBHp8jWVZsWuDBg2KXev28ccfx73PkCFDerzOkCFD+qzr+PHjmjlzpr773e/GPXbeeef1+XU7duxQVlZW3HalRx55RH/9618lKdaIn64Oqe/1n/zPfX3dyY1799cBAIDe0Z/QnwAA3IuJQ8AwgUBAU6dO1cqVK7V7925lZ2dr06ZNysvLU2Fhof74xz/2eP7OnTt1+eWXS5LOOeccSSfO/OnW3Nx82vccP368jh8/rm3btvX6+FVXXaVXXnlFF1xwgS6++OIet1Ob3JN9//vf1549e7Rt2zbV1dXp0UcfjT12/vnnx16juLhYkjRhwgRt3769179MJLP+YDCo5ubm2GHtkrRjxw4NGjQodsh4b4LBoF566aXYXxQk6bnnnkv4fAAATEN/Qn8CAHApp/ZIA8i85557znrooYesxsZG66233rIef/xxKzs729qyZYtlWZb1ox/9yMrLy7N+9atfWX/5y1+sf/7nf7bOOOMM67XXXrMsy7I6OzutsWPHWl/5ylesV1991Xrqqaesyy67LO4MoeHDh8e99x133GGNHTvW2rRpk/W///u/1jPPPGNt3LjRsizLeuedd6xzzjnHuu2226znn3/eeuONN6y6ujpr/vz51ieffNLrWnbv3m1lZ2dbv/3tby3LsqxHHnnEGjZsmPXGG28kXH9ra6s1cuRI69Zbb7UaGxut1157zXrsscesv/zlL0mtv7293TrvvPOs2bNnWy+//LL1hz/8wbrwwgutefPmxd5j3rx51s0339zjfY8dO2aNGjXK+ru/+zvrlVdesf77v//buvjiizlDCAAAi/6E/gQA4GYEh4BBIpGINWPGDOucc86xcnJyrEsvvdT66U9/Gnu8q6vLWrlypXX++edbZ5xxhlVaWmr9f//f/9fjNf74xz9a48ePt3Jzc61p06ZZTzzxRFKN+V//+lfrnnvusc477zwrOzvbuvjii63/9//+X+zx1157zZo1a5Y1YsQIa8iQIdZnPvMZa+nSpdbx48d7fa1gMGjdddddPa7PmjXLmjJlSsJm3rIs66WXXrIqKiqsoUOHWsOGDbOmTZsWa+aTWf+f/vQnq7y83MrNzbXy8/Otr371q9axY8dij/fWmFuWZf3P//yPVVpaamVnZ1sTJ060fv3rX9OYAwBg0Z9YFv0JAMC9ApbF4RYAAAAAAAAAeuKMQwAAAAAAAABxCA4BAAAAAAAAxCE4BAAAAAAAABCH4BAAAAAAAABAHIJDAAAAAAAAAHEIDgEAAAAAAADEITgEAAAAAAAAEIfgEAAAAAAAAEAcgkMAAAAAAAAAcQgOAQAAAAAAAMQhOAQAAAAAAAAQ5/8HNedrepFtV+QAAAAASUVORK5CYII=", + "image/png": "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vD5KThw6dEgVFRWaMGGCxo4dqx//+MdeHynrdu/erWnTpikej2vcuHF67LHHvD5SzsyaNUunnnqqrrvuOq+PkjVPPPGELrjgAp133nl68MEHvT5O5NAn4UGfhAt9Eg5RaZQw9olEowC9wS9HyZL//u//1qc//Wm99NJLOuGEE3TZZZfpe9/7niZNmuT10XKmpaVFZ599tt544w2ddNJJXh8nqz7zmc/oW9/6lqZOnap3331XQ4YM0aBBg7w+VtYNHz5c+/fv9/oYOXfHHXfo1VdfVVlZmb73ve95fZysa29vV1tbm0488UQdPnxYY8aMUX19vU477TSvj5Y1e/bs0TvvvKMJEyZo3759uvjii/Xyyy+H7p89kvT000+rpaVF//qv/6qf/exnXh+n3z766CPF43E9/fTTGjJkiC6++GI9//zzKi4u9vpokUCfhOufEfRJuNAn4RCVRglbn0g0CtBbvOIwiz766CN98MEH+vDDD/Xhhx9qxIgRXh8pp371q1/piiuuCN2/FN3/uJo6daokqbi4OJRRHhWvvvqq/vKXv+iqq67y+ig5M3DgQJ144omSpA8++EDt7e2he0XRGWecoQkTJkiSRowYoeLiYr377rveHipHpk+frlNOOcXrY2TNCy+8oIsuukhnnnmmTjnlFF111VXasGGD18eKFPokHOiTcKFPwiMqjRK2PpFoFKC3IjM43Lhxo2bOnKnS0lLFYrFuf3yltrZWo0ePVlFRkcrLy7Vp06ZeP//pp5+u2267TWVlZSotLdXf/M3f6OMf/3gWr6B3cn2dnT366KOaM2dOP0+cuVxf46uvvqqTTz5Z11xzjS6++GLde++9WTx97+Xjz7K5uVnl5eW69NJL9eyzz2bp5L2Xj2u87bbbtHz58iyduG/ycZ3vv/++xo8fr7POOktf//rXNXz48Cydvnfy+c+erVu36ujRoxo5cmQ/T525fF6nX/T3mt9++22deeaZHbfPOussvfXWW/k4eiDQJ8fQJz2jT/KHPjkm6H0iRaNRotgnEo0C5EtkBoetra0aP3687r///m4/v3btWi1evFh33HGHtm3bpqlTp6qqqkq7du3qeEx5ebnGjBmT8vH222/rvffe0xNPPKHXX39db731lrZs2aKNGzfm6/I65Po6Xc3Nzdq8ebMnW9JcX+OHH36oTZs2KZFI6Pe//73q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5fq7v/u7Hq//pZde0tVXX60hQ4bolFNO0dSpU/Xaa6/16vol6cUXX9Tll1/e8dfvpptuUktLS8fnb7jhBl177bVavny5SktLdf7550uSXnjhBX3yk59UUVGRJk6cqG3btvV4TgAAooQ+oU8AAP7E4BCIkD179uhv//Zv9eUvf1nbt2/XM888oy984QtyHEeS9MMf/lDf//739b3vfU9/+tOfNGPGDF1zzTV69dVXM/o+hw8f1vLly/Xggw/qpZde0ogRI3T99dfrkUce0Y9+9CNt375d//Iv/6KTTz6541yf+cxnNGHCBG3dulW//vWv9c477+h//a//lfZ7/OhHP1Jra6tuv/12SdKdd96p/fv3q7a2Nu3XvPXWW7rssstUVFSk3/72t2poaNCXv/xlffTRR726/sOHD+uzn/2sTj31VNXX1+uxxx7TU089pa9+9atJ3+c3v/mNtm/frrq6Oj3xxBNqbW3V5z73OV1wwQVqaGjQ3Xffrdtuuy2jv6YAAIQVfUKfAAB8zAEQGQ0NDY4k5/XXX+/286Wlpc4999yTdF9FRYWzaNEix3Ec5+mnn3YkOe+9917H57dt2+ZIcnbu3Ok4juM89NBDjiSnsbGx4zEvv/yyI8mpq6vr9vveeeedTmVlZdJ9u3fvdiQ5L7/8ctrr2bJli3PCCSc4d955pzNo0CDn2WefTftYx3GcJUuWOKNHj3aOHDnS7eePd/2rV692Tj31VKelpaXj8//5n//pDBgwwNm7d6/jOI4zb948p6SkxGlra+t4zAMPPOAUFxc7ra2tHfetWrXKkeRs27atxzMDABB29Al9AgDwL15xCETI+PHjdcUVV2js2LH64he/qB//+Md67733JEnNzc16++23NWXKlKSvmTJlirZv357R9ykoKNC4ceM6bjc2NmrgwIH6zGc+0+3jGxoa9PTTT+vkk0/u+PjEJz4hSR0/ptOdSZMm6bbbbtM3v/lN/cM//IMuu+yyjs9VVVV1PNdFF13UcY6pU6fqhBNOSHmu3lz/9u3bNX78eJ100klJnz969KhefvnljvvGjh2rgoKCjtvu15144olJZwcAAPQJfQIA8LNBXh8AQP4MHDhQdXV12rJli5588kn98z//s+644w49//zzOu200yRJsVgs6Wscx+m4b8CAAR33uT788MOU7zN48OCk5xk8eHCP5zp69Khmzpyp73znOymfO+OMM3r8us2bN2vgwIEpP6704IMP6q9//askdYT48c4h9Xz9nf93T1/XOdzdrwMAAN2jT+gTAIB/8YpDIGJisZimTJmipUuXatu2bSooKNDjjz+uIUOGqLS0VL/73e+SHr9lyxZdeOGFkqTTTz9dkr3nj6uxsfG433Ps2LE6evSonn322W4/f/HFF+ull17S2WefrXPPPTfpo2vkdnbfffdp+/btevbZZ7VhwwY99NBDHZ8788wzO55j1KhRkqRx48Zp06ZN3f7HRG+uPx6Pq7GxsePN2iVp8+bNGjBgQMebjHcnHo/rj3/8Y8d/KEjSc889l/bxAABEDX1CnwAAfMqrn5EGkH/PPfecc8899zj19fXOG2+84Tz66KNOQUGBs379esdxHOcHP/iBM2TIEOeRRx5x/vKXvzj/9E//5JxwwgnOK6+84jiO4xw5csQZOXKk88UvftF5+eWXnSeeeMK54IILUt5DaOjQoSnf+4YbbnBGjhzpPP74485//dd/OU8//bSzdu1ax3Ec56233nJOP/1057rrrnOef/5557XXXnM2bNjg3Hjjjc5HH33U7bVs27bNKSgocH71q185juM4Dz74oHPKKac4r732Wtrr379/v3Paaac5X/jCF5z6+nrnlVdecR5++GHnL3/5S6+uv7W11TnjjDOc2bNnOy+++KLz29/+1jnnnHOcefPmdXyPefPmOZ///OeTvu+hQ4ec4cOHO3/7t3/rvPTSS85//ud/Oueeey7vIQQAgEOf0CcAAD9jcAhESFNTkzNjxgzn9NNPdwoLC53zzz/f+ed//ueOz7e3tztLly51zjzzTOeEE05wxo8f7/y///f/kp7jd7/7nTN27FinqKjImTp1qvPYY4/1Ksz/+te/OrfeeqtzxhlnOAUFBc65557r/N//+387Pv/KK684s2bNcoYNG+YMHjzY+cQnPuEsXrzYOXr0aLfPFY/HnZtuuinp/lmzZjmTJ09OG/OO4zh//OMfncrKSufEE090TjnlFGfq1KkdMd+b6//Tn/7kTJ8+3SkqKnKKi4udr3zlK86hQ4c6Pt9dmDuO4/z+9793xo8f7xQUFDgTJkxwfv7znxPmAAA49Inj0CcAAP+KOQ5vbgEAAAAAAAAgGe9xCAAAAAD/vx07EAAAAAAQ5G89wAqFEQAw4hAAAAAAGHEIAAAAAIw4BAAAAABGHAIAAAAAIw4BAAAAgBGHAAAAAMCIQwAAAABgxCEAAAAAMOIQAAAAABhxCAAAAABMUZ+MTt1OF24AAAAASUVORK5CYII=", "text/plain": [ "
" ] From de7a3901c2ae05194927f5d6602d2ffff472e3a8 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 2 Jan 2025 16:20:01 -0800 Subject: [PATCH 131/143] Bug in create_subs_grid --- test/plot_taylor_recurrence.ipynb | 80 +++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index dbbb64c3..b8c0d7c8 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -411,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ @@ -435,7 +435,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 72, "metadata": {}, "outputs": [ { @@ -445,13 +445,13 @@ " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000]]" ] }, - "execution_count": 18, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "coord_dict = {var[0]: 2, var[1]: 1}\n", + "coord_dict = {var[0]: 1e-1, var[1]: 1.2}\n", "initial_grid_subs_laplace = create_subs_grid(6, 2, derivs_lap, coord_dict)\n", "initial_grid_subs_laplace" ] @@ -465,7 +465,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ @@ -495,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 66, "metadata": {}, "outputs": [ { @@ -503,18 +503,48 @@ "text/plain": [ "[[0, 0, 1.00000000000000, 0, -6.00000000000000, 0],\n", " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000],\n", - " [1, 0, -6.00000000000000, 0, 120.000000000000, 0],\n", + " [0.826446280991735, 0, -4.95867768595041, 0, 99.1735537190083, 0],\n", + " [0, 4.95867768595041, 0, -99.1735537190083, 0, 4165.28925619835],\n", + " [-4.09808073219042, 0, 81.9616146438085, 0, -3442.38781503996, 0],\n", + " [0, -81.9616146438085, 0, 3442.38781503996, 0, -247851.922682877],\n", + " [67.7368716064533, 0, -2844.94860747104, 0, 204836.299737915, 0],\n", + " [0, 2844.94860747104, 0, -204836.299737915, 0, 22531992.9711706]]" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "extend_grid(initial_grid_subs_laplace, get_taylor_recurrence(laplace2d), coord_dict, 8, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[0, 0, 1.00000000000000, 0, -6.00000000000000, 0],\n", + " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000],\n", + " [1.00000000000000, 0, -6.00000000000000, 0, 120.000000000000, 0],\n", " [0, 6.00000000000000, 0, -120.000000000000, 0, 5040.00000000000],\n", - " [-6, 0, 120.000000000000, 0, -5040.00000000000, 0]]" + " [-6.00000000000000, 0, 120.000000000000, 0, -5040.00000000000, 0],\n", + " [0, -120.000000000000, 0, 5040.00000000000, 0, -362880.000000000],\n", + " [120.000000000000, 0, -5040.00000000000, 0, 362880.000000000, 0],\n", + " [0, 5040.00000000000, 0, -362880.000000000, 0, 39916800.0000000]]" ] }, - "execution_count": 20, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "extend_grid(initial_grid_subs_laplace, get_taylor_recurrence(laplace2d), coord_dict, 5, 2)" + "create_subs_grid(6, 8, derivs_lap, coord_dict)" ] }, { @@ -701,49 +731,49 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 8.26446325111216 \\cdot 10^{-8}$" + "$\\displaystyle 0.0873119521523848$" ], "text/plain": [ - "8.26446325111216e-8" + "0.0873119521523848" ] }, - "execution_count": 53, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "loc = np.array([1e-4, 1.1])\n", + "loc = np.array([1e-1, 1.1])\n", "compute_error_coord_tg(loc, laplace2d, derivs_lap, 4, 2, 2)" ] }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 1.73553721858137 \\cdot 10^{-8}$" + "$\\displaystyle 0.0177032219793687$" ], "text/plain": [ - "1.73553721858137e-8" + "0.0177032219793687" ] }, - "execution_count": 54, + "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "compute_error_coord_tg(loc, laplace2d, derivs_lap, 4, 8, 2)" + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 4, 16, 2)" ] }, { @@ -770,7 +800,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -783,17 +813,17 @@ ], "source": [ "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 8, laplace2d, derivs_lap, 2, 2)\n", - "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 8, laplace2d, derivs_lap, 4, 2)" + "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 8, laplace2d, derivs_lap, 6, 2)" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 58, "metadata": {}, "outputs": [ { "data": { - "image/png": "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vD5KThw6dEgVFRWaMGGCxo4dqx//+MdeHynrdu/erWnTpikej2vcuHF67LHHvD5SzsyaNUunnnqqrrvuOq+PkjVPPPGELrjgAp133nl68MEHvT5O5NAn4UGfhAt9Eg5RaZQw9olEowC9wS9HyZL//u//1qc//Wm99NJLOuGEE3TZZZfpe9/7niZNmuT10XKmpaVFZ599tt544w2ddNJJXh8nqz7zmc/oW9/6lqZOnap3331XQ4YM0aBBg7w+VtYNHz5c+/fv9/oYOXfHHXfo1VdfVVlZmb73ve95fZysa29vV1tbm0488UQdPnxYY8aMUX19vU477TSvj5Y1e/bs0TvvvKMJEyZo3759uvjii/Xyyy+H7p89kvT000+rpaVF//qv/6qf/exnXh+n3z766CPF43E9/fTTGjJkiC6++GI9//zzKi4u9vpokUCfhOufEfRJuNAn4RCVRglbn0g0CtBbvOIwiz766CN98MEH+vDDD/Xhhx9qxIgRXh8pp371q1/piiuuCN2/FN3/uJo6daokqbi4OJRRHhWvvvqq/vKXv+iqq67y+ig5M3DgQJ144omSpA8++EDt7e2he0XRGWecoQkTJkiSRowYoeLiYr377rveHipHpk+frlNOOcXrY2TNCy+8oIsuukhnnnmmTjnlFF111VXasGGD18eKFPokHOiTcKFPwiMqjRK2PpFoFKC3IjM43Lhxo2bOnKnS0lLFYrFuf3yltrZWo0ePVlFRkcrLy7Vp06ZeP//pp5+u2267TWVlZSotLdXf/M3f6OMf/3gWr6B3cn2dnT366KOaM2dOP0+cuVxf46uvvqqTTz5Z11xzjS6++GLde++9WTx97+Xjz7K5uVnl5eW69NJL9eyzz2bp5L2Xj2u87bbbtHz58iyduG/ycZ3vv/++xo8fr7POOktf//rXNXz48Cydvnfy+c+erVu36ujRoxo5cmQ/T525fF6nX/T3mt9++22deeaZHbfPOussvfXWW/k4eiDQJ8fQJz2jT/KHPjkm6H0iRaNRotgnEo0C5EtkBoetra0aP3687r///m4/v3btWi1evFh33HGHtm3bpqlTp6qqqkq7du3qeEx5ebnGjBmT8vH222/rvffe0xNPPKHXX39db731lrZs2aKNGzfm6/I65Po6Xc3Nzdq8ebMnW9JcX+OHH36oTZs2KZFI6Pe//73q6upUV1eXr8vrkI8/y9dff10NDQ36l3/5F11//fVqbm7Oy7W5cn2Nv/zlL3X++efr/PPPz9cldSsff5bDhg3TH//4R+3cuVM//elP9c477+Tl2lz5+mfPgQMHdP3112v16tU5v6bu5Os6/aS/19zdq0tisVhOzxwk9ImhTwx9Qp/kUxT6RIpGo0SxTyQaBcgbJ4IkOY8//njSfZdccomzcOHCpPs+8YlPOLfffnuvnvPRRx91Fi1a1HH7u9/9rvOd73yn32ftj1xcp+vhhx92/u7v/q6/R+y3XFzjli1bnBkzZnTc/u53v+t897vf7fdZ+yOXf5auz372s059fX1fj9hvubjG22+/3TnrrLOcUaNGOaeddpozZMgQZ+nSpdk6cp/k489y4cKFzqOPPtrXI/Zbrq7xgw8+cKZOneo8/PDD2Thmv+Xyz/Lpp592Zs+e3d8jZl1frnnz5s3Otdde2/G5W265xfn3f//3nJ81iOgT+qQn9Ik36JPw9InjRKNRotgnjkOjALkUmVcc9uTIkSNqaGhQZWVl0v2VlZXasmVLr55j5MiR2rJlS8f7dzzzzDO64IILcnHcPsvGdbq8+jGg48nGNVZUVOidd97Re++9p6NHj2rjxo268MILc3HcPsvGdb733ntqa2uTJL355ptqamrSOeeck/Wz9lU2rnH58uXavXu3Xn/9dX3ve9/TV77yFX3jG9/IxXH7LBvX+c4773S8GqO5uVkbN2701T9/snGNjuPohhtu0OWXX665c+fm4pj9ls1/xgZFb675kksu0Z///Ge99dZbOnTokNavX68ZM2Z4cdzAoU/ok87oE3+gT8LTJ1I0GiWKfSLRKEA28Y7Kkvbv36/29naVlJQk3V9SUqK9e/f26jk+/elP66qrrtInP/lJDRgwQFdccYWuueaaXBy3z7JxnZJ08OBBvfDCC/r5z3+e7SP2WzaucdCgQbr33nt12WWXyXEcVVZW6nOf+1wujttn2bjO7du36+abb9aAAQMUi8X0wx/+0Fe/QSxbf7/6XTau880339T8+fPlOI4cx9FXv/pVjRs3LhfH7ZNsXOPmzZu1du1ajRs3ruP9a37yk59o7Nix2T5un2Xr79kZM2boD3/4g1pbW3XWWWfp8ccfV0VFRbaPmxW9ueZBgwbp+9//vqZPn66jR4/q61//euh+o2au0Cf0SWf0iT/QJ+HpEykajRLFPpFoFCCbGBx20vX9DBzHyeg9Du655x7dc8892T5W1vX3OocOHerJ+5Nkor/XWFVVpaqqqmwfK+v6c52TJ0/Wiy++mItjZVV//yxdN9xwQ5ZOlBv9uc7y8nI1Njbm4FTZ1Z9rvPTSS3X06NFcHCvr+vv3bBB/m9/xrvmaa67x3bAqSOiT3qFP/IM+6T36xB+i0ChR7BOJRgGygR9VljR8+HANHDgwZeOyb9++lA1FkEXhOqNwjVI0rjMK1yhF4zqjcI1SdK6zsyhecz5F5a9vFK4zCtcoReM6o3CNEtcZpuuMwjV2J6rXDeQCg0NJBQUFKi8vT/nNdHV1dZo8ebJHp8q+KFxnFK5RisZ1RuEapWhcZxSuUYrOdXYWxWvOp6j89Y3CdUbhGqVoXGcUrlHiOsN0nVG4xu5E9bqBXIjMjyq3tLRox44dHbd37typxsZGFRcXq6ysTDU1NZo7d64mTpyoSZMmafXq1dq1a5cWLlzo4akzF4XrjMI1StG4zihcoxSN64zCNUrRuc7OonjN+RSVv75RuM4oXKMUjeuMwjVKXGeYrjMK19idqF43kHf5+vXNXnv66acdSSkf8+bN63hMIpFwRo0a5RQUFDgXX3yx8+yzz3p34D6KwnVG4RodJxrXGYVrdJxoXGcUrtFxonOdnUXxmvMpKn99o3CdUbhGx4nGdUbhGh2H6wzTdUbhGrsT1esG8i3mOI7T2yEjAAAAAAAAgGjgPQ4BAAAAAAAApGBwCAAAAAAAACAFg0MAAAAAAAAAKRgcAgAAAAAAAEjB4BAAAAAAAABACgaHAAAAAAAAAFIwOAQAAAAAAACQgsEhAAAAAAAAgBQMDgEAAAAAAACkYHAIAB54/fXXFYvF1NjY6PVRAAAAJNEnAIBUDA4BAAAAAAAApGBwCCCn2tvbdfToUa+P4ZkjR454fQQAANAFfUKfAAB6h8EhEDE/+9nPNHbsWA0ePFinnXaa/uZv/katra2SpKNHj2rZsmU666yzVFhYqAkTJujXv/51x9c+88wzisViev/99zvua2xsVCwW0+uvvy5JWrNmjYYNG6YnnnhC8XhchYWFeuONN9TW1qavf/3rGjlypAoLC3Xeeefp//yf/9PxPE1NTbrqqqt08sknq6SkRHPnztX+/fvTXseXv/xljRs3Tm1tbZKkDz/8UOXl5fq7v/u7Hq//pZde0tVXX60hQ4bolFNO0dSpU/Xaa6/16vol6cUXX9Tll1/e8dfvpptuUktLS8fnb7jhBl177bVavny5SktLdf7550uSXnjhBX3yk59UUVGRJk6cqG3btvV4TgAAooQ+oU8AAP7E4BCIkD179uhv//Zv9eUvf1nbt2/XM888oy984QtyHEeS9MMf/lDf//739b3vfU9/+tOfNGPGDF1zzTV69dVXM/o+hw8f1vLly/Xggw/qpZde0ogRI3T99dfrkUce0Y9+9CNt375d//Iv/6KTTz6541yf+cxnNGHCBG3dulW//vWv9c477+h//a//lfZ7/OhHP1Jra6tuv/12SdKdd96p/fv3q7a2Nu3XvPXWW7rssstUVFSk3/72t2poaNCXv/xlffTRR726/sOHD+uzn/2sTj31VNXX1+uxxx7TU089pa9+9atJ3+c3v/mNtm/frrq6Oj3xxBNqbW3V5z73OV1wwQVqaGjQ3Xffrdtuuy2jv6YAAIQVfUKfAAB8zAEQGQ0NDY4k5/XXX+/286Wlpc4999yTdF9FRYWzaNEix3Ec5+mnn3YkOe+9917H57dt2+ZIcnbu3Ok4juM89NBDjiSnsbGx4zEvv/yyI8mpq6vr9vveeeedTmVlZdJ9u3fvdiQ5L7/8ctrr2bJli3PCCSc4d955pzNo0CDn2WefTftYx3GcJUuWOKNHj3aOHDnS7eePd/2rV692Tj31VKelpaXj8//5n//pDBgwwNm7d6/jOI4zb948p6SkxGlra+t4zAMPPOAUFxc7ra2tHfetWrXKkeRs27atxzMDABB29Al9AgDwL15xCETI+PHjdcUVV2js2LH64he/qB//+Md67733JEnNzc16++23NWXKlKSvmTJlirZv357R9ykoKNC4ceM6bjc2NmrgwIH6zGc+0+3jGxoa9PTTT+vkk0/u+PjEJz4hSR0/ptOdSZMm6bbbbtM3v/lN/cM//IMuu+yyjs9VVVV1PNdFF13UcY6pU6fqhBNOSHmu3lz/9u3bNX78eJ100klJnz969KhefvnljvvGjh2rgoKCjtvu15144olJZwcAAPQJfQIA8LNBXh8AQP4MHDhQdXV12rJli5588kn98z//s+644w49//zzOu200yRJsVgs6Wscx+m4b8CAAR33uT788MOU7zN48OCk5xk8eHCP5zp69Khmzpyp73znOymfO+OMM3r8us2bN2vgwIEpP6704IMP6q9//askdYT48c4h9Xz9nf93T1/XOdzdrwMAAN2jT+gTAIB/8YpDIGJisZimTJmipUuXatu2bSooKNDjjz+uIUOGqLS0VL/73e+SHr9lyxZdeOGFkqTTTz9dkr3nj6uxsfG433Ps2LE6evSonn322W4/f/HFF+ull17S2WefrXPPPTfpo2vkdnbfffdp+/btevbZZ7VhwwY99NBDHZ8788wzO55j1KhRkqRx48Zp06ZN3f7HRG+uPx6Pq7GxsePN2iVp8+bNGjBgQMebjHcnHo/rj3/8Y8d/KEjSc889l/bxAABEDX1CnwAAfMqrn5EGkH/PPfecc8899zj19fXOG2+84Tz66KNOQUGBs379esdxHOcHP/iBM2TIEOeRRx5x/vKXvzj/9E//5JxwwgnOK6+84jiO4xw5csQZOXKk88UvftF5+eWXnSeeeMK54IILUt5DaOjQoSnf+4YbbnBGjhzpPP74485//dd/OU8//bSzdu1ax3Ec56233nJOP/1057rrrnOef/5557XXXnM2bNjg3Hjjjc5HH33U7bVs27bNKSgocH71q185juM4Dz74oHPKKac4r732Wtrr379/v3Paaac5X/jCF5z6+nrnlVdecR5++GHnL3/5S6+uv7W11TnjjDOc2bNnOy+++KLz29/+1jnnnHOcefPmdXyPefPmOZ///OeTvu+hQ4ec4cOHO3/7t3/rvPTSS85//ud/Oueeey7vIQQAgEOf0CcAAD9jcAhESFNTkzNjxgzn9NNPdwoLC53zzz/f+ed//ueOz7e3tztLly51zjzzTOeEE05wxo8f7/y///f/kp7jd7/7nTN27FinqKjImTp1qvPYY4/1Ksz/+te/OrfeeqtzxhlnOAUFBc65557r/N//+387Pv/KK684s2bNcoYNG+YMHjzY+cQnPuEsXrzYOXr0aLfPFY/HnZtuuinp/lmzZjmTJ09OG/OO4zh//OMfncrKSufEE090TjnlFGfq1KkdMd+b6//Tn/7kTJ8+3SkqKnKKi4udr3zlK86hQ4c6Pt9dmDuO4/z+9793xo8f7xQUFDgTJkxwfv7znxPmAAA49Inj0CcAAP+KOQ5vbgEAAAAAAAAgGe9xCAAAAAD/vx07EAAAAAAQ5G89wAqFEQAw4hAAAAAAGHEIAAAAAIw4BAAAAABGHAIAAAAAIw4BAAAAgBGHAAAAAMCIQwAAAABgxCEAAAAAMOIQAAAAABhxCAAAAABMUZ+MTt1OF24AAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAALACAYAAADSYu9+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACju0lEQVR4nOzde3xU9Z3/8XckJkGQYKBEoxDwRo0R0JBaUBR0hQbFe6WXRVSssow/itS2UlYFvMRdW0q3DihtV6qtW7RrqbXUGKsrVGoNkVg1rkpFg5VLCUokKGg4vz8+e0ImkwkzyUzOmTmv5+ORx+5MJjPf4KUvP5+5ZDmO4wgAAAAAAAAA2jjE6wMAAAAAAAAA8B8GhwAAAAAAAACiMDgEAAAAAAAAEIXBIQAAAAAAAIAoDA4BAAAAAAAARGFwCAAAAAAAACAKg0MAAAAAAAAAURgcAgAAAAAAAIjC4BAAAAAAAABAFAaHSIpnnnlG11xzjT7/+c+rT58+Ovroo3XRRReptra2058bP368srKyDvq1YMGCnvlF4hTPmbOysvQ///M/SXvM8ePHa/z48Um7v858+umnuv/++1VeXq6CggIddthhKi4u1kUXXaTf/OY3SX88P/01dhxHDz/8sM455xwdccQRys3N1bHHHqtQKKTNmzd3+/7feecdZWVlacWKFd0/bBy2bt2qG264Qccee6x69+6t4uJizZgxQw0NDV2+z6FDh+qCCy5I4inj05P/DADILH/60580efJkHXHEEerdu7dOOOEE3X777TFvT5/Ejz7pGfTJwdEnAJAa2V4fAJlh2bJlamxs1De/+U2VlJToH//4h37wgx/oi1/8oqqqqnTOOed0+HNLly5VU1NT6+Xf//73uuOOO/TAAw/o85//fOv1xxxzTMp/h0T8+c9/jrh8++2369lnn9UzzzwTcX1JSUlPHitppk2bpscee0xz5szRwoULlZubq7fffltPPvmkqqqqdMkllyT18f785z/74q/x/v379bWvfU0rV67UV7/6Va1YsUL5+fn661//qnvuuUcPP/ywnnjiCZ1xxhleHzUue/fu1VlnnaUPPvhACxcuVElJid544w3ddtttqqqq0uuvv67DDz/c62MCQEo9/PDDmjZtmq644go9+OCD6tu3r/72t7/p/fffj/kz9Ik/0Sf0CQDAAw6QBNu2bYu67qOPPnIKCwudc889N+77eeCBBxxJTk1NTVLO1dzcnJT7OZjp06c7ffr0SeljnH322c7ZZ5+dlPvav3+/s2fPng6/9/bbbzuSnFtvvbXD77e0tKT8DF656667HEnO3XffHfW9rVu3OsXFxU5hYaHzwQcfdHo/nf19t2nTJkeS88ADD3TztGbPnj3O/v37O/xedXW1I8n56U9/GnH9ww8/7EhyHnvssS49ZnFxsXP++ed36We7I5n/DAAIhvfee8/p06eP8y//8i/duh/6JDb6JPXok/jQJwCQGrxUGUkxaNCgqOv69u2rkpKSpLx8YuXKlRozZoz69Omjvn37atKkSdqwYUPEba666ir17dtXr7zyiiZOnKjDDz9c5557riR7qckNN9ygBx54QMOHD1fv3r01evRovfDCC3IcR/fcc4+GDRumvn376pxzztHGjRu7feZwOKyzzjpLgwYNUp8+fXTKKafo3//93/Xpp5+23ub2229XdnZ2h39G11xzjQYMGKBPPvkk5mPs3LlTs2bN0tFHH62cnBwde+yxmj9/vvbu3RtxO/f3v++++3TSSScpNzdXP//5zzu8z8bGRknSUUcd1eH3Dzkk8l8bTU1NuummmzRs2DDl5OTo6KOP1pw5c9Tc3Bz3GTp6KdDWrVt1/fXX65hjjlFOTo6GDRumhQsX6rPPPou43bJlyzRy5Ej17dtXhx9+uD7/+c/re9/7Xsw/s1j27dune+65RyeddJK+853vRH2/sLBQlZWV2rZtm372s5+1Xj9+/HiVlpZqzZo1Gjt2rA477DBdc801kqT3339fV1xxhQ4//HDl5+dr6tSp2rp1a4ePv379el144YUqKChQXl6eTj31VD3yyCMRt1mxYoWysrL01FNP6ZprrtHnPvc5HXbYYVF/vV2HHnqoJCk/Pz/i+v79+0uS8vLy4vvD6YLq6mpddNFFOuaYY5SXl6fjjz9e119/vXbs2BFxuwULFigrK0sbNmzQpZdeqn79+ik/P1///M//rH/84x8HfZyFCxfq9NNPV0FBgfr166fTTjtNP/vZz+Q4TtRtH374YY0ZM0Z9+/ZV3759NWrUqIi/lpL09NNP69xzz1W/fv102GGH6YwzztAf//jH7v1hAPDMT3/6UzU3N+u73/1uSu6fPukYfUKf0Cf0CYAM4u3cEpnsww8/dPLz851LLrkk7p/paKN/5513OllZWc4111zjPPHEE85jjz3mjBkzxunTp4/z2muvtd5u+vTpzqGHHuoMHTrUqaysdP74xz86VVVVjuM4jiSnuLjYGTt2rPPYY485v/nNb5wTTzzRKSgocG688Ubnoosucp544gnnl7/8pVNYWOiMGDEi5pa0Ix1t9G+88UZn2bJlzpNPPuk888wzzg9/+ENn4MCBztVXX916m23btjm5ubnO/PnzI362sbHR6d27t/Ptb3+79br228yPP/7YGTFihNOnTx/n+9//vvPUU085t9xyi5Odne1Mnjw54v4kOUcffbQzYsQI5+GHH3aeeeYZ59VXX+3wd9m9e7fTv39/58gjj3Tuv/9+Z9OmTTF/7+bmZmfUqFHOwIEDncWLFztPP/2086Mf/cjJz893zjnnnIg/w87OIMm57bbbWm+7ZcsWZ/DgwU5xcbFz//33O08//bRz++23O7m5uc5VV13Verv/+q//ciQ5/+///T/nqaeecp5++mnnvvvuc2bPnh3zzLGsW7fOkeR897vfjXmbjz76yDnkkEOcSZMmtV539tlnOwUFBc7gwYOdH//4x86zzz7rPPfcc86ePXuck046ycnPz3d+/OMfO1VVVc7s2bOdIUOGRG30n3nmGScnJ8cZN26cs3LlSufJJ590rrrqqqjbuf98HH300c51113n/OEPf3B+/etfO5999lmH5/3000+dsrIy5+STT3ZefPFF56OPPnJqa2udUaNGOaeddpqzb9++hP+cHCe+jf6yZcucyspK5/HHH3eee+455+c//7kzcuRIZ/jw4RGPe9ttt7X+8/ntb3/bqaqqchYvXuz06dPHOfXUUyNu29FG/6qrrnJ+9rOfOdXV1U51dbVz++23O71793YWLlwYcbtbbrnFkeRceumlzqOPPuo89dRTzuLFi51bbrml9TYPPfSQk5WV5Vx88cXOY4895vzud79zLrjgAqdXr17O008/3aU/KwDeOuecc5yCggLnySefdEaOHOn06tXL+dznPudcf/31zq5du+K+H/rE0Cf0CX1CnwAIHgaHSJmvf/3rTnZ2trN+/fq4f6Z9mDc0NDjZ2dnO//t//y/idh999JFz5JFHOldccUXrddOnT3ckOf/5n/8Zdb+SnCOPPNLZvXt363WrVq1yJDmjRo2KCMglS5Y4kpy//vWvcZ/7YC8FamlpcT799FPnwQcfdHr16uXs3Lkz4mcHDRrk7N27t/W6f/u3f3MOOeSQiChuHyX33XefI8l55JFHIh7r3/7t3xxJzlNPPRXx++fn50c8bmd+//vfOwMHDnQkOZKcAQMGOF/+8pedxx9/POJ2lZWVziGHHBL10q1f//rXjiRn9erVcZ2hfZhff/31Tt++fZ1333034nbf//73HUmt/0F2ww03OP3794/rdzqYX/3qV44k57777uv0doWFhc5JJ53Uevnss892JDl//OMfI263bNkyR5Lz29/+NuL6b3zjG1HB/fnPf9459dRTnU8//TTithdccIFz1FFHtb78yv3n48orr4z792pqanKmTJnS+tdSkjN+/HinsbEx7vtoL9GXAu3fv9/59NNPnXfffTfqz8QN8xtvvDHiZ375y186kpxf/OIXrdcd7KVA7j9nixYtcgYMGND6z/Xbb7/t9OrVy/n6178e82ebm5udgoICZ8qUKVH3OXLkSOcLX/hC3L8vAP8YPny4k5eX5xx++OHOXXfd5Tz77LPOv//7vzu9e/d2zjjjjLiHcPSJoU/oE8ehT+gTAEHDS5WRErfccot++ctf6oc//KHKyspar9+/f78+++yz1q+WlpZO76eqqkqfffaZrrzyyoify8vL09lnn93hpwJedtllHd7XhAkT1KdPn9bLJ510kiSpoqJCWVlZUde/++67cf++HdmwYYMuvPBCDRgwQL169dKhhx6qK6+8Ui0tLXrzzTdbb/fNb35T27dv16OPPirJ/oyWLVum888/X0OHDo15/88884z69Omjyy+/POL6q666SpKiXr7gfgpfPCZPnqyGhgb95je/0U033aSTTz5Zq1at0oUXXqgbbrih9XZPPPGESktLNWrUqIi/PpMmTerwUxvjPcMTTzyhCRMmqKioKOJ+KyoqJEnPPfecJOkLX/iCPvzwQ331q1/Vb3/726iXmaSC4zgRf79I0hFHHBH1AUDPPvusDj/8cF144YUR13/ta1+LuLxx40b97//+r77+9a9LUsTvO3nyZG3ZskVvvPFGxM/E+nu8vU8//VRTp05VXV2dfvKTn2jNmjX6+c9/rr///e8677zztGvXrrjupyu2b9+umTNnavDgwcrOztahhx6q4uJiSdLrr78edXv393ddccUVys7O1rPPPtvp4zzzzDP6p3/6J+Xn57f+c3brrbeqsbFR27dvl2QvS2ppaVEoFIp5P+vWrdPOnTs1ffr0iL8G+/fv15e+9CXV1NREvbwNgP/t379fn3zyib73ve9p3rx5Gj9+vL797W+rsrJSzz//fOv/VtIn9Al9Qp/QJwDQMT5VGUm3cOFC3XHHHbrzzjsjIk6SFi1apIULF7ZeLi4u1jvvvBPzvrZt2yZJKi8v7/D77d/P5rDDDlO/fv06vG1BQUHE5ZycnE6v7+y9ew6moaFB48aN0/Dhw/WjH/1IQ4cOVV5enl588UWFQiF9/PHHrbc99dRTNW7cOIXDYX3961/XE088oXfeeUf3339/p4/R2NioI488MioSBw0apOzs7Nb3AnLFek+gWHr37q2LL75YF198cevvVFFRoXA4rH/5l3/RySefrG3btmnjxo2t71XTXvtQjvcM27Zt0+9+97uD3u+0adP02Wef6Sc/+Ykuu+wy7d+/X+Xl5brjjjt03nnnxfmbmiFDhkiSNm3aFPM2zc3N2rFjh0499dSI6zv6vRobG1VYWBh1/ZFHHhlx2f17/KabbtJNN93U4eN29c/xZz/7mf7whz+opqZGo0ePliSNGzdOZ555po477jgtWbJEt912W1z3lYj9+/dr4sSJev/993XLLbfolFNOUZ8+fbR//3598YtfjPj739X+zyU7O1sDBgyI+vu4rRdffFETJ07U+PHj9ZOf/KT1/aZWrVqlO++8s/Vx3Pci6uyTMd2/Du3/Q7etnTt3RvzHPQD/GzBggN566y1NmjQp4vqKigrNmTNHL730kv7pn/6JPqFP4nps+iQSfdIx+gRApmFwiKRauHChFixYoAULFnT4BtDXXXedLrjggtbLubm5nd7fwIEDJUm//vWvW7eBnWkfqV5ZtWqVmpub9dhjj0Wcu66ursPbz549W1/+8pf10ksv6d5779WJJ5540LAcMGCA/vKXv0RtmLdv367PPvus9c/O1d0/myFDhui6667TnDlz9Nprr+nkk0/WwIED1bt3b/3nf/5nhz/T1TMMHDhQI0aM0J133tnh94uKilr//6uvvlpXX321mpubtWbNGt1222264IIL9Oabb8b194yrrKxMRxxxhB5//HFVVlZ2eNbHH39c+/fvj/pr09FtBwwYoBdffDHq+vZvPu7+Gc2bN0+XXnpph2cbPnz4QR+vI3V1derVq5dOO+20iOuPPfZYDRgwQK+++mpc95OoV199VS+//LJWrFih6dOnt17f2Zv6b926VUcffXTr5c8++0yNjY0aMGBAzJ/51a9+pUMPPVRPPPFExBupr1q1KuJ2n/vc5yRJ7733ngYPHtzhfbl/HX784x/ri1/8Yoe36eg/tAD424gRI/TCCy9EXe/83wcUuAM++qSuw9vTJ9E/R58cQJ90jD4BkGkYHCJpbr/9di1YsED/+q//GnNLWFRUFBFVBzNp0iRlZ2frb3/7W9wvf/ADN5za/oeH4zj6yU9+0uHtL7nkEg0ZMkTf+ta39Nxzz+mHP/zhQePr3HPP1SOPPKJVq1bpkksuab3+wQcfbP1+V3z00UfKyspS3759o77nvoTD/Wt4wQUX6K677tKAAQM0bNiwLj1eRy644AKtXr1axx13XNwvX+rTp48qKiq0b98+XXzxxXrttdcSCvOcnBx9+9vf1ve+9z3dc889UZ9cuH37ds2bN0+FhYW69tprD3p/EyZM0COPPKLHH3884uVADz/8cMTthg8frhNOOEEvv/yy7rrrrrjPG4+ioiK1tLSopqZGp59+euv1b775phobGzvdcHdHR3//S+r0WSq//OUvI97W4JFHHtFnn32m8ePHd/o42dnZ6tWrV+t1H3/8sR566KGI202cOFG9evXSsmXLNGbMmA7v64wzzlD//v1VX18f9UxpAOnrsssu0/Lly/WHP/wh4tlYq1evlqTW/xCnT+iTeNAnyUGfGPoEQLpgcIik+MEPfqBbb71VX/rSl3T++edHbfdjbcgOZujQoVq0aJHmz5+vt99+W1/60pd0xBFHaNu2bXrxxRfVp0+fiJcW+cV5552nnJwcffWrX9V3vvMdffLJJ1q2bJk++OCDDm/fq1cvhUIhffe731WfPn1a3weoM1deeaXC4bCmT5+ud955R6eccor+9Kc/6a677tLkyZP1T//0T106+xtvvKFJkybpK1/5is4++2wdddRR+uCDD/T73/9ey5cv1/jx4zV27FhJ0pw5c/Tf//3fOuuss3TjjTdqxIgR2r9/vxoaGvTUU0/pW9/6VkQQxmvRokWqrq7W2LFjNXv2bA0fPlyffPKJ3nnnHa1evVr33XefjjnmGH3jG99Q7969dcYZZ+ioo47S1q1bVVlZqfz8/IiXj7nvxdTZy84k6bvf/a5efvnl1v87depU5efn669//avuueceffTRR3riiSeUn59/0N/hyiuv1A9/+ENdeeWVuvPOO3XCCSdo9erVqqqqirrt/fffr4qKCk2aNElXXXWVjj76aO3cuVOvv/66Xnrppdb3l0rU1VdfrR/+8Ie67LLL9K//+q8aPny43n77bd11113q06ePZs6c2Xrbd955R8OGDdP06dO1YsWKg9731q1b9etf/zrq+qFDh2rkyJE67rjjdPPNN8txHBUUFOh3v/udqqurY97fY489puzsbJ133nl67bXXdMstt2jkyJG64oorYv7M+eefr8WLF+trX/uarrvuOjU2Nur73/9+1H8QDB06VN/73vd0++236+OPP9ZXv/pV5efnq76+Xjt27NDChQvVt29f/fjHP9b06dO1c+dOXX755Ro0aJD+8Y9/6OWXX9Y//vEPLVu27KB/LgD8ZeLEiZoyZYoWLVrU+nLE9evXa+HChbrgggt05plndul+6ZPY6BP65GDokwNnok8ApAXPPpYFGcX95LZYX/Fq/6mFrlWrVjkTJkxw+vXr5+Tm5jrFxcXO5Zdf7jz99NOtt+nskwMlOaFQKOK6TZs2OZKce+65J+L6Z5991pHkPProo3Gfu6PH/t3vfueMHDnSycvLc44++mjn29/+tvOHP/zBkeQ8++yzUffxzjvvOJKcmTNndvgYHX1iW2NjozNz5kznqKOOcrKzs53i4mJn3rx5zieffBJxu45+/1g++OAD54477nDOOecc5+ijj3ZycnKcPn36OKNGjXLuuOMOZ8+ePRG33717t/Ov//qvzvDhw52cnBwnPz/fOeWUU5wbb7zR2bp1a1xnULtPLXQcx/nHP/7hzJ492xk2bJhz6KGHOgUFBU5ZWZkzf/781k+f/PnPf+5MmDDBKSwsdHJycpyioiLniiuuiPrEyYEDBzpf/OIX4/r99+/f7/zyl790xo8f7/Tv39/Jyclxhg0b5vzLv/xL1KcoOo79dTn55JM7vK/33nvPueyyy5y+ffs6hx9+uHPZZZc569ati/rUQsdxnJdfftm54oornEGDBjmHHnqoc+SRRzrnnHNOxKcoxvrnozNvvfWWM23aNGfo0KFObm6uM2TIEGfq1Kmtn/zoeuWVVxxJzs0333zQ+ywuLo75z/r06dMdx3Gc+vp657zzznMOP/xw54gjjnC+/OUvOw0NDVF/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5Ve/+pV4enrKhQsXRESku7tbIiIi5LHHHpPa2lopKCiQefPmGb2HUEBAgNF9b9y4USIiIiQ/P1/++9//SlFRkRw5ckRERBobGyUkJEQeffRROXXqlFy6dEmOHz8uP/7xj6W3t9dklsrKSvHy8pL33ntPREQOHTokfn5+cunSpWHzNzc3S1BQkDz88MNSXl4uFy5ckMOHD8v58+fNyt/R0SHTp0+XRx55RM6ePSuffPKJ3HPPPZKVlWW4j6ysLHnooYeG3G9bW5sEBwfL448/LtXV1fL+++/L7Nmz+R5CREREwn7CfkJERM6MC4dECjl37pykpaVJSEiIeHt7y9y5c+WVV14x7O/r65Pdu3fLjBkzxNPTU2JjY+Wf//znkNv49NNPJTo6Wnx8fCQpKUmOHTtmVjH/7rvv5Be/+IVMnz5dvLy8ZPbs2fLnP//ZsP/ChQuybt06mTJlivj6+sr8+fNl69atotfrTd6WVquVzZs3D9m+bt06Wb58+bBlXkTkzJkzkpqaKpMmTRI/Pz9JSkoylHlz8n/xxReSkpIiPj4+EhgYKE8++aS0tbUZ9psq5iIin332mcTGxoqXl5fExcXJO++8w2JOREQk7Cci7CdEROS8NCJ8cwsiIiIiIiIiIiIaiu9xSEREREREREREREa4cEhERERERERERERGuHBIRERERERERERERrhwSEREREREREREREa4cEhERERERERERERGuHBIRERERERERERERrhwSEREREREREREREa4cEhERERERERERERGuHBIRERERERERERERrhwSEREREREREREREa4cEhERERERERERERGuHBIRERERERERERERv4/045TXlIYiGwAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -824,6 +854,8 @@ "ax2.set_xlabel(\"source x-coord\")\n", "ax2.set_ylabel(\"source y-coord\")\n", "\n", + "ax1.set_title('2-Term Taylor Series, Order 8, Laplace')\n", + "ax2.set_title('6-Term Taylor Series, Order 8, Laplace')\n", "\n", "plt.show()" ] From c5b598bdca43e6240ed8a81017a3808f076a0fb4 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 2 Jan 2025 16:30:16 -0800 Subject: [PATCH 132/143] Debugged, now investigate k!=1 --- test/plot_taylor_recurrence.ipynb | 96 +++++++++---------------------- 1 file changed, 27 insertions(+), 69 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index b8c0d7c8..e1538aef 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -122,23 +122,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle -5.55805401702969 \\cdot 10^{-15}$" - ], - "text/plain": [ - "-5.55805401702969e-15" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Sanity check that recurrence is correct\n", "derivs_lap = compute_derivatives(15)\n", @@ -176,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -276,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -321,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -344,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -381,7 +367,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -411,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 73, "metadata": {}, "outputs": [], "source": [ @@ -422,7 +408,6 @@ " initial_grid_subs = []\n", " initial_grid_width = len(initial_grid[0])\n", " initial_grid_length = len(initial_grid)\n", - " coord_dict = {var[1]: 1}\n", "\n", " for i_x in range(initial_grid_length):\n", " tmp = []\n", @@ -435,17 +420,17 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[0, 0, 1.00000000000000, 0, -6.00000000000000, 0],\n", - " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000]]" + "[[0.182321556793955, 0, 0.694444444444445, 0, -2.89351851851852, 0],\n", + " [0, -0.694444444444445, 0, 2.89351851851852, 0, -40.1877572016461]]" ] }, - "execution_count": 72, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } @@ -465,7 +450,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 75, "metadata": {}, "outputs": [], "source": [ @@ -495,23 +480,23 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[0, 0, 1.00000000000000, 0, -6.00000000000000, 0],\n", - " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000],\n", - " [0.826446280991735, 0, -4.95867768595041, 0, 99.1735537190083, 0],\n", - " [0, 4.95867768595041, 0, -99.1735537190083, 0, 4165.28925619835],\n", - " [-4.09808073219042, 0, 81.9616146438085, 0, -3442.38781503996, 0],\n", - " [0, -81.9616146438085, 0, 3442.38781503996, 0, -247851.922682877],\n", - " [67.7368716064533, 0, -2844.94860747104, 0, 204836.299737915, 0],\n", - " [0, 2844.94860747104, 0, -204836.299737915, 0, 22531992.9711706]]" + "[[0.182321556793955, 0, 0.694444444444445, 0, -2.89351851851852, 0],\n", + " [0, -0.694444444444445, 0, 2.89351851851852, 0, -40.1877572016461],\n", + " [0.694444444444445, 0, -2.89351851851852, 0, 40.1877572016461, 0],\n", + " [0, 2.89351851851852, 0, -40.1877572016461, 0, 1172.14291838134],\n", + " [-2.89351851851852, 0, 40.1877572016461, 0, -1172.14291838134, 0],\n", + " [0, -40.1877572016461, 0, 1172.14291838134, 0, -58607.1459190672],\n", + " [40.1877572016461, 0, -1172.14291838134, 0, 58607.1459190672, 0],\n", + " [0, 1172.14291838134, 0, -58607.1459190672, 0, 4476934.75770653]]" ] }, - "execution_count": 66, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } @@ -520,33 +505,6 @@ "extend_grid(initial_grid_subs_laplace, get_taylor_recurrence(laplace2d), coord_dict, 8, 2)" ] }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[0, 0, 1.00000000000000, 0, -6.00000000000000, 0],\n", - " [0, -1.00000000000000, 0, 6.00000000000000, 0, -120.000000000000],\n", - " [1.00000000000000, 0, -6.00000000000000, 0, 120.000000000000, 0],\n", - " [0, 6.00000000000000, 0, -120.000000000000, 0, 5040.00000000000],\n", - " [-6.00000000000000, 0, 120.000000000000, 0, -5040.00000000000, 0],\n", - " [0, -120.000000000000, 0, 5040.00000000000, 0, -362880.000000000],\n", - " [120.000000000000, 0, -5040.00000000000, 0, 362880.000000000, 0],\n", - " [0, 5040.00000000000, 0, -362880.000000000, 0, 39916800.0000000]]" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "create_subs_grid(6, 8, derivs_lap, coord_dict)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -556,7 +514,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -595,7 +553,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -731,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -818,7 +776,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": null, "metadata": {}, "outputs": [ { From 56041c1a8eb54fa08939c0b6231f5e089dc15d81 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 2 Jan 2025 19:08:43 -0800 Subject: [PATCH 133/143] Improve naming --- sumpy/recurrence.py | 2 + test/plot_taylor_recurrence.ipynb | 76 +++++++++++++++++-------------- 2 files changed, 43 insertions(+), 35 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index df0c8811..bd35693f 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -394,6 +394,8 @@ def get_shifted_recurrence_exp_from_pde(pde: LinearPDESystemOperator) -> sp.Expr r""" A function that "shifts" the recurrence so it's center is placed at the origin and source is the input for the recurrence generated. + Outputs an expression that evaluates to 0 rather than s(n) in terms + of s(n-1), etc. :arg recurrence: a recurrence relation in :math:`s(n)` """ diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index e1538aef..d9a279d8 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -122,9 +122,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle -1.55431223447522 \\cdot 10^{-15}$" + ], + "text/plain": [ + "-1.55431223447522e-15" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "#Sanity check that recurrence is correct\n", "derivs_lap = compute_derivatives(15)\n", @@ -162,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -196,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -262,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -307,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -330,7 +344,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -367,7 +381,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -397,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -420,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -430,7 +444,7 @@ " [0, -0.694444444444445, 0, 2.89351851851852, 0, -40.1877572016461]]" ] }, - "execution_count": 74, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -450,7 +464,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -480,7 +494,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -496,7 +510,7 @@ " [0, 1172.14291838134, 0, -58607.1459190672, 0, 4476934.75770653]]" ] }, - "execution_count": 76, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -514,7 +528,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -553,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -689,7 +703,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -701,7 +715,7 @@ "0.0873119521523848" ] }, - "execution_count": 59, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -713,19 +727,19 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 0.0177032219793687$" + "$\\displaystyle 2.26227346778715 \\cdot 10^{-14}$" ], "text/plain": [ - "0.0177032219793687" + "2.26227346778715e-14" ] }, - "execution_count": 62, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -736,7 +750,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -758,17 +772,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "BOMB\n" - ] - } - ], + "outputs": [], "source": [ "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 8, laplace2d, derivs_lap, 2, 2)\n", "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 8, laplace2d, derivs_lap, 6, 2)" @@ -776,12 +782,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAALACAYAAADSYu9+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACju0lEQVR4nOzde3xU9Z3/8XckJkGQYKBEoxDwRo0R0JBaUBR0hQbFe6WXRVSssow/itS2UlYFvMRdW0q3DihtV6qtW7RrqbXUGKsrVGoNkVg1rkpFg5VLCUokKGg4vz8+e0ImkwkzyUzOmTmv5+ORx+5MJjPf4KUvP5+5ZDmO4wgAAAAAAAAA2jjE6wMAAAAAAAAA8B8GhwAAAAAAAACiMDgEAAAAAAAAEIXBIQAAAAAAAIAoDA4BAAAAAAAARGFwCAAAAAAAACAKg0MAAAAAAAAAURgcAgAAAAAAAIjC4BAAAAAAAABAFAaHSIpnnnlG11xzjT7/+c+rT58+Ovroo3XRRReptra2058bP368srKyDvq1YMGCnvlF4hTPmbOysvQ///M/SXvM8ePHa/z48Um7v858+umnuv/++1VeXq6CggIddthhKi4u1kUXXaTf/OY3SX88P/01dhxHDz/8sM455xwdccQRys3N1bHHHqtQKKTNmzd3+/7feecdZWVlacWKFd0/bBy2bt2qG264Qccee6x69+6t4uJizZgxQw0NDV2+z6FDh+qCCy5I4inj05P/DADILH/60580efJkHXHEEerdu7dOOOEE3X777TFvT5/Ejz7pGfTJwdEnAJAa2V4fAJlh2bJlamxs1De/+U2VlJToH//4h37wgx/oi1/8oqqqqnTOOed0+HNLly5VU1NT6+Xf//73uuOOO/TAAw/o85//fOv1xxxzTMp/h0T8+c9/jrh8++2369lnn9UzzzwTcX1JSUlPHitppk2bpscee0xz5szRwoULlZubq7fffltPPvmkqqqqdMkllyT18f785z/74q/x/v379bWvfU0rV67UV7/6Va1YsUL5+fn661//qnvuuUcPP/ywnnjiCZ1xxhleHzUue/fu1VlnnaUPPvhACxcuVElJid544w3ddtttqqqq0uuvv67DDz/c62MCQEo9/PDDmjZtmq644go9+OCD6tu3r/72t7/p/fffj/kz9Ik/0Sf0CQDAAw6QBNu2bYu67qOPPnIKCwudc889N+77eeCBBxxJTk1NTVLO1dzcnJT7OZjp06c7ffr0SeljnH322c7ZZ5+dlPvav3+/s2fPng6/9/bbbzuSnFtvvbXD77e0tKT8DF656667HEnO3XffHfW9rVu3OsXFxU5hYaHzwQcfdHo/nf19t2nTJkeS88ADD3TztGbPnj3O/v37O/xedXW1I8n56U9/GnH9ww8/7EhyHnvssS49ZnFxsXP++ed36We7I5n/DAAIhvfee8/p06eP8y//8i/duh/6JDb6JPXok/jQJwCQGrxUGUkxaNCgqOv69u2rkpKSpLx8YuXKlRozZoz69Omjvn37atKkSdqwYUPEba666ir17dtXr7zyiiZOnKjDDz9c5557riR7qckNN9ygBx54QMOHD1fv3r01evRovfDCC3IcR/fcc4+GDRumvn376pxzztHGjRu7feZwOKyzzjpLgwYNUp8+fXTKKafo3//93/Xpp5+23ub2229XdnZ2h39G11xzjQYMGKBPPvkk5mPs3LlTs2bN0tFHH62cnBwde+yxmj9/vvbu3RtxO/f3v++++3TSSScpNzdXP//5zzu8z8bGRknSUUcd1eH3Dzkk8l8bTU1NuummmzRs2DDl5OTo6KOP1pw5c9Tc3Bz3GTp6KdDWrVt1/fXX65hjjlFOTo6GDRumhQsX6rPPPou43bJlyzRy5Ej17dtXhx9+uD7/+c/re9/7Xsw/s1j27dune+65RyeddJK+853vRH2/sLBQlZWV2rZtm372s5+1Xj9+/HiVlpZqzZo1Gjt2rA477DBdc801kqT3339fV1xxhQ4//HDl5+dr6tSp2rp1a4ePv379el144YUqKChQXl6eTj31VD3yyCMRt1mxYoWysrL01FNP6ZprrtHnPvc5HXbYYVF/vV2HHnqoJCk/Pz/i+v79+0uS8vLy4vvD6YLq6mpddNFFOuaYY5SXl6fjjz9e119/vXbs2BFxuwULFigrK0sbNmzQpZdeqn79+ik/P1///M//rH/84x8HfZyFCxfq9NNPV0FBgfr166fTTjtNP/vZz+Q4TtRtH374YY0ZM0Z9+/ZV3759NWrUqIi/lpL09NNP69xzz1W/fv102GGH6YwzztAf//jH7v1hAPDMT3/6UzU3N+u73/1uSu6fPukYfUKf0Cf0CYAM4u3cEpnsww8/dPLz851LLrkk7p/paKN/5513OllZWc4111zjPPHEE85jjz3mjBkzxunTp4/z2muvtd5u+vTpzqGHHuoMHTrUqaysdP74xz86VVVVjuM4jiSnuLjYGTt2rPPYY485v/nNb5wTTzzRKSgocG688Ubnoosucp544gnnl7/8pVNYWOiMGDEi5pa0Ix1t9G+88UZn2bJlzpNPPuk888wzzg9/+ENn4MCBztVXX916m23btjm5ubnO/PnzI362sbHR6d27t/Ptb3+79br228yPP/7YGTFihNOnTx/n+9//vvPUU085t9xyi5Odne1Mnjw54v4kOUcffbQzYsQI5+GHH3aeeeYZ59VXX+3wd9m9e7fTv39/58gjj3Tuv/9+Z9OmTTF/7+bmZmfUqFHOwIEDncWLFztPP/2086Mf/cjJz893zjnnnIg/w87OIMm57bbbWm+7ZcsWZ/DgwU5xcbFz//33O08//bRz++23O7m5uc5VV13Verv/+q//ciQ5/+///T/nqaeecp5++mnnvvvuc2bPnh3zzLGsW7fOkeR897vfjXmbjz76yDnkkEOcSZMmtV539tlnOwUFBc7gwYOdH//4x86zzz7rPPfcc86ePXuck046ycnPz3d+/OMfO1VVVc7s2bOdIUOGRG30n3nmGScnJ8cZN26cs3LlSufJJ590rrrqqqjbuf98HH300c51113n/OEPf3B+/etfO5999lmH5/3000+dsrIy5+STT3ZefPFF56OPPnJqa2udUaNGOaeddpqzb9++hP+cHCe+jf6yZcucyspK5/HHH3eee+455+c//7kzcuRIZ/jw4RGPe9ttt7X+8/ntb3/bqaqqchYvXuz06dPHOfXUUyNu29FG/6qrrnJ+9rOfOdXV1U51dbVz++23O71793YWLlwYcbtbbrnFkeRceumlzqOPPuo89dRTzuLFi51bbrml9TYPPfSQk5WV5Vx88cXOY4895vzud79zLrjgAqdXr17O008/3aU/KwDeOuecc5yCggLnySefdEaOHOn06tXL+dznPudcf/31zq5du+K+H/rE0Cf0CX1CnwAIHgaHSJmvf/3rTnZ2trN+/fq4f6Z9mDc0NDjZ2dnO//t//y/idh999JFz5JFHOldccUXrddOnT3ckOf/5n/8Zdb+SnCOPPNLZvXt363WrVq1yJDmjRo2KCMglS5Y4kpy//vWvcZ/7YC8FamlpcT799FPnwQcfdHr16uXs3Lkz4mcHDRrk7N27t/W6f/u3f3MOOeSQiChuHyX33XefI8l55JFHIh7r3/7t3xxJzlNPPRXx++fn50c8bmd+//vfOwMHDnQkOZKcAQMGOF/+8pedxx9/POJ2lZWVziGHHBL10q1f//rXjiRn9erVcZ2hfZhff/31Tt++fZ1333034nbf//73HUmt/0F2ww03OP3794/rdzqYX/3qV44k57777uv0doWFhc5JJ53Uevnss892JDl//OMfI263bNkyR5Lz29/+NuL6b3zjG1HB/fnPf9459dRTnU8//TTithdccIFz1FFHtb78yv3n48orr4z792pqanKmTJnS+tdSkjN+/HinsbEx7vtoL9GXAu3fv9/59NNPnXfffTfqz8QN8xtvvDHiZ375y186kpxf/OIXrdcd7KVA7j9nixYtcgYMGND6z/Xbb7/t9OrVy/n6178e82ebm5udgoICZ8qUKVH3OXLkSOcLX/hC3L8vAP8YPny4k5eX5xx++OHOXXfd5Tz77LPOv//7vzu9e/d2zjjjjLiHcPSJoU/oE8ehT+gTAEHDS5WRErfccot++ctf6oc//KHKyspar9+/f78+++yz1q+WlpZO76eqqkqfffaZrrzyyoify8vL09lnn93hpwJedtllHd7XhAkT1KdPn9bLJ510kiSpoqJCWVlZUde/++67cf++HdmwYYMuvPBCDRgwQL169dKhhx6qK6+8Ui0tLXrzzTdbb/fNb35T27dv16OPPirJ/oyWLVum888/X0OHDo15/88884z69Omjyy+/POL6q666SpKiXr7gfgpfPCZPnqyGhgb95je/0U033aSTTz5Zq1at0oUXXqgbbrih9XZPPPGESktLNWrUqIi/PpMmTerwUxvjPcMTTzyhCRMmqKioKOJ+KyoqJEnPPfecJOkLX/iCPvzwQ331q1/Vb3/726iXmaSC4zgRf79I0hFHHBH1AUDPPvusDj/8cF144YUR13/ta1+LuLxx40b97//+r77+9a9LUsTvO3nyZG3ZskVvvPFGxM/E+nu8vU8//VRTp05VXV2dfvKTn2jNmjX6+c9/rr///e8677zztGvXrrjupyu2b9+umTNnavDgwcrOztahhx6q4uJiSdLrr78edXv393ddccUVys7O1rPPPtvp4zzzzDP6p3/6J+Xn57f+c3brrbeqsbFR27dvl2QvS2ppaVEoFIp5P+vWrdPOnTs1ffr0iL8G+/fv15e+9CXV1NREvbwNgP/t379fn3zyib73ve9p3rx5Gj9+vL797W+rsrJSzz//fOv/VtIn9Al9Qp/QJwDQMT5VGUm3cOFC3XHHHbrzzjsjIk6SFi1apIULF7ZeLi4u1jvvvBPzvrZt2yZJKi8v7/D77d/P5rDDDlO/fv06vG1BQUHE5ZycnE6v7+y9ew6moaFB48aN0/Dhw/WjH/1IQ4cOVV5enl588UWFQiF9/PHHrbc99dRTNW7cOIXDYX3961/XE088oXfeeUf3339/p4/R2NioI488MioSBw0apOzs7Nb3AnLFek+gWHr37q2LL75YF198cevvVFFRoXA4rH/5l3/RySefrG3btmnjxo2t71XTXvtQjvcM27Zt0+9+97uD3u+0adP02Wef6Sc/+Ykuu+wy7d+/X+Xl5brjjjt03nnnxfmbmiFDhkiSNm3aFPM2zc3N2rFjh0499dSI6zv6vRobG1VYWBh1/ZFHHhlx2f17/KabbtJNN93U4eN29c/xZz/7mf7whz+opqZGo0ePliSNGzdOZ555po477jgtWbJEt912W1z3lYj9+/dr4sSJev/993XLLbfolFNOUZ8+fbR//3598YtfjPj739X+zyU7O1sDBgyI+vu4rRdffFETJ07U+PHj9ZOf/KT1/aZWrVqlO++8s/Vx3Pci6uyTMd2/Du3/Q7etnTt3RvzHPQD/GzBggN566y1NmjQp4vqKigrNmTNHL730kv7pn/6JPqFP4nps+iQSfdIx+gRApmFwiKRauHChFixYoAULFnT4BtDXXXedLrjggtbLubm5nd7fwIEDJUm//vWvW7eBnWkfqV5ZtWqVmpub9dhjj0Wcu66ursPbz549W1/+8pf10ksv6d5779WJJ5540LAcMGCA/vKXv0RtmLdv367PPvus9c/O1d0/myFDhui6667TnDlz9Nprr+nkk0/WwIED1bt3b/3nf/5nhz/T1TMMHDhQI0aM0J133tnh94uKilr//6uvvlpXX321mpubtWbNGt1222264IIL9Oabb8b194yrrKxMRxxxhB5//HFVVlZ2eNbHH39c+/fvj/pr09FtBwwYoBdffDHq+vZvPu7+Gc2bN0+XXnpph2cbPnz4QR+vI3V1derVq5dOO+20iOuPPfZYDRgwQK+++mpc95OoV199VS+//LJWrFih6dOnt17f2Zv6b926VUcffXTr5c8++0yNjY0aMGBAzJ/51a9+pUMPPVRPPPFExBupr1q1KuJ2n/vc5yRJ7733ngYPHtzhfbl/HX784x/ri1/8Yoe36eg/tAD424gRI/TCCy9EXe/83wcUuAM++qSuw9vTJ9E/R58cQJ90jD4BkGkYHCJpbr/9di1YsED/+q//GnNLWFRUFBFVBzNp0iRlZ2frb3/7W9wvf/ADN5za/oeH4zj6yU9+0uHtL7nkEg0ZMkTf+ta39Nxzz+mHP/zhQePr3HPP1SOPPKJVq1bpkksuab3+wQcfbP1+V3z00UfKyspS3759o77nvoTD/Wt4wQUX6K677tKAAQM0bNiwLj1eRy644AKtXr1axx13XNwvX+rTp48qKiq0b98+XXzxxXrttdcSCvOcnBx9+9vf1ve+9z3dc889UZ9cuH37ds2bN0+FhYW69tprD3p/EyZM0COPPKLHH3884uVADz/8cMTthg8frhNOOEEvv/yy7rrrrrjPG4+ioiK1tLSopqZGp59+euv1b775phobGzvdcHdHR3//S+r0WSq//OUvI97W4JFHHtFnn32m8ePHd/o42dnZ6tWrV+t1H3/8sR566KGI202cOFG9evXSsmXLNGbMmA7v64wzzlD//v1VX18f9UxpAOnrsssu0/Lly/WHP/wh4tlYq1evlqTW/xCnT+iTeNAnyUGfGPoEQLpgcIik+MEPfqBbb71VX/rSl3T++edHbfdjbcgOZujQoVq0aJHmz5+vt99+W1/60pd0xBFHaNu2bXrxxRfVp0+fiJcW+cV5552nnJwcffWrX9V3vvMdffLJJ1q2bJk++OCDDm/fq1cvhUIhffe731WfPn1a3weoM1deeaXC4bCmT5+ud955R6eccor+9Kc/6a677tLkyZP1T//0T106+xtvvKFJkybpK1/5is4++2wdddRR+uCDD/T73/9ey5cv1/jx4zV27FhJ0pw5c/Tf//3fOuuss3TjjTdqxIgR2r9/vxoaGvTUU0/pW9/6VkQQxmvRokWqrq7W2LFjNXv2bA0fPlyffPKJ3nnnHa1evVr33XefjjnmGH3jG99Q7969dcYZZ+ioo47S1q1bVVlZqfz8/IiXj7nvxdTZy84k6bvf/a5efvnl1v87depU5efn669//avuueceffTRR3riiSeUn59/0N/hyiuv1A9/+ENdeeWVuvPOO3XCCSdo9erVqqqqirrt/fffr4qKCk2aNElXXXWVjj76aO3cuVOvv/66Xnrppdb3l0rU1VdfrR/+8Ie67LLL9K//+q8aPny43n77bd11113q06ePZs6c2Xrbd955R8OGDdP06dO1YsWKg9731q1b9etf/zrq+qFDh2rkyJE67rjjdPPNN8txHBUUFOh3v/udqqurY97fY489puzsbJ133nl67bXXdMstt2jkyJG64oorYv7M+eefr8WLF+trX/uarrvuOjU2Nur73/9+1H8QDB06VN/73vd0++236+OPP9ZXv/pV5efnq76+Xjt27NDChQvVt29f/fjHP9b06dO1c+dOXX755Ro0aJD+8Y9/6OWXX9Y//vEPLVu27KB/LgD8ZeLEiZoyZYoWLVrU+nLE9evXa+HChbrgggt05plndul+6ZPY6BP65GDokwNnok8ApAXPPpYFGcX95LZYX/Fq/6mFrlWrVjkTJkxw+vXr5+Tm5jrFxcXO5Zdf7jz99NOtt+nskwMlOaFQKOK6TZs2OZKce+65J+L6Z5991pHkPProo3Gfu6PH/t3vfueMHDnSycvLc44++mjn29/+tvOHP/zBkeQ8++yzUffxzjvvOJKcmTNndvgYHX1iW2NjozNz5kznqKOOcrKzs53i4mJn3rx5zieffBJxu45+/1g++OAD54477nDOOecc5+ijj3ZycnKcPn36OKNGjXLuuOMOZ8+ePRG33717t/Ov//qvzvDhw52cnBwnPz/fOeWUU5wbb7zR2bp1a1xnULtPLXQcx/nHP/7hzJ492xk2bJhz6KGHOgUFBU5ZWZkzf/781k+f/PnPf+5MmDDBKSwsdHJycpyioiLniiuuiPrEyYEDBzpf/OIX4/r99+/f7/zyl790xo8f7/Tv39/Jyclxhg0b5vzLv/xL1KcoOo79dTn55JM7vK/33nvPueyyy5y+ffs6hx9+uHPZZZc569ati/rUQsdxnJdfftm54oornEGDBjmHHnqoc+SRRzrnnHNOxKcoxvrnozNvvfWWM23aNGfo0KFObm6uM2TIEGfq1Kmtn/zoeuWVVxxJzs0333zQ+ywuLo75z/r06dMdx3Gc+vp657zzznMOP/xw54gjjnC+/OUvOw0NDVF/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5Ve/+pV4enrKhQsXRESku7tbIiIi5LHHHpPa2lopKCiQefPmGb2HUEBAgNF9b9y4USIiIiQ/P1/++9//SlFRkRw5ckRERBobGyUkJEQeffRROXXqlFy6dEmOHz8uP/7xj6W3t9dklsrKSvHy8pL33ntPREQOHTokfn5+cunSpWHzNzc3S1BQkDz88MNSXl4uFy5ckMOHD8v58+fNyt/R0SHTp0+XRx55RM6ePSuffPKJ3HPPPZKVlWW4j6ysLHnooYeG3G9bW5sEBwfL448/LtXV1fL+++/L7Nmz+R5CREREwn7CfkJERM6MC4dECjl37pykpaVJSEiIeHt7y9y5c+WVV14x7O/r65Pdu3fLjBkzxNPTU2JjY+Wf//znkNv49NNPJTo6Wnx8fCQpKUmOHTtmVjH/7rvv5Be/+IVMnz5dvLy8ZPbs2fLnP//ZsP/ChQuybt06mTJlivj6+sr8+fNl69atotfrTd6WVquVzZs3D9m+bt06Wb58+bBlXkTkzJkzkpqaKpMmTRI/Pz9JSkoylHlz8n/xxReSkpIiPj4+EhgYKE8++aS0tbUZ9psq5iIin332mcTGxoqXl5fExcXJO++8w2JOREQk7Cci7CdEROS8NCJ8cwsiIiIiIiIiIiIaiu9xSEREREREREREREa4cEhERERERERERERGuHBIRERERERERERERrhwSEREREREREREREa4cEhERERERERERERGuHBIRERERERERERERrhwSEREREREREREREa4cEhERERERERERERGuHBIRERERERERERERrhwSEREREREREREREa4cEhERERERERERERGuHBIRERERERERERERv4/045TXlIYiGwAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAALACAYAAADSYu9+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjT0lEQVR4nOzdfXiU5Z328TMSkyBIMFCiUQj4Ro0R0JBaUBR0DQ2K75V2uwgKVcr4UExtK2VVwJe4a0vp1oDSdqXaukW7NrWWGmJlhUqtIRKrxlWpaLDyUoISiQoa7ueP316RIZmQSWZy3zPz/RyHx/NkCMmN2u6353UlSfM8zxMAAAAAAAAAHOAwvx8AAAAAAAAAQPAwHAIAAAAAAABog+EQAAAAAAAAQBsMhwAAAAAAAADaYDgEAAAAAAAA0AbDIQAAAAAAAIA2GA4BAAAAAAAAtMFwCAAAAAAAAKANhkMAAAAAAAAAbTAcIiaefvppXXvttfr85z+vPn366Nhjj9Ull1yi2traDn/f+PHjlZaWdsi/FixY0DN/kE7qzDOnpaXpf/7nf2L2OcePH6/x48fH7ON15JNPPtH999+v4uJi5eTk6IgjjlB+fr4uueQS/eY3v4n55wvSP2PP8/Twww/rvPPO01FHHaXMzEwdf/zxCoVC2rJlS7c//ltvvaW0tDStWLGi+w/bCdu2bdMNN9yg448/Xr1791Z+fr5mzJihhoaGLn/MoUOH6qKLLorhU3ZOT/5nAEBy+dOf/qRJkybpqKOOUu/evXXSSSfp9ttvj/j+9Enn0Sc9gz45NPoEAOIj3e8HQHJYtmyZGhsb9c1vflMFBQX6xz/+oR/84Af64he/qKqqKp133nnt/r6lS5eqqamp9e3f//73uuOOO/TAAw/o85//fOvrxx13XNz/DNH485//HPb27bffrjVr1ujpp58Oe72goKAnHytmpk6dqscee0xz587VwoULlZmZqTfffFNPPvmkqqqqdNlll8X08/35z38OxD/j/fv365//+Z+1cuVKffWrX9WKFSuUnZ2tv/71r7rnnnv08MMP64knntBZZ53l96N2yt69e3XOOefovffe08KFC1VQUKDXXntNt912m6qqqvTqq6/qyCOP9PsxASCuHn74YU2dOlVXXXWVHnzwQfXt21d/+9vf9O6770b8PfRJMNEn9AkAwAceEAPbt29v89oHH3zg5ebmeueff36nP84DDzzgSfJqampi8lzNzc0x+TiHMm3aNK9Pnz5x/Rznnnuud+6558bkY+3fv9/78MMP2/21N99805Pk3Xrrre3+ektLS9yfwS933XWXJ8m7++672/zatm3bvPz8fC83N9d77733Ovw4Hf17t3nzZk+S98ADD3Tzac2HH37o7d+/v91fq66u9iR5P/3pT8Nef/jhhz1J3mOPPdalz5mfn+9deOGFXfq93RHL/wwASA3vvPOO16dPH+8b3/hGtz4OfRIZfRJ/9Enn0CcAEB98qTJiYtCgQW1e69u3rwoKCmLy5RMrV67UmDFj1KdPH/Xt21cTJ07Uxo0bw95n+vTp6tu3r1566SWVlJToyCOP1Pnnny/JvtTkhhtu0AMPPKDhw4erd+/eGj16tJ577jl5nqd77rlHw4YNU9++fXXeeedp06ZN3X7miooKnXPOORo0aJD69Omj0047Tf/+7/+uTz75pPV9br/9dqWnp7f79+jaa6/VgAED9PHHH0f8HLt27dLs2bN17LHHKiMjQ8cff7zmz5+vvXv3hr2f+/Pfd999OuWUU5SZmamf//zn7X7MxsZGSdIxxxzT7q8fdlj4f200NTXppptu0rBhw5SRkaFjjz1Wc+fOVXNzc6efob0vBdq2bZuuv/56HXfcccrIyNCwYcO0cOFCffrpp2Hvt2zZMo0cOVJ9+/bVkUceqc9//vP63ve+F/HvWST79u3TPffco1NOOUXf+c532vx6bm6uysvLtX37dv3sZz9rfX38+PEqLCzU2rVrNXbsWB1xxBG69tprJUnvvvuurrrqKh155JHKzs7WlClTtG3btnY//4YNG3TxxRcrJydHWVlZOv300/XII4+Evc+KFSuUlpam1atX69prr9XnPvc5HXHEEW3+eTuHH364JCk7Ozvs9f79+0uSsrKyOvc3pwuqq6t1ySWX6LjjjlNWVpZOPPFEXX/99dq5c2fY+y1YsEBpaWnauHGjLr/8cvXr10/Z2dn6l3/5F/3jH/845OdZuHChzjzzTOXk5Khfv34644wz9LOf/Uye57V534cfflhjxoxR37591bdvX40aNSrsn6UkPfXUUzr//PPVr18/HXHEETrrrLP0xz/+sXt/MwD45qc//amam5v13e9+Ny4fnz5pH31Cn9An9AmAJOLvbolk9v7773vZ2dneZZdd1unf096J/p133umlpaV51157rffEE094jz32mDdmzBivT58+3iuvvNL6ftOmTfMOP/xwb+jQoV55ebn3xz/+0auqqvI8z/Mkefn5+d7YsWO9xx57zPvNb37jnXzyyV5OTo534403epdccon3xBNPeL/85S+93Nxcb8SIERFPSdvT3on+jTfe6C1btsx78sknvaefftr74Q9/6A0cONC75pprWt9n+/btXmZmpjd//vyw39vY2Oj17t3b+/a3v9362sGnmR999JE3YsQIr0+fPt73v/99b/Xq1d4tt9zipaene5MmTQr7eJK8Y4891hsxYoT38MMPe08//bT38ssvt/tn2bNnj9e/f3/v6KOP9u6//35v8+bNEf/czc3N3qhRo7yBAwd6ixcv9p566invRz/6kZedne2dd955YX8PO3oGSd5tt93W+r5bt271Bg8e7OXn53v333+/99RTT3m33367l5mZ6U2fPr31/f7rv/7Lk+T9v//3/7zVq1d7Tz31lHffffd5c+bMifjMkaxfv96T5H33u9+N+D4ffPCBd9hhh3kTJ05sfe3cc8/1cnJyvMGDB3s//vGPvTVr1njPPPOM9+GHH3qnnHKKl52d7f34xz/2qqqqvDlz5nhDhgxpc6L/9NNPexkZGd64ceO8lStXek8++aQ3ffr0Nu/n/vNx7LHHetddd533hz/8wfv1r3/tffrpp+0+7yeffOIVFRV5p556qvf88897H3zwgVdbW+uNGjXKO+OMM7x9+/ZF/ffJ8zp3or9s2TKvvLzce/zxx71nnnnG+/nPf+6NHDnSGz58eNjnve2221r/8/ntb3/bq6qq8hYvXuz16dPHO/3008Pet70T/enTp3s/+9nPvOrqaq+6utq7/fbbvd69e3sLFy4Me79bbrnFk+Rdfvnl3qOPPuqtXr3aW7x4sXfLLbe0vs9DDz3kpaWleZdeeqn32GOPeb/73e+8iy66yOvVq5f31FNPdenvFQB/nXfeeV5OTo735JNPeiNHjvR69erlfe5zn/Ouv/56b/fu3Z3+OPSJoU/oE/qEPgGQehgOETdf+9rXvPT0dG/Dhg2d/j0Hh3lDQ4OXnp7u/b//9//C3u+DDz7wjj76aO+qq65qfW3atGmeJO8///M/23xcSd7RRx/t7dmzp/W1yspKT5I3atSosIBcsmSJJ8n761//2unnPtSXArW0tHiffPKJ9+CDD3q9evXydu3aFfZ7Bw0a5O3du7f1tX/7t3/zDjvssLAoPjhK7rvvPk+S98gjj4R9rn/7t3/zJHmrV68O+/NnZ2eHfd6O/P73v/cGDhzoSfIkeQMGDPC+/OUve48//njY+5WXl3uHHXZYmy/d+vWvf+1J8latWtWpZzg4zK+//nqvb9++3ttvvx32ft///vc9Sa3/g+yGG27w+vfv36k/06H86le/8iR59913X4fvl5ub651yyimtb5977rmeJO+Pf/xj2PstW7bMk+T99re/DXv961//epvg/vznP++dfvrp3ieffBL2vhdddJF3zDHHtH75lfvPx9VXX93pP1dTU5M3efLk1n+Wkrzx48d7jY2Nnf4YB4v2S4H279/vffLJJ97bb7/d5u+JC/Mbb7wx7Pf88pe/9CR5v/jFL1pfO9SXArn/nC1atMgbMGBA63+u33zzTa9Xr17e1772tYi/t7m52cvJyfEmT57c5mOOHDnS+8IXvtDpPy+A4Bg+fLiXlZXlHXnkkd5dd93lrVmzxvv3f/93r3fv3t5ZZ53V6RGOPjH0CX3iefQJfQIg1fClyoiLW265Rb/85S/1wx/+UEVFRa2v79+/X59++mnrXy0tLR1+nKqqKn366ae6+uqrw35fVlaWzj333HZ/KuAVV1zR7seaMGGC+vTp0/r2KaecIkkqLS1VWlpam9fffvvtTv9527Nx40ZdfPHFGjBggHr16qXDDz9cV199tVpaWvT666+3vt83v/lN7dixQ48++qgk+3u0bNkyXXjhhRo6dGjEj//000+rT58+uvLKK8Nenz59uiS1+fIF91P4OmPSpElqaGjQb37zG91000069dRTVVlZqYsvvlg33HBD6/s98cQTKiws1KhRo8L++UycOLHdn9rY2Wd44oknNGHCBOXl5YV93NLSUknSM888I0n6whe+oPfff19f/epX9dvf/rbNl5nEg+d5Yf++SNJRRx3V5gcArVmzRkceeaQuvvjisNf/+Z//OeztTZs26X//93/1ta99TZLC/ryTJk3S1q1b9dprr4X9nkj/jh/sk08+0ZQpU1RXV6ef/OQnWrt2rX7+85/r73//uy644ALt3r27Ux+nK3bs2KFZs2Zp8ODBSk9P1+GHH678/HxJ0quvvtrm/d2f37nqqquUnp6uNWvWdPh5nn76af3TP/2TsrOzW/9zduutt6qxsVE7duyQZF+W1NLSolAoFPHjrF+/Xrt27dK0adPC/hns379fX/rSl1RTU9Pmy9sABN/+/fv18ccf63vf+57mzZun8ePH69vf/rbKy8v17LPPtv7fSvqEPqFP6BP6BADax09VRswtXLhQd9xxh+68886wiJOkRYsWaeHCha1v5+fn66233or4sbZv3y5JKi4ubvfXD/5+NkcccYT69evX7vvm5OSEvZ2RkdHh6x19755DaWho0Lhx4zR8+HD96Ec/0tChQ5WVlaXnn39eoVBIH330Uev7nn766Ro3bpwqKir0ta99TU888YTeeust3X///R1+jsbGRh199NFtInHQoEFKT09v/V5ATqTvCRRJ7969demll+rSSy9t/TOVlpaqoqJC3/jGN3Tqqadq+/bt2rRpU+v3qjnYwaHc2WfYvn27fve73x3y406dOlWffvqpfvKTn+iKK67Q/v37VVxcrDvuuEMXXHBBJ/+kZsiQIZKkzZs3R3yf5uZm7dy5U6effnrY6+39uRobG5Wbm9vm9aOPPjrsbffv+E033aSbbrqp3c/b1b+PP/vZz/SHP/xBNTU1Gj16tCRp3LhxOvvss3XCCSdoyZIluu222zr1saKxf/9+lZSU6N1339Utt9yi0047TX369NH+/fv1xS9+Mezff+fgvy/p6ekaMGBAm3+PD/T888+rpKRE48eP109+8pPW7zdVWVmpO++8s/XzuO9F1NFPxnT/HA7+H7oH2rVrV9j/uAcQfAMGDNAbb7yhiRMnhr1eWlqquXPn6oUXXtA//dM/0Sf0Sac+N30Sjj5pH30CINkwHCKmFi5cqAULFmjBggXtfgPo6667ThdddFHr25mZmR1+vIEDB0qSfv3rX7eeBnbk4Ej1S2VlpZqbm/XYY4+FPXddXV277z9nzhx9+ctf1gsvvKB7771XJ5988iHDcsCAAfrLX/7S5oR5x44d+vTTT1v/3jnd/XszZMgQXXfddZo7d65eeeUVnXrqqRo4cKB69+6t//zP/2z393T1GQYOHKgRI0bozjvvbPfX8/LyWv//11xzja655ho1Nzdr7dq1uu2223TRRRfp9ddf79S/M05RUZGOOuooPf744yovL2/3WR9//HHt37+/zT+b9t53wIABev7559u8fvA3H3d/j+bNm6fLL7+83WcbPnz4IT9fe+rq6tSrVy+dccYZYa8ff/zxGjBggF5++eVOfZxovfzyy3rxxRe1YsUKTZs2rfX1jr6p/7Zt23Tssce2vv3pp5+qsbFRAwYMiPh7fvWrX+nwww/XE088EfaN1CsrK8Pe73Of+5wk6Z133tHgwYPb/Vjun8OPf/xjffGLX2z3fdr7H1oAgm3EiBF67rnn2rzu/d8PKHADH31S1+770ydtfx998hn6pH30CYBkw3CImLn99tu1YMEC/eu//mvEU8K8vLywqDqUiRMnKj09XX/72986/eUPQeDC6cD/4eF5nn7yk5+0+/6XXXaZhgwZom9961t65pln9MMf/vCQ8XX++efrkUceUWVlpS677LLW1x988MHWX++KDz74QGlpaerbt2+bX3NfwuH+GV500UW66667NGDAAA0bNqxLn689F110kVatWqUTTjih01++1KdPH5WWlmrfvn269NJL9corr0QV5hkZGfr2t7+t733ve7rnnnva/OTCHTt2aN68ecrNzdXMmTMP+fEmTJigRx55RI8//njYlwM9/PDDYe83fPhwnXTSSXrxxRd11113dfp5OyMvL08tLS2qqanRmWee2fr666+/rsbGxg5PuLujvX//JXV4S+WXv/xl2Lc1eOSRR/Tpp59q/PjxHX6e9PR09erVq/W1jz76SA899FDY+5WUlKhXr15atmyZxowZ0+7HOuuss9S/f3/V19e3uSkNIHFdccUVWr58uf7whz+E3cZatWqVJLX+D3H6hD7pDPokNugTQ58ASBQMh4iJH/zgB7r11lv1pS99SRdeeGGb0/1IJ2SHMnToUC1atEjz58/Xm2++qS996Us66qijtH37dj3//PPq06dP2JcWBcUFF1ygjIwMffWrX9V3vvMdffzxx1q2bJnee++9dt+/V69eCoVC+u53v6s+ffq0fh+gjlx99dWqqKjQtGnT9NZbb+m0007Tn/70J911112aNGmS/umf/qlLz/7aa69p4sSJ+spXvqJzzz1XxxxzjN577z39/ve/1/LlyzV+/HiNHTtWkjR37lz993//t8455xzdeOONGjFihPbv36+GhgatXr1a3/rWt8KCsLMWLVqk6upqjR07VnPmzNHw4cP18ccf66233tKqVat033336bjjjtPXv/519e7dW2eddZaOOeYYbdu2TeXl5crOzg778jH3vZg6+rIzSfrud7+rF198sfX/nTJlirKzs/XXv/5V99xzjz744AM98cQTys7OPuSf4eqrr9YPf/hDXX311brzzjt10kknadWqVaqqqmrzvvfff79KS0s1ceJETZ8+Xccee6x27dqlV199VS+88ELr95eK1jXXXKMf/vCHuuKKK/Sv//qvGj58uN58803ddddd6tOnj2bNmtX6vm+99ZaGDRumadOmacWKFYf82Nu2bdOvf/3rNq8PHTpUI0eO1AknnKCbb75ZnucpJydHv/vd71RdXR3x4z322GNKT0/XBRdcoFdeeUW33HKLRo4cqauuuiri77nwwgu1ePFi/fM//7Ouu+46NTY26vvf/36b/0EwdOhQfe9739Ptt9+ujz76SF/96leVnZ2t+vp67dy5UwsXLlTfvn314x//WNOmTdOuXbt05ZVXatCgQfrHP/6hF198Uf/4xz+0bNmyQ/59ARAsJSUlmjx5shYtWtT65YgbNmzQwoULddFFF+nss8/u0selTyKjT+iTQ6FPPnsm+gRAQvDtx7Igqbif3Bbpr846+KcWOpWVld6ECRO8fv36eZmZmV5+fr535ZVXek899VTr+3T0kwMleaFQKOy1zZs3e5K8e+65J+z1NWvWeJK8Rx99tNPP3d7n/t3vfueNHDnSy8rK8o499ljv29/+tveHP/zBk+StWbOmzcd46623PEnerFmz2v0c7f3EtsbGRm/WrFneMccc46Wnp3v5+fnevHnzvI8//jjs/dr780fy3nvveXfccYd33nnneccee6yXkZHh9enTxxs1apR3xx13eB9++GHY++/Zs8f713/9V2/48OFeRkaGl52d7Z122mnejTfe6G3btq1Tz6CDfmqh53neP/7xD2/OnDnesGHDvMMPP9zLycnxioqKvPnz57f+9Mmf//zn3oQJE7zc3FwvIyPDy8vL86666qo2P3Fy4MCB3he/+MVO/fn379/v/fKXv/TGjx/v9e/f38vIyPCGDRvmfeMb32jzUxQ9z/65nHrqqe1+rHfeece74oorvL59+3pHHnmkd8UVV3jr169v81MLPc/zXnzxRe+qq67yBg0a5B1++OHe0Ucf7Z133nlhP0Ux0n8+OvLGG294U6dO9YYOHeplZmZ6Q4YM8aZMmdL6kx+dl156yZPk3XzzzYf8mPn5+RH/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9dvf/laZmZlt+poCABCs6Cf0EwBAADMALKO4uNhIMhUVFa3uj42NNVlZWS22jRkzxjz99NPGGGPy8vKMJFNdXe3YX1JSYiSZ48ePG2OMeeONN4wkU1pa6jimvLzcSDK5ubmt3u/KlStNRkZGi22nTp0ykkx5eflN8xQWFpqwsDCzcuVK06lTJ7Nz586bHmuMMc8++6wZNGiQuXr1aqv7b5d/48aNpmfPnqa2ttax//333zchISHm7Nmzxhhj5s2bZ2JiYkx9fb3jmD/+8Y8mOjra1NXVOba9+uqrRpIpKSm55cwAAAQ7+gn9BAAQuHjFIWAhycnJmjx5shITE/X444/r9ddfV3V1tSSppqZGp0+f1n333dfiOvfdd5/KysradD/h4eFKSkpyXC4tLVVoaKgmTpzY6vHFxcXKy8tT165dHR/Dhg2TJMev6bRm3LhxyszM1O9//3v98pe/1IQJExz7pk2b5ritESNGOOZIT09XWFiY0225kr+srEzJycm64447WuxvampSeXm5Y1tiYqLCw8Mdl5uv16VLlxazAwAA+gn9BAAQyDr5ewAAvhMaGqrc3FwVFhbqX//6l1555RWtWLFCe/fuVa9evSRJNputxXWMMY5tISEhjm3NGhoanO6nc+fOLW6nc+fOt5yrqalJM2bM0PPPP++0r1+/fre83u7duxUaGur060qbNm3Sd999J0mOIn67OaRb57/+81td7/ri3nw9AADQOvoJ/QQAELh4xSFgMTabTffdd59WrVqlkpIShYeHa/v27YqKilJsbKw+/fTTFscXFhZq+PDhkqQ+ffpIsr/nT7PS0tLb3mdiYqKampq0c+fOVvenpqbq4MGDuvPOOzV48OAWHzeW3Ou98MILKisr086dO7Vjxw698cYbjn39+/d33MbAgQMlSUlJSdq1a1erP0y4kj8hIUGlpaWON2uXpN27dyskJMTxJuOtSUhI0P79+x0/KEjSnj17bno8AABWQz+hnwAAApS/fkcagO/t2bPHZGVlmaKiInPixAmzdetWEx4ebj744ANjjDFr1641UVFR5q233jKHDx82v/rVr0xYWJg5cuSIMcaYq1evmri4OPP444+b8vJyk5OTY4YOHer0HkLdu3d3uu/58+ebuLg4s337dvPf//7X5OXlmS1bthhjjKmsrDR9+vQxjz32mNm7d685duyY2bFjh/nxj39srl271mqWkpISEx4ebt577z1jjDGbNm0y3bp1M8eOHbtp/qqqKtOrVy/zyCOPmKKiInPkyBGzefNmc/jwYZfy19XVmX79+plHH33UHDhwwHzyySfmrrvuMvPmzXPcx7x588zDDz/c4n4vXbpkevfubZ544glz8OBB8/7775vBgwfzHkIAABj6Cf0EABDIWDgELOTQoUNm6tSppk+fPiYiIsIMGTLEvPLKK479jY2NZtWqVaZ///4mLCzMJCcnm3/+858tbuPTTz81iYmJJjIy0qSnp5tt27a5VMy/++4784tf/ML069fPhIeHm8GDB5s///nPjv1Hjhwxs2fPNj169DCdO3c2w4YNM0uWLDFNTU2t3lZCQoJZuHBhi+2zZ88248ePv2mZN8aY/fv3m4yMDNOlSxfTrVs3k56e7ijzruT/4osvzKRJk0xkZKSJjo42Tz31lLl06ZJjf2vF3BhjPvvsM5OcnGzCw8NNSkqKeeeddyjmAAAY+okx9BMAQOCyGcObWwAAAAAAAABoifc4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATv4PDbmAkzvMEZoAAAAASUVORK5CYII=", "text/plain": [ "
" ] From 899fb435e40d39d3d368cb61582197950b09b163 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 3 Jan 2025 14:23:23 -0800 Subject: [PATCH 134/143] Added recurrence_grid --- sumpy/recurrence.py | 1 + sumpy/recurrence_grid.py | 161 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 sumpy/recurrence_grid.py diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index bd35693f..ad433094 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -28,6 +28,7 @@ .. autofunction:: process_recurrence_relation .. autofunction:: shift_recurrence .. autofunction:: get_processed_and_shifted_recurrence +.. autofunction:: get_shifted_recurrence_exp_from_pde """ from __future__ import annotations diff --git a/sumpy/recurrence_grid.py b/sumpy/recurrence_grid.py new file mode 100644 index 00000000..d5a9d3e4 --- /dev/null +++ b/sumpy/recurrence_grid.py @@ -0,0 +1,161 @@ +r""" +With the functionality in this module, we aim to compute layer potentials +using a recurrence for one-dimensional derivatives of the corresponding +Green's function. See recurrence.py. + +.. autofunction:: get_grid +.. autofunction:: convert +.. autofunction:: grid_recur_to_column_recur +.. autofunction:: get_taylor_recurrence +.. autofunction:: create_subs_grid +.. autofunction:: extend_grid +.. autofunction:: compute_taylor_lp +.. autofunction:: compute_lp_orders + + +""" +from __future__ import annotations + + +__copyright__ = """ +Copyright (C) 2024 Hirish Chandrasekaran +Copyright (C) 2024 Andreas Kloeckner +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + + +from sumpy.recurrence import _make_sympy_vec, get_processed_and_shifted_recurrence + +from sumpy.expansion.diff_op import ( + laplacian, + make_identity_diff_op, +) + +from sumpy.recurrence import get_recurrence, recurrence_from_pde, shift_recurrence, get_shifted_recurrence_exp_from_pde, _extract_idx_terms_from_recurrence + +import sympy as sp +from sympy import hankel1 + +import numpy as np + +import math + +import matplotlib.pyplot as plt +from matplotlib import cm, ticker + + +def get_grid(recur, order): + poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)]) + coeff_s_n = [poly_in_s_n.coeff_monomial(poly_in_s_n.gens[i]) for i in range(order)] + + table = [] + for i in range(len(coeff_s_n)): + table.append(sp.poly(coeff_s_n[i], var[0]).all_coeffs()[::-1]) + + return table + + +def convert(grid): + recur_exp = 0 + i = sp.symbols("i") + s_terms = [] + for j in range(len(grid)): + for k in range(len(grid[j])): + recur_exp += grid[j][k] * s(n-j,i-k)/sp.factorial(i-k) + if grid[j][k] != 0: + s_terms.append((j,k)) + return recur_exp, s_terms + + +def grid_recur_to_column_recur(grid_recur, s_terms): + grid_recur_simp = grid_recur + bag = set() + for s_t in s_terms: + bag.add(-((0-s_t[0])-s_t[1])) + grid_recur_simp = grid_recur_simp.subs(s(n-s_t[0],i-s_t[1]), (-1)**(s_t[1])*s((n-s_t[0])-s_t[1],(i-s_t[1])+s_t[1])) + shift = min(bag) + return sp.solve(sp.simplify(grid_recur_simp * sp.factorial(i)).subs(n, n+shift), s(n,i))[0] + + +def get_taylor_recurrence(pde): + recur, order = get_shifted_recurrence_exp_from_pde(pde) + grid = get_grid(recur, order) + grid_recur, s_terms = convert(grid) + column_recur = grid_recur_to_column_recur(grid_recur, s_terms) + return column_recur + + +def create_subs_grid(width, length, derivs, coord_dict): + initial_grid = [[sp.diff(derivs[i], var[0], j).subs(var[0], 0) for j in range(width)] for i in range(length)] + + # assume len(initial_grid) >= 1 + initial_grid_subs = [] + initial_grid_width = len(initial_grid[0]) + initial_grid_length = len(initial_grid) + + for i_x in range(initial_grid_length): + tmp = [] + for j_x in range(initial_grid_width): + tmp.append((initial_grid[i_x][j_x].subs(var[1],coord_dict[var[1]])).evalf()) + initial_grid_subs.append(tmp) + + return initial_grid_subs + + +def extend_grid(initial_grid_in, grid_recur, coord_dict, n_derivs_compute, order_grid_recur): + initial_grid_subs = [row[:] for row in initial_grid_in] #deep copy + + initial_grid_width = len(initial_grid_subs[0]) + initial_grid_length = len(initial_grid_subs) + + for n_x in range(initial_grid_length, n_derivs_compute): + appMe = [] + for i_x in range(initial_grid_width): + exp_i_n = grid_recur.subs(n, n_x).subs(i, i_x) + if exp_i_n == 0: + exp_i_n = sp.diff(derivs_lap[n_x], var[0], i_x).subs(var[0], 0) + assert n_x-order_grid_recur >= 0 + kys = [s(n_x-k,i_x) for k in range(1,order_grid_recur+1)] + vals = [initial_grid_subs[n_x-k][i_x] for k in range(1, order_grid_recur+1)] + my_dict = dict(zip(kys, vals)) + res = exp_i_n.subs(my_dict).subs(coord_dict) + appMe.append(res) + + initial_grid_subs.append(appMe) + + return initial_grid_subs + +def compute_taylor_lp(inp_grid, coord_dict): + inp_grid = np.array(inp_grid) + _, c = inp_grid.shape + return np.sum(inp_grid * np.reshape(np.array([coord_dict[var[0]]**i/math.factorial(i) for i in range(c)]), (1, c)), axis = 1) + + +def compute_lp_orders(pde, loc, num_of_derivs, derivs_list, recur_order, taylor_order): + var = _make_sympy_vec("x", 2) + coord_dict_t = {var[0]: loc[0], var[1]: loc[1]} + + initial_grid_subs = create_subs_grid(taylor_order, recur_order, derivs_list, coord_dict_t) + + extended_grid = extend_grid(initial_grid_subs, get_taylor_recurrence(pde), coord_dict_t, num_of_derivs, recur_order) + + return compute_taylor_lp(extended_grid, coord_dict_t) \ No newline at end of file From 35ae5c157dadf977a767963c8c4cdc60c97c0345 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Fri, 3 Jan 2025 14:39:18 -0800 Subject: [PATCH 135/143] Fix up documentation --- sumpy/recurrence_grid.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sumpy/recurrence_grid.py b/sumpy/recurrence_grid.py index d5a9d3e4..5c7d2efd 100644 --- a/sumpy/recurrence_grid.py +++ b/sumpy/recurrence_grid.py @@ -64,6 +64,15 @@ def get_grid(recur, order): + r""" + A function that takes in a recurrence as a polynomial + in s(n), s(n-1), ..., and gets the coefficients of this polynomial as + a polynomial in 1, x_0, x_0^2, ... where x_i is the source location. + + :arg recur: A recurrence for derivatives s(n), etc. where s(n) represents + the nth derivative of the Green's function w/respect to the target at the origin. + :arg order: The order of the input recurrence + """ poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)]) coeff_s_n = [poly_in_s_n.coeff_monomial(poly_in_s_n.gens[i]) for i in range(order)] @@ -75,6 +84,9 @@ def get_grid(recur, order): def convert(grid): + r""" + Given a grid of coefficients, produce a grid recurrence. + """ recur_exp = 0 i = sp.symbols("i") s_terms = [] From c75adeba47888c4f15d9f4959583266ac047d976 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 7 Jan 2025 15:04:50 -0800 Subject: [PATCH 136/143] Added more documentation to grid_recurrence --- sumpy/recurrence.py | 2 +- sumpy/recurrence_grid.py | 88 ++++++++++++++++----- sumpy/recurrence_qbx.py | 2 +- test/plot_taylor_recurrence.ipynb | 122 +++++++++++++++--------------- 4 files changed, 133 insertions(+), 81 deletions(-) diff --git a/sumpy/recurrence.py b/sumpy/recurrence.py index ad433094..42d3b583 100644 --- a/sumpy/recurrence.py +++ b/sumpy/recurrence.py @@ -396,7 +396,7 @@ def get_shifted_recurrence_exp_from_pde(pde: LinearPDESystemOperator) -> sp.Expr A function that "shifts" the recurrence so it's center is placed at the origin and source is the input for the recurrence generated. Outputs an expression that evaluates to 0 rather than s(n) in terms - of s(n-1), etc. + of s(n-1), etc. :arg recurrence: a recurrence relation in :math:`s(n)` """ diff --git a/sumpy/recurrence_grid.py b/sumpy/recurrence_grid.py index 5c7d2efd..b21aa7c3 100644 --- a/sumpy/recurrence_grid.py +++ b/sumpy/recurrence_grid.py @@ -1,7 +1,15 @@ r""" -With the functionality in this module, we aim to compute layer potentials -using a recurrence for one-dimensional derivatives of the corresponding -Green's function. See recurrence.py. +With the functionality in this module, we aim to compute a recurrence for +one-dimensional derivatives of functions :math:`f:\mathbb R^n \to \mathbb R` +for functions satisfying two assumptions: + +- :math:`f` satisfies a PDE that is linear and has coefficients polynomial + in the coordinates. +- :math:`f` only depends on the radius :math:`r`, + i.e. :math:`f(\boldsymbol x)=f(|\boldsymbol x|_2)`. + + However, unlike recurrence.py, the recurrences produced here are numerically + stable in a different source-location space. .. autofunction:: get_grid .. autofunction:: convert @@ -63,17 +71,29 @@ from matplotlib import cm, ticker -def get_grid(recur, order): +def get_grid(recur_exp, order): r""" - A function that takes in a recurrence as a polynomial - in s(n), s(n-1), ..., and gets the coefficients of this polynomial as - a polynomial in 1, x_0, x_0^2, ... where x_i is the source location. + Organizes the coefficients of recur into a 2D array, called a grid. + + :arg recur_exp: A recurrence expression for derivatives s(n), etc. where s(n) + represents the nth derivative of the Green's function w/respect to the target at + the origin. + recur_exp looks like :math:`(b_{00} x_0^0 + b_{01} x_0^1 + \cdots) s(n) + + (b_{10} x_0^0 + b_{11} x_0^1 +\cdots) s(n-1) + \cdots` - :arg recur: A recurrence for derivatives s(n), etc. where s(n) represents - the nth derivative of the Green's function w/respect to the target at the origin. - :arg order: The order of the input recurrence + :arg order: The order of the input recurrence expression + + :returns: *table* a sequence of of sequences, with the outer sequence + iterating over s(n), s(n-1),.. and each inner sequence iterating + over powers of :math:`x_0`, so that, in terms of the above form, + coeffs is :math:`[[b_{00}, b_{01}, ...], [b_{10}, b_{11}, ...], ...]` """ - poly_in_s_n = sp.poly(recur, [s(n-i) for i in range(order)]) + var = _make_sympy_vec("x", 2) + s = sp.Function("s") + n = sp.symbols("n") + i = sp.symbols("i") + + poly_in_s_n = sp.poly(recur_exp, [s(n-i) for i in range(order)]) coeff_s_n = [poly_in_s_n.coeff_monomial(poly_in_s_n.gens[i]) for i in range(order)] table = [] @@ -85,20 +105,44 @@ def get_grid(recur, order): def convert(grid): r""" - Given a grid of coefficients, produce a grid recurrence. + Given a grid of coefficients, produce a grid recurrence. Suppose that + :math:`s(n) = \sum_i s(n,i) x_0^i`. A grid recurrence is an expression + involving s(n,i) instead of s(n). + + :arg grid: The coefficients of a recurrence expression organized into a grid + see :func:`get_grid` + + :returns: a tuple ``(recur_exp, s_terms)``, where + - *grid_recur_exp* a grid recurrence for terms s(n,i) + - *s_terms* are the terms s(n,i) that exist in recur_exp """ - recur_exp = 0 + s = sp.Function("s") + n = sp.symbols("n") + i = sp.symbols("i") + + grid_recur_exp = 0 i = sp.symbols("i") s_terms = [] for j in range(len(grid)): for k in range(len(grid[j])): - recur_exp += grid[j][k] * s(n-j,i-k)/sp.factorial(i-k) + grid_recur_exp += grid[j][k] * s(n-j,i-k)/sp.factorial(i-k) if grid[j][k] != 0: s_terms.append((j,k)) - return recur_exp, s_terms + return grid_recur_exp, s_terms def grid_recur_to_column_recur(grid_recur, s_terms): + r""" + Given a grid recurrence, produce a recurrence that only involves + terms of the form s(n,i), s(n-1,i), ..., s(n-k,i). + + :arg grid_recur: A grid recurrence see :func:`get_grid` + :arg s_terms: The s(i,j) terms in grid_recur + """ + s = sp.Function("s") + n = sp.symbols("n") + i = sp.symbols("i") + grid_recur_simp = grid_recur bag = set() for s_t in s_terms: @@ -117,6 +161,7 @@ def get_taylor_recurrence(pde): def create_subs_grid(width, length, derivs, coord_dict): + var = _make_sympy_vec("x", 2) initial_grid = [[sp.diff(derivs[i], var[0], j).subs(var[0], 0) for j in range(width)] for i in range(length)] # assume len(initial_grid) >= 1 @@ -133,18 +178,23 @@ def create_subs_grid(width, length, derivs, coord_dict): return initial_grid_subs -def extend_grid(initial_grid_in, grid_recur, coord_dict, n_derivs_compute, order_grid_recur): +def extend_grid(initial_grid_in, grid_recur, coord_dict, n_derivs_compute, order_grid_recur, derivs): initial_grid_subs = [row[:] for row in initial_grid_in] #deep copy initial_grid_width = len(initial_grid_subs[0]) initial_grid_length = len(initial_grid_subs) + var = _make_sympy_vec("x", 2) + s = sp.Function("s") + n = sp.symbols("n") + i = sp.symbols("i") + for n_x in range(initial_grid_length, n_derivs_compute): appMe = [] for i_x in range(initial_grid_width): exp_i_n = grid_recur.subs(n, n_x).subs(i, i_x) if exp_i_n == 0: - exp_i_n = sp.diff(derivs_lap[n_x], var[0], i_x).subs(var[0], 0) + exp_i_n = sp.diff(derivs[n_x], var[0], i_x).subs(var[0], 0) assert n_x-order_grid_recur >= 0 kys = [s(n_x-k,i_x) for k in range(1,order_grid_recur+1)] vals = [initial_grid_subs[n_x-k][i_x] for k in range(1, order_grid_recur+1)] @@ -156,7 +206,9 @@ def extend_grid(initial_grid_in, grid_recur, coord_dict, n_derivs_compute, order return initial_grid_subs + def compute_taylor_lp(inp_grid, coord_dict): + var = _make_sympy_vec("x", 2) inp_grid = np.array(inp_grid) _, c = inp_grid.shape return np.sum(inp_grid * np.reshape(np.array([coord_dict[var[0]]**i/math.factorial(i) for i in range(c)]), (1, c)), axis = 1) @@ -168,6 +220,6 @@ def compute_lp_orders(pde, loc, num_of_derivs, derivs_list, recur_order, taylor_ initial_grid_subs = create_subs_grid(taylor_order, recur_order, derivs_list, coord_dict_t) - extended_grid = extend_grid(initial_grid_subs, get_taylor_recurrence(pde), coord_dict_t, num_of_derivs, recur_order) + extended_grid = extend_grid(initial_grid_subs, get_taylor_recurrence(pde), coord_dict_t, num_of_derivs, recur_order, derivs_list) return compute_taylor_lp(extended_grid, coord_dict_t) \ No newline at end of file diff --git a/sumpy/recurrence_qbx.py b/sumpy/recurrence_qbx.py index c2a2e86d..c81bbe44 100644 --- a/sumpy/recurrence_qbx.py +++ b/sumpy/recurrence_qbx.py @@ -1,5 +1,5 @@ r""" -With the functionality in this module, we aim to compute layer potentials +With the functionality in this module, we compute layer potentials using a recurrence for one-dimensional derivatives of the corresponding Green's function. See recurrence.py. diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index d9a279d8..fd385ebf 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -101,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -110,7 +110,7 @@ "4" ] }, - "execution_count": 6, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -122,19 +122,19 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle -1.55431223447522 \\cdot 10^{-15}$" + "$\\displaystyle -2.22044604925031 \\cdot 10^{-16}$" ], "text/plain": [ - "-1.55431223447522e-15" + "-2.22044604925031e-16" ] }, - "execution_count": 7, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -159,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -188,7 +188,7 @@ " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -210,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -222,7 +222,7 @@ "(-1)**n*x1**2*s(n, i - 1)/factorial(i - 1) + (-1)**n*s(n, i - 3)/factorial(i - 3) + (-3*(-1)**n*n + 5*(-1)**n)*s(n - 1, i - 2)/factorial(i - 2) + (-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2)*s(n - 1, i)/factorial(i) + (3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n)*s(n - 2, i - 1)/factorial(i - 1) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*s(n - 3, i)/factorial(i)" ] }, - "execution_count": 10, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -276,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -288,7 +288,7 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 12, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -307,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -321,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -333,7 +333,7 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 14, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -344,7 +344,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -356,7 +356,7 @@ "(-8*s(-1, 2) - 12*s(1, 2))/x1**2" ] }, - "execution_count": 15, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -381,7 +381,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -397,7 +397,7 @@ " [0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12, 0, -6227020800/x1**14]]" ] }, - "execution_count": 16, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -411,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -434,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -444,7 +444,7 @@ " [0, -0.694444444444445, 0, 2.89351851851852, 0, -40.1877572016461]]" ] }, - "execution_count": 18, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -464,7 +464,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -494,7 +494,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -510,7 +510,7 @@ " [0, 1172.14291838134, 0, -58607.1459190672, 0, 4476934.75770653]]" ] }, - "execution_count": 20, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -528,7 +528,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -552,7 +552,7 @@ " I*(0.75*((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) + 0.75*((0.75*hankel1(-2, 1.0*sqrt(x1**2)) - 0.75*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.75*hankel1(0, 1.0*sqrt(x1**2)) - 0.75*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) - 0.75*(3.0*hankel1(-1, 1.0*sqrt(x1**2)) - 3.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(4.5*hankel1(-1, 1.0*sqrt(x1**2)) - 4.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(((0.125*hankel1(-3, 1.0*sqrt(x1**2)) - 0.125*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - ((0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(1, 1.0*sqrt(x1**2)) - 0.125*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 0.5*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(0, 1.0*sqrt(x1**2)) - 0.5*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.5*hankel1(-1, 1.0*sqrt(x1**2)) + 0.25*hankel1(1, 1.0*sqrt(x1**2)))/x1**2 - (0.25*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)) + 0.25*hankel1(3, 1.0*sqrt(x1**2)))/x1**2)/sqrt(x1**2) - 0.75*((0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.25*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) + (0.25*hankel1(1, 1.0*sqrt(x1**2)) - 0.25*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/x1**2 + 1.5*(0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**4 + 0.75*(1.0*hankel1(-2, 1.0*sqrt(x1**2)) - 2.0*hankel1(0, 1.0*sqrt(x1**2)) + 1.0*hankel1(2, 1.0*sqrt(x1**2)))/x1**4)]]" ] }, - "execution_count": 21, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -567,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -591,7 +591,7 @@ " 21.8306910223677 + 0.0733625774350065*I]]" ] }, - "execution_count": 22, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -604,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -613,7 +613,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -622,7 +622,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -631,7 +631,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -650,7 +650,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -674,7 +674,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -689,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -703,54 +703,54 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 0.0873119521523848$" + "$\\displaystyle 9.30286424095774 \\cdot 10^{-5}$" ], "text/plain": [ - "0.0873119521523848" + "9.30286424095774e-5" ] }, - "execution_count": 30, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "loc = np.array([1e-1, 1.1])\n", - "compute_error_coord_tg(loc, laplace2d, derivs_lap, 4, 2, 2)" + "loc = np.array([1e-8, 1e-7])\n", + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 8, 8, 2)" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 2.26227346778715 \\cdot 10^{-14}$" + "$\\displaystyle 0.48954387615017$" ], "text/plain": [ - "2.26227346778715e-14" + "0.489543876150170" ] }, - "execution_count": 31, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "compute_error_coord_tg(loc, laplace2d, derivs_lap, 4, 16, 2)" + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 8, 2, 2)" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ @@ -761,7 +761,7 @@ " plot_me = np.empty((res, res))\n", " for i in range(res):\n", " for j in range(res):\n", - " if abs(x_grid[i]) == abs(y_grid[j]):\n", + " if abs(x_grid[i]) >= abs(y_grid[j]):\n", " plot_me[i, j] = 1e-16\n", " else:\n", " plot_me[i,j] = compute_error_coord_tg(np.array([x_grid[i],y_grid[j]]), pde, derivs, order_plot, taylor_order, recur_order)\n", @@ -772,22 +772,22 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ - "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 8, laplace2d, derivs_lap, 2, 2)\n", + "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 5, laplace2d, derivs_lap, 6, 2)\n", "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 8, laplace2d, derivs_lap, 6, 2)" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 66, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAALACAYAAADSYu9+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjT0lEQVR4nOzdfXiU5Z328TMSkyBIMFCiUQj4Ro0R0JBaUBR0DQ2K75V2uwgKVcr4UExtK2VVwJe4a0vp1oDSdqXaukW7NrWWGmJlhUqtIRKrxlWpaLDyUoISiQoa7ueP316RIZmQSWZy3zPz/RyHx/NkCMmN2u6353UlSfM8zxMAAAAAAAAAHOAwvx8AAAAAAAAAQPAwHAIAAAAAAABog+EQAAAAAAAAQBsMhwAAAAAAAADaYDgEAAAAAAAA0AbDIQAAAAAAAIA2GA4BAAAAAAAAtMFwCAAAAAAAAKANhkMAAAAAAAAAbTAcIiaefvppXXvttfr85z+vPn366Nhjj9Ull1yi2traDn/f+PHjlZaWdsi/FixY0DN/kE7qzDOnpaXpf/7nf2L2OcePH6/x48fH7ON15JNPPtH999+v4uJi5eTk6IgjjlB+fr4uueQS/eY3v4n55wvSP2PP8/Twww/rvPPO01FHHaXMzEwdf/zxCoVC2rJlS7c//ltvvaW0tDStWLGi+w/bCdu2bdMNN9yg448/Xr1791Z+fr5mzJihhoaGLn/MoUOH6qKLLorhU3ZOT/5nAEBy+dOf/qRJkybpqKOOUu/evXXSSSfp9ttvj/j+9Enn0Sc9gz45NPoEAOIj3e8HQHJYtmyZGhsb9c1vflMFBQX6xz/+oR/84Af64he/qKqqKp133nnt/r6lS5eqqamp9e3f//73uuOOO/TAAw/o85//fOvrxx13XNz/DNH485//HPb27bffrjVr1ujpp58Oe72goKAnHytmpk6dqscee0xz587VwoULlZmZqTfffFNPPvmkqqqqdNlll8X08/35z38OxD/j/fv365//+Z+1cuVKffWrX9WKFSuUnZ2tv/71r7rnnnv08MMP64knntBZZ53l96N2yt69e3XOOefovffe08KFC1VQUKDXXntNt912m6qqqvTqq6/qyCOP9PsxASCuHn74YU2dOlVXXXWVHnzwQfXt21d/+9vf9O6770b8PfRJMNEn9AkAwAceEAPbt29v89oHH3zg5ebmeueff36nP84DDzzgSfJqampi8lzNzc0x+TiHMm3aNK9Pnz5x/Rznnnuud+6558bkY+3fv9/78MMP2/21N99805Pk3Xrrre3+ektLS9yfwS933XWXJ8m7++672/zatm3bvPz8fC83N9d77733Ovw4Hf17t3nzZk+S98ADD3Tzac2HH37o7d+/v91fq66u9iR5P/3pT8Nef/jhhz1J3mOPPdalz5mfn+9deOGFXfq93RHL/wwASA3vvPOO16dPH+8b3/hGtz4OfRIZfRJ/9Enn0CcAEB98qTJiYtCgQW1e69u3rwoKCmLy5RMrV67UmDFj1KdPH/Xt21cTJ07Uxo0bw95n+vTp6tu3r1566SWVlJToyCOP1Pnnny/JvtTkhhtu0AMPPKDhw4erd+/eGj16tJ577jl5nqd77rlHw4YNU9++fXXeeedp06ZN3X7miooKnXPOORo0aJD69Omj0047Tf/+7/+uTz75pPV9br/9dqWnp7f79+jaa6/VgAED9PHHH0f8HLt27dLs2bN17LHHKiMjQ8cff7zmz5+vvXv3hr2f+/Pfd999OuWUU5SZmamf//zn7X7MxsZGSdIxxxzT7q8fdlj4f200NTXppptu0rBhw5SRkaFjjz1Wc+fOVXNzc6efob0vBdq2bZuuv/56HXfcccrIyNCwYcO0cOFCffrpp2Hvt2zZMo0cOVJ9+/bVkUceqc9//vP63ve+F/HvWST79u3TPffco1NOOUXf+c532vx6bm6uysvLtX37dv3sZz9rfX38+PEqLCzU2rVrNXbsWB1xxBG69tprJUnvvvuurrrqKh155JHKzs7WlClTtG3btnY//4YNG3TxxRcrJydHWVlZOv300/XII4+Evc+KFSuUlpam1atX69prr9XnPvc5HXHEEW3+eTuHH364JCk7Ozvs9f79+0uSsrKyOvc3pwuqq6t1ySWX6LjjjlNWVpZOPPFEXX/99dq5c2fY+y1YsEBpaWnauHGjLr/8cvXr10/Z2dn6l3/5F/3jH/845OdZuHChzjzzTOXk5Khfv34644wz9LOf/Uye57V534cfflhjxoxR37591bdvX40aNSrsn6UkPfXUUzr//PPVr18/HXHEETrrrLP0xz/+sXt/MwD45qc//amam5v13e9+Ny4fnz5pH31Cn9An9AmAJOLvbolk9v7773vZ2dneZZdd1unf096J/p133umlpaV51157rffEE094jz32mDdmzBivT58+3iuvvNL6ftOmTfMOP/xwb+jQoV55ebn3xz/+0auqqvI8z/Mkefn5+d7YsWO9xx57zPvNb37jnXzyyV5OTo534403epdccon3xBNPeL/85S+93Nxcb8SIERFPSdvT3on+jTfe6C1btsx78sknvaefftr74Q9/6A0cONC75pprWt9n+/btXmZmpjd//vyw39vY2Oj17t3b+/a3v9362sGnmR999JE3YsQIr0+fPt73v/99b/Xq1d4tt9zipaene5MmTQr7eJK8Y4891hsxYoT38MMPe08//bT38ssvt/tn2bNnj9e/f3/v6KOP9u6//35v8+bNEf/czc3N3qhRo7yBAwd6ixcv9p566invRz/6kZedne2dd955YX8PO3oGSd5tt93W+r5bt271Bg8e7OXn53v333+/99RTT3m33367l5mZ6U2fPr31/f7rv/7Lk+T9v//3/7zVq1d7Tz31lHffffd5c+bMifjMkaxfv96T5H33u9+N+D4ffPCBd9hhh3kTJ05sfe3cc8/1cnJyvMGDB3s//vGPvTVr1njPPPOM9+GHH3qnnHKKl52d7f34xz/2qqqqvDlz5nhDhgxpc6L/9NNPexkZGd64ceO8lStXek8++aQ3ffr0Nu/n/vNx7LHHetddd533hz/8wfv1r3/tffrpp+0+7yeffOIVFRV5p556qvf88897H3zwgVdbW+uNGjXKO+OMM7x9+/ZF/ffJ8zp3or9s2TKvvLzce/zxx71nnnnG+/nPf+6NHDnSGz58eNjnve2221r/8/ntb3/bq6qq8hYvXuz16dPHO/3008Pet70T/enTp3s/+9nPvOrqaq+6utq7/fbbvd69e3sLFy4Me79bbrnFk+Rdfvnl3qOPPuqtXr3aW7x4sXfLLbe0vs9DDz3kpaWleZdeeqn32GOPeb/73e+8iy66yOvVq5f31FNPdenvFQB/nXfeeV5OTo735JNPeiNHjvR69erlfe5zn/Ouv/56b/fu3Z3+OPSJoU/oE/qEPgGQehgOETdf+9rXvPT0dG/Dhg2d/j0Hh3lDQ4OXnp7u/b//9//C3u+DDz7wjj76aO+qq65qfW3atGmeJO8///M/23xcSd7RRx/t7dmzp/W1yspKT5I3atSosIBcsmSJJ8n761//2unnPtSXArW0tHiffPKJ9+CDD3q9evXydu3aFfZ7Bw0a5O3du7f1tX/7t3/zDjvssLAoPjhK7rvvPk+S98gjj4R9rn/7t3/zJHmrV68O+/NnZ2eHfd6O/P73v/cGDhzoSfIkeQMGDPC+/OUve48//njY+5WXl3uHHXZYmy/d+vWvf+1J8latWtWpZzg4zK+//nqvb9++3ttvvx32ft///vc9Sa3/g+yGG27w+vfv36k/06H86le/8iR59913X4fvl5ub651yyimtb5977rmeJO+Pf/xj2PstW7bMk+T99re/DXv961//epvg/vznP++dfvrp3ieffBL2vhdddJF3zDHHtH75lfvPx9VXX93pP1dTU5M3efLk1n+Wkrzx48d7jY2Nnf4YB4v2S4H279/vffLJJ97bb7/d5u+JC/Mbb7wx7Pf88pe/9CR5v/jFL1pfO9SXArn/nC1atMgbMGBA63+u33zzTa9Xr17e1772tYi/t7m52cvJyfEmT57c5mOOHDnS+8IXvtDpPy+A4Bg+fLiXlZXlHXnkkd5dd93lrVmzxvv3f/93r3fv3t5ZZ53V6RGOPjH0CX3iefQJfQIg1fClyoiLW265Rb/85S/1wx/+UEVFRa2v79+/X59++mnrXy0tLR1+nKqqKn366ae6+uqrw35fVlaWzj333HZ/KuAVV1zR7seaMGGC+vTp0/r2KaecIkkqLS1VWlpam9fffvvtTv9527Nx40ZdfPHFGjBggHr16qXDDz9cV199tVpaWvT666+3vt83v/lN7dixQ48++qgk+3u0bNkyXXjhhRo6dGjEj//000+rT58+uvLKK8Nenz59uiS1+fIF91P4OmPSpElqaGjQb37zG91000069dRTVVlZqYsvvlg33HBD6/s98cQTKiws1KhRo8L++UycOLHdn9rY2Wd44oknNGHCBOXl5YV93NLSUknSM888I0n6whe+oPfff19f/epX9dvf/rbNl5nEg+d5Yf++SNJRRx3V5gcArVmzRkceeaQuvvjisNf/+Z//OeztTZs26X//93/1ta99TZLC/ryTJk3S1q1b9dprr4X9nkj/jh/sk08+0ZQpU1RXV6ef/OQnWrt2rX7+85/r73//uy644ALt3r27Ux+nK3bs2KFZs2Zp8ODBSk9P1+GHH678/HxJ0quvvtrm/d2f37nqqquUnp6uNWvWdPh5nn76af3TP/2TsrOzW/9zduutt6qxsVE7duyQZF+W1NLSolAoFPHjrF+/Xrt27dK0adPC/hns379fX/rSl1RTU9Pmy9sABN/+/fv18ccf63vf+57mzZun8ePH69vf/rbKy8v17LPPtv7fSvqEPqFP6BP6BADax09VRswtXLhQd9xxh+68886wiJOkRYsWaeHCha1v5+fn66233or4sbZv3y5JKi4ubvfXD/5+NkcccYT69evX7vvm5OSEvZ2RkdHh6x19755DaWho0Lhx4zR8+HD96Ec/0tChQ5WVlaXnn39eoVBIH330Uev7nn766Ro3bpwqKir0ta99TU888YTeeust3X///R1+jsbGRh199NFtInHQoEFKT09v/V5ATqTvCRRJ7969demll+rSSy9t/TOVlpaqoqJC3/jGN3Tqqadq+/bt2rRpU+v3qjnYwaHc2WfYvn27fve73x3y406dOlWffvqpfvKTn+iKK67Q/v37VVxcrDvuuEMXXHBBJ/+kZsiQIZKkzZs3R3yf5uZm7dy5U6effnrY6+39uRobG5Wbm9vm9aOPPjrsbffv+E033aSbbrqp3c/b1b+PP/vZz/SHP/xBNTU1Gj16tCRp3LhxOvvss3XCCSdoyZIluu222zr1saKxf/9+lZSU6N1339Utt9yi0047TX369NH+/fv1xS9+Mezff+fgvy/p6ekaMGBAm3+PD/T888+rpKRE48eP109+8pPW7zdVWVmpO++8s/XzuO9F1NFPxnT/HA7+H7oH2rVrV9j/uAcQfAMGDNAbb7yhiRMnhr1eWlqquXPn6oUXXtA//dM/0Sf0Sac+N30Sjj5pH30CINkwHCKmFi5cqAULFmjBggXtfgPo6667ThdddFHr25mZmR1+vIEDB0qSfv3rX7eeBnbk4Ej1S2VlpZqbm/XYY4+FPXddXV277z9nzhx9+ctf1gsvvKB7771XJ5988iHDcsCAAfrLX/7S5oR5x44d+vTTT1v/3jnd/XszZMgQXXfddZo7d65eeeUVnXrqqRo4cKB69+6t//zP/2z393T1GQYOHKgRI0bozjvvbPfX8/LyWv//11xzja655ho1Nzdr7dq1uu2223TRRRfp9ddf79S/M05RUZGOOuooPf744yovL2/3WR9//HHt37+/zT+b9t53wIABev7559u8fvA3H3d/j+bNm6fLL7+83WcbPnz4IT9fe+rq6tSrVy+dccYZYa8ff/zxGjBggF5++eVOfZxovfzyy3rxxRe1YsUKTZs2rfX1jr6p/7Zt23Tssce2vv3pp5+qsbFRAwYMiPh7fvWrX+nwww/XE088EfaN1CsrK8Pe73Of+5wk6Z133tHgwYPb/Vjun8OPf/xjffGLX2z3fdr7H1oAgm3EiBF67rnn2rzu/d8PKHADH31S1+770ydtfx998hn6pH30CYBkw3CImLn99tu1YMEC/eu//mvEU8K8vLywqDqUiRMnKj09XX/72986/eUPQeDC6cD/4eF5nn7yk5+0+/6XXXaZhgwZom9961t65pln9MMf/vCQ8XX++efrkUceUWVlpS677LLW1x988MHWX++KDz74QGlpaerbt2+bX3NfwuH+GV500UW66667NGDAAA0bNqxLn689F110kVatWqUTTjih01++1KdPH5WWlmrfvn269NJL9corr0QV5hkZGfr2t7+t733ve7rnnnva/OTCHTt2aN68ecrNzdXMmTMP+fEmTJigRx55RI8//njYlwM9/PDDYe83fPhwnXTSSXrxxRd11113dfp5OyMvL08tLS2qqanRmWee2fr666+/rsbGxg5PuLujvX//JXV4S+WXv/xl2Lc1eOSRR/Tpp59q/PjxHX6e9PR09erVq/W1jz76SA899FDY+5WUlKhXr15atmyZxowZ0+7HOuuss9S/f3/V19e3uSkNIHFdccUVWr58uf7whz+E3cZatWqVJLX+D3H6hD7pDPokNugTQ58ASBQMh4iJH/zgB7r11lv1pS99SRdeeGGb0/1IJ2SHMnToUC1atEjz58/Xm2++qS996Us66qijtH37dj3//PPq06dP2JcWBcUFF1ygjIwMffWrX9V3vvMdffzxx1q2bJnee++9dt+/V69eCoVC+u53v6s+ffq0fh+gjlx99dWqqKjQtGnT9NZbb+m0007Tn/70J911112aNGmS/umf/qlLz/7aa69p4sSJ+spXvqJzzz1XxxxzjN577z39/ve/1/LlyzV+/HiNHTtWkjR37lz993//t8455xzdeOONGjFihPbv36+GhgatXr1a3/rWt8KCsLMWLVqk6upqjR07VnPmzNHw4cP18ccf66233tKqVat033336bjjjtPXv/519e7dW2eddZaOOeYYbdu2TeXl5crOzg778jH3vZg6+rIzSfrud7+rF198sfX/nTJlirKzs/XXv/5V99xzjz744AM98cQTys7OPuSf4eqrr9YPf/hDXX311brzzjt10kknadWqVaqqqmrzvvfff79KS0s1ceJETZ8+Xccee6x27dqlV199VS+88ELr95eK1jXXXKMf/vCHuuKKK/Sv//qvGj58uN58803ddddd6tOnj2bNmtX6vm+99ZaGDRumadOmacWKFYf82Nu2bdOvf/3rNq8PHTpUI0eO1AknnKCbb75ZnucpJydHv/vd71RdXR3x4z322GNKT0/XBRdcoFdeeUW33HKLRo4cqauuuiri77nwwgu1ePFi/fM//7Ouu+46NTY26vvf/36b/0EwdOhQfe9739Ptt9+ujz76SF/96leVnZ2t+vp67dy5UwsXLlTfvn314x//WNOmTdOuXbt05ZVXatCgQfrHP/6hF198Uf/4xz+0bNmyQ/59ARAsJSUlmjx5shYtWtT65YgbNmzQwoULddFFF+nss8/u0selTyKjT+iTQ6FPPnsm+gRAQvDtx7Igqbif3Bbpr846+KcWOpWVld6ECRO8fv36eZmZmV5+fr535ZVXek899VTr+3T0kwMleaFQKOy1zZs3e5K8e+65J+z1NWvWeJK8Rx99tNPP3d7n/t3vfueNHDnSy8rK8o499ljv29/+tveHP/zBk+StWbOmzcd46623PEnerFmz2v0c7f3EtsbGRm/WrFneMccc46Wnp3v5+fnevHnzvI8//jjs/dr780fy3nvveXfccYd33nnneccee6yXkZHh9enTxxs1apR3xx13eB9++GHY++/Zs8f713/9V2/48OFeRkaGl52d7Z122mnejTfe6G3btq1Tz6CDfmqh53neP/7xD2/OnDnesGHDvMMPP9zLycnxioqKvPnz57f+9Mmf//zn3oQJE7zc3FwvIyPDy8vL86666qo2P3Fy4MCB3he/+MVO/fn379/v/fKXv/TGjx/v9e/f38vIyPCGDRvmfeMb32jzUxQ9z/65nHrqqe1+rHfeece74oorvL59+3pHHnmkd8UVV3jr169v81MLPc/zXnzxRe+qq67yBg0a5B1++OHe0Ucf7Z133nlhP0Ux0n8+OvLGG294U6dO9YYOHeplZmZ6Q4YM8aZMmdL6kx+dl156yZPk3XzzzYf8mPn5+RH/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9dvf/laZmZlt+poCABCs6Cf0EwBAADMALKO4uNhIMhUVFa3uj42NNVlZWS22jRkzxjz99NPGGGPy8vKMJFNdXe3YX1JSYiSZ48ePG2OMeeONN4wkU1pa6jimvLzcSDK5ubmt3u/KlStNRkZGi22nTp0ykkx5eflN8xQWFpqwsDCzcuVK06lTJ7Nz586bHmuMMc8++6wZNGiQuXr1aqv7b5d/48aNpmfPnqa2ttax//333zchISHm7Nmzxhhj5s2bZ2JiYkx9fb3jmD/+8Y8mOjra1NXVOba9+uqrRpIpKSm55cwAAAQ7+gn9BAAQuHjFIWAhycnJmjx5shITE/X444/r9ddfV3V1tSSppqZGp0+f1n333dfiOvfdd5/KysradD/h4eFKSkpyXC4tLVVoaKgmTpzY6vHFxcXKy8tT165dHR/Dhg2TJMev6bRm3LhxyszM1O9//3v98pe/1IQJExz7pk2b5ritESNGOOZIT09XWFiY0225kr+srEzJycm64447WuxvampSeXm5Y1tiYqLCw8Mdl5uv16VLlxazAwAA+gn9BAAQyDr5ewAAvhMaGqrc3FwVFhbqX//6l1555RWtWLFCe/fuVa9evSRJNputxXWMMY5tISEhjm3NGhoanO6nc+fOLW6nc+fOt5yrqalJM2bM0PPPP++0r1+/fre83u7duxUaGur060qbNm3Sd999J0mOIn67OaRb57/+81td7/ri3nw9AADQOvoJ/QQAELh4xSFgMTabTffdd59WrVqlkpIShYeHa/v27YqKilJsbKw+/fTTFscXFhZq+PDhkqQ+ffpIsr/nT7PS0tLb3mdiYqKampq0c+fOVvenpqbq4MGDuvPOOzV48OAWHzeW3Ou98MILKisr086dO7Vjxw698cYbjn39+/d33MbAgQMlSUlJSdq1a1erP0y4kj8hIUGlpaWON2uXpN27dyskJMTxJuOtSUhI0P79+x0/KEjSnj17bno8AABWQz+hnwAAApS/fkcagO/t2bPHZGVlmaKiInPixAmzdetWEx4ebj744ANjjDFr1641UVFR5q233jKHDx82v/rVr0xYWJg5cuSIMcaYq1evmri4OPP444+b8vJyk5OTY4YOHer0HkLdu3d3uu/58+ebuLg4s337dvPf//7X5OXlmS1bthhjjKmsrDR9+vQxjz32mNm7d685duyY2bFjh/nxj39srl271mqWkpISEx4ebt577z1jjDGbNm0y3bp1M8eOHbtp/qqqKtOrVy/zyCOPmKKiInPkyBGzefNmc/jwYZfy19XVmX79+plHH33UHDhwwHzyySfmrrvuMvPmzXPcx7x588zDDz/c4n4vXbpkevfubZ544glz8OBB8/7775vBgwfzHkIAABj6Cf0EABDIWDgELOTQoUNm6tSppk+fPiYiIsIMGTLEvPLKK479jY2NZtWqVaZ///4mLCzMJCcnm3/+858tbuPTTz81iYmJJjIy0qSnp5tt27a5VMy/++4784tf/ML069fPhIeHm8GDB5s///nPjv1Hjhwxs2fPNj169DCdO3c2w4YNM0uWLDFNTU2t3lZCQoJZuHBhi+2zZ88248ePv2mZN8aY/fv3m4yMDNOlSxfTrVs3k56e7ijzruT/4osvzKRJk0xkZKSJjo42Tz31lLl06ZJjf2vF3BhjPvvsM5OcnGzCw8NNSkqKeeeddyjmAAAY+okx9BMAQOCyGcObWwAAAAAAAABoifc4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATlg4BAAAAAAAAOCEhUMAAAAAAAAATv4PDbmAkzvMEZoAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAALACAYAAADSYu9+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACxQUlEQVR4nOzdf3zWdb3/8edkbCCwyUAGAzbxZ04UdCwDRJnmaCiUYnHqhKCQ0S4PB5eZ5PEXqbNDEZ0cBGmSnSzSo1RGjZkmJMcck5k6KzF0qIzF8Dg2E3B8vn9c381du3Zt14/PdX3en8/ncb/ddjtdn+uzz/UeaOfdc6/X651mWZYlAAAAAAAAAOjmOKcXAAAAAAAAAMA8BIcAAAAAAAAAwhAcAgAAAAAAAAhDcAgAAAAAAAAgDMEhAAAAAAAAgDAEhwAAAAAAAADCEBwCAAAAAAAACENwCAAAAAAAACAMwSEAAAAAAACAMASHsNUf//hHzZ49W8OHD9fgwYN12mmn6Zvf/GbE+2fOnKm0tLR+v+64447U/RBRiGbNaWlp+sMf/mDbZ86cOVMzZ8607Xl9OXr0qNavX6/i4mLl5OTo+OOPV0FBgT796U/r8ccft/3zTPo7tixLDz/8sC6++GINHz5cmZmZOvnkkxUIBLR3796En//GG28oLS1NGzduTHyxUYj0z+a9994b9zNPOukkXX755TauMjqp/HcAgLewP2F/Eg+T/o69tj9pamrS9ddfr5NPPlmDBw9WQUGBFi9erMbGxrifyf4EAJIj3ekFwDsefvhhLViwQJ/73Of00EMPaejQoXr99df1zjvvRPyetWvXqrW1tev1b37zG91111168MEH9bGPfazr+rhx45K69lj97//+b8jrb37zm3r66af11FNPhVwvLCxM5bJss2DBAj322GNavny57rzzTmVmZurvf/+7fve736m6ulpXXHGFrZ/3v//7v0b8HR87dkxf+MIXtGnTJn3+85/Xxo0blZ2drT//+c9atWqVHn74YT3xxBOaPn2600uNyVVXXaWvfvWrIdfy8/MdWg0ApBb7E/Yn8WJ/khyHDx/WhRdeqHfffVd33nmnCgsL9de//lW33367qqur9eqrr2rYsGFOLxMA0MkCbPDWW29ZQ4YMsb7yla8k9JwHH3zQkmTV1tbasq729nZbntOfhQsXWkOGDEnqZ1x00UXWRRddZMuzjh07Zr3//vu9vvf3v//dkmTddtttvb7f0dGR9DU45Z577rEkWffee2/Ye01NTVZBQYGVm5trvfvuu30+p69/7vbs2WNJsh588MEEVxv0/vvvW8eOHYv4viQrEAjY8lmdCgoKrMsuu8zWZ0bDzn8HAPgD+xP2J3auwSle25/U1NRYkqz7778/5PrDDz9sSbIee+yxuD6T/QkAJAetyrDF/fffr/b2dn39619PyvM3bdqkqVOnasiQIRo6dKhmzZqlXbt2hdyzaNEiDR06VC+99JJKS0s1bNgwXXLJJZKCrSbXX3+9HnzwQZ1xxhkaPHiwpkyZoueee06WZWnVqlWaMGGChg4dqosvvli7d+9OeM1VVVW68MILNWrUKA0ZMkRnn322/vM//1NHjx7tuueb3/ym0tPTe20xufbaazVixAh98MEHET/j4MGDKi8v19ixY5WRkaGTTz5Zt9xyiw4fPhxyX+fP/4Mf/EBnnnmmMjMz9eMf/7jXZ7a0tEiSxowZ0+v7xx0X+l8bra2tuvHGGzVhwgRlZGRo7NixWr58udrb26NeQ2+tQE1NTfryl7+scePGKSMjQxMmTNCdd96pDz/8MOS+devWadKkSRo6dKiGDRumj33sY/rGN74R8c8skiNHjmjVqlU688wzddNNN4W9n5ubq8rKSu3fv18PPPBA1/WZM2dq4sSJ2rZtm6ZNm6bjjz9e1157rSTpnXfe0ec+9zkNGzZM2dnZmj9/vpqamnr9/J07d2ru3LnKycnRoEGDdO655+oXv/hFyD0bN25UWlqatm7dqmuvvVYnnniijj/++LC/bxPU1NTo05/+tMaNG6dBgwbp1FNP1Ze//GUdOHAg5L477rhDaWlp2rVrl6688kplZWUpOztbX/ziF/WPf/yj38+58847df755ysnJ0dZWVk677zz9MADD8iyrLB7H374YU2dOlVDhw7V0KFDNXny5JC/S0l68skndckllygrK0vHH3+8pk+frt///veJ/WEAcAz7k3DsT9ifOL0/GThwoCQpOzs75PoJJ5wgSRo0aFB0fzhxYH8CAHFwNreEV1x88cVWTk6O9bvf/c6aNGmSNWDAAOvEE0+0vvzlL1vvvfde1M/p7Tf6d999t5WWlmZde+211hNPPGE99thj1tSpU60hQ4ZYr7zyStd9CxcutAYOHGiddNJJVmVlpfX73//eqq6utiwrWHVVUFBgTZs2zXrsscesxx9/3Dr99NOtnJwc64YbbrA+/elPW0888YT105/+1MrNzbXOOeecPqu4eurtN/o33HCDtW7dOut3v/ud9dRTT1nf/e53rZEjR1rXXHNN1z379++3MjMzrVtuuSXke1taWqzBgwdbX/va17qu9fxt5j//+U/rnHPOsYYMGWJ9+9vftrZu3WrdeuutVnp6ujV79uyQ50myxo4da51zzjnWww8/bD311FPWyy+/3OvP0tbWZp1wwgnW6NGjrfXr11t79uyJ+HO3t7dbkydPtkaOHGmtXr3aevLJJ63vfe97VnZ2tnXxxReH/Bn2tQZJ1u2339517759+6zx48dbBQUF1vr1660nn3zS+uY3v2llZmZaixYt6rrvZz/7mSXJ+rd/+zdr69at1pNPPmn94Ac/sJYtWxZxzZHs2LHDkmR9/etfj3jPoUOHrOOOO86aNWtW17WLLrrIysnJscaPH299//vft55++mnrmWeesd5//33rzDPPtLKzs63vf//7VnV1tbVs2TIrPz8/7Df6Tz31lJWRkWHNmDHD2rRpk/W73/3OWrRoUdh9nf9+jB071rruuuus3/72t9ajjz5qffjhhxHXLMkaPny4NWjQICsjI8M677zzrB/96Ecx//l0F81v9NetW2dVVlZav/rVr6xnnnnG+vGPf2xNmjTJOuOMM6wjR4503Xf77bd3/fv5ta99zaqurrZWr15tDRkyxDr33HND7u3tN/qLFi2yHnjgAaumpsaqqamxvvnNb1qDBw+27rzzzpD7br31VkuSdeWVV1qPPPKItXXrVmv16tXWrbfe2nXPT37yEystLc36zGc+Yz322GPWr3/9a+vyyy+3BgwYYD355JMJ/IkBcAr7E/Yn7E/M258cPXrUKioqss466yzr+eeftw4dOmTV1dVZkydPts4777yQ/98fC/YnAJAcBIewxRlnnGENGjTIGjZsmHXPPfdYTz/9tPWf//mf1uDBg63p06dHvcntuTFvbGy00tPTrX/7t38Lue/QoUPW6NGjrc997nNd1xYuXGhJ6jUUkWSNHj3aamtr67q2efNmS5I1efLkkPWtWbPGkmT9+c9/jvrn768VqKOjwzp69Kj10EMPWQMGDLAOHjwY8r2jRo2yDh8+3HXtW9/6lnXc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9yckJJicnJw22zIyMszChQuNMcYUFBQYSaa2tta1v7S01EgyFRUVxhhjXnrpJSPJlJWVuY7Zt2+fkWTy8/PbfdxHH33UZGVltdl28OBBI8ns27evwzxOp9NERkaaRx991ERERJjt27d3eKwxxjzyyCPmkksuMU1NTe3uP1/+DRs2mIsuusjU19e79r/11lsmLCzMHDlyxBhjzNy5c018fLxpbGx0HfOnP/3JxMXFmYaGBte29evXG0mmtLS005oBAAh19Cf0JwCA4MUrDgEbSU1N1bRp05SSkqI77rhDL774omprayVJdXV1OnTokK6++uo297n66qtVXl7epceJiorSmDFjXLfLysoUHh6uKVOmtHt8SUmJCgoK1KdPH9fXFVdcIUmut+m0Z+LEiVqyZIl+//vf6ze/+Y0mT57s2pedne0616hRo1x1ZGZmKjIy0u1cnuQvLy9XamqqLrjggjb7W1tbtW/fPte2lJQURUVFuW6fuV/v3r3b1A4AAOhP6E8AAMEsItAFAPCf8PBw5efny+l06t///reef/55LV++XB999JH69+8vSXI4HG3uY4xxbQsLC3NtO+P06dNuj9OrV6825+nVq1endbW2tuqmm27SU0895bZv8ODBnd5v586dCg8Pd3u70saNG/Xjjz9KkqsRP18dUuf5z/5zZ/c7u3E/cz8AANA++hP6EwBA8OIVh4DNOBwOXX311VqxYoVKS0sVFRWlrVu3KjY2VgkJCfrggw/aHO90OnXllVdKkgYOHCjppzV/zigrKzvvY6akpKi1tVXbt29vd/+4ceO0Z88eXXzxxRo+fHibr3Ob3LM9/fTTKi8v1/bt27Vt2za99NJLrn1DhgxxnWPYsGGSpDFjxmjHjh3t/mfCk/zJyckqKytzLdYuSTt37lRYWJhrkfH2JCcn67PPPnP9R0GSdu3a1eHxAADYDf0J/QkAIEgF6j3SAPxv165dJicnxxQXF5uvv/7abN682URFRZm3337bGGPM6tWrTWxsrHn11VfNF198YX7729+ayMhI8+WXXxpjjGlqajKJiYnmjjvuMPv27TN5eXlm5MiRbmsI9evXz+2x582bZxITE83WrVvNf//7X1NQUGA2bdpkjDGmurraDBw40Nx+++3mo48+MgcOHDDbtm0zv/zlL01zc3O7WUpLS01UVJR58803jTHGbNy40fTt29ccOHCgw/w1NTWmf//+5tZbbzXFxcXmyy+/NK+88or54osvPMrf0NBgBg8ebG677Taze/du8/7775tLL73UzJ071/UYc+fONTfffHObxz1x4oQZMGCAueuuu8yePXvMW2+9ZYYPH84aQgAAGPoT+hMAQDBjcAjYyN69e82MGTPMwIEDTXR0tBkxYoR5/vnnXftbWlrMihUrzJAhQ0xkZKRJTU01//rXv9qc44MPPjApKSkmJibGZGZmmi1btnjUmP/444/m17/+tRk8eLCJiooyw4cPN3/5y19c+7/88ktzyy23mAsvvND06tXLXHHFFWbRokWmtbW13XMlJyeb+fPnt9l+yy23mEmTJnXYzBtjzGeffWaysrJM7969Td++fU1mZqarmfck/+eff26mTp1qYmJiTFxcnHnggQfMiRMnXPvba8yNMebDDz80qampJioqyqSlpZnXX3+dxhwAAEN/Ygz9CQAgeDmMYXELAAAAAAAAAG2xxiEAAAAAAAAANwwOAQAAAAAAALhhcAgAAAAAAADADYNDAAAAAAAAAG4YHAIAAAAAAABww+AQAAAAAAAAgBsGhwAAAAAAAADcMDgEAAAAAAAA4IbBIQAAAAAAAAA3DA4BAAAAAAAAuGFwCAAAAAAAAMANg0MAAAAAAAAAbv4fpJ3bUBENaPMAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -818,7 +818,7 @@ "ax2.set_xlabel(\"source x-coord\")\n", "ax2.set_ylabel(\"source y-coord\")\n", "\n", - "ax1.set_title('2-Term Taylor Series, Order 8, Laplace')\n", + "ax1.set_title('6-Term Taylor Series, Order 5, Laplace')\n", "ax2.set_title('6-Term Taylor Series, Order 8, Laplace')\n", "\n", "plt.show()" From edb8547bc9e6cac46ac4d2d733787a126996be36 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Tue, 7 Jan 2025 15:33:12 -0800 Subject: [PATCH 137/143] Don't know how to rigoroulsly check --- test/plot_taylor_recurrence.ipynb | 175 +++++++++++++++++++----------- 1 file changed, 111 insertions(+), 64 deletions(-) diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index fd385ebf..01dbc851 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -101,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -110,7 +110,7 @@ "4" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -122,19 +122,19 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle -2.22044604925031 \\cdot 10^{-16}$" + "$\\displaystyle 2.61457522299224 \\cdot 10^{-14}$" ], "text/plain": [ - "-2.22044604925031e-16" + "2.61457522299224e-14" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -159,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -188,7 +188,7 @@ " [-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n]]" ] }, - "execution_count": 11, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -210,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -222,7 +222,7 @@ "(-1)**n*x1**2*s(n, i - 1)/factorial(i - 1) + (-1)**n*s(n, i - 3)/factorial(i - 3) + (-3*(-1)**n*n + 5*(-1)**n)*s(n - 1, i - 2)/factorial(i - 2) + (-(-1)**n*n*x1**2 + 3*(-1)**n*x1**2)*s(n - 1, i)/factorial(i) + (3*(-1)**n*n**2 - 13*(-1)**n*n + 14*(-1)**n)*s(n - 2, i - 1)/factorial(i - 1) + (-(-1)**n*n**3 + 8*(-1)**n*n**2 - 21*(-1)**n*n + 18*(-1)**n)*s(n - 3, i)/factorial(i)" ] }, - "execution_count": 12, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -276,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -288,7 +288,7 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 14, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -307,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -321,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -333,7 +333,7 @@ "(-i**2 - 2*i*n + 3*i - n**2 + 3*n - 2)*s(n - 2, i)/x1**2" ] }, - "execution_count": 16, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -344,7 +344,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -356,7 +356,7 @@ "(-8*s(-1, 2) - 12*s(1, 2))/x1**2" ] }, - "execution_count": 17, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -381,7 +381,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -397,7 +397,7 @@ " [0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12, 0, -6227020800/x1**14]]" ] }, - "execution_count": 18, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -411,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -434,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -444,7 +444,7 @@ " [0, -0.694444444444445, 0, 2.89351851851852, 0, -40.1877572016461]]" ] }, - "execution_count": 20, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -464,7 +464,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -494,7 +494,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -510,7 +510,7 @@ " [0, 1172.14291838134, 0, -58607.1459190672, 0, 4476934.75770653]]" ] }, - "execution_count": 22, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -528,7 +528,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -552,7 +552,7 @@ " I*(0.75*((0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) + 0.75*((0.75*hankel1(-2, 1.0*sqrt(x1**2)) - 0.75*hankel1(0, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.75*hankel1(0, 1.0*sqrt(x1**2)) - 0.75*hankel1(2, 1.0*sqrt(x1**2)))/sqrt(x1**2))/(x1**2)**(3/2) - 0.75*(3.0*hankel1(-1, 1.0*sqrt(x1**2)) - 3.0*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(4.5*hankel1(-1, 1.0*sqrt(x1**2)) - 4.5*hankel1(1, 1.0*sqrt(x1**2)))/(x1**2)**(5/2) - 0.75*(((0.125*hankel1(-3, 1.0*sqrt(x1**2)) - 0.125*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - ((0.125*hankel1(-1, 1.0*sqrt(x1**2)) - 0.125*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.125*hankel1(1, 1.0*sqrt(x1**2)) - 0.125*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/sqrt(x1**2) - (0.25*hankel1(-2, 1.0*sqrt(x1**2)) - 0.25*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) - (0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 0.5*hankel1(0, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(0, 1.0*sqrt(x1**2)) - 0.25*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.5*hankel1(0, 1.0*sqrt(x1**2)) - 0.5*hankel1(2, 1.0*sqrt(x1**2)))/(x1**2)**(3/2) + (0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.5*hankel1(-1, 1.0*sqrt(x1**2)) + 0.25*hankel1(1, 1.0*sqrt(x1**2)))/x1**2 - (0.25*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)) + 0.25*hankel1(3, 1.0*sqrt(x1**2)))/x1**2)/sqrt(x1**2) - 0.75*((0.25*hankel1(-3, 1.0*sqrt(x1**2)) - 0.25*hankel1(-1, 1.0*sqrt(x1**2)))/sqrt(x1**2) - (0.5*hankel1(-1, 1.0*sqrt(x1**2)) - 0.5*hankel1(1, 1.0*sqrt(x1**2)))/sqrt(x1**2) + (0.25*hankel1(1, 1.0*sqrt(x1**2)) - 0.25*hankel1(3, 1.0*sqrt(x1**2)))/sqrt(x1**2))/x1**2 + 1.5*(0.5*hankel1(-2, 1.0*sqrt(x1**2)) - 1.0*hankel1(0, 1.0*sqrt(x1**2)) + 0.5*hankel1(2, 1.0*sqrt(x1**2)))/x1**4 + 0.75*(1.0*hankel1(-2, 1.0*sqrt(x1**2)) - 2.0*hankel1(0, 1.0*sqrt(x1**2)) + 1.0*hankel1(2, 1.0*sqrt(x1**2)))/x1**4)]]" ] }, - "execution_count": 23, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -567,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -591,7 +591,7 @@ " 21.8306910223677 + 0.0733625774350065*I]]" ] }, - "execution_count": 24, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -604,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -613,7 +613,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -622,7 +622,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -631,7 +631,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -650,7 +650,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -674,7 +674,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -689,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -703,54 +703,54 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 9.30286424095774 \\cdot 10^{-5}$" + "$\\displaystyle 0.00263326606293773$" ], "text/plain": [ - "9.30286424095774e-5" + "0.00263326606293773" ] }, - "execution_count": 55, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "loc = np.array([1e-8, 1e-7])\n", - "compute_error_coord_tg(loc, laplace2d, derivs_lap, 8, 8, 2)" + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 5, 4, 2)" ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle 0.48954387615017$" + "$\\displaystyle 0.0466919192638915$" ], "text/plain": [ - "0.489543876150170" + "0.0466919192638915" ] }, - "execution_count": 56, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "compute_error_coord_tg(loc, laplace2d, derivs_lap, 8, 2, 2)" + "compute_error_coord_tg(loc, laplace2d, derivs_lap, 8, 4, 2)" ] }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -761,7 +761,7 @@ " plot_me = np.empty((res, res))\n", " for i in range(res):\n", " for j in range(res):\n", - " if abs(x_grid[i]) >= abs(y_grid[j]):\n", + " if abs(x_grid[i]) == abs(y_grid[j]):\n", " plot_me[i, j] = 1e-16\n", " else:\n", " plot_me[i,j] = compute_error_coord_tg(np.array([x_grid[i],y_grid[j]]), pde, derivs, order_plot, taylor_order, recur_order)\n", @@ -772,22 +772,34 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ - "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 5, laplace2d, derivs_lap, 6, 2)\n", - "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 8, laplace2d, derivs_lap, 6, 2)" + "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 4, laplace2d, derivs_lap, 4, 2)\n", + "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 7, laplace2d, derivs_lap, 4, 2)" ] }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 50, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_5026/3325410114.py:2: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs1 = ax1.contourf(x_grid, y_grid,plot_me_lap1.T/plot_me_lap2.T < 1, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_5026/3325410114.py:4: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap1.T/plot_me_lap2.T < 1, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_5026/3325410114.py:8: UserWarning: Attempt to set non-positive ylim on a log-scaled axis will be ignored.\n", + " fig.colorbar(cs1, cax=cbar_ax)\n" + ] + }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAALACAYAAADSYu9+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACxQUlEQVR4nOzdf3zWdb3/8edkbCCwyUAGAzbxZ04UdCwDRJnmaCiUYnHqhKCQ0S4PB5eZ5PEXqbNDEZ0cBGmSnSzSo1RGjZkmJMcck5k6KzF0qIzF8Dg2E3B8vn9c381du3Zt14/PdX3en8/ncb/ddjtdn+uzz/UeaOfdc6/X651mWZYlAAAAAAAAAOjmOKcXAAAAAAAAAMA8BIcAAAAAAAAAwhAcAgAAAAAAAAhDcAgAAAAAAAAgDMEhAAAAAAAAgDAEhwAAAAAAAADCEBwCAAAAAAAACENwCAAAAAAAACAMwSEAAAAAAACAMASHsNUf//hHzZ49W8OHD9fgwYN12mmn6Zvf/GbE+2fOnKm0tLR+v+64447U/RBRiGbNaWlp+sMf/mDbZ86cOVMzZ8607Xl9OXr0qNavX6/i4mLl5OTo+OOPV0FBgT796U/r8ccft/3zTPo7tixLDz/8sC6++GINHz5cmZmZOvnkkxUIBLR3796En//GG28oLS1NGzduTHyxUYj0z+a9994b9zNPOukkXX755TauMjqp/HcAgLewP2F/Eg+T/o69tj9pamrS9ddfr5NPPlmDBw9WQUGBFi9erMbGxrifyf4EAJIj3ekFwDsefvhhLViwQJ/73Of00EMPaejQoXr99df1zjvvRPyetWvXqrW1tev1b37zG91111168MEH9bGPfazr+rhx45K69lj97//+b8jrb37zm3r66af11FNPhVwvLCxM5bJss2DBAj322GNavny57rzzTmVmZurvf/+7fve736m6ulpXXHGFrZ/3v//7v0b8HR87dkxf+MIXtGnTJn3+85/Xxo0blZ2drT//+c9atWqVHn74YT3xxBOaPn2600uNyVVXXaWvfvWrIdfy8/MdWg0ApBb7E/Yn8WJ/khyHDx/WhRdeqHfffVd33nmnCgsL9de//lW33367qqur9eqrr2rYsGFOLxMA0MkCbPDWW29ZQ4YMsb7yla8k9JwHH3zQkmTV1tbasq729nZbntOfhQsXWkOGDEnqZ1x00UXWRRddZMuzjh07Zr3//vu9vvf3v//dkmTddtttvb7f0dGR9DU45Z577rEkWffee2/Ye01NTVZBQYGVm5trvfvuu30+p69/7vbs2WNJsh588MEEVxv0/vvvW8eOHYv4viQrEAjY8lmdCgoKrMsuu8zWZ0bDzn8HAPgD+xP2J3auwSle25/U1NRYkqz7778/5PrDDz9sSbIee+yxuD6T/QkAJAetyrDF/fffr/b2dn39619PyvM3bdqkqVOnasiQIRo6dKhmzZqlXbt2hdyzaNEiDR06VC+99JJKS0s1bNgwXXLJJZKCrSbXX3+9HnzwQZ1xxhkaPHiwpkyZoueee06WZWnVqlWaMGGChg4dqosvvli7d+9OeM1VVVW68MILNWrUKA0ZMkRnn322/vM//1NHjx7tuueb3/ym0tPTe20xufbaazVixAh98MEHET/j4MGDKi8v19ixY5WRkaGTTz5Zt9xyiw4fPhxyX+fP/4Mf/EBnnnmmMjMz9eMf/7jXZ7a0tEiSxowZ0+v7xx0X+l8bra2tuvHGGzVhwgRlZGRo7NixWr58udrb26NeQ2+tQE1NTfryl7+scePGKSMjQxMmTNCdd96pDz/8MOS+devWadKkSRo6dKiGDRumj33sY/rGN74R8c8skiNHjmjVqlU688wzddNNN4W9n5ubq8rKSu3fv18PPPBA1/WZM2dq4sSJ2rZtm6ZNm6bjjz9e1157rSTpnXfe0ec+9zkNGzZM2dnZmj9/vpqamnr9/J07d2ru3LnKycnRoEGDdO655+oXv/hFyD0bN25UWlqatm7dqmuvvVYnnniijj/++LC/bxPU1NTo05/+tMaNG6dBgwbp1FNP1Ze//GUdOHAg5L477rhDaWlp2rVrl6688kplZWUpOztbX/ziF/WPf/yj38+58847df755ysnJ0dZWVk677zz9MADD8iyrLB7H374YU2dOlVDhw7V0KFDNXny5JC/S0l68skndckllygrK0vHH3+8pk+frt///veJ/WEAcAz7k3DsT9ifOL0/GThwoCQpOzs75PoJJ5wgSRo0aFB0fzhxYH8CAHFwNreEV1x88cVWTk6O9bvf/c6aNGmSNWDAAOvEE0+0vvzlL1vvvfde1M/p7Tf6d999t5WWlmZde+211hNPPGE99thj1tSpU60hQ4ZYr7zyStd9CxcutAYOHGiddNJJVmVlpfX73//eqq6utiwrWHVVUFBgTZs2zXrsscesxx9/3Dr99NOtnJwc64YbbrA+/elPW0888YT105/+1MrNzbXOOeecPqu4eurtN/o33HCDtW7dOut3v/ud9dRTT1nf/e53rZEjR1rXXHNN1z379++3MjMzrVtuuSXke1taWqzBgwdbX/va17qu9fxt5j//+U/rnHPOsYYMGWJ9+9vftrZu3WrdeuutVnp6ujV79uyQ50myxo4da51zzjnWww8/bD311FPWyy+/3OvP0tbWZp1wwgnW6NGjrfXr11t79uyJ+HO3t7dbkydPtkaOHGmtXr3aevLJJ63vfe97VnZ2tnXxxReH/Bn2tQZJ1u2339517759+6zx48dbBQUF1vr1660nn3zS+uY3v2llZmZaixYt6rrvZz/7mSXJ+rd/+zdr69at1pNPPmn94Ac/sJYtWxZxzZHs2LHDkmR9/etfj3jPoUOHrOOOO86aNWtW17WLLrrIysnJscaPH299//vft55++mnrmWeesd5//33rzDPPtLKzs63vf//7VnV1tbVs2TIrPz8/7Df6Tz31lJWRkWHNmDHD2rRpk/W73/3OWrRoUdh9nf9+jB071rruuuus3/72t9ajjz5qffjhhxHXLMkaPny4NWjQICsjI8M677zzrB/96Ecx//l0F81v9NetW2dVVlZav/rVr6xnnnnG+vGPf2xNmjTJOuOMM6wjR4503Xf77bd3/fv5ta99zaqurrZWr15tDRkyxDr33HND7u3tN/qLFi2yHnjgAaumpsaqqamxvvnNb1qDBw+27rzzzpD7br31VkuSdeWVV1qPPPKItXXrVmv16tXWrbfe2nXPT37yEystLc36zGc+Yz322GPWr3/9a+vyyy+3BgwYYD355JMJ/IkBcAr7E/Yn7E/M258cPXrUKioqss466yzr+eeftw4dOmTV1dVZkydPts4777yQ/98fC/YnAJAcBIewxRlnnGENGjTIGjZsmHXPPfdYTz/9tPWf//mf1uDBg63p06dHvcntuTFvbGy00tPTrX/7t38Lue/QoUPW6NGjrc997nNd1xYuXGhJ6jUUkWSNHj3aamtr67q2efNmS5I1efLkkPWtWbPGkmT9+c9/jvrn768VqKOjwzp69Kj10EMPWQMGDLAOHjwY8r2jRo2yDh8+3HXtW9/6lnXc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9yckJJicnJw22zIyMszChQuNMcYUFBQYSaa2tta1v7S01EgyFRUVxhhjXnrpJSPJlJWVuY7Zt2+fkWTy8/PbfdxHH33UZGVltdl28OBBI8ns27evwzxOp9NERkaaRx991ERERJjt27d3eKwxxjzyyCPmkksuMU1NTe3uP1/+DRs2mIsuusjU19e79r/11lsmLCzMHDlyxBhjzNy5c018fLxpbGx0HfOnP/3JxMXFmYaGBte29evXG0mmtLS005oBAAh19Cf0JwCA4MUrDgEbSU1N1bRp05SSkqI77rhDL774omprayVJdXV1OnTokK6++uo297n66qtVXl7epceJiorSmDFjXLfLysoUHh6uKVOmtHt8SUmJCgoK1KdPH9fXFVdcIUmut+m0Z+LEiVqyZIl+//vf6ze/+Y0mT57s2pedne0616hRo1x1ZGZmKjIy0u1cnuQvLy9XamqqLrjggjb7W1tbtW/fPte2lJQURUVFuW6fuV/v3r3b1A4AAOhP6E8AAMEsItAFAPCf8PBw5efny+l06t///reef/55LV++XB999JH69+8vSXI4HG3uY4xxbQsLC3NtO+P06dNuj9OrV6825+nVq1endbW2tuqmm27SU0895bZv8ODBnd5v586dCg8Pd3u70saNG/Xjjz9KkqsRP18dUuf5z/5zZ/c7u3E/cz8AANA++hP6EwBA8OIVh4DNOBwOXX311VqxYoVKS0sVFRWlrVu3KjY2VgkJCfrggw/aHO90OnXllVdKkgYOHCjppzV/zigrKzvvY6akpKi1tVXbt29vd/+4ceO0Z88eXXzxxRo+fHibr3Ob3LM9/fTTKi8v1/bt27Vt2za99NJLrn1DhgxxnWPYsGGSpDFjxmjHjh3t/mfCk/zJyckqKytzLdYuSTt37lRYWJhrkfH2JCcn67PPPnP9R0GSdu3a1eHxAADYDf0J/QkAIEgF6j3SAPxv165dJicnxxQXF5uvv/7abN682URFRZm3337bGGPM6tWrTWxsrHn11VfNF198YX7729+ayMhI8+WXXxpjjGlqajKJiYnmjjvuMPv27TN5eXlm5MiRbmsI9evXz+2x582bZxITE83WrVvNf//7X1NQUGA2bdpkjDGmurraDBw40Nx+++3mo48+MgcOHDDbtm0zv/zlL01zc3O7WUpLS01UVJR58803jTHGbNy40fTt29ccOHCgw/w1NTWmf//+5tZbbzXFxcXmyy+/NK+88or54osvPMrf0NBgBg8ebG677Taze/du8/7775tLL73UzJ071/UYc+fONTfffHObxz1x4oQZMGCAueuuu8yePXvMW2+9ZYYPH84aQgAAGPoT+hMAQDBjcAjYyN69e82MGTPMwIEDTXR0tBkxYoR5/vnnXftbWlrMihUrzJAhQ0xkZKRJTU01//rXv9qc44MPPjApKSkmJibGZGZmmi1btnjUmP/444/m17/+tRk8eLCJiooyw4cPN3/5y19c+7/88ktzyy23mAsvvND06tXLXHHFFWbRokWmtbW13XMlJyeb+fPnt9l+yy23mEmTJnXYzBtjzGeffWaysrJM7969Td++fU1mZqarmfck/+eff26mTp1qYmJiTFxcnHnggQfMiRMnXPvba8yNMebDDz80qampJioqyqSlpZnXX3+dxhwAAEN/Ygz9CQAgeDmMYXELAAAAAAAAAG2xxiEAAAAAAAAANwwOAQAAAAAAALhhcAgAAAAAAADADYNDAAAAAAAAAG4YHAIAAAAAAABww+AQAAAAAAAAgBsGhwAAAAAAAADcMDgEAAAAAAAA4IbBIQAAAAAAAAA3DA4BAAAAAAAAuGFwCAAAAAAAAMANg0MAAAAAAAAAbv4fpJ3bUBENaPMAAAAASUVORK5CYII=", + "image/png": "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SoqZM2eOueKKK8yqVavMc889Z1JTU03//v1NdXV1yO2uq69z5swxy5cvN6+99pp54403zMMPP2w6duxobrjhBr9jlpiYaBYsWOD3uwcPHjQtW7Y0P/vZz3zbLr74YnPxxRf7Hn/zzTemf//+pnXr1ubBBx80a9asMQsXLjTx8fFm3Lhxfs8nyXTp0sX079/fPP/88+aNN94wH3zwQZ19OXLkiGnfvr3p3Lmzeeyxx8yOHTuC9ruiosIMHDjQdOzY0SxZssSsXbvW/PKXvzTJycnmkksu8TuG9bVBkrnjjjt8++7Zs8d069bNpKenm8cee8ysXbvW3HXXXSYxMdFMmzbNt9/vf/97I8n8z//8j1mzZo1Zu3atefTRR82sWbOCtjmYTZs2GUnm5z//edB9vvrqK9OsWTMzduxY37aLL77YpKSkmG7duplf//rXZt26dWb9+vXm66+/Nueee65JTk42v/71r01BQYGZNWuW6d69u5FknnnmGd9zvPHGGyYhIcEMHz7crFy50rz22mtm2rRptfareX906dLF3Hzzzeavf/2reemll8yJEyeCtlmSOe2000xSUpJJSEgw5513nnn66afDPj6nSk9PN5dffnm9+yxfvtzk5uaaV1991axfv9785je/MQMGDDC9e/c2x44d8+13xx13+N6fP/vZz0xBQYFZsmSJad26tRk0aJDfvoHvAWOMmTZtmnnqqadMYWGhKSwsNHfddZdp2bKlWbRokd9+CxcuNJLM1VdfbV588UWzZs0as2TJErNw4ULfPr/97W9NXFycufLKK83LL79s/vznP5vx48eb5s2bm7Vr1zbhiAGwEvmEfEI+sVc+OX78uMnMzDR9+vQxmzdvNl999ZUpLi42AwcONOedd57f3B8O8gkA1I8CICJm0qRJZujQob5QFYmAXVZWZuLj483//M//+O331Vdfmc6dO5vrrrvOt23q1KlGUp3FDUmmc+fO5siRI75t+fn5RpIZOHCgXxBcunSpkWTee++9kNvdUF+rqqrM8ePHzbPPPmuaN29uDh065Pe7nTp1MpWVlb5tv/jFL0yzZs38wm1guHj00UeNJPPCCy/4vdYvfvELI8msWbPGr//Jycl+r1ufv/zlL6Zjx45GkpFkOnToYK699lrz6quv+u2Xm5trmjVr5vcfRMYY89JLLxlJZvXq1SG1ITBg//jHPzZt2rQxn3zyid9+Dz74oJHk+w+rW265xbRv3z6kPjXkD3/4g5FkHn300Xr3S01NNeeee67v8cUXX2wkmddff91vv+XLlxtJ5k9/+pPf9h/96Ee1gvN3vvMdM2jQIHP8+HG/fcePH2/OOOMMU1VVZYz59v1x/fXXh9yv73//++a5554zGzZsMC+99JLJzs42ksz//d//hfwcgUIJ2Keqrq42x48fN5988kmtY1ITsOfMmeP3O88995yRZH73u9/5ttUVsE9V8z5bvHix6dChg+99/Z///Mc0b97c/OAHPwj6uxUVFSYlJcVMmDCh1nMOGDDAnH/++SH3F4C9kE/IJzXIJ/bJJ+Xl5WbChAm+cynJjBw50hw8eDDk5whEPgGA+vERYETEH//4R/35z3/WE088Ue+9yKqrq3XixAnfv6qqqnqft6CgQCdOnND111/v93tJSUm6+OKL6/wWu0mTJtX5XKNGjVLr1q19j88991xJUnZ2tl+ba7Z/8skn9batIVu3btXEiRPVoUMHNW/eXC1atND111+vqqoq/etf//Lt95Of/ET79+/Xiy++KOnkMVq+fLkuv/xy9ejRI+jzv/HGG2rdurWuueYav+3Tpk2TpFofC6j51rhQjBs3TmVlZXrllVc0b9489enTR/n5+Zo4caJuueUW336rVq1S3759NXDgQL/zM3bs2Dq/ZTDUNqxatUqjRo1SWlqa3/NmZ2dLktavXy9JOv/88/Xll1/qe9/7nv70pz/V+vhGNBhjal3jp512mi655BK/bevWrVPbtm01ceJEv+3f//73/R5v375d//znP/WDH/xAkvz6O27cOO3Zs0cfffSR3+8Eu8br8txzz+n73/++hg8frkmTJmn16tUaP3687rvvvpA+wtJY+/fv14wZM9StWzfFx8erRYsWSk9PlyRt27at1v41/a9x3XXXKT4+XuvWrav3dd544w1997vfVXJysu99dvvtt+vgwYPav3+/pJMf96mqqlJOTk7Q59m0aZMOHTqkqVOn+p2D6upqXXbZZSoqKqr1sTEA9kc+qY18Qj6xOp8cP35ckydPVklJiZ544glt2LBBv/nNb/TZZ5/p0ksvbfBLepqCfALAy/gSEDTZkSNHlJOTo//5n/9RWlqavvzyS0kn71kiSV9++aVatGih1q1ba/HixX43bk5PT9fOnTuDPve+ffskSVlZWXX+PPB+L61atVK7du3q3DclJcXvcUJCQr3b67u3TUPKyso0fPhw9e7dW7/85S/Vo0cPJSUlafPmzcrJydE333zj23fQoEEaPny48vLy9IMf/ECrVq3Szp079dhjj9X7GgcPHlTnzp1rhb1OnTopPj7ed6+cGsHumRNMy5YtdeWVV+rKK6/09Sk7O1t5eXn67//+b/Xp00f79u3T9u3bffdyCRQYeENtw759+/TnP/+5weedMmWKTpw4oSeeeEKTJk1SdXW1srKydPfdd+vSSy8Nsacn1Xwr7o4dO4LuU1FRoQMHDmjQoEF+2+vq18GDB5Wamlpre+fOnf0e11zj8+bN07x58+p83cYex2B++MMfatWqVdqyZYvvP1oiqbq6WmPGjNHu3bu1cOFC9evXT61bt1Z1dbUuvPBCv+u/RuBxiY+PV4cOHWpdx6favHmzxowZo5EjR+qJJ57w3Y8pPz9f99xzj+91agqd9X2TY815CPwP1lMdOnTI7z/SAdgb+aQ28slJ5BNr88lTTz2lv/71ryoqKvJ9qc7w4cN10UUX6ayzztLSpUt1xx13hPRc4SCfAPA6CoBosgMHDmjfvn166KGH9NBDD9X6+WmnnaYrrrhC+fn5uvnmmzV+/HjfzxITE+t97o4dO0qSXnrpJd/qXH3qW92Ppfz8fFVUVOjll1/2a3dJSUmd+8+aNUvXXnut/vGPf+iRRx7ROeec02BA7NChg955551aK7779+/XiRMnfMeuRlOPTffu3XXzzTdr9uzZ+vDDD9WnTx917NhRLVu21NNPP13n7zS2DR07dlT//v11zz331PnztLQ03/+/4YYbdMMNN6iiokIbNmzQHXfcofHjx+tf//pXSNdMjczMTJ122ml69dVXlZubW2dbX331VVVXV9c6N3Xt26FDB23evLnW9sCbbNcco/nz5+vqq6+us229e/du8PXCYf7/DagD/wM1Uj744AO9++67WrFihaZOnerbXt/N6/fu3asuXbr4Hp84cUIHDx5Uhw4dgv7OH/7wB7Vo0UKrVq3yu2F4fn6+336nn366JOnTTz9Vt27d6nyumvPw61//Oui3Ptb1H0wA7It8Uhv55CTyibX5pKSkRM2bN9d5553nt/3MM89Uhw4d9MEHH4T0POEinwDwOgqAaLLOnTvX+Wfw9913n9avX6+//vWvvskrLS3NLxw1ZOzYsYqPj9e///3vsD72aLWaAHTqf0AYY/TEE0/Uuf9VV12l7t2766c//anWr1+vhx9+uMEQNXr0aL3wwgvKz8/XVVdd5dv+7LPP+n7eGF999ZXi4uLUpk2bWj+r+WhEzTkcP3687r33XnXo0EE9e/Zs1OvVZfz48Vq9erXOOuuskD8W1Lp1a2VnZ+vYsWO68sor9eGHH4YVsBMSEvSzn/1M//u//6sHHnig1jft7d+/X/Pnz1dqaqpuuummBp9v1KhReuGFF/Tqq6/6fczm+eef99uvd+/e6tWrl959913de++9Ibe3KX7729+qRYsWyszMjMrz13X9S6r3r0aee+45v/a88MILOnHihEaOHFnv68THx6t58+a+bd98841++9vf+u03ZswYNW/eXMuXL9eQIUPqfK5hw4apffv2Ki0t9fsYGQDnIp/URj5pGvJJZKSlpamqqkpFRUW64IILfNv/9a9/6eDBg/X+RVxTkE8AeB0FQDRZUlJSnZPgihUr1Lx583onyIb06NFDixcv1oIFC/Sf//xHl112mU477TTt27dPmzdvVuvWrf0+smMXl156qRISEvS9731Pt956q44eParly5friy++qHP/5s2bKycnRz//+c/VunVr331y6nP99dcrLy9PU6dO1c6dO9WvXz/97W9/07333qtx48bpu9/9bqPa/tFHH2ns2LH6r//6L1188cU644wz9MUXX+gvf/mLHn/8cY0cOVJDhw6VJM2ePVt//OMfNWLECM2ZM0f9+/dXdXW1ysrKtGbNGv30pz/1C3ahWrx4sQoLCzV06FDNmjVLvXv31tGjR7Vz506tXr1ajz76qLp27aof/ehHatmypYYNG6YzzjhDe/fuVW5urpKTk/0+llVzr6L6Ps4lST//+c/17rvv+v538uTJSk5O1nvvvacHHnhAX331lVatWqXk5OQG+3D99dfr4Ycf1vXXX6977rlHvXr10urVq1VQUFBr38cee0zZ2dkaO3aspk2bpi5duujQoUPatm2b/vGPf/juvxSuBx54QKWlpRo9erS6du2q/fv366mnntKaNWt05513+v0FxM6dO9WzZ09NnTpVK1asaPC59+7dq5deeqnW9h49emjAgAE666yzdNttt8kYo5SUFP35z39WYWFh0Od7+eWXFR8fr0svvVQffvihFi5cqAEDBui6664L+juXX365lixZou9///u6+eabdfDgQT344IO1gn2PHj30v//7v7rrrrv0zTff6Hvf+56Sk5NVWlqqAwcOaNGiRWrTpo1+/etfa+rUqTp06JCuueYaderUSZ9//rneffddff7551q+fHmDxwWAfZBPaiOfkE/skE9uuOEGPfzww5o0aZL+7//+T71799Z//vMf3XvvvWrdurVmzJjh25d8Qj4BEEGWff0IXC8S37JXIz8/34waNcq0a9fOJCYmmvT0dHPNNdeYtWvXhvR6kkxOTo7fth07dhhJ5oEHHvDbvm7dOiPJvPjiiyG3u67X/vOf/2wGDBhgkpKSTJcuXczPfvYz89e//tVIMuvWrav1HDt37jSSzIwZM+p8jbq+YezgwYNmxowZ5owzzjDx8fEmPT3dzJ8/3xw9etRvv7r6H8wXX3xh7r77bnPJJZeYLl26mISEBNO6dWszcOBAc/fdd5uvv/7ab/8jR46Y//u//zO9e/c2CQkJJjk52fTr18/MmTPH7N27N6Q2KOBb9owx5vPPPzezZs0yPXv2NC1atDApKSkmMzPTLFiwwPdtib/5zW/MqFGjTGpqqklISDBpaWnmuuuuq/UNiR07djQXXnhhSP2vrq42zz33nBk5cqRp3769SUhIMD179jT//d//Xetb/4w5eV769OlT53N9+umnZtKkSaZNmzambdu2ZtKkSWbTpk21vmXPGGPeffddc91115lOnTqZFi1amM6dO5tLLrnE71v/gr0/gnn11VfNRRddZE4//XQTHx9v2rZta4YPH25+//vf19r3/fffN5LMbbfd1uDzpqen+31r36n/pk6daowxprS01Fx66aWmbdu25rTTTjPXXnutKSsrq3Wua75lr7i42EyYMMF3rL73ve+Zffv2+b1uXe+Bp59+2vTu3dskJiaaM8880+Tm5pqnnnrKSPL7lkpjjHn22WdNVlaWSUpKMm3atDGDBg2qdR7Wr19vLr/8cpOSkmJatGhhunTpYi6//PKwxgMA9kY+IZ+QT6zNJ8YY8/HHH5spU6aYHj16mMTERNO9e3czefJk3zcp1yCfnEQ+ARAJccb8/5tBAbDUr3/9a82aNUsffPCB+vTpY3VzXKO0tFR9+vTRqlWrdPnll1vdHNtatmyZbr31Vv373/+O6b1k7rzzTi1atEiff/55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4yorK9OMGTMsbHX4vNBPL/RR8kY/vdBHyRv99EIfJe/081Re7HMseeX4eqGfXuij5I1+eqGPEv10Uz+90Me6eLXfQKPF6uuGrbZu3Tojqda/qVOn+vbJy8sz6enpJiEhwZx33nlm/fr11jW4kbzQTy/00Rhv9NMLfTTGG/30Qh+N8U4/T+XFPseSV46vF/rphT4a441+eqGPxtBPN/XTC32si1f7DTRWnDHGhFosBAAAAAAAAOAs3AMQAAAAAAAAcDEKgAAAAAAAAICLUQAEAAAAAAAAXIwCIAAAAAAAAOBiFAABAAAAAAAAF6MACAAAAAAAALgYBUAAAAAAAADAxSgAAgAAAAAAAC5GARAALLBz507FxcWppKTE6qYAAABIIp8AgJtRAAQAAAAAAABcjAIggKiqqqpSdXW11c2wzLFjx6xuAgAACEA+IZ8AgNdQAAQ85qWXXlK/fv3UsmVLdejQQd/97ndVUVEhSaqurtbixYvVtWtXJSYmauDAgXrttdd8v/vmm28qLi5OX375pW9bSUmJ4uLitHPnTknSihUr1L59e61atUoZGRlKTEzUJ598osrKSt16663q1q2bEhMT1atXLz311FO+5yktLdW4cePUpk0bpaamasqUKTpw4EDQftx4443q37+/KisrJUnHjx9XZmamfvCDH9Tb/w8//FCXX3652rVrp7Zt22r48OH697//HVL/Jen999/XJZdc4jt+N998s44cOeL7+bRp03TllVcqNzdXaWlpOueccyRJmzdv1qBBg5SUlKTBgwdr69at9bYTAAAvIZ+QTwAA0UUBEPCQPXv26Hvf+55uvPFGbdu2TW+++aauvvpqGWMkSb/85S/10EMP6cEHH9R7772nsWPHauLEifr444/Dep2vv/5aubm5evLJJ/Xhhx+qU6dOuv766/WHP/xBv/rVr7Rt2zY9+uijatOmja9dF198sQYOHKgtW7botdde0759+3TdddcFfY1f/epXqqio0G233SZJWrhwoQ4cOKBly5YF/Z3PPvtMI0aMUFJSkt544w0VFxfrxhtv1IkTJ0Lq/9dff63LLrtMp512moqKivTiiy9q7dq1uuWWW/xe5/XXX9e2bdtUWFioVatWqaKiQuPHj1fv3r1VXFysO++8U/PmzQvrmAIA4FbkE/IJACAGDADPKC4uNpLMzp076/x5Wlqaueeee/y2ZWVlmZkzZxpjjFm3bp2RZL744gvfz7du3WokmR07dhhjjHnmmWeMJFNSUuLb56OPPjKSTGFhYZ2vu3DhQjNmzBi/bbt27TKSzEcffRS0P5s2bTItWrQwCxcuNPHx8Wb9+vVB9zXGmPnz55uePXuaY8eO1fnzhvr/+OOPm9NOO80cOXLE9/O//OUvplmzZmbv3r3GGGOmTp1qUlNTTWVlpW+fxx57zKSkpJiKigrftuXLlxtJZuvWrfW2GQAAtyOfkE8AANHHXwACHjJgwACNHj1a/fr107XXXqsnnnhCX3zxhSSpvLxcu3fv1rBhw/x+Z9iwYdq2bVtYr5OQkKD+/fv7HpeUlKh58+a6+OKL69y/uLhY69atU5s2bXz//l879w7SZhuGcfyOfnk1irZUM0QRRYLalBhxa0sEl5YOImodnNShzi0KHTpJ6VA6dHCVCp2qpQilVbTQIvWIg4fiKaDg4OYmIlSb6xs+fDGf0brUwuv/B4HkefKctis3eZ+qqiozM/fxl3Ru375tPT099vz5c+vu7ra6ujq378GDB+5ct27dcvcRj8fN7/efmusi519bW7NYLGa5ubkp/clk0jY2Nty2aDRqjuO4n4/H5eTkpOwdAACQT8gnAIDL8M/f3gCAy5OZmWlfvnyx6elpGx8ft76+Pnv27JnNzc1ZQUGBmZn5fL6UMZLctoyMDLft2OHh4al1AoFAyjyBQODcfSWTSWtoaLCXL1+e6guFQueOm5qasszMzFOPAfX399vBwYGZmRuof7cPs/PPf/L9eeNOBvDjcQAAID3yCfkEAPDn8Q9A4Irx+Xx29+5d6+3ttYWFBXMcx4aHhy0/P9+KiopscnIy5fvT09N28+ZNMzMLBoNm9t+dOMcWFxd/u2Y0GrVkMmkTExNp+2tra21lZcXKysosHA6nvP4fVk969eqVra2t2cTEhI2NjdnAwIDbV1xc7M5RWlpqZmbV1dX2/fv3tD8KLnL+SCRii4uL7qXkZmZTU1OWkZHhXqadTiQSsaWlJTfwm5nNzs6e+X0AAK4a8gn5BADwh/2tZ48BXL7Z2Vm9ePFC8/Pz2t7e1tDQkBzH0cjIiCTp9evXys/P17t377S+vq6nT5/K7/crkUhIkn7+/KmSkhK1trZqY2NDnz59UmVl5ak7dq5du3Zq7Y6ODpWUlGh4eFhbW1v69u2bBgcHJUk7OzsKBoN6+PCh5ubmtLm5qbGxMXV2duro6CjtWRYWFuQ4jj5+/ChJ6u/vV15enjY3N888/+7urgoKCtTc3Kz5+XklEgm9fftW6+vrFzr//v6+QqGQWlpa9OPHD339+lXl5eVqb29312hvb1djY2PKunt7eyosLFRbW5tWVlb0+fNnhcNh7tgBAEDkE/IJAOAyUAAErpDV1VXdv39fwWBQWVlZqqioUF9fn9v/69cv9fb2qri4WH6/X7FYTKOjoylzTE5OKhqNKjs7W/F4XO/fv79QwD44ONCTJ08UCoXkOI7C4bDevHnj9icSCTU1Nen69esKBAKqqqrS48ePlUwm084ViUTU1dWV0t7U1KQ7d+6cGcolaWlpSffu3VNOTo7y8vIUj8fdUH6R8y8vL6u+vl7Z2dm6ceOGHj16pL29Pbc/XcCWpJmZGcViMTmOo5qaGn348IGADQCAyCcS+QQA8Of5JC5/AAAAAAAAALyKOwABAAAAAAAAD6MACAAAAAAAAHgYBUAAAAAAAADAwygAAgAAAAAAAB5GARAAAAAAAADwMAqAAAAAAAAAgIdRAAQAAAAAAAA8jAIgAAAAAAAA4GEUAAEAAAAAAAAPowAIAAAAAAAAeBgFQAAAAAAAAMDDKAACAAAAAAAAHvYvMJH8Q5nZy5AAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -798,9 +810,9 @@ ], "source": [ "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", - "cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap1.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs1 = ax1.contourf(x_grid, y_grid,plot_me_lap1.T/plot_me_lap2.T < 1, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "\n", - "cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap2.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap1.T/plot_me_lap2.T < 1, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "\n", "fig.subplots_adjust(right=0.8)\n", "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", @@ -818,12 +830,47 @@ "ax2.set_xlabel(\"source x-coord\")\n", "ax2.set_ylabel(\"source y-coord\")\n", "\n", - "ax1.set_title('6-Term Taylor Series, Order 5, Laplace')\n", - "ax2.set_title('6-Term Taylor Series, Order 8, Laplace')\n", + "ax1.set_title('4-Term Taylor Series, Order 5, Laplace')\n", + "ax2.set_title('4-Term Taylor Series, Order 8, Laplace')\n", "\n", "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1.00000000e+00, 2.89514005e-06, 8.56354551e-11, 2.29844392e-15,\n", + " 6.16604120e-20, 1.65416130e-24, 4.43761157e-29, 1.19047619e-33],\n", + " [5.28523776e-01, 1.00000000e+00, 2.89514005e-06, 8.56354551e-11,\n", + " 2.29844392e-15, 6.16604120e-20, 1.65416130e-24, 4.43761157e-29],\n", + " [5.30293276e-01, 5.28523776e-01, 1.00000000e+00, 2.89514005e-06,\n", + " 8.56354551e-11, 2.29844392e-15, 6.16604120e-20, 1.65416130e-24],\n", + " [5.30475650e-01, 5.30293279e-01, 5.28523776e-01, 1.00000000e+00,\n", + " 2.89514005e-06, 8.56354551e-11, 2.29844392e-15, 6.16604120e-20],\n", + " [8.05901688e-01, 5.30353964e-01, 5.30293278e-01, 5.28523776e-01,\n", + " 1.00000000e+00, 2.89514005e-06, 8.56354551e-11, 2.29844392e-15],\n", + " [7.12387827e-01, 1.14390958e+00, 5.30265663e-01, 5.30293278e-01,\n", + " 5.28523776e-01, 1.00000000e+00, 2.89514005e-06, 8.56354551e-11],\n", + " [4.17490497e-01, 3.10768481e-01, 3.62945854e-01, 5.30267821e-01,\n", + " 5.30293275e-01, 5.28523776e-01, 1.00000000e+00, 2.89514005e-06],\n", + " [5.50502400e-01, 1.00000000e+00, 4.15177240e-01, 1.00000000e+00,\n", + " 5.30333992e-01, 5.30293280e-01, 5.28523776e-01, 1.00000000e+00]])" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_me_lap1.T/plot_me_lap2.T" + ] + }, { "cell_type": "code", "execution_count": null, From 12dfa17c2798c24cf7e21450a7bb15b313a7d95f Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Wed, 8 Jan 2025 13:36:07 -0800 Subject: [PATCH 138/143] Problematic error increasing as order increases --- test/order5.png | Bin 47215 -> 44702 bytes test/order6.png | Bin 47591 -> 45722 bytes test/plot_normal_recurrence.ipynb | 233 ++++++++++++++++++------------ test/plot_taylor_recurrence.ipynb | 46 +++--- 4 files changed, 160 insertions(+), 119 deletions(-) diff --git a/test/order5.png b/test/order5.png index cedbdcbdcc4634e0952dbbd1d6ae94c87ff893ad..8b8eaecc8d328366d5e3e56cabae01632839bfd4 100644 GIT binary patch literal 44702 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 literal 47215 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

?N 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 literal 47591 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 diff --git a/test/plot_normal_recurrence.ipynb b/test/plot_normal_recurrence.ipynb index 7da9577e..5460a228 100644 --- a/test/plot_normal_recurrence.ipynb +++ b/test/plot_normal_recurrence.ipynb @@ -95,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -117,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -132,7 +132,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -151,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -173,20 +173,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABN4AAALACAYAAABM/b/3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACtNElEQVR4nOzde3hU5b3//c9wSMIpaESC4RBQPMUIaIgWECW6RYOim4qlBxEUamnij0JqrdYqSNW4tWXT1kCl7kqpbaVaxdaiEI9QkRrQtNXYFlo0IIfIQUMCgoT7+cMnI8NkkpnJmln3WvN+XVeuy1mZrLknQfLmu2bNChhjjAAAAAAAAAA4qoPbCwAAAAAAAAD8iMEbAAAAAAAAkAAM3gAAAAAAAIAEYPAGAAAAAAAAJACDNwAAAAAAACABGLwBAAAAAAAACcDgDQAAAAAAAEgABm8AAAAAAABAAjB4AwAAAAAAABKAwZtDlixZokAgoPXr17f4+SuvvFIDBw6Ma99Tp06N+2sjGTNmjPLz8x3dZyAQ0Ny5c4O3a2pqNHfuXL333nuOPg68a+DAgZo6dWpcX3vfffdp+fLlYdtfeeUVBQIBvfLKK+1aWyr56U9/qsGDBystLU2BQEAfffSR20uKy5gxYzRmzBi3lxGzuXPnKhAIhH1kZGS4vTQA7dRWDyYKvwuRSMc2frT279+vuXPntvjnsvn/Ff6dEL3vf//7GjBggDp16qTjjjvO7eXErT3/HnDT1KlTW+y3M844w+2lwQM6ub0A+FdNTY3uvvtujRkzxvHBIVLPfffdp4kTJ+q///u/Q7afe+65ev3115WXl+fOwjymurpaM2fO1PTp0zVlyhR16tRJPXr0cHtZKen5559Xz549g7c7dOBYGADAP/bv36+7775bksIOlF1xxRV6/fXXddJJJ7mwMu955plndO+99+qOO+5QcXGx0tPT3V5SSurSpYteeumlsG1AWxi8wfP279+vrl27ur2MoE8//VSBQECdOoX/72XbWtvLhueTmZmpL3zhC66uIVbGGH3yySct/qI+cOCAMjIyFAgE4t5/az+Xd955R5L09a9/Xeedd17cjxHt47WHE9+LaLX2M0mUgoIC9erVK2mPBwA2saEhjtba7xzb1tpeBw4ccH1YcOKJJ+rEE090dQ2xampq0uHDh1scejnxZ6S1n8vbb78tSZo5c6Z69+7drsdplqg/18n8/6W1n0kidOjQwXP/7oAdOLzuImOMFi5cqGHDhqlLly46/vjjNXHiRP3nP/9p82sDgYBuvvlmPfroozr99NPVpUsXDR8+XOvWrZMxRg8++KAGDRqk7t276+KLL9amTZta3E9VVZVGjx6trl276uSTT9b999+vI0eOhNyntrZW1113nXr37q309HSdeeaZ+tGPfhR2v6MtWbJE1157rSSpqKgo+FLcJUuWBE+HaOmjrVfGTZ06Vd27d9ff//53jR07Vj169NAll1wiSTp06JDuuecenXHGGUpPT9eJJ56oG264QR9++GHYfn7zm99oxIgR6t69u7p3765hw4bp//7v/4Kfj/QS6GNPbWt+Lr/61a/07W9/W3379lV6ero2bdrkyFoHDhyoK6+8Us8//7zOPfdcdenSRWeccYZ+8YtfhK3tgw8+0E033aT+/fsrLS1NOTk5mjhxonbu3Bm8T319vW655RYNGjRIaWlp6tu3r2bNmqXGxsZWv+/Nzz0/P1+rV6/WyJEj1bVrV914443t2u8nn3yib3/72xo2bJh69uyprKwsjRgxQs8880zI/QKBgBobG/XLX/4y+Gel+edw7Ok1CxYsUCAQaPHP/He/+12lpaVp165dwW0vvPCCLrnkEmVmZqpr164aNWqUXnzxxTa/H7E87+b/X3/2s5/pzDPPVHp6un75y18GT7NYtWqVbrzxRp144onq2rWrDh48qCNHjuiBBx4I/hnp3bu3rr/+em3dujXqn8uxxowZo+uuu06SdP755ysQCIT8Of/FL36hoUOHKiMjQ1lZWZowYYLefffdkH209uc6kj//+c+65JJL1KNHD3Xt2lUjR47Un/70p5D7tPa9MMbogQceUG5urjIyMnTuuefqueeeS8jPBAASLdrffdLnf1c9/PDDOu2005Senq68vDw9/vjjbT7O+vXr9eUvf1kDBw5Uly5dNHDgQH3lK1/R+++/H3ZfLzTEkSNH9NOf/jTYzccdd5y+8IUv6A9/+EPI96ulUyKP7brWfuc4sdbmn9uvfvUrnXnmmeratauGDh2qZ599Nmxt//jHP/SVr3xF2dnZSk9P14ABA3T99dfr4MGDwfvs2LFD3/jGN9SvXz+lpaVp0KBBuvvuu3X48OE2v/fNLfnUU0/pnHPOUUZGRvBVaPHu98MPP1RJSYny8vLUvXt39e7dWxdffLHWrFkTvM97770XHKzdfffdwX5r/jkce6rprFmz1K1bN9XX14c93qRJk5Sdna1PP/00uG3ZsmUaMWKEunXrpu7du+uyyy7TW2+91eb3I9rn/d577ykQCOiBBx7QPffco0GDBik9PV0vv/xy8C0j3nzzTU2cOFHHH3+8TjnlFEmf/f99++23h/wZKS0tDXtbj9Z+LscaOHCgvv/970uSsrOzQ/6cJ6IXm/3hD3/QiBEj1LVrV/Xo0UOXXnqpXn/99ZD7tPa9+PTTT3XrrbeqT58+6tq1qy644AK98cYbCfmZANYzcMSjjz5qJJl169aZTz/9NOxj3LhxJjc3N+Rrvv71r5vOnTubb3/72+b55583v/nNb8wZZ5xhsrOzzY4dO4L3mzJlStjXSjK5ublm5MiR5qmnnjJPP/20Oe2000xWVpaZPXu2ufrqq82zzz5rfv3rX5vs7GwzZMgQc+TIkeDXX3TRReaEE04wp556qvnZz35mKisrTUlJiZFkfvnLXwbvV1dXZ/r27WtOPPFE87Of/cw8//zz5uabbzaSzDe/+c2wNc2ZMyf4dffdd5+RZCoqKszrr79uXn/9dVNXV2c+/vjj4O3mj6VLl5rOnTubcePGtfp9njJliuncubMZOHCgKS8vNy+++KJZuXKlaWpqMpdffrnp1q2bufvuu01lZaV55JFHTN++fU1eXp7Zv39/cB933nmnkWS++MUvmieeeMKsWrXKzJ8/39x5553B++Tm5popU6aEPf5FF11kLrroouDtl19+2Ugyffv2NRMnTjR/+MMfzLPPPmt2797tyFpzc3NNv379TF5enlm6dKlZuXKlufbaa40k8+qrrwbvt3XrVnPSSSeZXr16mfnz55sXXnjBLFu2zNx4443m3XffNcYY09jYaIYNGxZynx//+MemZ8+e5uKLLw7589GSiy66yGRlZZn+/fubn/70p+bll182r776akz7Pfb7+tFHH5mpU6eaX/3qV+all14yzz//vLnllltMhw4dQv4cvv7666ZLly5m3LhxwT8z77zzTsjP4OWXXzbGGPPhhx+atLQ0c8cdd4Ss//DhwyYnJ8d88YtfDG771a9+ZQKBgPnv//5v89RTT5k//vGP5sorrzQdO3Y0L7zwQqvfj1ied/OfkSFDhpjf/OY35qWXXjJvv/128O+Nvn37mptuusk899xz5sknnzSHDx82N910k5Fkbr75ZvP888+bn/3sZ+bEE080/fv3Nx9++GGbP5eWvPPOO+b73/++kWQeffRR8/rrr5tNmzYZY0zw/9evfOUr5k9/+pNZunSpOfnkk03Pnj3Nv/71r+A+Iv25juSVV14xnTt3NgUFBWbZsmVm+fLlZuzYsSYQCJjHH388eL/Wvhdz5swxksy0adPMc889ZxYvXmz69u1r+vTpE/L/oxM/k0iamppa/Lv92I/Dhw9H3Eez5ufTp08f06FDB9O7d28zefJk8/7777f5tQDs1vx3WVVVVcT7RPu7z5jP/q7q37+/ycvLM7/97W/NH/7wB3P55ZcbSeaJJ54I3u/Y34XGGPPEE0+Yu+66yzz99NPm1VdfNY8//ri56KKLzIknnhjye8QrDTF58mQTCATM9OnTzTPPPGOee+45c++995of//jHId+v5hY92rH90drvHCfWKskMHDjQnHfeeeZ3v/udWbFihRkzZozp1KmT+fe//x28X3V1tenevbsZOHCg+dnPfmZefPFF89hjj5kvfelLpr6+3hhjzPbt203//v1Nbm6uefjhh80LL7xgfvCDH5j09HQzderUVr/vzc/9pJNOMieffLL5xS9+YV5++WXzxhtvxLTfY7+v//jHP8w3v/lN8/jjj5tXXnnFPPvss2batGmmQ4cOwT+Dn3zyiXn++eeDv7+b+625O5p/Bps3bzbGGPPXv/7VSDI///nPQx577969Jj093ZSVlQW33XvvvSYQCJgbb7zRPPvss+app54yI0aMMN26dQv2YSTRPu/NmzcH/4wUFRWZJ5980qxatcps3rw5+Hs8NzfXfPe73zWVlZVm+fLl5siRI+ayyy4znTp1MnfeeadZtWqV+eEPf2i6detmzjnnHPPJJ5+0+XNpyZtvvmmmTZtmJJnnn3/evP7662bLli3GGJOQXjTGmF//+tdGkhk7dqxZvny5WbZsmSkoKDBpaWlmzZo1wftF+l4Y81kzBgIB853vfCf4762+ffuazMzMkP8fnfiZRHL48OGo+q2pqSniPppNmTLFdOjQwWRnZ5sOHTqYvn37mtLSUrN79+42vxZg8OaQ5l8erX0cPTx7/fXXjSTzox/9KGQ/W7ZsMV26dDG33nprcFukwVufPn1MQ0NDcNvy5cuNJDNs2LCQX/4LFiwwkszf/va34LaLLrrISDJ/+ctfQvabl5dnLrvssuDt2267rcX7ffOb3zSBQMD885//DFnT0b+Un3jiibAIbMnOnTvNySefbM466yyzd+/eVu87ZcoUI8n84he/CNn+29/+1kgyv//970O2V1VVGUlm4cKFxhhj/vOf/5iOHTuar33ta60+TqyDtwsvvNDxtTavIyMjI+Qf5AcOHDBZWVnmG9/4RnDbjTfeaDp37mxqamoiPqfy8nLToUOHsH8MPPnkk0aSWbFiRcSvbX7uksyLL74Y934jfV+bNf9ynDZtmjnnnHNCPtetW7cWv7alf2x88YtfNP369Qv5JbpixQojyfzxj380xnz2j4isrCwzfvz4kP01NTWZoUOHmvPOOy/iOmN93pJMz549zZ49e0Lu2/z3xvXXXx+y/d133zWSTElJScj2v/zlL0aS+d73vhfcFunnEklL/yjcu3dvcLB5tNraWpOenm6++tWvBrdF+nMdyRe+8AXTu3dvs2/fvuC2w4cPm/z8fNOvX7/g31WRvhd79+41GRkZZsKECSHbX3vtNSMp5P9HJ34mkTQ/77Y+jl5PJEuXLjX33nuvWbFihXnppZfM/fffb7Kyskx2drbZunVrVOsBYKdoBm/Hau13nyTTpUuXkAOyhw8fNmeccYYZPHhwcFtLvwtbepyGhgbTrVu3kGGVFxpi9erVRlLYQbVjxTp4O/Z3jhNrbV5HdnZ2cHhmjDE7duwwHTp0MOXl5cFtF198sTnuuONMXV1dxOf0jW98w3Tv3j3s4MwPf/hDI6nNQVNubq7p2LFjSLPHut9I39dmzX+GL7nkkpDf1x9++GHErz128GaMMeeee64ZOXJkyP0WLlxoJJm///3vxpjP2qRTp07m//2//xdyv3379pk+ffqYL33pSxHXGcvzbh7ynHLKKebQoUMh920eNt11110h25sHjQ888EDI9mXLlhlJZvHixcFtkX4ukTQ/5tHDtET1YlNTk8nJyTFnn312SEvv27fP9O7dO+RnFOl70by22bNnh2xvHugd/f+jEz+TSJqfd1sfrf37pNn8+fPN/PnzzapVq8yqVavMHXfcYbp27WrOOOOMkM4FWsKppg5bunSpqqqqwj4uuOCCkPs9++yzCgQCuu6663T48OHgR58+fTR06NCorkpVVFSkbt26BW+feeaZkqTi4uKQ96do3n7sqQV9+vQJe4+nIUOGhNzvpZdeUl5eXtj9pk6dKmNM2JtLxqqxsVFXXHGFPvnkEz333HNRX6HnmmuuCbn97LPP6rjjjtP48eNDvp/Dhg1Tnz59gt/PyspKNTU1qbS0tF3rbms9Tqy12bBhwzRgwIDg7YyMDJ122mkhP6fnnntORUVFwZ91S5599lnl5+dr2LBhIY972WWXRX0ltOOPP14XX3yxo/t94oknNGrUKHXv3l2dOnVS586d9X//939hpzjG4oYbbtDWrVv1wgsvBLc9+uij6tOnj4qLiyVJa9eu1Z49ezRlypSQdR85ckSXX365qqqqWj19JtbnffHFF+v4449vcV/H/hlpfsn8sac7n3feeTrzzDPDToVt6ecSi9dff10HDhwIe7z+/fvr4osvbvHU29b+zDdrbGzUX/7yF02cOFHdu3cPbu/YsaMmT56srVu36p///Ger+3399df1ySef6Gtf+1rI9pEjRyo3Nzdkm5M/k2PNnTu3xb/bj/14+OGH29zX5MmT9b3vfU/FxcUqKirSd7/7XT333HP68MMP9cADD0S1HgDeFsvvvksuuUTZ2dnB2x07dtSkSZO0adOmsNPJjtbQ0KDvfve7Gjx4sDp16qROnTqpe/fuamxsDHkcLzRE89sLJKvfnOidoqKikIsXZWdnq3fv3sF+279/v1599VV96UtfavW9zp599lkVFRUpJycn5HGbe+bVV19t83kOGTJEp512mqP7/dnPfqZzzz1XGRkZwT/DL774Yrv7be3atSFt8Oijj6qwsFD5+fmSpJUrV+rw4cO6/vrrQ9adkZGhiy66qM0/i7E+76uuukqdO3ducV/H/vlp/nfRsT117bXXqlu3bmE91dLPJRaJ6sV//vOf2rZtmyZPnhxy4afu3bvrmmuu0bp167R///6Qr4nUssf225e+9KWw98F28mdyrIcffjiqfovmqr2zZ8/W7Nmzdemll+rSSy/VPffco6VLl+of//iHfv7zn0e1HqQuLq7gsDPPPFPDhw8P296zZ09t2bIleHvnzp0yxoSE1NFOPvnkNh8rKysr5HZaWlqr2z/55JOQ7SeccELYPtPT03XgwIHg7d27d7f4vms5OTnBz8fr8OHDmjhxov71r39p9erV6t+/f1Rf17VrV2VmZoZs27lzpz766KPgcz1W83t6Nb+HWr9+/eJed0siXZGpPWttFs3P6cMPP2zzOe3cuVObNm2K+Ivq2MdtSUvPsz37feqpp/SlL31J1157rb7zne+oT58+6tSpkxYtWtTi+9hFq7i4WCeddJIeffRRjR07Vnv37tUf/vAHfetb31LHjh2D65akiRMnRtzPnj17QobbR4v1ebd21a5jP9f8/1VLX5OTkxM2RG/vFcHaerzKysqQbS39uW7J3r17ZYyJuN+jH7tZpO9Fnz59wvZx7DYnfybHGjBgQFR/b8R7IYjzzjtPp512mtatWxfX1wPwjlh/97X299/u3bsj/t301a9+VS+++KLuvPNOFRYWKjMzU4FAQOPGjfNcQ3z44Yfq2LFji9+L9oj0e8CJ3mmr3/bu3aumpqaovvd//OMfE/K9j3e/8+fP17e//W3NmDFDP/jBD9SrVy917NhRd955Z7sGb1/72td0yy23aMmSJSovL1dNTY2qqqq0cOHCkHVLUmFhYYv7aOsK4bE+71j7rVOnTmGD1EAgoD59+rTZPLFKVC+2td8jR45o7969IRdQiLbfOnXqFPb/hpM/k2MNHjxYxpg27xfvleUnTJigbt260W9oE4M3l/Tq1UuBQEBr1qxp8Sostlwi+oQTTtD27dvDtm/btk2S2nVFvptuukkvvviiVqxYoaFDh0b9dS39w7ZXr1464YQT9Pzzz7f4Nc1HHJt/EW7durXVQV9GRkbIm9o227VrV4vPOdI/ttuz1liceOKJrR71bn7cLl26RBxoRfOzjPR84t3vY489pkGDBmnZsmUh+27pex+L5ldU/eQnP9FHH32k3/zmNzp48KBuuOGGsHX99Kc/jXh1okiD8eavj+V5tzaQOfZzzUGyffv2sCDftm1bTPuOxtGPd6z2PN7xxx+vDh06xPR3SKTvxY4dO8L2sWPHjpADA07+TI514403RnXxhWiOtkdijIk7/AB4R6y/+yL9/Se1PNyRpI8//ljPPvus5syZo9tuuy3kMfbs2RNyXy80xIknnqimpibt2LGj1X90p6ent/h9jHSgONZ+a+/34GhZWVnq2LFjVN/7IUOG6N57723x880HsloT6fnEu9/HHntMY8aM0aJFi0K279u3r821tOb444/X1VdfraVLl+qee+7Ro48+qoyMDH3lK18JWbckPfnkk2GvfI9GrM871n47fPiwPvzww5DhmzFGO3bsCBsWOtlvTvZiW13YoUOHsDMGWuu3vn37BrcfPnw47P9HJ38mx7rkkkuielXolClTtGTJkqj3ezT6DdFg8OaSK6+8Uvfff78++OADfelLX3J7ORFdcsklKi8v15tvvqlzzz03uH3p0qUKBAIqKiqK+LXNw8Ojj6o2+/73v69HH31Uv/zlL/Vf//Vf7V7nlVdeqccff1xNTU06//zzI95v7Nix6tixoxYtWqQRI0ZEvN/AgQP1t7/9LWTbv/71L/3zn/9s17AxlrXGori4WL/61a/0z3/+U6effnrEx73vvvt0wgknaNCgQY48bnv3GwgElJaWFvILdMeOHS1e2e3YV/m15YYbbtADDzyg3/72t1qyZIlGjBihM844I/j5UaNG6bjjjlNNTY1uvvnmmNYtJe77KSl4GsBjjz0WEmlVVVV69913dccddzj6eCNGjFCXLl302GOPBa9GLH02oH7ppZdafVVga7p166bzzz9fTz31lH74wx+qS5cukj67Atdjjz2mfv36tXmKxRe+8AVlZGTo17/+dchpDGvXrtX7778fMnhL5M9k7ty5Uf05iWdwLknr1q3Txo0bNXPmzLi+HoB3xPK7T5JefPFF7dy5M3gwqKmpScuWLdMpp5wS8dVSgUBAxpiwA7mPPPKImpqaQrZ5oSGKi4tVXl6uRYsWad68eRHv11K/vfTSS2poaEjaWqPVpUsXXXTRRXriiSd07733RuzLK6+8UitWrNApp5wS9dsjRKM9+w0EAmF/tv72t7/p9ddfDzmw3dq/BSK54YYb9Lvf/U4rVqzQY489pgkTJoS8Fc1ll12mTp066d///ndUb3txrER9P6XP/t30wAMP6LHHHtPs2bOD23//+9+rsbGxzavAxypRvXj66aerb9+++s1vfqNbbrkl+HdVY2Ojfv/73wevdNqaMWPGSJJ+/etfq6CgILj9d7/7XdhVcxP5M3n44YejGgjH+++7J598Uvv37494EB9oxuDNJaNGjdJNN92kG264QevXr9eFF16obt26afv27frzn/+ss88+W9/85jfdXqZmz56tpUuX6oorrtC8efOUm5urP/3pT1q4cKG++c1vtvqP5ub3Yli8eLF69OihjIwMDRo0SC+99JLuvfdeTZw4MezUqvT0dJ1zzjkxr/PLX/6yfv3rX2vcuHH61re+pfPOO0+dO3fW1q1b9fLLL+vqq6/WhAkTNHDgQH3ve9/TD37wAx04cEBf+cpX1LNnT9XU1GjXrl3By3hPnjxZ1113nUpKSnTNNdfo/fff1wMPPNDqe3A4vdZYzJs3T88995wuvPBCfe9739PZZ5+tjz76SM8//7zKysp0xhlnaNasWfr973+vCy+8ULNnz9aQIUN05MgR1dbWatWqVfr2t78d1yCwPfttvox6SUmJJk6cqC1btugHP/iBTjrpJG3cuDHkvmeffbZeeeUV/fGPf9RJJ52kHj16RPwHgiSdccYZGjFihMrLy7VlyxYtXrw45PPdu3fXT3/6U02ZMkV79uzRxIkT1bt3b3344Yf661//qg8//DDsSK5Tz7stp59+um666Sb99Kc/VYcOHVRcXKz33ntPd955p/r37x8Sc0447rjjdOedd+p73/uerr/+en3lK1/R7t27dffddysjI0Nz5syJe9/l5eW69NJLVVRUpFtuuUVpaWlauHCh3n77bf32t79t86jl8ccfr1tuuUX33HOPpk+frmuvvVZbtmzR3Llzw05fSOTPZODAgS2edh+PoUOH6rrrrtOZZ56pjIwMvfHGG3rwwQfVp08f3XrrrY48BgB3vfTSS3rvvffCto8bNy6m333SZ/8gvPjii3XnnXeqW7duWrhwof7xj3/o8ccfj/j4mZmZuvDCC/Xggw+qV69eGjhwoF599VX93//9X9j76XqhIUaPHq3Jkyfrnnvu0c6dO3XllVcqPT1db731lrp27ar/9//+n6TP+u3OO+/UXXfdpYsuukg1NTV66KGH1LNnz5jXFu9aYzF//nxdcMEFOv/883Xbbbdp8ODB2rlzp/7whz/o4YcfVo8ePTRv3jxVVlZq5MiRmjlzpk4//XR98skneu+997RixQr97Gc/i+stVNqz3yuvvFI/+MEPNGfOHF100UX65z//qXnz5mnQoEEhQ5UePXooNzdXzzzzjC655BJlZWUF/zxGMnbsWPXr108lJSXasWNHyNkK0me/j+fNm6c77rhD//nPf3T55Zfr+OOP186dO/XGG2+oW7duwZ53+nm35dJLL9Vll12m7373u6qvr9eoUaP0t7/9TXPmzNE555yjyZMnx7XfSBLVix06dNADDzygr33ta7ryyiv1jW98QwcPHtSDDz6ojz76SPfff3+b+zjzzDN13XXXacGCBercubP+67/+S2+//bZ++MMfhr1dSSJ/Jq39WyEW77//vr761a/qy1/+sgYPHqxAIKBXX31VCxYs0FlnnaXp06c78jjwMfeu6+AvbV3F6oorrgi7MqkxxvziF78w559/vunWrZvp0qWLOeWUU8z1119v1q9fH7xPpKualpaWhmxrvtLLgw8+GLK9+UpXR192/qKLLjJnnXVW2Hpaeqz333/ffPWrXzUnnHCC6dy5szn99NPNgw8+GHbZZbVw1aIFCxaYQYMGmY4dOxpJ5tFHHw1e/aalj5a+R8eur1u3bi1+7tNPPzU//OEPzdChQ01GRobp3r27OeOMM8w3vvENs3HjxpD7Ll261BQWFgbvd84555hHH300+PkjR46YBx54wJx88skmIyPDDB8+3Lz00ksRr2p69PfWybXm5uaaK664Iuzrj12HMZ9dEffGG280ffr0MZ07dzY5OTnmS1/6ktm5c2fwPg0NDeb73/++Of30001aWprp2bOnOfvss83s2bNDrpjWkkh/ZmLZb0tXNb3//vvNwIEDTXp6ujnzzDPNz3/+8+CfkaNVV1ebUaNGma5du4ZcPbK1K7ktXrw4eEW4jz/+uMW1v/rqq+aKK64wWVlZpnPnzqZv377miiuuaPFnGu/zbun/V2Na/3ujqanJ/M///I857bTTTOfOnU2vXr3MddddF7x8fLPWfi4tae0xH3nkETNkyJDgc7n66qvDrpbW2p/rSNasWWMuvvji4N9zX/jCF4JXl41mXUeOHDHl5eWmf//+Ji0tzQwZMsT88Y9/bPH/g/b+TJLhy1/+shk8eLDp1q2b6dy5s8nNzTUzZsww27Ztc2U9AJzT1lXum6/gGO3vvua/qxYuXGhOOeUU07lzZ3PGGWeYX//61yH3a+l34datW80111xjjj/+eNOjRw9z+eWXm7fffrvF38VeaIimpibzv//7vyY/Pz94vxEjRoT8Pjl48KC59dZbTf/+/U2XLl3MRRddZKqrqyNe1bSl3zlOrDXS75iWvvc1NTXm2muvNSeccIJJS0szAwYMMFOnTjWffPJJ8D4ffvihmTlzphk0aJDp3LmzycrKMgUFBeaOO+4wDQ0NLa716MdsqSVj2e+xjX/w4EFzyy23mL59+5qMjAxz7rnnmuXLl7f474gXXnjBnHPOOSY9PT3k6pEtXdW02fe+9z0jyfTv3z/s3xvNli9fboqKikxmZqZJT083ubm5ZuLEieaFF15o9fsR7fOO9O8qY1q+wmizAwcOmO9+97smNzfXdO7c2Zx00knmm9/8ptm7d2/I/Vr7ubQk0mMmqheN+ex7fP7555uMjAzTrVs3c8kll5jXXnstqnUZ89mfk29/+9umd+/eJiMjw3zhC18wr7/+eov/H7T3Z5Joe/bsMRMmTDADBw40Xbp0MWlpaebUU081t956q/noo4+Svh54T8CYKN5tEAAAAEBSBQIBlZaW6qGHHnJ7KQAAIE68CyAAAAAAAACQACkxeHv22Wd1+umn69RTT9Ujjzzi9nIAAICF6AVv4ucGAACi4VYz+P5U08OHDysvL08vv/yyMjMzde655+ovf/mLsrKy3F4aAACwBL3gTfzcAABANNxsBt+/4u2NN97QWWedpb59+6pHjx4aN26cVq5c6fayAACARegFb+LnBgAAouFmM1g/eFu9erXGjx+vnJwcBQIBLV++POw+Cxcu1KBBg5SRkaGCggKtWbMm+Llt27apb9++wdv9+vXTBx98kIylAwCAJKEXvImfGwAAiIaXm8H6wVtjY6OGDh0a8WpOy5Yt06xZs3THHXforbfe0ujRo1VcXKza2lpJUktn0gYCgYSuGQAAJBe94E383AAAQDS83AydkvIo7VBcXKzi4uKIn58/f76mTZum6dOnS5IWLFiglStXatGiRSovL1ffvn1Dpphbt27V+eefH3F/Bw8e1MGDB4O3jxw5oj179uiEE04g5AAAVjDGaN++fcrJyVGHDok9hvbJJ5/o0KFDCX2MSIwxYb9709PTlZ6eHnbfZPcCnEHnAQAQis4L7zzJ461nPESSefrpp4O3Dx48aDp27GieeuqpkPvNnDnTXHjhhcYYYz799FMzePBgs3XrVlNfX28GDx5sdu3aFfEx5syZYyTxwQcffPDBh/UfW7ZsScjv22YHDhwwfbL7uPb8unfvHrZtzpw5ba5bSnwvwHnJ+LnReXzwwQcffHjlg86LTPJW61n/irfW7Nq1S01NTcrOzg7Znp2drR07dkiSOnXqpB/96EcqKirSkSNHdOutt+qEE06IuM/bb79dZWVlwdsff/yxBgwYoE3vbFKPHj0S80QQt90fH5AkfbB7v8srQVv+/dEnqtnb6PYy0IaqDxtUs22f28tAKxo+/EDm00905He3J/z30qFDh7Rj5w5tfGejMntkJvSxjlW/r16nnnWqtmzZoszMzx870lHQ1iSiF5B4dB7oPLv9+6NPQm7Tefaq+rAh+N90np0aPvz8lVh0Xuxsbz1PD96aHfvyRHPMSxavuuoqXXXVVVHtK9JLG3v06BHyBwLu2/XRAfXo0VmS1O1gR5dXg9Zs3HtA/z4YUHrX7m4vBa1YV7dP7+5uUiC9q9tLQQQNdVsVSOsSvJ2sU+Mye2S69jswM9O5x3ayF5A8dF5qovPstnHvAXXp9nnXvb2nkc6z1Lq6ferUpZsk6e9b6+k8Cx3bd83ovNjZ2nqeHrz16tVLHTt2DE4wm9XV1YVNOuEfuz46EHJ7yy6Ortls494Dbd8JrltXt09/31rv9jLQioa6rW4vwbPoBW/i55a6jm49Os8udJ23rKv7/NVtdJ59aDvn2N4M1l/VtDVpaWkqKChQZWVlyPbKykqNHDmyXfuuqKhQXl6eCgsL27UfOIuhm7c0x9nbe/g52ezoKIOdCLP2SWQvIHHovNTE0M1OG/ceiDh0o/PsRN/ZjbZzlu2tZ/0r3hoaGrRp06bg7c2bN6u6ulpZWVkaMGCAysrKNHnyZA0fPlwjRozQ4sWLVVtbqxkzZrTrcUtLS1VaWqr6+nr17NmzvU8DDjh26Aa7MXTzhuYo4yiovQiz6LjVC2gfOg9Ho/Xs1Nqr3Og8+7Q0cKPz7EHXxc/LrWf94G39+vUqKioK3m5+Q9wpU6ZoyZIlmjRpknbv3q158+Zp+/btys/P14oVK5Sbm+vWkpEALYUYR0HtxWkI3sDQzX7EWfToBW/i54ZmnNVgH3rOexi62Y2uax8vN0Pg/78UKyJoPhK6s3Ynb7rrgkhHPokxex0daRwFtRfv+WG/1uLMHDqgpl/P1scff5zQ301u/g6sr69X9oDshD9HpDY6zw4M3ewTzdCNzrNLpFNL6Tw7xDJ0o/P8x/pXvLmloqJCFRUVampqcnspKYuhm/cwdPMGhm7244gokFh0nh04tdQ+0b7Kjc6zC0M3e9F0kDx+cYVEKi0tVU1NjaqqqtxeSkoixLyNGLMXQzf7EWhA4tF57uMAq30YunnPurp9DN0sRtOhGa94g1XaGrgRY/bifUDsx9DNfgQagFTA0M0uNJw3tXbVUjrPXfQcjsXgDdZg6OZdnGIKtB+RBiAVMHSzRzwDNzrPDq0N3eAueg4t4VTTCCoqKpSXl6fCwkK3l5ISOLXUuxi6eQOvdrMbkQYkF53nDnrPHgzdvKutoRud546Guq30HCJi8BYB7/2RHLs+OhBVhHEU1E6cmuANDN3sRqQByUfnJV9rvUfnJc/GvQfoN49q7f3cmtF57qDl0BYGb3BNtEc9iTE7HRttHAW1E6ci2I1QA5AKGLrZoT0DNzrPXfScvWg5RIP3eIMrONXA2xi6ecOxkcZRULsQagBSAc3nvva+wo3Oc1e0Qzc6L7noOMSCV7wh6WIJMI6C2ofTE7yBoZvdiDUAqYALZ7mPoZu3MXSzEx2HWPGKtwgqKipUUVGhpqYmt5fiG7Ee8STG7NNSvBFk9uF0BLsRa4D76LzE4v173ceBUm+j5exEwyFevOItAt5011kM3byPoZs3tBRqHAW1B8EG2IHOSxxOLXWfU0M3Os8dsQ7d6LzkoOHQHrziDQlHgHkfR029gaGb3Qg2AH7HhbPc5WSvMXRzB0M3+9BvcAKDNyRMvAM3YswukSKOILMLpyTYjWgD4HcM3dzDAVJ/oOXsQ7/BKQzekBAM3fyBoZs3RAo1joLagWgD4Hec3eCeRAzd6LzkinfgRuclFv0GJzF4g+OIL3/g6Kk3MHSzG9EGwO+4Wr07EtVpDN2Si6GbfWg3JAIXV4igoqJCeXl5KiwsdHspnrHrowPtGroRY/ZoLeYIMnswdLMb4QbYi85zBkM3d3Bw1B8YutmHdkOiMHiLgKtdxaa9r3IjxuzB0M0beB8QuxFugN3ovPZj6JZ8G/ceSOjQjc5LHjrOLg11W2k3JBSnmqLdOLXUPxi6eUNrscZRUHcRbQD8ju5zR6Jf5UbnJUd7B250nvNoNyQDgze0ixPxxVFQO3DagvcRY+4i3AD4XTzdR+e1TzL6jKFbcjB0swvdhmRi8Ia4OHW0kxizQ1tRR5DZg1MT7ES8AfA7hm7Jx0FR/6Df7EK3IdkYvCFmnGKQWhi62YNTTO1EvAHwO9ovuZI5cKPzEs+JoRud5xy6DW5g8IaYOBleHAW1A0dTvYGhm52INwB+F2/70XmxS3aTMXRLLKde5UbnOYNmg5sYvCEqTh/pJMbswCmm3sDpCXYi4AD4HUO35OFAqL/Qbnah2eA2Bm8RVFRUqKKiQk1NTW4vxXUM3fyJoZs3tBVuHAV1BwEHeBud1zZOL00OtwZudF7iODl0o/Pah16DLTq4vQBblZaWqqamRlVVVW4vxVVElz9xVNUbGLrZiYgDvI/Oa117+o8DrNFj6OY/DN3sQa/BJrziDS1K1MCNGHNfNJFHkLmPUxTsRMQB8LP29h+dFx0OgPoP3WYPWg024hVvCMPQzb8YunlDNPHGUdDkI+QA+BlnOSSH20M3Os95iRi60XnxodVgK17xhhBEl3+5HXqIDkM3OxFyAPzMif7jAGvrbOgwhm7OY+hmD1oNNmPwhqBEDt2IMXdFG3sEmbs4TcFOhBwAP2PolngM3fyJoZsd6DR4AYM3JPxVbsSYuxi6eUO08UaQJRcxB8DPGLollg0DNziPA6X2oNPgFQzeUhynlvobQzdvYOhmJ2IOgJ/RgIlj28CNznNOIodudF70aDR4DRdXSGHJCC6OgrrHtuhDyxi62YmgA+BnTjUgnRfOtv5i6OYchm52oNHgRbziLYKKigpVVFSoqanJ7aU4LllHOIkx98QSfQSZezhVwU4EHeB/fu68tjB0SwzbBm5wFs3mPvoMXsYr3iIoLS1VTU2Nqqqq3F6Koxi6+R9DN//hKGjyEHVAavBr57WF00sTw9ahG53Xfuvq9iV86EbntY0+g9fxircUQmz5n63hh3CcYmofog6AXzndgBxg/YzN3cXQrf2S8So3Oq91tBn8gsFbCkj2wI0Yc0es8UeQuYfTFexD2AHwK4ZuicHQzd9oNffRZvATBm8+x9AtNTB0845YQo6joMlB2AHwK852cJ7NAzc4I1lDNzovMtoMfsPgzceIrdRAAHoHQzf7EHYA/CoRHZjqB1i90FwcXI1fMl/lRue1jC6DXzF48yk3hm6pHmNuiCcACTJ3cMqCfYg7AH7F0M1ZXhi4STReezB0cx9dBj9j8OYzbr3KLZVjzEsIMnfEGnMEWeIRdwD8ijMenOOVgRvah4Oj7qLJkAo6uL0AOIfQSi3EoDcwdLMPgQfArxLVgql4gNVrncXB1fgke+hG54WiyZAqeMWbT7g5dEvFGHMbp5h6A0dQ7UPgAfArhm7O8NrATaLx4uFGozF0+xw9hlTD4M3j3H6VW6rFmA0YunlDPEFHkCUWkQfAjxLZgqnWeV4cuiF2HBh1Fz2GVMTgzcPcHroh+QhCb2DoZh8iD4Af0YLO8HJfcXA1Nm4N3ei8z9BjSFUM3jzKhtBKtaOgbos3Cgmy5OIoqn2IPAB+lOgWTJXOY+iWOhi6uYcWQ6pj8OYxNgzcpNSJMVswdPOGeIOOIEscQg+AHzF0az8vD9wkGi8WHBR1Fy0GMHiLqKKiQhUVFWpqanJ7KUEM3VITQzdvYOhmH0IPQCQ2dl60bOlBr/L6wA2xcXvolsqdR4cBn+vg9gJsVVpaqpqaGlVVVbm9FElEVqoiDr2BoZt9iD0ArbGt86KVjB708wFWv3QVB1ejw9DNPXQYEIpXvHmATUM3P8eYbdoThwQZUhmxB8CPGLrFzy8DN4nGi5bbQ7dURYMBLWPwZjGbBm6Sf2PMRgzdvINXu9mF4APgR7Y1oZf4aeiGttkycEvFzqPBgMgYvFmKwEpdBKJ3MHSzC8EHwI+S1YR+O8Dqx57i4GrrGLq5hwYDWsfgzUI2Dt38FmO2am8kEmTJY0vc4TMEHwC/SWYP+q3zGLqlHlu6LNWGbvQXEB0GbxaxceAm+S/GbMXQzTvaE3epFmTJQPQB8Btbm9B2fhy4oW22DN1SDf0FRI/BmyUIrNRGKHoHQze7EH0A/CbZTeiXA6x+bikOrrbMtoFbqnQe7QXEjsGbBWweuvklxmzmRCgSZMlhW+ClMqIPgB8xdIudnwduEo0XiW1NxtANQGs6uL2AVLbrowMM3VIcQzfvaG/gpUqQJQPRBzds2bJFY8aMUV5enoYMGaInnnjC7SXBZxi6xWbj3gMM3VKUbUO3VNBQt5X+gu8lsvV4xZtLbB64Sd6PMS/weyz6CUM3exB9cEunTp20YMECDRs2THV1dTr33HM1btw4devWze2lwQds70Lb0FCpy8ahm987j/ZCqkhk6zF4cwFxBaeCkSOhiWdj4KUqwg9uOumkk3TSSSdJknr37q2srCzt2bOHwRvazY0u9OoB1lQauNF4oWztMYZugH8ksvU41TTJvDB082qMpRqCLPGciDy/B1myEH5oy+rVqzV+/Hjl5OQoEAho+fLlYfdZuHChBg0apIyMDBUUFGjNmjVxPdb69et15MgR9e/fv52rRqpj6BY9hm6py9ahm59xails5OXW4xVvSeKFgZvk3RjzEt7XzRsYutmD8EM0GhsbNXToUN1www265pprwj6/bNkyzZo1SwsXLtSoUaP08MMPq7i4WDU1NRowYIAkqaCgQAcPHgz72lWrViknJ0eStHv3bl1//fV65JFHEvuE4Gte6ULAbTYP3fzaeXQXbOXl1mPwlgTEFZql0tFaL2PoZg/iD/X1of8vpaenKz09Pex+xcXFKi4ujrif+fPna9q0aZo+fbokacGCBVq5cqUWLVqk8vJySdKGDRtaXcvBgwc1YcIE3X777Ro5cmSsTwWQ5G4XcoDVfhxc/RxDt+SiueCGaDtP8nbrMXhLMC8N3YixxOJ93bzB5shLNQSgPXZ/fECHjnRO6mPu2/fZ35nHvsR/zpw5mjt3bkz7OnTokDZs2KDbbrstZPvYsWO1du3aqPZhjNHUqVN18cUXa/LkyTE9PtCMoRtaQ+N9hhZLPportXm98yT7W4/BW4J4aeAmEWOJxtDNG5wKPT8eBU02AhDNtmzZoszMzODtSEdBW7Nr1y41NTUpOzs7ZHt2drZ27NgR1T5ee+01LVu2TEOGDAm+p8ivfvUrnX322TGvB6nJa20IuMELQzc/dR69Bbc50XmS/a2XEoO3CRMm6JVXXtEll1yiJ598MuGPR1jhaJxe6g0M3exBBOJomZmZIUHWHoFAIOS2MSZsWyQXXHCBjhw54sg64Kxkd1483G5DDrDaj4OrDN2Sjd6CDZzsPMne1kuJq5rOnDlTS5cuTcpjuR1W8SDGEsfJoRtBhlRABCIRevXqpY4dO4Yd8ayrqws7MgrvSWbnxcPtNqTz7EfjMXRLNnoLfmN766XE4K2oqEg9evRI6GPs+uiA62EVD2IscRi6eQevdrMDEYhESUtLU0FBgSorK0O2V1ZWcpEEH0hG58XLi22I5Er1xltXt88TQzc/obfgR7a3nuuDt9WrV2v8+PHKyclRIBAInkt7tIULF2rQoEHKyMhQQUGB1qxZk/yFtoKowrE4vdQ7GLrZgQhEezU0NKi6ulrV1dWSpM2bN6u6ulq1tbWSpLKyMj3yyCP6xS9+oXfffVezZ89WbW2tZsyY4eKq/c8PnRcvG/qQA6ywmZcGbnQe4D4vt57r7/HW2NiooUOH6oYbbtA111wT9vlly5Zp1qxZWrhwoUaNGqWHH35YxcXFqqmp0YABAyRJBQUFOnjwYNjXrlq1Sjk5OQldvw1RFS9iLDGcHrql+pHQRPJS8PkZQzc4Yf369SoqKgreLisrkyRNmTJFS5Ys0aRJk7R7927NmzdP27dvV35+vlasWKHc3Fy3lpwSvN558bKhD+k8+6Vy43mpwRi6AXbwcuu5PngrLi5WcXFxxM/Pnz9f06ZN0/Tp0yVJCxYs0MqVK7Vo0SKVl5dLkjZs2ODYeg4ePBgSd/X1kf+itSGq4kWMJQZDN+9wMvgIsvgxdINTxowZI2NMq/cpKSlRSUlJklYEydudFw9b2pDOs18qN56Xhm4A7OHl1nP9VNPWHDp0SBs2bNDYsWNDto8dO1Zr165NyGOWl5erZ8+ewY/+/fuH3cer7+fWjBhLDE4v9Q6GbnZg6AakNls7L15ebkMgGbz4fm50HgAnWD1427Vrl5qamsKuQpGdnR12tYrWXHbZZbr22mu1YsUK9evXT1VVVRHve/vtt+vjjz8OfmzZsiV0TUQVWpCIoVsqHwlNJK8Fn18xdANgY+fFy6Y+5ACr/VKx8bzYXwzdADjF9VNNoxEIBEJuG2PCtrVm5cqVUd83PT1d6enpLX7OpqiKFzHmPIZu3uF09BFk8WHoBuBotnRevGzqQzrPfqnYeF4cugGAk6x+xVuvXr3UsWPHsKOedXV1YUdHE233x/ZEVbyIMedxeql3MHSzA0M3AM1s6rx42TR0g/0YunkHnQfASVYP3tLS0lRQUKDKysqQ7ZWVlRo5cmRCH7uiokJ5eXkqLCxM6OPAuxI1dEvFKEs0r0af3zB0A3A0r3eebUM3DrDCJl58P7dmDN0AOM31U00bGhq0adOm4O3NmzerurpaWVlZGjBggMrKyjR58mQNHz5cI0aM0OLFi1VbW6sZM2YkdF2lpaUqLS1VfX29evbsmdDHSgZizFkM3bwjEdFHkMWOoRuQmvzaeQzdEKtUajyvDtwAIFFcH7ytX79eRUVFwdtlZWWSpClTpmjJkiWaNGmSdu/erXnz5mn79u3Kz8/XihUrlJub69aSPYcYcxZDN+9g6GYHhm5A6vJj59k2dIP9UqnxvD50o/MAJILrg7cxY8bIGNPqfUpKSlRSUpKkFQGR8Z5u3sHQzQ4M3YDU5qfOs3XgxgFWwBl0HoBEsfo93tzkl/d4I8a8IZWOhCaD14+2+gVDNwC2irXzGLohXjSeNzB0A5BIDN4iKC0tVU1NjaqqqtxeStyIMWdxiqk3JGroRpDFhqEbAJvF0nkM3RAvGg8AIDF48y1izFmcYpraGLrFhqEbAL+wdegGwDl0HoBEY/AGtCGRQzeOhDqLU0zdx9ANgF/YPHTjAKv9aDxvYOgGIBkYvEXg5fd4I8acw9DNOzjF1H0M3QB4RVudx9AN7ZGqjccBUABoGYO3CLz6Hm/EmHM4vdQ7GLq5j6EbAC9prfNsHrrBfqk6dPMiOg9AsjB4A1qQ6KEbUeYcjq66j6EbAL+wfejGAVbAGQzdACQTgzcfIcacwdDNOxI5dCPIosPQDYBfMHRDe9F4AICWMHjzCWLMGZxe6h0M3dzH0A2AX+z+mN//aB+Gbt5B5wFINgZvEXj54gqITzKGbkSZMzi91H0M3QB4mdc6L9UPsHJgFE5h6AbADQzeIvDSxRVSPcacwNDNOxI9dCPI2sbQDYDX0XlwEo3nDTQeALcwePM4Yqz9GLp5B0M39zF0AwDgczQeAKAtDN6Q0jh1wTsYurmPoRsAJBcHWAFn0HkA3MTgzcOIsfZJ1tCNI6Htx3u6uY+hGwAkF51nPxrPGxi6AXBbJ7cXgPgQY+3D0M07kjF0I8giY+AGAMlH59mPxgMARItXvEVg89WuiLH24fRS72Do5i6GbgD8yubOg/0YunkHnQfABgzeIvDS1a4QvWQO3Yiy9uH0UncxdAPgZzZ3HgdYAWcwdANgCwZvHkOMxY+hG45FkLWMoRsAuIPOsx+NBwCIFYM3DyHG4sfppd7CKaYAAMA2DN28g84DYBMGb4DDiLL24RRTAEAq4gAr4AyGbgBsw+DNI4ix+HGKqXcka+hGkAEAbELn2Y/GAwDEi8GbBxBj8eMUU+9g6AYAAGzE0M076DwANmLwBt9K9tCNKIsfp5cCAFIVB1jtRt95B0M3ALZi8BZBRUWF8vLyVFhY6Oo6iLH4MHTzjmQO3QgyAIBE5wF+Q+MBsBmDtwhKS0tVU1Ojqqoq19ZAjMWH00u9g6EbAMANNnQe7MeBVQCAExi8WYqhW3zcGLoRZfHh9FIAQCqj9exG33kHB1cB2I7BG3yDoZt3JHvoRpABAGzC0A1wBo0HwAsYvFmIGPMGhm7xYegGAEhldJ79aDwAgJMYvFmGGAOcw9ANAADEgqGbd9B5ALyCwRsQB6IMAADEigOs8CvOaACAyBi8WYQY8waGbt5AkAEAbELn2Y/GAwAkAoM3SxBjgHMYugEAgFgwdPMOOg+A1zB4i6CiokJ5eXkqLCx0eymwCFEGAID3JbvzOMBqN/rOOxi6AfAiBm8RlJaWqqamRlVVVQl/LGLMG4iy9kvG+38QZACAttB5AAAgWRi8uYwYA5zD0A0AAMSCA6veQecB8CoGb0AUiDIAABArDrDajb7zDoZuALyMwZuLiDFvIMq8gSADANiEzgOcQeMB8DoGby4hxgDnEGQAACAWHFgFACQLgzcXMHTzDqIMAADEitazG33nHRxcBeAHDN6ACIgybyDIAAA2YegGOIPGA+AXDN6SjBjzBoZu3kCQAQBsQufZj8YDACQbg7ckIsYAAAAAdzB08w4OrgLwEwZvwDGIMm8gyAAANuEAq93oO++g8QD4DYO3JCHGvIEo8waCDABgEzoPAABEwuAtCYgxwDkM3QAAQCw4sOoddB4AP2LwBvz/iDIAABArDrDajb7zDoZuAPyKwVsEFRUVysvLU2FhYbv2Q4x5A1HmDQQZALft379fubm5uuWWW9xeCtqBzgPsQuMBsEUiWo/BWwSlpaWqqalRVVVV3PsgxpJn494Dbi8BCUaQJUdD3Va3lwBY7d5779X555/v9jLQTk50HuzHgVUAQKwS0XoM3pDyiDIAQDQ2btyof/zjHxo3bpzbS4EFOMBqN/rOOzi4CsAWiWo9Bm8JQox5A1HmDQQZgLasXr1a48ePV05OjgKBgJYvXx52n4ULF2rQoEHKyMhQQUGB1qxZE9Nj3HLLLSovL3doxfAyOs9u9J130HgAouXl1mPwlgDEGOAcggxANBobGzV06FA99NBDLX5+2bJlmjVrlu644w699dZbGj16tIqLi1VbWxu8T0FBgfLz88M+tm3bpmeeeUannXaaTjvttGQ9JQAAAPz/vNx6nRzfY4pj6OYdHA0FAPvV14cO39PT05Wenh52v+LiYhUXF0fcz/z58zVt2jRNnz5dkrRgwQKtXLlSixYtCh7Z3LBhQ8SvX7dunR5//HE98cQTamho0KeffqrMzEzddddd8TwteBitZzf6zjs4uAog2s6TvN16DN6QkogybyDIADt8sHu/uh3smNTHbGzYL0nq379/yPY5c+Zo7ty5Me3r0KFD2rBhg2677baQ7WPHjtXatWuj2kd5eXkw2pYsWaK3336boVsKYuhmN/rOO2g8wB5e7zzJ/tZj8OYgYgxwDkEGQJK2bNmizMzM4O1IR0Fbs2vXLjU1NSk7Oztke3Z2tnbs2NHuNSI10HlAy9bV7XN7CQA8yonOk+xvPQZvDiHGvIOjoQDgHZmZmSFB1h6BQCDktjEmbFs0pk6d6sh6ADiHvvMODq4CaOZk50n2th4XV0BKIcq8gSAD4KRevXqpY8eOYUc86+rqwo6MAi3hAKvd6DvvoPEAJILtrcfgzQHEmDcQZd5AkAFwWlpamgoKClRZWRmyvbKyUiNHjnRpVfAKOg8AALvZ3nqcatpOxBjgHIZuAOLV0NCgTZs2BW9v3rxZ1dXVysrK0oABA1RWVqbJkydr+PDhGjFihBYvXqza2lrNmDHDxVUDaC8OrHoHnQegPbzcegzekBKIMgDwt/Xr16uoqCh4u6ysTJI0ZcoULVmyRJMmTdLu3bs1b948bd++Xfn5+VqxYoVyc3PdWjI8gAOsdqPvvIOhG4D28nLrMXhrB2LMG4gybyDIALTHmDFjZIxp9T4lJSUqKSlJ0orgdXSeHTbuPdDidvrOO2g8AE7wcuvxHm9xIsYA5xBkAAAAAAA/YvAWB4Zu3sHRUAAAECtaz270nXdwcBUAGLzBx4gybyDIAAA2YehmN/rOO2g8APiM7wdvW7Zs0ZgxY5SXl6chQ4boiSeeaN/+iDEgLuvq9oVtI8gAAO3hdOcBAAA4zfcXV+jUqZMWLFigYcOGqa6uTueee67GjRunbt26xbwvhm7ewdFQAAD8z8nOk2g929F33sHBVQD4nO8HbyeddJJOOukkSVLv3r2VlZWlPXv2xB1ksB9R5g0EGQCgvZzsPIZudqPvvIPGA4BQrp9qunr1ao0fP145OTkKBAJavnx52H0WLlyoQYMGKSMjQwUFBVqzZk1cj7V+/XodOXJE/fv3j/lrP9i9P67HBBCOIAOA1EDnAQCAVOf64K2xsVFDhw7VQw891OLnly1bplmzZumOO+7QW2+9pdGjR6u4uFi1tbXB+xQUFCg/Pz/sY9u2bcH77N69W9dff70WL16c8OcE93A0FAAAe9B5QGrh4CoAhHP9VNPi4mIVFxdH/Pz8+fM1bdo0TZ8+XZK0YMECrVy5UosWLVJ5ebkkacOGDa0+xsGDBzVhwgTdfvvtGjlyZJv3PXjwYPB2fT2/PLyCoZs3EGQAkDroPAAAkOpcf8Vbaw4dOqQNGzZo7NixIdvHjh2rtWvXRrUPY4ymTp2qiy++WJMnT27z/uXl5erZs2fwI57TFQAAANA6Og8AAKQCqwdvu3btUlNTk7Kzs0O2Z2dna8eOHVHt47XXXtOyZcu0fPlyDRs2TMOGDdPf//73iPe//fbb9fHHHwc/tmzZ0q7ngMTbuPcAr3az3Lq6fZJ4tZvtGuq2ur0EACmEzkNbNu49IImzGmy1rm5fsPEkOs8LaD3AHa6fahqNQCAQctsYE7YtkgsuuEBHjhyJ+rHS09OVnp4e0/rgnuYgg70YunkDIQbALXQeWkLj2e3ogZtE53kBrQe4x+rBW69evdSxY8ewo551dXVhR0eRejgKar9jowz2IcIAuIXOQyRHD93oPLvQdt5D6wHus/pU07S0NBUUFKiysjJke2VlZZtvntteFRUVysvLU2FhYUIfB/Fh6GY/Tj2wHyEGwE10Ho61ce8Bhm4WizR0o/PsResBdnD9FW8NDQ3atGlT8PbmzZtVXV2trKwsDRgwQGVlZZo8ebKGDx+uESNGaPHixaqtrdWMGTMSuq7S0lKVlpaqvr5ePXv2TOhjITacemA/hm72I8QAJAOdh2jRd/Zq7VVudJ69aD3AHq4P3tavX6+ioqLg7bKyMknSlClTtGTJEk2aNEm7d+/WvHnztH37duXn52vFihXKzc11a8lwEUdB7cbpB95AiAFIFjoP0Whp6Ebn2YG28yZaD7CL64O3MWPGyBjT6n1KSkpUUlKSpBXBVgzd7NZSmHEU1D6EGIBkovPQFoZudopm4Ebn2YnWA+zj+uDNVhUVFaqoqFBTU5PbS4EYutmOoZv9iDAA+Byd5z5OLbUXQzfvovcAO1l9cQU3lZaWqqamRlVVVW4vJaUd+ya7sA9DN/sRYQAQis5zV2ttxwFW96yr28fQzcPoPcBeDN5gLU49sB/v+2E/IgwAYBOGbnai6byN3gPsxqmmsBJDN/txSXn7EWEAAJswdLNPrAM3Os8+9B5gPwZvEfDeH+7h1FK7cUl5byDCACAyOi+5aDs7MXTzPnoP8AZONY2A9/5wR6Qw4yioHTgNwX4NdVuJMABoA52XPNEM3ei85Ir2vdxgN3oP8A4Gb7AGQze7tRVoHAV1HwEGALAJQzf7xDtwo/PsQvMB3sKpprACpyDYjaGb/QgwAIBNaDu7tOcVbnSeXWg+wHsYvMF1vNGu3TgVwX4EGADAFrEM3Oi85KDl/IPmA7yJwVsEvOlucjB0s1s0ocZRUHcRYAAQOzovMRi62cWJgRudZw+aD/Au3uMtAt50N/E4BcFuDN3sR4ABQHzoPOfRdXZh6OYvNB/gbbziDa5oK844CuqeaEONGHMP8QUAsEmsQzc6L3GcOq2UzrMH3Qd4H4M3JB1DN3vxHiD2I74AALaI51VudF7i0HH+Q/cB/sDgDUnF0M1escQaR0HdQXwBAGzB0M0eTg/c6Dw70H2Af/Aeb0ga3vvDXgzd7Ed8AQBsQdPZg6GbP9F9gL/wircIuNqVs6IJNI6CuoPTEuxHfAGAs+i8+LRn4EbnOYt+8y+6D/AfXvEWAVe7cg5DN3vFGm0cBU2uhrqtxBcAJACdFzuGbvZI1NCNznMf3Qf4E694Q8JwGoK94gk2Yiy5CC8AgC1oOjsk8lVudJ77aD/Av3jFGxIilkDjKGhycWqC/QgvAIAt2jt0o/OcQb/5G+0H+BuveIPjGLrZK95o4yho8hBeAAAbOPEqNzqv/ZIxcKPz3EX7Af7HK97gKE5FsBdDN/sRXgAAG9BzdmDo5n+0H5AaeMUbHBNrpHEUNHk4PcFuRBcAwBZODd3ovPglq9sYurmL/gNSB694gyMYutmrPfFGkCUe0QUAsAVDN/dxsDQ10H9AauEVbxFUVFSooqJCTU1Nbi/FepyOYC+GbnYjugDAHXReKFrOfckeuNF57qH/gNTDK94iKC0tVU1NjaqqqtxeitXiCTWOgibeurp9DN0sR3QBgHvovM85PXSj82LH0C110H9AauIVb4gbQzc7cYqC/YguAIANGLq5i2ZLLfQfkLoYvCEuDN3s5ETAcRQ0sYguAIANGLq5y62hG52XfLQfAAZviBnvA2Inhm52I7oAADag49zl5qvc6Lzko/8ASLzHG2IUb6xxFDSxOFXBbkQXAMAGiRq60XnRoddSC/0HoBmveEPUGLrZyamI4yhoYhBdAAAbMHRzjw0DNzovueg/AEdj8IaocFqCfZyMOGIsMYguAIAN6Dj3MHRLPfQfgGMxeEOb2hNrHAVNDBsiDq0jugAAbkv0wI3Oi8yWVmPollz0H4CW8B5vEVRUVCgvL0+FhYVuL8VVDN3s43TIEWTOaqjbSnQBgOVSofMYurnHlqEbkov+AxAJg7cISktLVVNTo6qqKreX4hpOS7APQze7EVwA4A1+7zwazh3r6vZZNXSj85KHBgTQGk41RRgnYo2joM6zKeQQjuACANggGUM3Oi+cbZ3G0C15aEAAbWHwhhAM3eyUiJgjyJxDcAEA3JasV7nReeFsG7oheWhAANFg8IYgTkuwE0M3uxFcAAC30XDusHXgRuclBw0IIFq8xxskORdsHAV1TqLeJ4QYcwYXUQBSz+bNm1VUVKS8vDydffbZamzkdx7cl8yhG533OYZuqY0GBPwpUa3HK97A0M1CtsYcPkNsAalp6tSpuueeezR69Gjt2bNH6enpbi8JKY6hW/LRaKADAf9KVOsxeEtxnJpgn0QGHUdB24/YAlLTO++8o86dO2v06NGSpKysLJdXhFSW7H5j6PYZ24dudF7i0YGAfyWy9TjVNIU5GW0EmTMYutmN2ALstXr1ao0fP145OTkKBAJavnx52H0WLlyoQYMGKSMjQwUFBVqzZk3U+9+4caO6d++uq666Sueee67uu+8+B1cPRI+DpsmXqLf/cBKdl3h0IOAuL7cer3hLUQzd7GN70KU6YguwW2Njo4YOHaobbrhB11xzTdjnly1bplmzZmnhwoUaNWqUHn74YRUXF6umpkYDBgyQJBUUFOjgwYNhX7tq1Sp9+umnWrNmjaqrq9W7d29dfvnlKiws1KWXXprw5wY0c2Poluqd54U+Y+iWeHQg4D4vtx6DtxTE0M0+iY46gqx9iC3APfX1oX9/paent/h+G8XFxSouLo64n/nz52vatGmaPn26JGnBggVauXKlFi1apPLycknShg0bIn59v379VFhYqP79+0uSxo0bp+rqagZvSBqGbsnlhYEbkoMOBBIn2s6TvN16DN5SDKcn2CUZUcfQLX6EFvCZf3/0ibp8mtxkOND4iSQF46fZnDlzNHfu3Jj2dejQIW3YsEG33XZbyPaxY8dq7dq1Ue2jsLBQO3fu1N69e9WzZ0+tXr1a3/jGN2JaBxAP2i35vDR0o/MSixZEKvB650n2tx6DtxTidLil8lFQJ3gp6lIRoQXYYcuWLcrMzAzejufqUrt27VJTU5Oys7NDtmdnZ2vHjh1R7aNTp0667777dOGFF8oYo7Fjx+rKK6+MeS1ALNwcuqVi53mtzRi6JRYtCCSeE50n2d96DN5SBEM3uyQr7Aiy+BBagD0yMzNDgqw9AoFAyG1jTNi21rR1igPgJIZuyeW1oRsSixYEksPJzpPsbT0GbxFUVFSooqJCTU1Nbi+l3ThFwS4M3exGaAH+06tXL3Xs2DHsiGddXV3YkVGkBts7j3ZLHq8O3Oi8xKEFAe+xvfU6uL0AW5WWlqqmpkZVVVVuL6VdEhFuqXgU1ClejbtUQWgB/pSWlqaCggJVVlaGbK+srNTIkSNdWhXcZGvnbdx7wPWhWyp1nle7jKFb4tCCgDfZ3nq84s3HGLrZJZlxR5DFhsgCvK+hoUGbNm0K3t68ebOqq6uVlZWlAQMGqKysTJMnT9bw4cM1YsQILV68WLW1tZoxY4aLqwY+5/bATUqdzvPqwA2JRQ8CdvNy6zF48ykb4g2fY+hmLyIL8If169erqKgoeLusrEySNGXKFC1ZskSTJk3S7t27NW/ePG3fvl35+flasWKFcnNz3VoyEGRDtzF08wY6LzHoQcB+Xm49Bm8+k8hwS5Ugc1Ky444Yiw2RBfjHmDFjZIxp9T4lJSUqKSlJ0oqA6NgwdEsFXh+4SXReotCDgDd4ufUYvPkIQze7+CHw/IzIAgC4yaaBm987zw9NxtAtMehBAMnA4M0nbIo3uBN4BFn0iCwAgJts6jY/D938MHBD4tCDAJKFwZsPJDre/BxkicDQzV4EFgDAbTYN3fzMT0M3Os95NCGAZGLw5nEM3ezip8jzGwILAOA224Zufuw8v7UYQzfn0YQAko3Bm4cxdLOLW6FHkLWNwAIAuMm2gZvkz87z29ANzqMJAbiBwZtH2RhwqcrNyGPo1jYCCwDgJpot8fw6cKPznEUTAnALgzcPSkbA+fEoaCL4NfT8gsACALjJ1qGbnzrPry3G0M059CAAtzF48xiGbvZwO/QIstYRWQAANzF0Syy3OwzeQA8CsAGDNw+xNeBSkduxx9AtMgILAOAmei3x3O6wRKPznEETArAFgzePSFbE+eUoaCK5HXvEWGQEFgDATbYP3bzeeW43WDLQec6gCQHYpIPbC0DbGLrZIxWCz6sILACAmxi6JRYNhmjRhABsw+DNcrZHXCqxIfg4CtoyAgsA4Cbbe83rQ7dUQee1H00IwEa+H7zt27dPhYWFGjZsmM4++2z9/Oc/d3tJUUtmxBFkka2r28fQzWIEFgCkLrc7b+PeA9YP3eANdF770YQAbOX793jr2rWrXn31VXXt2lX79+9Xfn6+vvjFL+qEE05we2mtYuhmBxsGbmgZcQUAcLPzvDJwo/Psx9Ct/ehCADbz/SveOnbsqK5du0qSPvnkEzU1NckY4/KqWueVkPM7m4ZuBFko4goAILnXeV5pNYZuSAV0IQDbuT54W716tcaPH6+cnBwFAgEtX7487D4LFy7UoEGDlJGRoYKCAq1Zsyamx/joo480dOhQ9evXT7feeqt69erl0Oqdl+yQI8haxtDNXsQVAHiH3zqPU0vhNDqvfehCAF7g+uCtsbFRQ4cO1UMPPdTi55ctW6ZZs2bpjjvu0FtvvaXRo0eruLhYtbW1wfsUFBQoPz8/7GPbtm2SpOOOO05//etftXnzZv3mN7/Rzp07k/LcYuFGyDF0a5lNQzeEIq4AwFv81HleG7jRefZj6NY+dCEAr3D9Pd6Ki4tVXFwc8fPz58/XtGnTNH36dEnSggULtHLlSi1atEjl5eWSpA0bNkT1WNnZ2RoyZIhWr16ta6+9tsX7HDx4UAcPHgzerq9P/C9EN0KOGGuZbUM3guxzxBUAeI9fOo+hG2AXuhCAl7j+irfWHDp0SBs2bNDYsWNDto8dO1Zr166Nah87d+4MRlV9fb1Wr16t008/PeL9y8vL1bNnz+BH//79438CUfBayPmVLVcuPRpDt8801G0lrgDAh7zSebQaEoHOix9dCMBrrB687dq1S01NTcrOzg7Znp2drR07dkS1j61bt+rCCy/U0KFDdcEFF+jmm2/WkCFDIt7/9ttv18cffxz82LJlS7ueQ2vcCjmOgoaybeCGzxFWAOBftneeV9/Pjc6zH0O3+NGGALzI9VNNoxEIBEJuG2PCtkVSUFCg6urqqB8rPT1d6enpsSwvLgzd7GDr0I0gI6wAIFXY2HleHLhJdB78jTYE4FVWv+KtV69e6tixY9hRz7q6urCjo17i1ZjzG4Zu9iKsAMD/bO08Og2JROfFhzYE4GVWD97S0tJUUFCgysrKkO2VlZUaOXJkQh+7oqJCeXl5KiwsdHS/bsYcR0E/x9DNXoQVAKQGGzvPy0M3Os9+dF58aEMAXuf6qaYNDQ3atGlT8PbmzZtVXV2trKwsDRgwQGVlZZo8ebKGDx+uESNGaPHixaqtrdWMGTMSuq7S0lKVlpaqvr5ePXv2dGSfDN3sYOvQDYQVAPiNVzrv3x99oi6fup7FcaPz7MfQLT60IQA/cL0w1q9fr6KiouDtsrIySdKUKVO0ZMkSTZo0Sbt379a8efO0fft25efna8WKFcrNzXVryXHx8hFUP7F56JbKQUZUAYA/pUrnuYmhG/yKPgTgF64P3saMGSNjTKv3KSkpUUlJSZJW5Dy3h24Emd0DN4mhGwDAn1Kh84C2pHLnxYs+BOAnVr/Hm5uceo83hm7us33olsqIKgCAGxL1Xr7JRufZj6Fb7OhDAH7D4C2C0tJS1dTUqKqqKu59uD10gzeGbqkaZEQVAMAtTnSe2xi6wY/oQwB+xOAtQWwYuqV6kDF0sxdRBQAA/C5VOy9e9CEAv2LwlgAM3dznhaFbqiKqAABon1TvPC9g6BYb+hCAnzF4iyDe9/6wYeiW6rwydCPIAABwh5ff442hG/yGoRsAv2PwFkE87/1hy9AtVYNsXd0+hm4AAKBNfniPN9iLzoseQzcAqaCT2wvwA1sGblLqDt0AAAD8js6zH0O36DF0A5AqeMVbOzF0Q6wIMgAAECs6z340XvQYugFIJQze2sGmoRu8IdWDjMgCACB2DN3gJ/QggFTD4C2Ctt5017ahG0Fmv1QfugEAYAsvX1wBdqLzosPQDUAqYvAWQWtvusvQDQAAwLu8dHEFOs9+DN2iw9ANQKpi8BYj24Zu8AaCDAAAxIqhG/yCoRuAVMZVTWNg49CNILMfQzcAAAB/ovNax8ANAHjFW9T+/dEnbi8hDEM3AAAAf6Lz7MfQrXUM3QDgMwzegAQiyAAAQKwYusHrGLoBwOcYvEVg+9WuCDL7MXQDAMBOtnce7EfnRcbQDQBCMXiLwOarXTF0AwAAiB+dh/Zg6BYZQzcACMfgDUgAggwAAMSKoZv9aDwAQKwYvHkMQWY/ggwAAAAAAEgM3jyFoRsAAIA/0Xn24+AqACAenaK50/HHH69AIBDVDvfs2dOuBaFlxJg3EGQAAK+h89xH59mPxgMAxCuqwduCBQuC/717927dc889uuyyyzRixAhJ0uuvv66VK1fqzjvvTMgiAS8gyAAAXkTnuYuhGwAA/hbV4G3KlCnB/77mmms0b9483XzzzcFtM2fO1EMPPaQXXnhBs2fPdn6VKY4gsx9DNwCAV9F5QOvoPABAe8T8Hm8rV67U5ZdfHrb9sssu0wsvvODIomxQUVGhvLw8FRYWuroOhm4AACBZ6LzkovPsx9ANANBeMQ/eTjjhBD399NNh25cvX64TTjjBkUXZoLS0VDU1NaqqqnJ7KbAcQQYA8As6L3kYugEAkBqiOtX0aHfffbemTZumV155JfjeH+vWrdPzzz+vRx55xPEFpjKCzH4M3QAAfkLnAZ+j8wAAToh58DZ16lSdeeaZ+slPfqKnnnpKxhjl5eXptdde0/nnn5+INaYkhm4AACDZ6LzkoPPsx9ANAOCUmAZvn376qW666Sbdeeed+vWvf52oNQGeQJABAPyEzksOhm72o/EAAE6K6T3eOnfu3OL7fsBZBJn9CDIAgN/QeQAAAM6L+eIKEyZM0PLlyxOwFEgM3QAAsNX//u//6qyzzlJeXp5mzpwpY4zbS3IcnZdYdJ79OLgKAKkrUa0X83u8DR48WD/4wQ+0du1aFRQUqFu3biGfnzlzpiMLA2xFkAFA6vnwww/10EMP6Z133lHnzp114YUXat26dcELEPgFnZc4DN3sR+MBQOpKZOvFPHh75JFHdNxxx2nDhg3asGFDyOcCgQBB1g4Emf0IMgBIXYcPH9Ynn3wi6bP3Q+vdu7fLK3IenQcgXg11W91eAgC0S6JaL+ZTTTdv3hzx4z//+Y8ji7JBRUWF8vLyVFhYmJTHY+gGAED8Vq9erfHjxysnJ0eBQKDF0yUXLlyoQYMGKSMjQwUFBVqzZk3U+z/xxBN1yy23aMCAAcrJydF//dd/6ZRTTnHwGdiBzksMOs9+HFwFALt5ufViHrwdzRjjy/c3kaTS0lLV1NSoqqoq4Y9FjHkDQQYA9mpsbNTQoUP10EMPtfj5ZcuWadasWbrjjjv01ltvafTo0SouLlZtbW3wPgUFBcrPzw/72LZtm/bu3atnn31W7733nj744AOtXbtWq1evTtbTcwWd5ww6z340HgDYz8utF/OpppK0dOlSPfjgg9q4caMk6bTTTtN3vvMdTZ482ZFFAbYhyADAHfX1oX//pqenKz09Pex+xcXFKi4ujrif+fPna9q0aZo+fbokacGCBVq5cqUWLVqk8vJySQo7tfJoTzzxhAYPHqysrCxJ0hVXXKF169bpwgsvjPk52Y7Ocw5DN2esq9vn9hIAAAkQbedJ3m69mAdv8+fP15133qmbb75Zo0aNkjFGr732mmbMmKFdu3Zp9uzZ7V5UKiHI7MfQDUCqq9nbqPSDgaQ+5sH9n/1+7N+/f8j2OXPmaO7cuTHt69ChQ9qwYYNuu+22kO1jx47V2rVro9pH//79tXbtWn3yySfq3LmzXnnlFd10000xrcML6DykGjoPQKrzeudJ9rdezIO3n/70p1q0aJGuv/764Larr75aZ511lubOnUuQxYChGwAArduyZYsyMzODtyMdBW3Nrl271NTUpOzs7JDt2dnZ2rFjR1T7+MIXvqBx48bpnHPOUYcOHXTJJZfoqquuinkttqPznEPn2Y+hGwC4y4nOk+xvvZgHb9u3b9fIkSPDto8cOVLbt293ZFGALQgyAHBXZmZmSJC1RyAQejTXGBO2rTX33nuv7r33XkfWYis6zxkM3exH4wGA+5zsPMne1ov54gqDBw/W7373u7Dty5Yt06mnnurIolIBQWY/ggwA/KFXr17q2LFj2BHPurq6sCOjqY7OAwAAXmN768X8ire7775bkyZN0urVqzVq1CgFAgH9+c9/1osvvthiqCEcQzekooa6rW4vAUCKSktLU0FBgSorKzVhwoTg9srKSl199dUursw+dF770Xn24+AqAPiL7a0X8+Dtmmuu0V/+8hf97//+r5YvXy5jjPLy8vTGG2/onHPOScQagaQjyADAWxoaGrRp06bg7c2bN6u6ulpZWVkaMGCAysrKNHnyZA0fPlwjRozQ4sWLVVtbqxkzZri4avvQee3D0M1+NB4AeJOXWy/mwZskFRQU6LHHHnN6LSmBIEsMJy8zT5ABgPesX79eRUVFwdtlZWWSpClTpmjJkiWaNGmSdu/erXnz5mn79u3Kz8/XihUrlJub69aSrUXnAQAA23i59eIavDU1NWn58uV69913FQgElJeXp6uuukodO3Z0en2+wtANAIDEGDNmjIwxrd6npKREJSUlSVqRd9F58aHz7MfBVQDwLi+3XsyDt02bNumKK67Q1q1bdfrpp8sYo3/961/q37+//vSnP+mUU05JxDqBpCDIAACpjM6LD0M3+9F4AAC3xHxV05kzZ+rkk0/Wli1b9Oabb+qtt95SbW2tBg0apJkzZyZijb5AkNmPIAMApDo6L3Y0HgAAaE3Mr3h79dVXtW7dOmVlZQW3nXDCCbr//vs1atQoRxfnFwSZ/Ri6AQBA58Gf6DwAgJtifsVbenq69u0LfyP7hoYGpaWlObIoG1RUVCgvL0+FhYXt2g9DNwAA4BV0XmzoPPsxdAMAuC3mwduVV16pm266SX/5y19kjJExRuvWrdOMGTN01VVXJWKNrigtLVVNTY2qqqrcXgoSjCADAOAzdF70GLrZj8YDANgg5sHbT37yE51yyikaMWKEMjIylJGRoVGjRmnw4MH68Y9/nIg1ehZBZj+CDACAz9F5AAAAzor5Pd6OO+44PfPMM9q0aZPeffddGWOUl5enwYMHJ2J9nsXQDQAAeA2dFx06z34cXAUA2CLmwVuzwYMHE2HwNIIMAICW0XmRMXSzH40HALBJzKeaTpw4Uffff3/Y9gcffFDXXnutI4vyOoLMfgQZAADh6DwAAABnxTx4e/XVV3XFFVeEbb/88su1evVqRxblZQzdAACAV9F5raPz7MfBVQCAbWIevEW6nHznzp1VX88vOtiPIAMAoGV0XmQM3exH4wEAbBTz4C0/P1/Lli0L2/74448rLy/PkUV5FUFmP4IMAIDI6DwAAABnxXxxhTvvvFPXXHON/v3vf+viiy+WJL344ov67W9/qyeeeMLxBXoFQzcAAOB1dF7L6Dz7cXAVAGCrmAdvV111lZYvX6777rtPTz75pLp06aIhQ4bohRde0EUXXZSINQKOIMgAAGgdnReOoZv9aDwAgM1iHrxJ0hVXXNHiG++mKoLMfgQZAADRofM+R+PZj8YDANgu5vd4O1pJSYl27drl1Fo8iSCzH0EGAEDs6DwAAID2a9fg7bHHHkv5K1wBAAD4Uap3HgdX7cfBVQCAF7Rr8GaMcWodnkSQ2Y8gAwAgPqnceTSe/Wg8AIBXtGvwlsoIMvsRZAAAAAAAwE0xX1yhsbFR3bp1kyTt27fP8QV5AUM3AADgR3QenecFHFwFAHhJzK94y87O1o033qg///nPiVhPwuzfv1+5ubm65ZZb3F4KkoAgAwAgdqneeQzd7EfjAQC8JubB229/+1t9/PHHuuSSS3Taaafp/vvv17Zt2xKxNkfde++9Ov/889u9H4LMfgQZAADxSfXOAwAAcFrMg7fx48fr97//vbZt26ZvfvOb+u1vf6vc3FxdeeWVeuqpp3T48OFErLNdNm7cqH/84x8aN25cu/bD0A0AAPgZnQebcXAVAOBFcV9c4YQTTtDs2bP117/+VfPnz9cLL7ygiRMnKicnR3fddZf2798f1X5Wr16t8ePHKycnR4FAQMuXLw+7z8KFCzVo0CBlZGSooKBAa9asiWmtt9xyi8rLy2P6GngTQQYAQPulWufV7GXoZjsaDwDgVTFfXKHZjh07tHTpUj366KOqra3VxIkTNW3aNG3btk3333+/1q1bp1WrVrW5n8bGRg0dOlQ33HCDrrnmmrDPL1u2TLNmzdLChQs1atQoPfzwwyouLlZNTY0GDBggSSooKNDBgwfDvnbVqlWqqqrSaaedptNOO01r166N9+mqZm+j0rt2j/vrkXgEGQAAzki1zgMAAEiUmAdvTz31lB599FGtXLlSeXl5Ki0t1XXXXafjjjsueJ9hw4bpnHPOiWp/xcXFKi4ujvj5+fPna9q0aZo+fbokacGCBVq5cqUWLVoUPLq5YcOGiF+/bt06Pf7443riiSfU0NCgTz/9VJmZmbrrrrtavP/BgwdD4q6+nmEOAABIDXQeAACAs2I+1fSGG25QTk6OXnvtNVVXV+vmm28OiTFJOvnkk3XHHXe0e3GHDh3Shg0bNHbs2JDtY8eOjfqoZnl5ubZs2aL33ntPP/zhD/X1r389Yow1379nz57Bj/79+7frOQAAAHgFnQcAAOCsmF/xtn37dnXt2rXV+3Tp0kVz5syJe1HNdu3apaamJmVnZ4dsz87O1o4dO9q9/5bcfvvtKisrC96ur68nyiy3rm4fp5larKFuq9tLAABEic6Dbeg8b6D3ACCymAdvbcVYIgQCgZDbxpiwbdGYOnVqm/dJT09Xenp6zPuGO9bV7XN7CWgFEQYA3kLnwSZ0njfQewDQurivapoMvXr1UseOHcOOetbV1YUdHUXqaY4xjoLaiQgDALSGzkNr6DxvoPcAoG1WD97S0tJUUFCgysrKkO2VlZUaOXJkQh+7oqJCeXl5KiwsTOjjID7EmL0a6rYSYQCANtF5iITO8wZ6DwCiE/Oppk5raGjQpk2bgrc3b96s6upqZWVlacCAASorK9PkyZM1fPhwjRgxQosXL1Ztba1mzJiR0HWVlpaqtLRU9fX16tmzZ0IfC7HhtAN7EWAAgKPReYgVnecNNB8ARC/uwdumTZv073//WxdeeKG6dOkS9/txrF+/XkVFRcHbzW94O2XKFC1ZskSTJk3S7t27NW/ePG3fvl35+flasWKFcnNz4106POzoGOMoqF0IMADwDzoPbqDzvIHmA4DYxDx42717tyZNmqSXXnpJgUBAGzdu1Mknn6zp06fruOOO049+9KOY9jdmzBgZY1q9T0lJiUpKSmJdKnyGGLMT8QUA/kHnwS10njfQfQAQu5jf42327Nnq1KmTamtrQ658NWnSJD3//POOLs5NvPeHXYgxOxFfAOAvdB7cwOml3kD3AUB8Yn7F26pVq7Ry5Ur169cvZPupp56q999/37GFuY33/rAHMWYn4gsA/IfOQ7Id23kcYLUPzQcA7RPz4K2xsTHkCGizXbt2KT093ZFFAc2IMfsQXwDgX3QekonOsx/dBwDtF/OpphdeeKGWLl0avB0IBHTkyBE9+OCDIW+eC7QXMWYf4gsA/I3OQ7LQefaj+wDAGTG/4u3BBx/UmDFjtH79eh06dEi33nqr3nnnHe3Zs0evvfZaItboioqKClVUVKipqcntpaQkTi+1D/EFAP5H5yEZ6Dz70X0A4JyYX/GWl5env/3tbzrvvPN06aWXqrGxUV/84hf11ltv6ZRTTknEGl1RWlqqmpoaVVVVub2UlNNSjHEU1D0NdVuJLwBIEXQeEmld3T46zwPoPgBwVsyveJOkPn366O6773Z6LQAxZhnCCwBSD52HRIj0Kjc6zy60HwA4L+ZXvD366KN64oknwrY/8cQT+uUvf+nIopCaOO3ALoQXAKQeOg+JQON5A+0HAIkR8+Dt/vvvV69evcK29+7dW/fdd58ji0Lq4SioPTi1FABSF50Hp7U2dKPz7EH7AUDixDx4e//99zVo0KCw7bm5uaqtrXVkUTaoqKhQXl6eCgsL3V6K7zF0swfRBQCpjc6Dkxi6eQP9BwCJFfPgrXfv3vrb3/4Wtv2vf/2rTjjhBEcWZQPedDc5OPXAHkQXAIDOg1NoPG+g/wAg8WK+uMKXv/xlzZw5Uz169NCFF14oSXr11Vf1rW99S1/+8pcdXyD8i6OgdiC4AADN6Dw4oa2hG51nBxoQAJIj5sHbPffco/fff1+XXHKJOnX67MuPHDmi66+/nvf+QNQYutmB4AIAHI3OQ3sxdPMGGhAAkiemwZsxRtu3b9ejjz6qe+65R9XV1erSpYvOPvts5ebmJmqN8BmGbnYguAAAR6Pz0F6cXuoNNCAAJFfMg7dTTz1V77zzjk499VSdeuqpiVoXfIogcx+xBQBoCZ2H9oim8TjA6j46EACSL6aLK3To0EGnnnqqdu/enaj1WIOrXTmPUw/cR2wBACKh8xAvhm7eQAcCgDtivqrpAw88oO985zt6++23E7Eea3C1K2cxdHMfsQUAaAudh1gxdPMGOhAA3BPzxRWuu+467d+/X0OHDlVaWpq6dOkS8vk9e/Y4tjj4A6eXuovQAgBEi85DLGg8b6AFAcBdMQ/eFixYkIBlwK84CuouQgsAEAs6D9GKduhG57mLFgQA98U8eJsyZUoi1gEfYujmLkILABArOg/RYOjmDbQgANgh5vd4q62tbfUDkDj1wE0NdVsJLQBIgAkTJuj444/XxIkTwz737LPP6vTTT9epp56qRx55xIXVOYPOQ1toPG+gBQEgdolqvZhf8TZw4EAFAoGIn29qaop1l/AZjoK6h8gCgMSZOXOmbrzxRv3yl78M2X748GGVlZXp5ZdfVmZmps4991x98YtfVFZWlksrjR+dh9bEMnSj89xDDwJAfBLVejEP3t56662Q259++qneeustzZ8/X/fee2+su4OPEGPuIrIAILGKior0yiuvhG1/4403dNZZZ6lv376SpHHjxmnlypX6yle+kuQVth+dh0joPG+gBwEgfolqvZhPNR06dGjIx/Dhw/X1r39dP/zhD/WTn/wk1t1Zq6KiQnl5eSosLHR7KZ7AaQfu4dRSAJBWr16t8ePHKycnR4FAQMuXLw+7z8KFCzVo0CBlZGSooKBAa9asceSxt23bFgwxSerXr58++OADR/adbHQeWkLneQM9CMDPvNx6MQ/eIjnttNNUVVXl1O5cV1paqpqaGl89p0SJNcY4CuocAgsAPtPY2KihQ4fqoYceavHzy5Yt06xZs3THHXforbfe0ujRo1VcXBzyvmUFBQXKz88P+9i2bVurj22MCdvW2umaXkTnpaZ1dfvoPA/gICyAVODl1ov5VNP6+tBfpsYYbd++XXPnztWpp54a6+7gccSYewgsAKng2O5IT09Xenp62P2Ki4tVXFwccT/z58/XtGnTNH36dEnSggULtHLlSi1atEjl5eWSpA0bNsS1xr59+4Yc9dy6davOP//8uPblNjoPzeJ5lRudl3z0IAAvi7bzJG+3XsyDt+OOOy5ssmeMUf/+/fX444/Hujt4GKcduIPAApBsVR82qFOX8CN9iXT4QKMkqX///iHb58yZo7lz58a0r0OHDmnDhg267bbbQraPHTtWa9eubdc6Jem8887T22+/rQ8++ECZmZlasWKF7rrrrnbv1w10HiQazytoQgBO8HrnSfa3XsyDt5dffjnkdocOHXTiiSdq8ODB6tQp5t3BozgK6g4CC0Cq2bJlizIzM4O3Ix0Fbc2uXbvU1NSk7OzskO3Z2dnasWNH1Pu57LLL9Oabb6qxsVH9+vXT008/rcLCQnXq1Ek/+tGPVFRUpCNHjujWW2/VCSecEPM6bUDnId6hG52XXDQhAD9wovMk+1sv5oK66KKLYv0S+AxDN3cQWABSUWZmZkiQtUdLr+SK5f05Vq5cGfFzV111la666qq412YLOi+1MXTzBpoQgF842XmSva0X16HLf//731qwYIHeffddBQIBnXnmmfrWt76lU045Ja5FwDsYuiUfcQUA7dOrVy917Ngx7IhnXV1d2JFR0HmpitNLvYEuBIBwtrdezFc1XblypfLy8vTGG29oyJAhys/P11/+8hedddZZqqysTMQaYQmCLPmIKwBov7S0NBUUFIR1SmVlpUaOHOnSquxE56Wm9jQeB1iThy4EgJbZ3noxv+Lttttu0+zZs3X//feHbf/ud7+rSy+91LHFwR6cepB8xBUARK+hoUGbNm0K3t68ebOqq6uVlZWlAQMGqKysTJMnT9bw4cM1YsQILV68WLW1tZoxY4aLq7YPnZd6GLp5A10IINV5ufViHry9++67+t3vfhe2/cYbb9SCBQucWJMVKioqVFFRoaamJreX4jqGbslFWAFA7NavX6+ioqLg7bKyMknSlClTtGTJEk2aNEm7d+/WvHnztH37duXn52vFihXKzc11a8lWovNSC0M3b6ANAcDbrRfz4O3EE09UdXW1Tj311JDt1dXV6t27t2MLc1tpaalKS0tVX1+vnj17ur0c13B6aXIRVgAQnzFjxsgY0+p9SkpKVFJSkqQVeROdlzpoPG+gDQHgM15uvZgHb1//+td100036T//+Y9GjhypQCCgP//5z/qf//kfffvb307EGuESjoImF2EFAHAbnZca2jt0o/OSgzYEAH+IefB25513qkePHvrRj36k22+/XZKUk5OjuXPnaubMmY4vEO5g6JY8RBUAwBZ0nv8xdPMG+hAA/CPmwVsgENDs2bM1e/Zs7dv32S/uHj16OL4wuIdTD5KHqAIA2ITO8zcazxvoQwDwlw6xfsGBAwe0f/9+SZ+F2J49e7RgwQKtWrXK8cUh+TgKmjxEFQDANnSefzkxdKPzEo8+BAD/iXnwdvXVV2vp0qWSpI8++kjnnXeefvSjH+nqq6/WokWLHF8gkoehW3I01G0lqgAAVqLz/ImhmzfQhwDgTzEP3t58802NHj1akvTkk0+q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5EgdPnzY788POTk5qqys1F//+le9/fbb3i6nxa5duya73a6cnByFh4dr5MiR2rt3ryIiIrxdGuDX6PP8B32ef6DP8230eb6JPs9/8RdvHnTt2jVdvXpVtbW1qq2tVZ8+fbxdkse89957mjhxot+fbK83zMnJyZKkiIgIv2/GAtHRo0d16NAhTZ482duleERwcLA6d+4sSbp69arq6ur8/i8l+vXrp4SEBElSnz59FBERoe+++867RXnAhAkT1LVrV2+X0Wr79u3TsGHD1L9/f3Xt2lWTJ0/W9u3bvV0WEBDo83wffZ5/oM/zffR5vok+z3+1m8Fbbm6upkyZosjISNlstib/lH7Dhg0aOHCgwsLClJiYqF27drl8/N69e2vp0qWKiYlRZGSkJk2apNtvv92DCRqzOtMPbd26VT/96U/drPjmrM509OhRdenSRVOnTtXIkSP1/PPPe7D6prXF81RRUaHExETdc8892rlzp4cqb1pb5Fm6dKkyMjI8VPHNtUWmixcvKj4+XlFRUVq2bJl69erloeqb1pbnh88//1z19fWKjo52s+rmtWUmb3E34+nTp9W/f3/H7aioKJWVlbVF6YBX0efR50n0eZ5An0efdyP6PM+hz2u/2s3graqqSvHx8Vq3bl2T27ds2aLFixdrxYoVKiwsVHJystLS0nTy5EnHPomJiRo+fHijr9OnT+vChQvKyspSaWmpysrKlJeXp9zcXL/OdF1FRYV2797dJr+VsjpTbW2tdu3apfXr1+uzzz5Tdna2srOz/TqTJJWWlqqgoECvvfaaZs2apYqKCr/N889//lODBw/W4MGDLctwo7Z4jrp37679+/fr+PHj+sc//qFz5875fSZJ+vbbbzVr1ixt3LjR0jxtmcmb3M3Y1G/YbTabpTUDvoA+jz6PPs8/8tDn+U8miT7P0+jz2jHTDkkymZmZDdbuuusuM3/+/AZrQ4cONcuXL3fpmFu3bjULFixw3F69erV54YUX3K7VVVZkum7z5s3m8ccfd7fEFrMiU15enklNTXXcXr16tVm9erXbtbrKyufpuvvvv9/k5+e3tsQWsSLP8uXLTVRUlBkwYIDp2bOnCQ8PN6tWrfJUyTfVFs/R/PnzzdatW1tbYotZlenq1asmOTnZbN682RNltoiVz1NOTo555JFH3C3Rba3JuHv3bjNt2jTHtkWL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", - "text/plain": [ - "

" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "order_plot = 5\n", "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=order_plot, recur=recur_helmholtz, derivs=derivs_helmholtz, n_initial=n_init_helm, n_order=order_helm)\n", @@ -218,53 +207,160 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 17, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_14919/1312385240.py:6: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_14919/1312385240.py:7: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs2 = ax2.contourf(x_grid, y_grid, plot_me_hem.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n" + ] + }, { "data": { - "text/latex": [ - "$\\displaystyle \\left(-1\\right)^{n + 1} \\left(\\frac{\\left(-1\\right)^{n - 3} \\left(n + \\left(n - 2\\right)^{3} - 2 \\left(n - 2\\right)^{2} - 2\\right) s{\\left(n - 3 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 2} \\left(- n + 3 \\left(n - 2\\right)^{2} + 2\\right) s{\\left(n - 2 \\right)}}{x_{0}^{2} + x_{1}^{2}} + \\frac{\\left(-1\\right)^{n - 1} \\left(3 x_{0}^{2} \\left(n - 2\\right) + x_{0}^{2} + x_{1}^{2} \\left(n - 2\\right) - x_{1}^{2}\\right) s{\\left(n - 1 \\right)}}{x_{0}^{3} + x_{0} x_{1}^{2}}\\right)$" - ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAABOEAAALACAYAAADVBWZCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACO2klEQVR4nOzde1xUBf7/8feIMngDUxSjBKmsJFILyQUztRLD1C620bdNzbQyp68ptZXrZulW2EVzW0Fzs6ztxtYaW8Y3pbbSzS7oSrVhu1kWlqALFngpVDy/P/wx6zgMzMAczlxez8eDx+6cOTPzOVzGd+9zGZthGIYAAAAAAAAAmKad1QMAAAAAAAAAoY4SDgAAAAAAADAZJRwAAAAAAABgMko4AAAAAAAAwGSUcAAAAAAAAIDJKOEAAAAAAAAAk1HCAQAAAAAAACajhAMAAAAAAABMRgkHAAAAAAAAmIwSzksfffSRrrjiCiUkJMhutysuLk7p6em6/fbbXdbLz8/XqlWrrBny/7vvvvtks9na5LW++eYb2Wy2Zrf53Xfflc1mc35FRESoZ8+eGjdunDZt2tQms8JVdXW15syZo+TkZHXq1EnR0dH6xS9+oby8PB06dKjVz9+Wv4cjRoxw+f06/quystLn52z4nX3llVdMmNgzb/+mrHbDDTfokksucd725fvVlr8boWLv3r268847lZmZqZ49e8pms+m+++4z5bWOf78+9uvDDz90WfeCCy7QrFmzTJkDnpFJGkcmCS2GYeiFF17QhRdeqBNOOEF2u12nnHKKHA6HduzY0ernb+t/b5csWaIrr7xSSUlJstlsGjFihFeP++1vfyubzaaUlJQWvzaZpmlkmuDTt2/fRnPK9OnTXdZbuXKlTjrpJO3fv9+iSQF37a0eIBi88cYbGj9+vEaMGKGHH35YJ554oioqKrRp0ya99NJLWrRokXPd/Px8xcbG6vrrr7du4AD24IMPauTIkTp06JC2bNmi+fPna/jw4SotLVW/fv2sHi9sfPHFF8rMzNS+fft0++23KyMjQz/99JPWrFmj2267TS+//LKKiorUqVMnq0f1Sn5+vmpra12WHThwQJdccolSU1PVu3dviyYLTVu2bNEzzzyjjz76yOpRwkZ1dbVWrFihgQMH6vLLL9eTTz5p+ms2vF8f6/j/CPzd736nUaNG6ZZbbtEZZ5xh+kwgk/gTmSRwHTlyRNdee60KCgr0P//zP1q1apViYmL06aef6pFHHtELL7ygNWvWaOjQoVaP6rXly5erc+fOuvDCC/X666979ZjS0lI9+uijiouLM3m68EWmCV5Dhw7Vo48+6rLs+L+VyZMn66GHHtLDDz+s+fPnt+V4gEeUcF54+OGHlZSUpLVr16p9+/9+y6655ho9/PDDFk7WNg4cOOC3MqZfv376xS9+IUkaNmyYunXrpsmTJ+u5554LyDdGT9tuGIZ+/vlndezY0YKpWqe+vl4TJkxQbW2tPv74Y51++unO+8aMGaPhw4frmmuuUU5OjpYvX97k8xw+fFh2u70txm7y9zA5Odlt2TPPPKNDhw5p2rRpZo8WdhYuXKjzzjtPgwcPtnqUgNLU+8JPP/2kqKgor/eWV1RUqHPnzoqOjpYkJSYm6ocffpDNZlNVVVWblHDHvl97Mnz4cJ1xxhlatGiRVqxYYfpMIJOQSUIrk3jy0EMPqaCgQAsXLtRdd93lXD5ixAhlZ2dryJAhmjBhgr744gt169bN4/P48/elOc29z5eVlaldu6MnIXlzVNvhw4c1ZcoU3Xzzzfrkk09UVVXl13lxFJmmcWZmGn/p1q1bszmlffv2uvnmm/W73/1Od911V9AcYIDQxumoXqiurlZsbKxL2G3Q8I+pdPSw2M8//1zvvfee85DYvn37SpJ+/vln3X777Ro0aJBiYmLUvXt3paen669//avbc9psNt16663605/+pP79+6tTp04aOHCg1qxZ47buG2+8oUGDBslutyspKcltb0CDvLw8XXDBBerVq5c6d+6ss88+Ww8//LDbaYcjRoxQSkqK1q9fr4yMDHXq1Ek33HCDJGnnzp26+uqr1bVrV8XExCg7O7tFp/kdq+EfvF27drks//LLL3XttdeqV69estvt6t+/v/Ly8twe/+OPP+r222/XKaecIrvdrl69emnMmDH64osvJP33cPJ3333X5XGNHR5//fXXq0uXLvrss8+UmZmprl276qKLLpL035/J8uXL1b9/f9ntdj3zzDNez9owx4svvqi5c+cqPj5e0dHRuvjii/Wvf/3LbbvefPNNXXTRRYqJiVGnTp3Uv39/5ebmuqyzadMmjR8/Xt27d1dUVJTOOecc/fnPf272e/7qq6+qrKxMd999t0sB1yA7O1uZmZlauXKl8+fb8P16+OGHdf/99yspKUl2u13vvPOOJO9/Dw3DUH5+vgYNGqSOHTvqhBNO0FVXXaWvv/7aZb2mfg+9tXLlSnXp0kXZ2dk+Pc5X8+fP15AhQ9S9e3dFR0fr3HPP1cqVK2UYhst6ffv21dixY/Xqq69qwIABioqK0imnnKLHH3+82dfYtm2bpkyZon79+qlTp0466aSTNG7cOH322Wdu6zb3NyFJBw8e1P33368zzzxTdrtdPXv21JQpU/Sf//yn2Vl27dqlV199VRMnTmz0/p9//lk5OTnq3bu3OnbsqOHDh2vLli3NPq+n0yv79u3rdhRPZWWlbr75Zp188smKjIxUUlKS5s+fr8OHDzf7Ot6ora3VHXfcoaSkJEVGRuqkk07SrFmz3E5l8PS+sGrVKtlsNq1bt0433HCDevbsqU6dOqmurq7J1/3hhx+0cuVKXXzxxTr55JNd/i4a/k3xVkFBgdLT09W5c2d16dJFo0eP9urn0BITJ07UCy+8oL1795ry/HBFJiGThFImaczBgwf1yCOPqH///rrzzjvd7o+Li1Nubq527dqllStXOpf76/fFm21pyfv8sX+f3li4cKH27NmjBx54wKfHtQaZxhWZxpxMI3n/vuoPv/rVr1RbW6uXXnrJlOcHfMWRcF5IT0/Xk08+qZkzZ+pXv/qVzj33XHXo0MFtvVdffVVXXXWVYmJilJ+fL0nOo4Tq6uq0Z88e3XHHHTrppJN08OBBvfXWW7ryyiv19NNPa9KkSS7P9cYbb6ikpEQLFixQly5d9PDDD+uKK67Qv/71L51yyimSpLfffluXXXaZ0tPT9dJLL6m+vl4PP/ywW3iUpK+++krXXnut8w34k08+0QMPPKAvvvhCTz31lMu6FRUVuu6663TnnXfqwQcfVLt27fTTTz/p4osv1s6dO5Wbm6vTTz9db7zxRqsLju3bt0uSSxlUVlamjIwMJSQkaNGiRerdu7fWrl2rmTNnqqqqSvfee6+ko9dIOv/88/XNN9/orrvu0pAhQ7Rv3z6tX79eFRUVOvPMM32e5+DBgxo/frxuvvlm3X333S7/ABYWFmrDhg2aN2+eevfurV69enk9a4Pf/OY3Gjp0qJ588knV1tbqrrvu0rhx47R161ZFRERIOloe3XjjjRo+fLiWL1+uXr166d///rf++c9/Op/nnXfe0SWXXKIhQ4Zo+fLliomJ0UsvvaTs7GwdOHCgyVOPiouLJUmXX365x3Uuv/xyrVu3Tu+++66uueYa5/LHH39cp59+uh599FFFR0erX79+Pv0e3nzzzVq1apVmzpyphx56SHv27NGCBQuUkZGhTz75xOUQ8sZ+D7315ZdfasOGDZo2bZq6dOni9eNa4ptvvtHNN9+shIQESdKHH36o//3f/9X333+vefPmuaxbWlqqWbNm6b777lPv3r31/PPP67bbbtPBgwd1xx13eHyNnTt3qkePHlq4cKF69uypPXv26JlnntGQIUO0ZcsW52mA3vxNHDlyRJdddpk2bNigO++8UxkZGfr222917733asSIEdq0aVOTR1OsW7dOhw4dcjtNscFvfvMbnXvuuXryySdVU1Oj++67TyNGjNCWLVuc712tUVlZqfPOO0/t2rXTvHnzdOqpp+qDDz7Q/fffr2+++UZPP/20c936+nq3/3BoTLt27Zy/XwcOHNDw4cP13Xff6Te/+Y0GDBigzz//XPPmzdNnn32mt956y6UMa+x9oaSkRNLRa8xceuml+tOf/qT9+/c3+u/GgQMH9Prrr+uFF17Qm2++qYiICI0ZM0YFBQWNHuHpjQcffFC//e1vNWXKFP32t791/gftsGHD9PHHH3v9vA6HQ9dcc406deqk9PR03XPPPTr//PPd1hsxYoTuuusuvfvuuxo3blyLZob3yCRkEil0MkljNm/erB9++EE33XSTx50P48aNU7t27VRcXOxyLcTW/r74ui3evM+3RFlZme6//36tXr3a9BxzLDKNKzKNOZnG1/cqT9avX6+uXbvq559/Vr9+/TR16lTNmjXL+f7VoHfv3jrzzDP1xhtv+LxTHzCFgWZVVVUZ559/viHJkGR06NDByMjIMHJzc429e/e6rHvWWWcZw4cPb/Y5Dx8+bBw6dMiYOnWqcc4557jcJ8mIi4szamtrncsqKyuNdu3aGbm5uc5lQ4YMMeLj442ffvrJuay2ttbo3r270dSPtr6+3jh06JDx7LPPGhEREcaePXuc9w0fPtyQZLz99tsuj1m2bJkhyfjrX//qsvzGG280JBlPP/10k9v7zjvvGJKMgoIC49ChQ8aBAweM999/3zjjjDOM5ORk44cffnCuO3r0aOPkk082ampqXJ7j1ltvNaKiopzzLliwwJBkFBcXN/u677zzjsvy7du3u809efJkQ5Lx1FNPuT2PJCMmJsble+XLrA1zjBkzxmW9P//5z4Yk44MPPjAMwzD27t1rREdHG+eff75x5MgRj9t15plnGuecc45x6NAhl+Vjx441TjzxRKO+vt7jYy+55BJDkvHzzz97XOf//u//DEnGQw89ZBjGf79fp556qnHw4EGXdb39Pfzggw8MScaiRYtcHr9jxw6jY8eOxp133ulc5un30Ft33XWXy/e1JRp+Zi+//LLXj2n421qwYIHRo0cPl59hYmKiYbPZjNLSUpfHjBo1yoiOjjb2799vGEbjv5vHO3z4sHHw4EGjX79+xuzZs53LvfmbePHFFw1Jxl/+8heX5SUlJYYkIz8/v8ltvOWWW4yOHTu6/X42fL/OPfdcl/u++eYbo0OHDsa0adOcy+6991639yhJxr333uv2eomJicbkyZOdt2+++WajS5cuxrfffuuy3qOPPmpIMj7//HOXxza8bzf1dezr5ubmGu3atTNKSkpcnv+VV14xJBlFRUUuMzf2vvD0008bkoxJkya5bY9hGMbBgweNNWvWGNdee63RuXNnIzIy0hg7dqzx3HPPuf2b0pj//Oc/Hr9f5eXlRvv27Y3//d//dVm+d+9eo3fv3sbVV1/d7PP/4x//MG677Tbj1VdfNdavX2889dRTRv/+/Y2IiAjjzTffbHR7bDabcddddzX73Gg9MgmZJJQySWNeeuklQ5KxfPnyJteLi4sz+vfv77ztj98Xb7eluff55jT1t1lfX28MGTLE+J//+R+XbTvrrLNa9FqGQabxhExjTabx9r2qKTNmzDCeeuop47333jMKCwuNX/3qV4Yk47rrrmt0/V/96ldGXFxcs88LtAVOR/VCjx49tGHDBpWUlGjhwoW67LLL9O9//1tz5szR2Wef7fU1Gl5++WUNHTpUXbp0Ufv27dWhQwetXLlSW7dudVt35MiR6tq1q/N2XFycevXqpW+//VaStH//fpWUlOjKK69UVFSUc72uXbs2eiTCli1bNH78ePXo0UMRERHq0KGDJk2apPr6ev373/92WfeEE07QhRde6LLsnXfeUdeuXTV+/HiX5ddee61X294gOztbHTp0UKdOnTR06FDV1tbqjTfecF7P4+eff9bbb7+tK664Qp06ddLhw4edX2PGjNHPP//s/HS+//u//9Ppp5+u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KisrG/0kMm907txZ5513nlavXq1HHnnE+Y/l3r179frrr7u9dsNsDQzD0B//+EevX2/kyJH685//rNdee83lcP4XXnihRfM3uPPOO7Vq1SotXLhQN998s7p27aqRI0dqy5YtGjBggMc9W5KUlZWlefPm6W9/+5vH0xYbjur49NNPNXr0aOfy1157rVVzS0f3UHs7q7cyMjIUExOj5cuX65prrmn0H7wzzjhD/fr10yeffOIWYLxxxRVXKDk5WQsXLtSVV17p9gmpBQUFWrdunaZPn95sGeDL7+HYsWO1cOFCff/997r66qt9ntsblZWVKioq0pVXXtlsQPIHm82m9u3bu1wA9qefftKf/vSnRtf//PPP9cknn7icvvHCCy+oa9euOvfcc5t8neNLyjfeeEPff/+9TjvtNOcyb/4mxo4d67xo+pAhQ7zazmOdeeaZevHFF1VTU6OYmBi3+1988UXl5OQ4f3e//fZbbdy40e1C78fr27evPv30U5dlf/vb37Rv3z63+YuKinTqqad6PGWiwfHhzZNj38PHjh2rBx98UD169PD5P1h9kZ6ervT0dC1ZskRvv/22XnjhBc2dO1e33Xabhg8fruzsbE2aNMnnox1Gjx6t9u3b66uvvmryNKmuXbs6ywdv/PDDD1qzZo0GDRrkdtTAzp079fPPP7f4gyTgGzIJmaQxwZpJGhMZGalf//rX+s1vfqNHHnnE7TT43bt3a86cOYqLi9O0adOafT5vf1/M2BZfDRo0qNFTHWfNmqWamho9/fTTTR6Z2BpkGjJNS/mSaXx5rzr77LN9muPZZ5+VpEYvR/P111+TUxAwKOG8MHr0aJ188skaN26c85N4SktLtWjRInXp0sVlT9XZZ5+tl156SQUFBTrllFMUFRWls88+W2PHjtXq1as1Y8YMXXXVVdqxY4d+97vf6cQTT9SXX37Zorl+97vf6ZJLLtGoUaN0++23q76+Xg899JA6d+6sPXv2ONcbNWqUIiMj9T//8z+688479fPPP2vZsmX64YcfvH6tSZMm6bHHHtOkSZP0wAMPqF+/fioqKtLatWtbNHuDDh066MEHH9TVV1+t3//+9/rtb3+r3//+9zr//PM1bNgw3XLLLerbt6/27t2rbdu26fXXX9ff/vY3SUcDSUFBgS677DLdfffdOu+88/TTTz/pvffe09ixYzVy5Ej17t1bF198sXJzc3XCCScoMTFRb7/9tlavXt2quRt4O6u3unTpokWLFmnatGm6+OKLdeONNyouLk7btm3TJ598oqVLl0qSnnjiCWVlZWn06NG6/vrrddJJJ2nPnj3aunWr/vGPf+jll1/2+BoRERH6y1/+olGjRik9PV2333670tPTVVdXp9dff10rVqzQ8OHDtWjRIq9m9vb3cOjQobrppps0ZcoUbdq0SRdccIE6d+6siooK/f3vf9fZZ5+tW265xafv1/GeeeYZHT58uMlQft9992n+/Pl655133I70a8zx19BpMHz4cF166aVavHixrr32Wt10002qrq7Wo48+2uiRftLRYDR+/Hjdd999OvHEE/Xcc8+puLhYDz30kDp16uRxhrFjx2rVqlU688wzNWDAAG3evFmPPPKIWxD35m/immuu0fPPP68xY8botttu03nnnacOHTrou+++0zvvvKPLLrtMV1xxhcdZRowYIcMw9NFHHykzM9Pt/t27d+uKK67QjTfeqJqaGt17772KiorSnDlzPD6nJE2cOFH33HOP5s2bp+HDh6usrExLly51C8ULFixQcXGxMjIyNHPmTJ1xxhn6+eef9c0336ioqEjLly93fl98DW8N38O//OUvuuCCCzR79mwNGDBAR44cUXl5udatW6fbb7+9RUHfk4iICGVmZiozM1PLly/XG2+8oRdeeEGzZs3SkCFDNGjQIOe6//d//6f9+/dr7969ko5+utgrr7wiSRozZow6deqkvn37asGCBZo7d66+/vprXXLJJTrhhBO0a9cuffzxx+rcubPmz5/f5EzXXnutEhISNHjwYMXGxurLL7/UokWLtGvXLq1atcpt/Ya/EU+fLgf/IpOQSTwJhkzSUEQ2XPbCk7vuukuffPKJ83+zs7MVExOjTz/9VI888oj27t2rNWvWNFqcHM+X35fW5KvmbNq0ybndtbW1MgzD+R6elpamxMREdevWrdFs0q1bNx0+fNjtPjINmaYpgZppWvte9cILL2j16tW69NJLlZiYqB9//FEvv/yyXnrpJV1//fVu1yo8cuSIPv74Y02dOtVv2wq0ihWfBhFsCgoKjGuvvdbo16+f0aVLF6NDhw5GQkKCMXHiRKOsrMxl3W+++cbIzMw0unbtakgyEhMTnfctXLjQ6Nu3r2G3243+/fsbf/zjHz1+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kZEhm82mv//973rooYd0++23mzEjQgShCABgFvIJAAAAAp3PJdw999yjrl27atGiRZozZ44kKT4+Xvfdd59mzpzp9wEBAACaQz4BwA5fAECg87mEs9lsmj17tmbPnq29e/dKkrp27er3wRBaCEUAADORT4DwRtYEAAQDn68J99NPP+nAgQOSjobbPXv2aMmSJVq3bp3fh0NoIBQBAMxGPgHCF1kTABAsfC7hLrvsMj377LOSpB9//FHnnXeeFi1apMsuu0zLli3z+4AIboQiAEBbIJ8AAAAg0Plcwv3jH//QsGHDJEmvvPKKevfurW+//VbPPvusHn/8cb8PCAAA0BzyCRCe2OELAAgmPpdwBw4ccF5jZd26dbryyivVrl07/eIXv9C3337r9wERvAhFAIC2Qj4Bwg9ZE0Aoy8/PV1JSkqKiopSamqoNGzZ49bj3339f7du316BBg8wdEC3icwl32mmnqbCwUDt27NDatWuVmZkpSdq9e7eio6P9PiCCE6EIANCWyCdAeCFrAghlBQUFmjVrlubOnastW7Zo2LBhysrKUnl5eZOPq6mp0aRJk3TRRRe10aTwlc8l3Lx583THHXeob9++GjJkiNLT0yUd3et8zjnn+H1ABB9CEQCgrZFPAABAqFi8eLGmTp2qadOmqX///lqyZIn69OnT7HVub775Zl177bXOHITA097XB1x11VU6//zzVVFRoYEDBzqXX3TRRbriiiv8OhwAAIA3yCdA+GCHL4BQdvDgQW3evFl33323y/LMzExt3LjR4+OefvppffXVV3ruued0//33N/s6dXV1qqurc96ura1t+dDwms8lnCT17t1bvXv3dll23nnn+WUgBDdCEQDAKuQTIPSRNQGEuqqqKtXX1ysuLs5leVxcnCorKxt9zJdffqm7775bGzZsUPv23tU8ubm5mj9/fqvnhW98Ph0V8IRQBAAAAABA69lsNpfbhmG4LZOk+vp6XXvttZo/f75OP/10r59/zpw5qqmpcX7t2LGj1TOjeS06Ei4c5OXlKS8vT/X19VaPEhQo4AAAMB/5BOGMvAkgHMTGxioiIsLtqLfdu3e7HR0nSXv37tWmTZu0ZcsW3XrrrZKkI0eOyDAMtW/fXuvWrdOFF17o9ji73S673W7ORsAjjoTzwOFwqKysTCUlJVaPAgAAIIl8gvBFAQcgXERG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cPTo0Sden4iISDXsJ+wnRERKsNXnYInI+o4ePSpLliyRnJwcuXTpkqSkpIher5c9e/aIiMinn34qnp6esnXrVjl79qy888474uzsLOfOnRMRkQcPHkhgYKBMmjRJCgsLJS0tTYKDgx8750qbNm0eu++kpCQJDAyU1NRU+eOPPyQjI0O2bdsmIiLFxcXi4+MjEydOlGPHjsmFCxdk37598sorr0hNTU29WfLy8kSv18uuXbtERGTTpk3i4eEhFy5ceGL+0tJS8fb2lvHjx0tOTo6cO3dOtmzZImfPnm1Q/srKSunYsaNMmDBBTp8+Lfv375du3brJ9OnTzfcxffp0efHFF+vc7507d6R9+/YyefJkyc/Pl927d0v37t15zhUiIiJhP2E/ISJSBxfhiBRy5swZiYuLEx8fH3FxcZGgoCBZs2aNeX9tba0sXrxY/P39xdnZWcLCwuTHH3+sc4zDhw+LwWAQV1dXiY6Olu3btzeo5N67d0/efPNN6dixo+j1eunevbt89dVX5v3nzp2TcePGSdu2bcXNzU169uwp8+bNE5PJVO+xQkJCZNasWXW2jxs3TgYNGvTEYiwicvLkSYmNjZVWrVqJh4eHREdHm4txQ/KfOnVKYmJixNXVVby8vGTmzJly584d8/76Sq6IyJEjRyQsLEz0er2Eh4fLzp07WXKJiIiE/USE/YSISBU6EZ4MgIiIiIiIiIiISEs8JxwREREREREREZHGuAhHRERERERERESkMS7CERERERERERERaYyLcERERERERERERBrjIhwREREREREREZHGuAhHRERERERERESkMS7CERERERERERERaYyLcERERERERERERBrjIhwREREREREREZHGuAhHRERERERERESkMS7CERERERERERERaYyLcERERERERERERBr7H8rrXYYrh/iBAAAAAElFTkSuQmCC", "text/plain": [ - "(-1)**(n + 1)*((-1)**(n - 3)*(n + (n - 2)**3 - 2*(n - 2)**2 - 2)*s(n - 3)/(x0**3 + x0*x1**2) + (-1)**(n - 2)*(-n + 3*(n - 2)**2 + 2)*s(n - 2)/(x0**2 + x1**2) + (-1)**(n - 1)*(3*x0**2*(n - 2) + x0**2 + x1**2*(n - 2) - x1**2)*s(n - 1)/(x0**3 + x0*x1**2))" + "
" ] }, - "execution_count": 11, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "recur_laplace" + "order_plot = 7\n", + "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=2*order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + "x_grid, y_grid, plot_me_lap = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + " \n", + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", + "cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs2 = ax2.contourf(x_grid, y_grid, plot_me_hem.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "\n", + "fig.subplots_adjust(right=0.8)\n", + "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", + "#fig.colorbar(cs1, cax=cbar_ax)\n", + "\n", + "ax1.set_xscale('log')\n", + "ax1.set_yscale('log')\n", + "ax1.set_xlabel(\"source x-coord\")\n", + "ax1.set_ylabel(\"source y-coord\")\n", + "\n", + "\n", + "ax2.set_xscale('log')\n", + "ax2.set_yscale('log')\n", + "ax2.set_xlabel(\"source x-coord\")\n", + "ax2.set_ylabel(\"source y-coord\")\n", + "\n", + "ax1.set_title('Standard Recurrence Order 7, Laplace (blue=err<1e-5)')\n", + "ax2.set_title('Standard Recurrence, Order 14, Laplace (blue=err" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_14919/1892395105.py:6: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_14919/1892395105.py:7: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs2 = ax2.contourf(x_grid, y_grid, plot_me_hem.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n" + ] }, { "data": { - "image/png": "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Fu+//77tVljR8114q2jOnDlYLJYSfwb//ve/4+bmxokTJ2x93333HQMHDsTX1xcvLy969epV7Hfa8ePH+fOf/0xoaCju7u40atSIXr168d133130PZ85cyYWi4V58+bh4mJ/I8TFxYW5c+disVh44YUXbP3PPPMMFouF2NhY7rjjDvz8/AgKCmL8+PGkpaWV+lyZmZn4+/tz//33Fzt26NAhnJ2dmT17tq1v2LBheHt78+677170NVQlJS4VKD4+HoA2bdrY+lavXk2vXr1ITU3l7bff5quvvqJTp06MGjXqiuajFBYWUlBQUOzrQtu3b+dvf/sbEydOZPny5dxyyy22Y1OnTiUhIYG3336bpUuXEhgYyMyZM7nnnnsIDw/niy++4LXXXuPXX38lMjKy2PydvLw8hg8fzoABA/jqq6+YPn16ibEOHTqUwMBAFixYUOzYwoUL6dKlCx06dABg8ODBbNu2jRdffJFVq1Yxb948OnfuTGpqaqnvRWJiIrGxsURFReHl5VXiOZGRkQQGBrJq1apLvgbDMBgxYoQtyfjyyy+57rrriImJKXbduLg4rr32Wnbt2sXLL7/M119/zZAhQ5g4cWKJ70dJ7/mV2LdvH4MHD+Zf//oXy5cvZ9KkSXz66acMGzas2Ln5+fkMHjyYgQMHsnjxYh5++GHeeecdRo0addHnyM3N5dSpU0yZMoXFixfzn//8h969e3PzzTfzwQcf2J17991388gjj3DttdeyaNEi/vvf/zJ8+HAOHTpkO+f555/njjvuICwsjE8//ZQPP/yQjIwM+vTpU665SAUFBaxbt47w8PDLetzw4cMBLpm4rFy5kvz8/BJvzcKlfxbHjx9PdnZ2sT9WUlNT+eqrr7jrrrtwdXUFLu+9yc/PZ/jw4QwcOJCvvvqK8ePH8+qrrzJr1qzLeh9KMnz4cAzDYN26dba++++/n0mTJnHDDTewePFi5s6dS2xsLD179iz2x1piYiJ33XUXd955J8uWLePBBx8s9hyurq7cdddd/O9//yuW1P3nP/8hJyeHcePGAWX/Hty4cSOenp4MHjyYjRs3snHjxlJvT9111124ubkV+z1stVr56KOPGDZsGA0bNgTgo48+IioqCl9fX95//30+/fRTAgICiI6OtkteRo8ezeLFi3n66adZuXIl7733HjfccAMnT54s9b22Wq2s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kr+/Dh06hJeXl+33ZZELf6bd3d2B4j//F3rkkUfYt2+f7fb5W2+9RWRkJF26dCl2btH32aWuWVVUDn0F2rVrZ5uQ279/f6xWK++99x6ff/45t956q+3+6NSpU0stw73mmmsqNcbS/kos6VjRD0BiYmKxc48dO2Z7PWW5dknGjRvHgw8+yO7duzl48CCJiYl2v7gBmjdvzr/+9S8Afv/9dz799FOeeeYZ8vLyePvtt0u8bkhICOHh4axcuZLs7OwS57ls3LiR5ORkbrvttku+hgYNGlBQUMDJkyftfilc+Munfv36ODs7M3r06FJHGVq2bHnJ5yuvH374gWPHjrFmzRrbKAtQ6nygi72mC3/5ne+jjz6iZcuWLFq0yC7+CyeBNmrUCKvVSlJSUqkfXEXfQ59//jnNmze/+Au8iAULFnDvvfcyduxY3n777XK9r0UThi+1rkjDhg3Zvn17ecK0qV+/PjfddBMffPABzz33HAsWLMDDw8Puw7mi3puKsGTJEiwWC3379gXM2CwWC+vWrbN9MJ7vwr7L+fe44447mDx5MgsXLmTGjBl8+OGHjBgxwm5JibJ+D16uop/f119/ndTUVD755BNyc3Ptfi8V/bu88cYbXHfddSVep2iku2HDhsyZM4c5c+aQkJDAkiVLePzxx0lJSWH58uWlxtC/f3+WL1/OkSNHSpzncuTIEbZt20ZMTIwtobpSAwYMICIigjfffBNvb2+2b9/ORx99VOK5RYnZhZ8BjqIRlwr04osvUr9+fZ5++mkKCwu55ppruPrqq/nll19K/IusW7du+Pj4ODpsm8jISDw9PYt98x45coQffvih1Kqhsrrjjjvw8PBg4cKFLFy4kCZNmhAVFVXq+W3atOGpp56iffv2l/zgePLJJzl9+jRTpkwpdiwrK4uJEyfi5eV10UlrRYomYRatcVHkk08+sWt7eXnRv39/duzYQYcOHUr8971YQnClin6BX/ih8c4775T6mNJe08U+vC0WC25ubnYfGElJScUqOoqG1ufNm1fqtaKjo3FxceHAgQOl/kxcysKFC7n33nu56667eO+998qVtKxatYr33nuPnj170rt374ue27ZtW06ePHnRSo2yGDduHMeOHWPZsmV89NFHjBw5En9/f9vxinhvKsKCBQv49ttvueOOO2yjmUOHDsUwDI4ePVpiXO3bty/389WvX58RI0bwwQcf8PXXX5OUlFTsNlFZvwfB/Hm4nJGBcePGkZOTw3/+8x8WLlxIZGQkbdu2tR3v1asX/v7+xMXFlfrv4ubmVuy6zZo14+GHH+bGG2+85O+vqVOnYhgGDz74YLHJt1arlQceeADDMJg6dWqZX1dZTJw4kW+++YapU6cSFBRU7A+7IgcPHqRBgwbFpiI4ikZcKlD9+vWZOnUqjz32GJ988gl33XUX77zzDjExMURHR3P33XfTpEkTTp06xe7du9m+fTufffZZuZ5r3759xeZPgDlsXd6Fr/z9/fnHP/7BE088wZgxY7jjjjs4efIk06dPx8PDg2nTppXruudff+TIkSxcuJDU1FSmTJmCk9O53PnXX3/l4Ycf5rbbbuPqq6/Gzc2NH374gV9//ZXHH3/8ote+44472L59Oy+99BKHDh1i/PjxBAUFsXfvXl599VUOHDjAJ598QqtWrS4ZZ1RUFH379uWxxx4jKyuLbt26sX79ej788MNi57722mv07t2bPn368MADD9CiRQsyMjLYv38/S5cuLXFF18tx4MABPv/882L9YWFh9OzZk/r16zNhwgSmTZuGq6srH3/8Mb/88kuJ13Jzc+Pll18mMzOTa6+9lg0bNvDcc88RExNz0Q/vopL6Bx98kFtvvZXDhw/zz3/+k5CQELtKsz59+jB69Giee+45kpOTGTp0KO7u7uzYsQMvLy/+8pe/0KJFC5599lmefPJJDh48aJsblpyczObNm6lXr16p1WlgznO455576NSpE/fffz+bN2+2O965c2e7RK6wsND2c5Kbm0tCQgLffvstn376Ke3atSvTsgT9+vXDMAx+/vnnEhPthISEEn8WGzVqZLcgZFRUFE2bNuXBBx8kKSmp2Gjjlb43l+vMmTO2uM+cOcPBgwdZvHgxX3/9Nddff73dCGevXr3485//zLhx49i6dSt9+/alXr16JCYm8tNPP9G+fXseeOCBcscyfvx4Fi1axMMPP0zTpk254YYb7I6X9XsQzHkza9asYenSpYSEhODj43PRke22bdsSGRnJzJkzOXz4MPPnz7c77u3tzRtvvMHYsWM5deoUt956K4GBgRw/fpxffvmF48ePM2/ePNLS0ujfvz933nknbdu2xcfHhy1btrB8+fJLLnzZq1cv5syZw6RJk+jduzcPP/wwzZo1sy1A9/PPPzNnzhx69ux5me/sxd11111MnTqVtWvX8tRTT5WYgIG5ou/1119foSPGV8RBk4JrtNIWoDMMc2Z2s2bNjKuvvtooKCgwDMMwfvnlF+P22283AgMDDVdXVyM4ONgYMGCA8fbbb9seV1FVRedXdDRv3twYMmRIqdcobRG79957z+jQoYPh5uZm+Pn5GTfddJMRGxtrd86lKjZKs3LlSlusv//+u92x5ORk4+677zbatm1r1KtXz/D29jY6dOhgvPrqq7b38lKWLVtmDB482GjQoIHh6upqNGnSxBg9enSx+C/1GlJTU43x48cb/v7+hpeXl3HjjTcae/bsKXEBuvj4eGP8+PFGkyZNDFdXV6NRo0ZGz549jeeee852TnkWDrzYv3NRDBs2bDAiIyMNLy8vo1GjRsa9995rbN++3QCMBQsWFHutv/76q9GvXz/D09PTCAgIMB544IFilQIlVRW98MILRosWLQx3d3ejXbt2xrvvvmurajif1Wo1Xn31VSMiIsL2/RMZGWmr0CiyePFio3///oavr6/h7u5uNG/e3Lj11luN77777qLvSVE1TWlf8fHxpZ7r6elpNGvWzBg2bJjx73//28jNzS3Tv4PVajVatGhhPPjgg3b9l6oq+tOf/lTsWk888YQBGKGhoXaVLJf73pT2vVvSv0lJiip/ir7q1atntGrVyrj11luNzz77rNTY/v3vfxs9evQw6tWrZ3h6ehqtW7c2xowZY2zdutXu2qVVLF1YVVTEarUaoaGhF61KK+v34M6dO41evXoZXl5eBmB7vov9jp0/f77te+TCCsEiP/74ozFkyBAjICDA9rtlyJAhtp/pnJwcY8KECUaHDh0MX19fw9PT07jmmmuMadOmlXkBvo0bNxq33nqrERQUZLi4uBiBgYHGzTffbGzYsKHYuUWv/fjx43b9RZ9P5/8sXKxS8O677zZcXFyMI0eOlHh8//79BmD873//K9NrqAoWwyjj1HoRqbHuvvtuPv/8czIzMx0dSo308ssvM2PGDI4ePYqnp6ejwxGpEHl5ebRo0YLevXuXOvr4j3/8gw8++IADBw4UWxzPUTTHRUTkEh566CH8/PyKrYgsUhMdP36cn376iQceeIDk5ORSb8Wnpqby1ltv8fzzz1ebpAWUuIiIXJKHhwcffvhhiRU1IjXNN998Q58+ffj222+ZO3duiSXQYC4xMXXq1BI3EXUk3SoSERGRGkMjLiIiIlJjKHERERGRGkOJi4iIiNQY1WeacAUpLCzk2LFj+Pj4VJ/FckREROSiDMMgIyODxo0b2y1OeqFal7gcO3as2EZ6IiIiUjMcPnz4oivA17rEpWjvn8OHD5d552IRERFxrPT0dEJDQy+5h1+tS1yKbg/5+voqcREREalhLjXNQ5NzRUREpMZQ4iIiIiI1hhIXERERqTFq3RyXsrJareTn5zs6jBrF1dUVZ2dnR4chIiJ1WJ1LXAzDICkpidTUVEeHUiP5+/sTHBysNXJERMQh6lziUpS0BAYG4uXlpQ/gMjIMg+zsbFJSUgAICQlxcEQiIlIX1anExWq12pKWBg0aODqcGsfT0xOAlJQUAgMDddtIRESqXJ2anFs0p8XLy8vBkdRcRe+d5geJiIgj1KnEpYhuD5Wf3jsREXGkOnWrSERERMqp0Ap/bIDMZPAOguY9wanqpwwocREREZGLi1sCy/8O6cfO9fk2hkGzIGx4lYZSJ28V1URr165l2LBhNG7cGIvFwuLFiyv0+uvXr8fFxYVOnTpV6HVFRKSGi1sCn46xT1oA0hPN/rglVRqOEpdysBYabDxwkq92HmXjgZNYC41Kf86srCw6duzIm2++WeHXTktLY8yYMQwcOLDCry0iIjVYodUcaaGkz7mzfcsfN8+rIrpVdJmW70pk+tI4EtNybH0hfh5MGxbGoIjKW9skJiaGmJiYUo/n5eXx1FNP8fHHH5OamkpERASzZs2iX79+l7z2/fffz5133omzs3OFj+SIiEgN9seG4iMtdgxIP2qe17JPlYSkEZfLsHxXIg98tN0uaQFISsvhgY+2s3xXooMig3HjxrF+/Xr++9//8uuvv3LbbbcxaNAg9u3bd9HHLViwgAMHDjBt2rQqilRERGqMzOSKPa8CKHEpI2uhwfSlcRcbLGP60rgquW10oQMHDvCf//yHzz77jD59+tC6dWumTJlC7969WbBgQamP27dvH48//jgff/wxLi4afBMRkQt4B1XseRVAiUsZbY4/VWyk5XwGkJiWw+b4U1UX1Fnbt2/HMAzatGmDt7e37evHH3/kwIEDAHb9EyZMwGq1cueddzJ9+nTatGlT5TGLiEgN0LynWT1EaWt4WcC3iXleFdGf2WWUklF60lKe8ypSYWEhzs7ObNu2rdgy/N7e3gDs3LnT1ufr60tGRgZbt25lx44dPPzww7brGIaBi4sLK1euZMCAAVX2GkREpBpycjZLnj8dg5m8nH9X4WwyM+iFKl3PRYlLGQX6eFToeRWpc+fOWK1WUlJS6NOn5MlRV111lV27sLCQ3377za5v7ty5/PDDD3z++ee0bNmy0uIVEZEaJGw43P5BKeu4vFDl67gocSmj7i0DCPHzICktp8R5LhYg2M+D7i0DKuX5MzMz2b9/v60dHx/Pzp07CQgIoE2bNvzpT39izJgxvPzyy3Tu3JkTJ07www8/0L59ewYPHlzsek5OTkRERNj1BQYG4uHhUaxfRETquLDh0HaIVs6tSZydLEwbFsYDH20vbbCMacPCcHaqnL18tm7dSv/+/W3tyZMnAzB27FgWLlzIggULeO6553j00Uc5evQoDRo0IDIyssSkRURE5LI5OVdZyfPFWAzDqPoymEqUnp6On58faWlp+Pr62h3LyckhPj6eli1b4uFRvls6jlrHpbqoiPdQRETkQhf7/D6fRlwu06CIEG4MC2Zz/ClSMnII9DFvD1XWSIuIiIico8SlHJydLES2buDoMEREROocreMiIiIiNYYSFxEREakxlLiIiIhI2RzdDguHmv91ECUuIiIiUja//BcOrYNfFzksBE3OFRERkdKlJkD2ScACsV+Yfbv+Bx3vAAzwagD+zaosHCUuIiIiUro57Yv3ZR2H+defaz+TVmXhOPRWkYuLC506daJTp07ce++9tv5XX32V8PBwwsLCmDhxIrVsjTwREZGa4+Z3wVLK0v5OLubxKuTQERd/f3+7XYsBjh8/zptvvklsbCyurq707duXTZs2ERkZ6ZggRURE6qr8M5C8C0obQLj3e2jcqUpDqpaTcwsKCsjJySE/P5/8/HwCAwMdHZLDrV27lmHDhtG4cWMsFguLFy+ukOt+/PHHdOzYES8vL0JCQhg3bhwnT56skGuLiEgNFr8W5kbC+teAwrOdRavEOy59KPczl+WDdO7cubY9bbp27cq6devsjqenp9O1a1d69+7Njz/+CECjRo2YMmUKzZo1o3Hjxtxwww20bt26vGFWjkIrxK+D3z43/1torfSnzMrKomPHjrz55psVds2ffvqJMWPGcM899xAbG8tnn33Gli1b7G7biYhIHXPmNHz1MLw/DE7Hg09jGP4m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Qo4dO4aPjw8Wi6VCr33ttdeyZcuWCr1mXaX3snR19b2pza87PT2d0NBQDh8+XGG71ovUNoZhkJGRQePGjXFyKn0mS60bcXFycqJp06aVcm1nZ2f90qkgei9LV1ffm7rwun19fWv9axS5EhcbaSmiybmX4aGHHnJ0CLWG3svS1dX3pq6+bhG5PLXuVpGISHWTnp6On58faWlpGnERuUIacRERqWTu7u5MmzYNd3d3R4ciUuNpxEVERERqDI24iIiISI2hxEVERERqDCUuDvT1119zzTXXcPXVV/Pee+85OhwREZFqT3NcHKSgoICwsDBWr16Nr68vXbp04eeffyYgIMDRoYmIiFRbGnFxkM2bNxMeHk6TJk3w8fFh8ODBrFixwtFhiYgDjBw5kvr163Prrbc6OhSRaq9WJi5Hjx7lrrvuokGDBnh5edGpUye2bdtWYddfu3Ytw4YNo3HjxlgsFhYvXlzieXPnzqVly5Z4eHjQtWtX1q1bZzt27NgxmjRpYms3bdqUo0ePVliMIlJzTJw4kQ8++MDRYYjUCLUucTl9+jS9evXC1dWVb7/9lri4OF5++WX8/f1LPH/9+vXk5+cX69+zZw9JSUklPiYrK4uOHTvy5ptvlhrHokWLmDRpEk8++SQ7duygT58+xMTEkJCQAJS8+2VF760kIjVD//798fHxcXQYIjVCrUtcZs2aRWhoKAsWLKB79+60aNGCgQMH0rp162LnFhYW8tBDD3HnnXditVpt/b///jv9+/cv9S+gmJgYnnvuOW6++eZS43jllVe45557uPfee2nXrh1z5swhNDSUefPmAdCkSRO7EZYjR44QEhJS3pctIg5SlhHYi42+isjlqXWJy5IlS+jWrRu33XYbgYGBdO7cmXfffbfEc52cnFi2bBk7duxgzJgxFBYWcuDAAQYMGMDw4cN57LHHyhVDXl4e27ZtIyoqyq4/KiqKDRs2ANC9e3d27drF0aNHycjIYNmyZURHR5fr+UTEcS41Anup0VcRuTy1LnE5ePAg8+bN4+qrr2bFihVMmDDhovePGzduzA8//MD69eu58847GTBgAAMHDuTtt98udwwnTpzAarUSFBRk1x8UFGS7/eTi4sLLL79M//796dy5M3/7299o0KBBuZ9TRBzjUiOwlxp9FZHL4+LoACpaYWEh3bp14/nnnwegc+fOxMbGMm/ePMaMGVPiY5o1a8YHH3zA9ddfT6tWrfjXv/5VIfNNLryGYRh2fcOHD2f48OFX/DwiUj0Vjb4+/vjjdv3nj76KyOWpdSMuISEhhIWF2fW1a9fuosOyycnJ/PnPf2bYsGFkZ2fz17/+9YpiaNiwIc7OzsUm96akpBQbhRGR2qsso68A0dHR3HbbbSxbtoymTZuyZcuWqg5VpMaodSMuvXr1Yu/evXZ9v//+O82bNy/x/BMnTjBw4EDatWvHZ599xr59++jXrx/u7u689NJL5YrBzc2Nrl27smrVKkaOHGnrX7VqFTfddFO5rikiNdelRl+1hpNI2dW6xOWvf/0rPXv25Pnnn+f2229n8+bNzJ8/n/nz5xc7t7CwkEGDBtG8eXMWLVqEi4sL7dq147vvvqN///40adKkxNGXzMxM9u/fb2vHx8ezc+dOAgICaNasGQCTJ09m9OjRdOvWjcjISObPn09CQgITJkyovBcvItWKRl9FKoFRCy1dutSIiIgw3N3djbZt2xrz588v9dyVK1caZ86cKda/Y8cOIyEhocTHrF692gCKfY0dO9buvLfeesto3ry54ebmZnTp0sX48ccfr+h1iUj1BhhffvmlXV/37t2NBx54wK6vXbt2xuOPP16FkYnUHtqrSETkCpw/Atu5c2deeeUV+vfvbxuBXbRoEaNHj+btt9+2jb6+++67xMbGlnoLW0RKp8RFROQKrFmzhv79+xfrHzt2LAsXLgTMBehefPFFEhMTiYiI4NVXX6Vv375VHKlI7aDERURERGqMWlcOLSIiIrWXEhcRERGpMZS4iIiISI2hxEVERERqDCUuIiIiUmMocREREZEaQ4mLiIiI1BhKXERERKTGUOIiIiIiNYYSFxEREakxlLiIiIhIjaHERURERGoMJS4iIiJSY/w/JFlFKIGhHkIAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABOEAAALACAYAAADVBWZCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACOlklEQVR4nOzde1iUdf7/8deIMngCUxQjBamsJDwUkoGZWonhqYNttJaaaeUyZUpt5boddC3sZNQ6aG6W23ZiK2M7uCkddbMDklQb9t0sC0vQBQs8FCrevz/6Mes4MzADM8zp+bgurpp77rnnfQ84n/f9ms99j8kwDEMAAAAAAAAAfKadvwsAAAAAAAAAQh0hHAAAAAAAAOBjhHAAAAAAAACAjxHCAQAAAAAAAD5GCAcAAAAAAAD4GCEcAAAAAAAA4GOEcAAAAAAAAICPEcIBAAAAAAAAPkYIBwAAAAAAAPgYIZybPvroI11yySVKSEiQ2WxWXFyc0tPTdfPNN9utV1BQoNWrV/unyP/v7rvvlslkapPn+vbbb2UymZrd53fffVcmk8n2ExERoZ49e2rixInavHlzm9QKezU1NZo/f76Sk5PVqVMnRUdH6+yzz5bVatWhQ4davf22/Dts9I9//EMjR45UdHS0OnfurNNPP10rV65s0bYa/2ZffPFFL1fZNHf/TfnbNddcowsvvNB225PXyx9/G8Fu7969uvXWW5WZmamePXvKZDLp7rvv9slzHft+ffTPhx9+aLfuueeeq7lz5/qkDrhGT+IcPUloMQxDzz77rM477zwdd9xxMpvNOvHEE2WxWLRjx45Wb7+tx9v8/HxdeumlSkpKkslk0qhRo5yut2bNGv32t7/VySefrI4dO6pfv3668sor9dVXX7X4uelpmkZPE3z69evntE+ZPXu23XqrVq3SCSecoP379/upUsARIZwbXn/9dWVkZKiurk7333+/1q9fr0ceeUTDhw9XYWGh3bqB0PAGsnvvvVcffPCB3n33Xd1xxx3atGmTRo4c2arGAp778ssvdcYZZ+ixxx7TlVdeqddff13PP/+8zjzzTN10000aM2aMDhw44O8yPbJkyRJdeumlSklJ0d///ne98sorysnJ0cGDB/1dWsjZsmWL/vrXv2rx4sX+LiVs1NTUaOXKlaqvr9fFF1/cJs/Z+H599E9KSordOn/6059UUFCg//u//2uTmkBP4k30JIHryJEj+u1vf6srr7xSvXv31urVq7Vu3TrNnTtXr7zyigYNGqT333/f32V6ZMWKFfruu+903nnnqWfPni7Xu++++3TgwAEtWLBAb7zxhhYvXqwtW7bozDPP1BdffNGGFYcHeprgNXz4cIc+5bbbbrNbZ/r06ercubPuv/9+P1UJOGrv7wKCwf3336+kpCStW7dO7dv/7yW74oorwuIf9IEDB9SpUyevbKt///46++yzJUkjRoxQt27dNH36dD399NNauHChV57Dm1ztu2EY+uWXX9SxY0c/VNU6DQ0Nmjx5surq6vTxxx/rlFNOsd03btw4jRw5UldccYVyc3O1YsWKJrdz+PBhmc3mtii7yb/D0tJSLViwQHl5ebr11ltty88///w2qS3cLFmyRGeddZaGDh3q71ICSlPvCz///LOioqLc/rS8srJSnTt3VnR0tCQpMTFRP/74o0wmk6qrq/X44497tXZnjn6/dmXkyJE69dRT9dBDD7V41ik8Q09CT3KsYO5JXLnvvvtUWFioJUuW2B1Ujxo1StnZ2Ro2bJgmT56sL7/8Ut26dXO5HW/+vTSnuff58vJytWv36/yHYz/QONqrr76qXr162S0777zz1K9fPz388MNt8v4fTuhpnPNlT+Mt3bp1a7ZPad++va6//nr96U9/0m233dZm7wdAU5gJ54aamhrFxsbaNbuNGgdT6ddpsV988YXee+8925TYfv36SZJ++eUX3XzzzRoyZIhiYmLUvXt3paen6x//+IfDNk0mk2644Qb97W9/04ABA9SpUycNHjxYr732msO6r7/+uoYMGSKz2aykpCQ9+OCDTvfBarXq3HPPVa9evdS5c2cNHDhQ999/v8Nph6NGjVJKSoo2bNigjIwMderUSddcc40kaefOnbr88svVtWtXxcTEKDs7W1VVVW6/js40Dni7du2yW/7VV19pypQp6tWrl8xmswYMGCCr1erw+J9++kk333yzTjzxRJnNZvXq1Uvjxo3Tl19+Kel/08nfffddu8c5mx5/9dVXq0uXLvr888+VmZmprl272kKcxt/JihUrNGDAAJnNZv31r391u9bGOp577jktWLBA8fHxio6O1gUXXOB0Bskbb7yh888/XzExMerUqZMGDBigvLw8u3U2b96sSZMmqXv37oqKitIZZ5yhv//9782+5i+//LLKy8t1++232wVwjbKzs5WZmalVq1bZfr+Nr9f999+vxYsXKykpSWazWe+8844k9/8ODcNQQUGBhgwZoo4dO+q4447TZZddpm+++cZuvab+Dp1ZtmyZzGazbrzxxmb339sWLlyoYcOGqXv37oqOjtaZZ56pVatWyTAMu/X69eunCRMm6OWXX9agQYMUFRWlE088UY8++mizz7Ft2zbNmDFD/fv3V6dOnXTCCSdo4sSJ+vzzzx3Wbe7fhCQdPHhQixcv1mmnnSaz2ayePXtqxowZ+u9//9tsLbt27dLLL7+sqVOnOr3/l19+UW5urnr37q2OHTtq5MiR2rJlS7PbdXV6Zb9+/XT11VfbLauqqtL111+vPn36KDIyUklJSVq4cKEOHz7c7PO4o66uTrfccouSkpIUGRmpE044QXPnznU4lcHV+8Lq1atlMpm0fv16XXPNNerZs6c6deqk+vr6Jp/3xx9/1KpVq3TBBReoT58+dv8uGscUdxUWFio9PV2dO3dWly5dNHbsWLd+Dy0xdepUPfvss9q7d69Ptg979CT0JKHUkzhz8OBBPfDAAxowYIDdB2uN4uLilJeXp127dmnVqlW25d76e3FnX1ryPn/0v8+mHBvASVJ8fLz69OnjldNwm0JPY4+exjc9jeT++6o3XHnllaqrq9Pzzz/vk+0DnmImnBvS09P1+OOPa86cObryyit15plnqkOHDg7rvfzyy7rssssUExOjgoICSbLNEqqvr9eePXt0yy236IQTTtDBgwf15ptv6tJLL9WTTz6padOm2W3r9ddfV0lJiRYtWqQuXbro/vvv1yWXXKL/+7//04knnihJeuutt3TRRRcpPT1dzz//vBoaGnT//fc7NI+S9PXXX2vKlCm2N+BPP/1U99xzj7788ks98cQTdutWVlbqqquu0q233qp7771X7dq1088//6wLLrhAO3fuVF5enk455RS9/vrrys7ObtVru337dkmyC4PKy8uVkZGhhIQEPfTQQ+rdu7fWrVunOXPmqLq6WnfddZekX6+RdM455+jbb7/VbbfdpmHDhmnfvn3asGGDKisrddppp3lcz8GDBzVp0iRdf/31uv322+0GwKKiIm3cuFF33nmnevfurV69erlda6M//OEPGj58uB5//HHV1dXptttu08SJE7V161ZFRERI+vXaBddee61GjhypFStWqFevXvrPf/6jf//737btvPPOO7rwwgs1bNgwrVixQjExMXr++eeVnZ2tAwcOOAzwRysuLpakJk9pu/jii7V+/Xq9++67uuKKK2zLH330UZ1yyil68MEHFR0drf79+3v0d3j99ddr9erVmjNnju677z7t2bNHixYtUkZGhj799FPFxcXZ1nX2d+jKhg0bNGDAAL300kv605/+pG3btun444/XVVddpUWLFikyMtLlY1vr22+/1fXXX6+EhARJ0ocffqgbb7xRP/zwg+688067dcvKyjR37lzdfffd6t27t5555hnddNNNOnjwoG655RaXz7Fz50716NFDS5YsUc+ePbVnzx799a9/1bBhw7Rlyxadeuqpktz7N3HkyBFddNFF2rhxo2699VZlZGTou+++01133aVRo0Zp8+bNTc6mWL9+vQ4dOqTRo0c7vf8Pf/iDzjzzTD3++OOqra3V3XffrVGjRmnLli22967WqKqq0llnnaV27drpzjvv1EknnaQPPvhAixcv1rfffqsnn3zStm5DQ4PDgYMz7dq1s/19HThwQCNHjtT333+vP/zhDxo0aJC++OIL3Xnnnfr888/15ptv2oVhzt4XSkpKJP16jZnx48frb3/7m/bv3+903Dhw4IBeffVVPfvss3rjjTcUERGhcePGqbCwUMnJyS16je6991798Y9/1IwZM/THP/7RdkA7YsQIffzxx25v12Kx6IorrlCnTp2Unp6uO+64Q+ecc47DeqNGjdJtt92md999VxMnTmxRzXAfPQk9iRQ6PYkzpaWl+vHHH3Xddde5/PBh4sSJateunYqLi+2uhdjavxdP98Wd93lv+Oabb/Tdd9/5/HIE9DT26Gl809N4+l7lyoYNG9S1a1f98ssv6t+/v2bOnKm5c+fa3r8a9e7dW6eddppef/31Jj/UB9qMgWZVV1cb55xzjiHJkGR06NDByMjIMPLy8oy9e/farXv66acbI0eObHabhw8fNg4dOmTMnDnTOOOMM+zuk2TExcUZdXV1tmVVVVVGu3btjLy8PNuyYcOGGfHx8cbPP/9sW1ZXV2d0797daOpX29DQYBw6dMh46qmnjIiICGPPnj22+0aOHGlIMt566y27xyxfvtyQZPzjH/+wW37ttdcakownn3yyyf195513DElGYWGhcejQIePAgQPG+++/b5x66qlGcnKy8eOPP9rWHTt2rNGnTx+jtrbWbhs33HCDERUVZat30aJFhiSjuLi42ed955137JZv377doe7p06cbkownnnjCYTuSjJiYGLvXypNaG+sYN26c3Xp///vfDUnGBx98YBiGYezdu9eIjo42zjnnHOPIkSMu9+u0004zzjjjDOPQoUN2yydMmGAcf/zxRkNDg8vHXnjhhYYk45dffnG5zj//+U9DknHfffcZhvG/1+ukk04yDh48aLeuu3+HH3zwgSHJeOihh+wev2PHDqNjx47Grbfealvm6u/QFbPZbHTt2tU47rjjjGXLlhlvv/22sWDBAiMiIsKYMmWKW9s4VuPv7IUXXnD7MY3/thYtWmT06NHD7neYmJhomEwmo6yszO4xY8aMMaKjo439+/cbhuH8b/NYhw8fNg4ePGj079/fmDdvnm25O/8mnnvuOUOS8dJLL9ktLykpMSQZBQUFTe7j7373O6Njx44Of5+Nr9eZZ55pd9+3335rdOjQwZg1a5Zt2V133eXwHiXJuOuuuxyeLzEx0Zg+fbrt9vXXX2906dLF+O677+zWe/DBBw1JxhdffGH32Mb37aZ+jn7evLw8o127dkZJSYnd9l988UVDkrF27Vq7mp29Lzz55JOGJGPatGkO+2MYhnHw4EHjtddeM6ZMmWJ07tzZiIyMNCZMmGA8/fTTDmOKM//9739dvl4VFRVG+/btjRtvvNFu+d69e43evXsbl19+ebPb/+STT4ybbrrJePnll40NGzYYTzzxhDFgwAAjIiLCeOONN5zuj8lkMm677bZmt43WoyehJwmlnsSZ559/3pBkrFixosn14uLijAEDBthue+Pvxd19ae59vjnu/ts0DMM4dOiQMWrUKCM6OtqoqKho0fPR0zhHT+Ofnsbd96qm5OTkGE888YTx3nvvGUVFRcaVV15pSDKuuuoqp+tfeeWVRlxcXLPbBdoCp6O6oUePHtq4caNKSkq0ZMkSXXTRRfrPf/6j+fPna+DAgaqurnZrOy+88IKGDx+uLl26qH379urQoYNWrVqlrVu3Oqw7evRode3a1XY7Li5OvXr10nfffSdJ2r9/v0pKSnTppZcqKirKtl7Xrl2dzkTYsmWLJk2apB49eigiIkIdOnTQtGnT1NDQoP/85z926x533HE677zz7Ja988476tq1qyZN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l5bsiye9iicaA7gnn3xSq1at0lVXXeWT5zkaPY0jepqm72tJT+PJe9Wrr75q9zq626c46/v37Nkjs9lMAIeAQAjnhsrKSqfpf+OU6aPfEI7+ZPhoJpNJkZGRdm9gVVVVTr+JzB2dO3fWWWedpTVr1uiBBx6wDZZ79+7Vq6++6vDcjbU1MgxDf/nLX9x+vtGjR+vvf/+7XnnlFbvp/M8++2yL6m906623avXq1VqyZImuv/56de3aVaNHj9aWLVs0aNCgJi+on5WVpTvvvFNvv/22y9MWG2d1fPbZZ3azpF555ZVW1S39+gm1u7W6KyMjQzExMVqxYoWuuOIKpwPeqaeeqv79++vTTz91aGDccckllyg5OVlLlizRpZde6vANqYWFhVq/fr1mz57dbBjgyd/hhAkTtGTJEv3www+6/PLLPa67KZMnT9b69ev1z3/+0+70krVr16pdu3YuZwW1lslkUvv27e0uAPvzzz/rb3/7m9P1v/jiC3366ad2p288++yz6tq1q84888wmn+fYkPL111/XDz/8YDfDz51/ExMmTLBdNH3YsGFu7efRTjvtND333HOqra1VTEyMw/3PPfeccnNzbX+73333nTZt2uRwofdj9evXT5999pndsrffflv79u1zqH/t2rU66aSTXJ4y0ejY5s2Vo9/DJ0yYoHvvvVc9evTw+IDVE+np6UpPT1d+fr7eeustPfvss1qwYIFuuukmjRw5UtnZ2Zo2bVqTF5R2ZuzYsWrfvr2+/vrrJk+T6tq1qy18cMePP/6o1157TUOGDHGYNbBz50798ssvLf4iCXiGnoSexJlg7UmciYyM1O9//3v94Q9/0AMPPOBwGvzu3bs1f/58xcXFadasWc1uz92/F1/sS0sYhqFrr71WTz75pB577DHNmDGjTZ6XnoaepqU86Wk8ea8aOHCgR3U89dRTkqSzzz7b4b5vvvmGPgUBgxDODWPHjlWfPn00ceJE2zfxlJWV6aGHHlKXLl1000032dYdOHCgnn/+eRUWFurEE09UVFSUBg4cqAkTJmjNmjXKycnRZZddph07duhPf/qTjj/+eH311VctqutPf/qTLrzwQo0ZM0Y333yzGhoadN9996lz587as2ePbb0xY8YoMjJSv/3tb3Xrrbfql19+0fLly/Xjjz+6/VzTpk3Tww8/rGnTpumee+5R//79tXbtWq1bt65FtTfq0KGD7r33Xl1++eV65JFH9Mc//lGPPPKIzjnnHI0YMUK/+93v1K9fP+3du1fbtm3Tq6++qrfffluSNHfuXBUWFuqiiy7S7bffrrPOOks///yz3nvvPU2YMEGjR49W7969dcEFFygvL0/HHXecEhMT9dZbb2nNmjWtqruRu7W6q0uXLnrooYc0a9YsXXDBBbr22msVFxenbdu26dNPP9WyZcskSY899piysrI0duxYXX311TrhhBO0Z88ebd26VZ988oleeOEFl88RERGhl156SWPGjFF6erpuvvlmpaenq76+Xq+++qpWrlypkSNH6qGHHnKrZnf/DocPH67rrrtOM2bM0ObNm3Xuueeqc+fOqqys1L/+9S8NHDhQv/vd7zx6vRrNmDFDjz32mHJyclRdXa3k5GS9+eabslqtysnJsZttcffdd2vhwoV65513HGb6OXPsNXQajRw5UuPHj9fSpUs1ZcoUXXfddaqpqdGDDz7odKaf9GtjNGnSJN199906/vjj9fTTT6u4uFj33XefOnXq5LKGCRMmaPXq1TrttNM0aNAglZaW6oEHHnA4RcidfxNXXHGFnnnmGY0bN0433XSTzjrrLHXo0EHff/+93nnnHV100UW65JJLXNYyatQoGYahjz76SJmZmQ737969W5dccomuvfZa1dbW6q677lJUVJTmz5/vcpuSNHXqVN1xxx268847NXLkSJWXl2vZsmUOTfGiRYtUXFysjIwMzZkzR6eeeqp++eUXffvtt1q7dq1WrFhhe108bd4aX8OXXnpJ5557rubNm6dBgwbpyJEjqqio0Pr163XzzTe3qNF3JSIiQpmZmcrMzNSKFSv0+uuv69lnn9XcuXM1bNgwDRkyxLbuP//5T+3fv1979+6V9Ou3i7344ouSpHHjxqlTp07q16+fFi1apAULFuibb77RhRdeqOOOO067du3Sxx9/rM6dO2vhwoVN1jRlyhQlJCRo6NChio2N1VdffaWHHnpIu3bt0urVqx3Wb/w34urb5eBd9CT0JK4EQ0/SGEQ2XvbCldtuu02ffvqp7b/Z2dmKiYnRZ599pgceeEB79+7Va6+95jQ4OZYnfy+t6a+as3nzZtt+19XVyTAM23t4WlqarVeZM2eOVq1apWuuuUYDBw6060PMZrPdaXb0NPQ0TQnUnqa171XP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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, "output_type": "display_data" } ], + "source": [ + "order_plot = 6\n", + "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=2*order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + "x_grid, y_grid, plot_me_lap = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + " \n", + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", + "cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs2 = ax2.contourf(x_grid, y_grid, plot_me_hem.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "\n", + "fig.subplots_adjust(right=0.8)\n", + "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", + "#fig.colorbar(cs1, cax=cbar_ax)\n", + "\n", + "ax1.set_xscale('log')\n", + "ax1.set_yscale('log')\n", + "ax1.set_xlabel(\"source x-coord\")\n", + "ax1.set_ylabel(\"source y-coord\")\n", + "\n", + "\n", + "ax2.set_xscale('log')\n", + "ax2.set_yscale('log')\n", + "ax2.set_xlabel(\"source x-coord\")\n", + "ax2.set_ylabel(\"source y-coord\")\n", + "\n", + "ax1.set_title('Standard Recurrence Order 6, Laplace (blue=err<1e-5)')\n", + "ax2.set_title('Standard Recurrence, Order 12, Laplace (blue=err" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "err1 = []\n", "err2 = []\n", @@ -381,30 +456,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Slope of Best Fit vs ratio of y0/x0 for even derivatives')" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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ZmINrt3NEx7k05hlEZGdY0AhsnOODhosjgoBAIuQYnq9OCqEz0MhokbFgEJEGBwagFXju0KvMz+No9e5YtX4rnwOChE1Oj6ojYgAXAspg0L0fJIsEakCAwoRKRwdNOjV1tfWZRAR8RQPERERqU+dA8r+/fsRFRUFg8EAjUaDpKQks/kigpiYGBgMBri5uaFv3744fvy4WZ/S0lLMnDkTzZo1g4eHB4YPH45z587VayBERER066hzQLl06RI6deqEFStWVDl/6dKlWLZsGVasWIGMjAzo9XoMGjQIRUVFSp/o6GgkJiZi06ZNOHjwIIqLizFs2DCUl5ff/EiIiIjolqERkZv+AxsajQaJiYkYOXIkgGtHTwwGA6KjozF//nwA146W+Pv7Y8mSJZg6dSqMRiOaN2+O9evXY8yYMQCAnJwcBAYGYseOHYiMjLzh5xYWFkKn08FoNMLLy+tmyyciIqJGVJfvb6teg5KdnY28vDxEREQobVqtFn369EFaWhoA4MiRIygrKzPrYzAYEBoaqvSprLS0FIWFhWYTERER3bqsGlDy8vIAAP7+/mbt/v7+yry8vDy4uLjA29u72j6VxcfHQ6fTKVNgYKA1yyYiIiKVaZC7eDQa8+cmiIhFW2U19Vm4cCGMRqMynT171mq1EhERkfpYNaDo9XoAsDgSkp+frxxV0ev1uHLlCgoKCqrtU5lWq4WXl5fZRERERLcuqwaUoKAg6PV6pKSkKG1XrlxBamoqevfuDQDo1q0bnJ2dzfrk5uYiKytL6UNERET2rc5Pki0uLsbp06eV19nZ2Th69Ch8fHzQsmVLREdHIy4uDsHBwQgODkZcXBzc3d0xduxYAIBOp8OUKVMwe/Zs+Pr6wsfHB3PmzEFYWBgGDhxovZERERFRk1XngPL111+jX79+yutZs2YBACZNmoS1a9di3rx5uHz5MqZPn46CggL06NEDycnJ8PT0VN7zxhtvwMnJCaNHj8bly5cxYMAArF27Fo6OjlYYEhERETV19XoOiq3wOShERERNj82eg0JERERkDQwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6DChERESkOgwoREREpDoMKERERKQ6TrYugIhITcorBOnZF5FfVAI/T1eEB/nA0UFj67KI7A4DChHR/9mZlYvYbSeQayxR2gJ0rlgcFYLBoQE2rIzI/vAUDxERroWTaQmZZuEEAPKMJZiWkImdWbk2qozIPjGgEJHdK68QxG47AalinqktdtsJlFdU1YOIGgIDChHZvfTsixZHTq4nAHKNJUjPvth4RRHZOQYUIrJ7+UXVh5Ob6UdE9ceAQkR2z8/T1ar9iKj+GFCIyO6FB/kgQOeK6m4m1uDa3TzhQT6NWRaRXWNAISK75+igweKoEACwCCmm14ujQvg8FKJGxIBCRARgcGgAVo3vCr3O/DSOXueKVeO78jkoRI3M6gHl6tWreOGFFxAUFAQ3Nze0adMGL7/8MioqKpQ+IoKYmBgYDAa4ubmhb9++OH78uLVLISKqk8GhATg4vz82PtUTbz7aGRuf6omD8/sznBDZgNWfJLtkyRKsXr0a69atQ4cOHfD111/j8ccfh06nw1//+lcAwNKlS7Fs2TKsXbsWd911F/7xj39g0KBBOHnyJDw9Pa1dEhFRrTk6aNCrra+tyyCye1Y/gnL48GGMGDECDz74IFq3bo2HH34YERER+PrrrwFcO3qyfPlyLFq0CA899BBCQ0Oxbt06/Pnnn9iwYYO1yyEiIqImyOoB5b777sPu3btx6tQpAMCxY8dw8OBBDB06FACQnZ2NvLw8REREKO/RarXo06cP0tLSqlxmaWkpCgsLzSYiIiK6dVn9FM/8+fNhNBrRvn17ODo6ory8HK+88goee+wxAEBeXh4AwN/f3+x9/v7+OHPmTJXLjI+PR2xsrLVLJSIiIpWy+hGUzZs3IyEhARs2bEBmZibWrVuH119/HevWrTPrp9GY364nIhZtJgsXLoTRaFSms2fPWrtsIiIiUhGrH0GZO3cuFixYgEcffRQAEBYWhjNnziA+Ph6TJk2CXq8HcO1ISkDA/78yPj8/3+KoiolWq4VWq7V2qURERKRSVj+C8ueff8LBwXyxjo6Oym3GQUFB0Ov1SElJUeZfuXIFqamp6N27t7XLISIioibI6kdQoqKi8Morr6Bly5bo0KEDvvnmGyxbtgxPPPEEgGundqKjoxEXF4fg4GAEBwcjLi4O7u7uGDt2rLXLISIioibI6gHl7bffxosvvojp06cjPz8fBoMBU6dOxUsvvaT0mTdvHi5fvozp06ejoKAAPXr0QHJyMp+BQkRERAAAjYiIrYuoq8LCQuh0OhiNRnh5edm6HCIiIqqFunx/82/xEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeowoBAREZHqMKAQERGR6jCgEBERkeo42boAIiJSj/IKQXr2ReQXlcDP0xXhQT5wdNDYuiyyQwwoREQEANiZlYvYbSeQayxR2gJ0rlgcFYLBoQE2rIzsEU/xEBERdmblYlpCplk4AYA8YwmmJWRiZ1aujSoje8WAQkRk58orBLHbTkCqmGdqi912AuUVVfUgahgMKEREdi49+6LFkZPrCYBcYwnSsy82XlFk9xhQiIjsXH5R9eHkZvoRWUODBJRff/0V48ePh6+vL9zd3dG5c2ccOXJEmS8iiImJgcFggJubG/r27Yvjx483RClERHQDfp6uVu1HZA1WDygFBQW499574ezsjP/+9784ceIE/vnPf+L2229X+ixduhTLli3DihUrkJGRAb1ej0GDBqGoqMja5RAR0Q2EB/kgQOeK6m4m1uDa3TzhQT6NWRbZOY2IWPWqpwULFuDQoUM4cOBAlfNFBAaDAdHR0Zg/fz4AoLS0FP7+/liyZAmmTp16w88oLCyETqeD0WiEl5eXNcsnIrJLprt4AJhdLGsKLavGd+WtxlRvdfn+tvoRlK1bt+Kee+7BI488Aj8/P3Tp0gXvv/++Mj87Oxt5eXmIiIhQ2rRaLfr06YO0tLQql1laWorCwkKziYiIrGdwaABWje8Kvc78NI5e58pwQjZh9Qe1/fTTT1i1ahVmzZqFv/3tb0hPT8dzzz0HrVaLiRMnIi8vDwDg7+9v9j5/f3+cOXOmymXGx8cjNjbW2qUSEdF1BocGYFCInk+SJVWwekCpqKjAPffcg7i4OABAly5dcPz4caxatQoTJ05U+mk05hu8iFi0mSxcuBCzZs1SXhcWFiIwMNDapRMR2T1HBw16tfW1dRlE1j/FExAQgJCQELO2u+++G7/88gsAQK/XA4ByJMUkPz/f4qiKiVarhZeXl9lEREREty6rB5R7770XJ0+eNGs7deoUWrVqBQAICgqCXq9HSkqKMv/KlStITU1F7969rV0OERERNUFWP8Xz/PPPo3fv3oiLi8Po0aORnp6O9957D++99x6Aa6d2oqOjERcXh+DgYAQHByMuLg7u7u4YO3astcshIiKiJsjqAaV79+5ITEzEwoUL8fLLLyMoKAjLly/HuHHjlD7z5s3D5cuXMX36dBQUFKBHjx5ITk6Gp6entcshIiKiJsjqz0FpDHwOChERUdNj0+egEBEREdUXAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREakOAwoRERGpDgMKERERqQ4DChEREamOk60LICIiUovyCkF69kXkF5XAz9MV4UE+cHTQ2Losu8SAQkREBGBnVi5it51ArrFEaQvQuWJxVAgGhwbYsDL7xFM8RERk93Zm5WJaQqZZOAGAPGMJpiVkYmdWro0qs18NHlDi4+Oh0WgQHR2ttIkIYmJiYDAY4Obmhr59++L48eMNXQoREZGF8gpB7LYTkCrmmdpit51AeUVVPaihNGhAycjIwHvvvYeOHTuatS9duhTLli3DihUrkJGRAb1ej0GDBqGoqKghyyEiIrKQnn3R4sjJ9QRArrEE6dkXG68oariAUlxcjHHjxuH999+Ht7e30i4iWL58ORYtWoSHHnoIoaGhWLduHf78809s2LChocohIiKqUn5R9eHkZvqRdTRYQJkxYwYefPBBDBw40Kw9OzsbeXl5iIiIUNq0Wi369OmDtLS0KpdVWlqKwsJCs4mIiMga/DxdrdqPrKNBAsqmTZuQmZmJ+Ph4i3l5eXkAAH9/f7N2f39/ZV5l8fHx0Ol0yhQYGGj9oomIyC6FB/kgQOeK6m4m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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.scatter(ratios, slopes)\n", "plt.xscale('log')\n", @@ -422,20 +476,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-21.44648644, -1.55708767])" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "coefficients_new" ] diff --git a/test/plot_taylor_recurrence.ipynb b/test/plot_taylor_recurrence.ipynb index 01dbc851..56a90862 100644 --- a/test/plot_taylor_recurrence.ipynb +++ b/test/plot_taylor_recurrence.ipynb @@ -128,10 +128,10 @@ { "data": { "text/latex": [ - "$\\displaystyle 2.61457522299224 \\cdot 10^{-14}$" + "$\\displaystyle 4.44089209850063 \\cdot 10^{-16}$" ], "text/plain": [ - "2.61457522299224e-14" + "4.44089209850063e-16" ] }, "execution_count": 7, @@ -703,7 +703,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -715,7 +715,7 @@ "0.00263326606293773" ] }, - "execution_count": 43, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -727,7 +727,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -739,7 +739,7 @@ "0.0466919192638915" ] }, - "execution_count": 44, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -772,34 +772,32 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ - "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 4, laplace2d, derivs_lap, 4, 2)\n", - "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 7, laplace2d, derivs_lap, 4, 2)" + "x_grid, y_grid, plot_me_lap1 = generate_error_grid(8, 5, laplace2d, derivs_lap, 8, 2)\n", + "x_grid, y_grid, plot_me_lap2 = generate_error_grid(8, 12, laplace2d, derivs_lap, 8, 2)" ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_5026/3325410114.py:2: UserWarning: Log scale: values of z <= 0 have been masked\n", - " cs1 = ax1.contourf(x_grid, y_grid,plot_me_lap1.T/plot_me_lap2.T < 1, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_5026/3325410114.py:4: UserWarning: Log scale: values of z <= 0 have been masked\n", - " cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap1.T/plot_me_lap2.T < 1, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_5026/3325410114.py:8: UserWarning: Attempt to set non-positive ylim on a log-scaled axis will be ignored.\n", - " fig.colorbar(cs1, cax=cbar_ax)\n" + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_12605/3462362177.py:2: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs1 = ax1.contourf(x_grid, y_grid,plot_me_lap1.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_12605/3462362177.py:4: UserWarning: Log scale: values of z <= 0 have been masked\n", + " cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap2.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQAAAALACAYAAADMq9/NAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACKkklEQVR4nOzdeXxU1f3/8XcgJGENBiQYloCK1LAbogKCIBUMAi6ofLsgKNbyJX4pUGrlyxcVXGJdkLYG3KW22qJWU0upISgClSohJW6hVlowKJuAEokSIDm/P/hlZCaZZCaZmbu9no8Hj3ZubmbOuffOOW8/J3MnzhhjBAAAAAAAAMCVmlndAAAAAAAAAADRQwEQAAAAAAAAcDEKgAAAAAAAAICLUQAEAAAAAAAAXIwCIAAAAAAAAOBiFAABAAAAAAAAF6MACAAAAAAAALgYBUAAAAAAAADAxSgAAgAAAAAAAC5GARBR8eSTTyouLk5t2rSpd7+RI0cqLi6uwX933nlnbBoeolDaHBcXpzfffDNirzly5EiNHDkyYs9Xn+PHj+uxxx5TVlaWUlJS1KpVK6Wnp+uKK67QK6+8EvHXs9M5Nsbo+eef1yWXXKLTTjtNiYmJOvPMM5WTk6Ndu3Y1+fl37typuLg4rVixoumNDUGwa/O+++5r9HP26NFD48ePj2ArQxPL9wAAdyKfkE/CYadz7LZ8snfvXt1yyy0688wz1bJlS6Wnp2v69OkqKytr9HOSTwCgfvFWNwDu89lnn2nevHlKS0vT4cOH69132bJlKi8v9z3+y1/+orvvvlvPPPOMvvOd7/i2d+3aNWrtbYy///3vfo/vuusurVu3Tm+88Ybf9oyMjFg2K2KmTJmil19+WbNnz9aiRYuUmJio//znP3rttddUUFCgq666KqKv9/e//90W57i6ulrf//73tXLlSn3ve9/TihUrlJycrPfee08PPPCAnn/+ea1atUrDhg2zuqlhueaaa/TTn/7Ub1v37t0tag0AWIN88i3ySWjIJ9FRWVmpESNG6IsvvtCiRYuUkZGhjz76SHfccYcKCgq0bds2tW3b1upmAoDrUABExM2YMUMjRoxQSkqKXnrppXr3DQyg//znPyVJffv21eDBg5vclq+//lqtWrVq8vMEuvDCC/0en3766WrWrFmt7XZljNHRo0fVsmXLWj/bsWOHVq5cqdtvv12LFi3ybR89erR+9KMfqbq6OuJtsMtx+8UvfqGVK1fqvvvu089//nPf9pEjR2ry5Mm64IILNGnSJP3zn/9U+/btgz5PtK67unzzzTdKSkpSXFxc0H1SU1Ntc4wBwCrkE/sjn9TNbflk48aN+vjjj/Xkk09q+vTpkk72pV27dvr+97+vtWvXRryYCwDgI8CIsN/97ndav369li1bFtHnXblypYYMGaLWrVurTZs2Gjt2rLZu3eq3z7Rp09SmTRu9//77GjNmjNq2bavRo0dLOvkRjltuuUXPPPOMevfurZYtW2rw4MF6++23ZYzRAw88oJ49e6pNmza65JJLtH379ia3OS8vTyNGjFCnTp3UunVr9evXT/fff7+OHz/u2+euu+5SfHx8nR/duPHGG9WhQwcdPXo06GscOnRIM2fOVJcuXZSQkKAzzzxTCxYsUGVlpd9+Nf1/9NFHde655yoxMVG/+c1v6nzOgwcPSpLOOOOMOn/erJn/sFFeXq558+apZ8+eSkhIUJcuXTR79mxVVFSE3Ia6PmKzd+9e/fjHP1bXrl2VkJCgnj17atGiRTpx4oTffsuXL9eAAQPUpk0btW3bVt/5znf0v//7v0GPWTDHjh3TAw88oHPPPVe33nprrZ+npqYqNzdX+/bt01NPPeXbPnLkSPXt21cbNmzQ0KFD1apVK914442SpN27d+u6665T27ZtlZycrMmTJ2vv3r11vv6WLVs0ceJEpaSkKCkpSYMGDdILL7zgt8+KFSsUFxenNWvW6MYbb9Tpp5+uVq1a1TrfdlBYWKgrrrhCXbt2VVJSks4++2z9+Mc/1oEDB/z2u/POOxUXF6etW7fq6quvVrt27ZScnKwf/vCH+vzzzxt8nUWLFumCCy5QSkqK2rVrp/POO09PPfWUjDG19n3++ec1ZMgQtWnTRm3atNHAgQP9zqUkrV27VqNHj1a7du3UqlUrDRs2TK+//nrTDgYAy5FPvkU+IZ9YnU9atGghSUpOTvbbXlO8TEpKCu3gNAL5BICnGSBC9u3bZzp06GDy8vKMMcZMnTrVtG7dOqzneOaZZ4wkU1RU5Nt2zz33mLi4OHPjjTeaVatWmZdfftkMGTLEtG7d2nz44Ye+/aZOnWpatGhhevToYXJzc83rr79uCgoKjDHGSDLp6elm6NCh5uWXXzavvPKKOeecc0xKSoqZM2eOueKKK8yqVavMc889Z1JTU03//v1NdXV1yO2uq69z5swxy5cvN6+99pp54403zMMPP2w6duxobrjhBr9jlpiYaBYsWOD3uwcPHjQtW7Y0P/vZz3zbLr74YnPxxRf7Hn/zzTemf//+pnXr1ubBBx80a9asMQsXLjTx8fFm3Lhxfs8nyXTp0sX079/fPP/88+aNN94wH3zwQZ19OXLkiGnfvr3p3Lmzeeyxx8yOHTuC9ruiosIMHDjQdOzY0SxZssSsXbvW/PKXvzTJycnmkksu8TuG9bVBkrnjjjt8++7Zs8d069bNpKenm8cee8ysXbvW3HXXXSYxMdFMmzbNt9/vf/97I8n8z//8j1mzZo1Zu3atefTRR82sWbOCtjmYTZs2GUnm5z//edB9vvrqK9OsWTMzduxY37aLL77YpKSkmG7duplf//rXZt26dWb9+vXm66+/Nueee65JTk42v/71r01BQYGZNWuW6d69u5FknnnmGd9zvPHGGyYhIcEMHz7crFy50rz22mtm2rRptfareX906dLF3Hzzzeavf/2reemll8yJEyeCtlmSOe2000xSUpJJSEgw5513nnn66afDPj6nSk9PN5dffnm9+yxfvtzk5uaaV1991axfv9785je/MQMGDDC9e/c2x44d8+13xx13+N6fP/vZz0xBQYFZsmSJad26tRk0aJDfvoHvAWOMmTZtmnnqqadMYWGhKSwsNHfddZdp2bKlWbRokd9+CxcuNJLM1VdfbV588UWzZs0as2TJErNw4ULfPr/97W9NXFycufLKK83LL79s/vznP5vx48eb5s2bm7Vr1zbhiAGwEvmEfEI+sVc+OX78uMnMzDR9+vQxmzdvNl999ZUpLi42AwcONOedd57f3B8O8gkA1I8CICJm0qRJZujQob5QFYmAXVZWZuLj483//M//+O331Vdfmc6dO5vrrrvOt23q1KlGUp3FDUmmc+fO5siRI75t+fn5RpIZOHCgXxBcunSpkWTee++9kNvdUF+rqqrM8ePHzbPPPmuaN29uDh065Pe7nTp1MpWVlb5tv/jFL0yzZs38wm1guHj00UeNJPPCCy/4vdYvfvELI8msWbPGr//Jycl+r1ufv/zlL6Zjx45GkpFkOnToYK699lrz6quv+u2Xm5trmjVr5vcfRMYY89JLLxlJZvXq1SG1ITBg//jHPzZt2rQxn3zyid9+Dz74oJHk+w+rW265xbRv3z6kPjXkD3/4g5FkHn300Xr3S01NNeeee67v8cUXX2wkmddff91vv+XLlxtJ5k9/+pPf9h/96Ee1gvN3vvMdM2jQIHP8+HG/fcePH2/OOOMMU1VVZYz59v1x/fXXh9yv73//++a5554zGzZsMC+99JLJzs42ksz//d//hfwcgUIJ2Keqrq42x48fN5988kmtY1ITsOfMmeP3O88995yRZH73u9/5ttUVsE9V8z5bvHix6dChg+99/Z///Mc0b97c/OAHPwj6uxUVFSYlJcVMmDCh1nMOGDDAnH/++SH3F4C9kE/IJzXIJ/bJJ+Xl5WbChAm+cynJjBw50hw8eDDk5whEPgGA+vERYETEH//4R/35z3/WE088Ue+9yKqrq3XixAnfv6qqqnqft6CgQCdOnND111/v93tJSUm6+OKL6/wWu0mTJtX5XKNGjVLr1q19j88991xJUnZ2tl+ba7Z/8skn9batIVu3btXEiRPVoUMHNW/eXC1atND111+vqqoq/etf//Lt95Of/ET79+/Xiy++KOnkMVq+fLkuv/xy9ejRI+jzv/HGG2rdurWuueYav+3Tpk2TpFofC6j51rhQjBs3TmVlZXrllVc0b9489enTR/n5+Zo4caJuueUW336rVq1S3759NXDgQL/zM3bs2Dq/ZTDUNqxatUqjRo1SWlqa3/NmZ2dLktavXy9JOv/88/Xll1/qe9/7nv70pz/V+vhGNBhjal3jp512mi655BK/bevWrVPbtm01ceJEv+3f//73/R5v375d//znP/WDH/xAkvz6O27cOO3Zs0cfffSR3+8Eu8br8txzz+n73/++hg8frkmTJmn16tUaP3687rvvvpA+wtJY+/fv14wZM9StWzfFx8erRYsWSk9PlyRt27at1v41/a9x3XXXKT4+XuvWrav3dd544w1997vfVXJysu99dvvtt+vgwYPav3+/pJMf96mqqlJOTk7Q59m0aZMOHTqkqVOn+p2D6upqXXbZZSoqKqr1sTEA9kc+qY18Qj6xOp8cP35ckydPVklJiZ544glt2LBBv/nNb/TZZ5/p0ksvbfBLepqCfALAy/gSEDTZkSNHlJOTo//5n/9RWlqavvzyS0kn71kiSV9++aVatGih1q1ba/HixX43bk5PT9fOnTuDPve+ffskSVlZWXX+PPB+L61atVK7du3q3DclJcXvcUJCQr3b67u3TUPKyso0fPhw9e7dW7/85S/Vo0cPJSUlafPmzcrJydE333zj23fQoEEaPny48vLy9IMf/ECrVq3Szp079dhjj9X7GgcPHlTnzp1rhb1OnTopPj7ed6+cGsHumRNMy5YtdeWVV+rKK6/09Sk7O1t5eXn67//+b/Xp00f79u3T9u3bffdyCRQYeENtw759+/TnP/+5weedMmWKTpw4oSeeeEKTJk1SdXW1srKydPfdd+vSSy8Nsacn1Xwr7o4dO4LuU1FRoQMHDmjQoEF+2+vq18GDB5Wamlpre+fOnf0e11zj8+bN07x58+p83cYex2B++MMfatWqVdqyZYvvP1oiqbq6WmPGjNHu3bu1cOFC9evXT61bt1Z1dbUuvPBCv+u/RuBxiY+PV4cOHWpdx6favHmzxowZo5EjR+qJJ57w3Y8pPz9f99xzj+91agqd9X2TY815CPwP1lMdOnTI7z/SAdgb+aQ28slJ5BNr88lTTz2lv/71ryoqKvJ9qc7w4cN10UUX6ayzztLSpUt1xx13hPRc4SCfAPA6CoBosgMHDmjfvn166KGH9NBDD9X6+WmnnaYrrrhC+fn5uvnmmzV+/HjfzxITE+t97o4dO0qSXnrpJd/qXH3qW92Ppfz8fFVUVOjll1/2a3dJSUmd+8+aNUvXXnut/vGPf+iRRx7ROeec02BA7NChg955551aK7779+/XiRMnfMeuRlOPTffu3XXzzTdr9uzZ+vDDD9WnTx917NhRLVu21NNPP13n7zS2DR07dlT//v11zz331PnztLQ03/+/4YYbdMMNN6iiokIbNmzQHXfcofHjx+tf//pXSNdMjczMTJ122ml69dVXlZubW2dbX331VVVXV9c6N3Xt26FDB23evLnW9sCbbNcco/nz5+vqq6+us229e/du8PXCYf7/DagD/wM1Uj744AO9++67WrFihaZOnerbXt/N6/fu3asuXbr4Hp84cUIHDx5Uhw4dgv7OH/7wB7Vo0UKrVq3yu2F4fn6+336nn366JOnTTz9Vt27d6nyumvPw61//Oui3Ptb1H0wA7It8Uhv55CTyibX5pKSkRM2bN9d5553nt/3MM89Uhw4d9MEHH4T0POEinwDwOgqAaLLOnTvX+Wfw9913n9avX6+//vWvvskrLS3NLxw1ZOzYsYqPj9e///3vsD72aLWaAHTqf0AYY/TEE0/Uuf9VV12l7t2766c//anWr1+vhx9+uMEQNXr0aL3wwgvKz8/XVVdd5dv+7LPP+n7eGF999ZXi4uLUpk2bWj+r+WhEzTkcP3687r33XnXo0EE9e/Zs1OvVZfz48Vq9erXOOuuskD8W1Lp1a2VnZ+vYsWO68sor9eGHH4YVsBMSEvSzn/1M//u//6sHHnig1jft7d+/X/Pnz1dqaqpuuummBp9v1KhReuGFF/Tqq6/6fczm+eef99uvd+/e6tWrl959913de++9Ibe3KX7729+qRYsWyszMjMrz13X9S6r3r0aee+45v/a88MILOnHihEaOHFnv68THx6t58+a+bd98841++9vf+u03ZswYNW/eXMuXL9eQIUPqfK5hw4apffv2Ki0t9fsYGQDnIp/URj5pGvJJZKSlpamqqkpFRUW64IILfNv/9a9/6eDBg/X+RVxTkE8AeB0FQDRZUlJSnZPgihUr1Lx583onyIb06NFDixcv1oIFC/Sf//xHl112mU477TTt27dPmzdvVuvWrf0+smMXl156qRISEvS9731Pt956q44eParly5friy++qHP/5s2bKycnRz//+c/VunVr331y6nP99dcrLy9PU6dO1c6dO9WvXz/97W9/07333qtx48bpu9/9bqPa/tFHH2ns2LH6r//6L1188cU644wz9MUXX+gvf/mLHn/8cY0cOVJDhw6VJM2ePVt//OMfNWLECM2ZM0f9+/dXdXW1ysrKtGbNGv30pz/1C3ahWrx4sQoLCzV06FDNmjVLvXv31tGjR7Vz506tXr1ajz76qLp27aof/ehHatmypYYNG6YzzjhDe/fuVW5urpKTk/0+llVzr6L6Ps4lST//+c/17rvv+v538uTJSk5O1nvvvacHHnhAX331lVatWqXk5OQG+3D99dfr4Ycf1vXXX6977rlHvXr10urVq1VQUFBr38cee0zZ2dkaO3aspk2bpi5duujQoUPatm2b/vGPf/juvxSuBx54QKWlpRo9erS6du2q/fv366mnntKaNWt05513+v0FxM6dO9WzZ09NnTpVK1asaPC59+7dq5deeqnW9h49emjAgAE666yzdNttt8kYo5SUFP35z39WYWFh0Od7+eWXFR8fr0svvVQffvihFi5cqAEDBui6664L+juXX365lixZou9///u6+eabdfDgQT344IO1gn2PHj30v//7v7rrrrv0zTff6Hvf+56Sk5NVWlqqAwcOaNGiRWrTpo1+/etfa+rUqTp06JCuueYaderUSZ9//rneffddff7551q+fHmDxwWAfZBPaiOfkE/skE9uuOEGPfzww5o0aZL+7//+T71799Z//vMf3XvvvWrdurVmzJjh25d8Qj4BEEGWff0IXC8S37JXIz8/34waNcq0a9fOJCYmmvT0dHPNNdeYtWvXhvR6kkxOTo7fth07dhhJ5oEHHvDbvm7dOiPJvPjiiyG3u67X/vOf/2wGDBhgkpKSTJcuXczPfvYz89e//tVIMuvWrav1HDt37jSSzIwZM+p8jbq+YezgwYNmxowZ5owzzjDx8fEmPT3dzJ8/3xw9etRvv7r6H8wXX3xh7r77bnPJJZeYLl26mISEBNO6dWszcOBAc/fdd5uvv/7ab/8jR46Y//u//zO9e/c2CQkJJjk52fTr18/MmTPH7N27N6Q2KOBb9owx5vPPPzezZs0yPXv2NC1atDApKSkmMzPTLFiwwPdtib/5zW/MqFGjTGpqqklISDBpaWnmuuuuq/UNiR07djQXXnhhSP2vrq42zz33nBk5cqRp3769SUhIMD179jT//d//Xetb/4w5eV769OlT53N9+umnZtKkSaZNmzambdu2ZtKkSWbTpk21vmXPGGPeffddc91115lOnTqZFi1amM6dO5tLLrnE71v/gr0/gnn11VfNRRddZE4//XQTHx9v2rZta4YPH25+//vf19r3/fffN5LMbbfd1uDzpqen+31r36n/pk6daowxprS01Fx66aWmbdu25rTTTjPXXnutKSsrq3Wua75lr7i42EyYMMF3rL73ve+Zffv2+b1uXe+Bp59+2vTu3dskJiaaM8880+Tm5pqnnnrKSPL7lkpjjHn22WdNVlaWSUpKMm3atDGDBg2qdR7Wr19vLr/8cpOSkmJatGhhunTpYi6//PKwxgMA9kY+IZ+QT6zNJ8YY8/HHH5spU6aYHj16mMTERNO9e3czefJk3zcp1yCfnEQ+ARAJccb8/5tBAbDUr3/9a82aNUsffPCB+vTpY3VzXKO0tFR9+vTRqlWrdPnll1vdHNtatmyZbr31Vv373/+O6b1k7rzzTi1atEiff/55rXsyAQCsRz6JDvJJaMgnABA5fAQYsNjWrVu1Y8cOLV68WFdccQXhOsLWrVunIUOGEK4bsG7dOs2aNYsbSQMAJJFPoo18EhryCQBEjif+AnDVqlX66U9/qurqav385z8P6Qa5QKz06NFDe/fu1fDhw/Xb3/5WnTt3trpJQMywwg4vI5/Azsgn8DLyCQA3cn0B8MSJE8rIyNC6devUrl07nXfeeXrnnXeUkpJiddMAAIBHkU8AAAAQS82sbkC0bd68WX369FGXLl3Utm1bjRs3rs5vuQIAAIgV8gkAAABiyfYFwA0bNmjChAlKS0tTXFyc8vPza+2zbNky9ezZU0lJScrMzNTGjRt9P9u9e7e6dOnie9y1a1d99tlnsWg6AABwKfIJAAAAnMT2BcCKigoNGDBAjzzySJ0/X7lypWbPnq0FCxZo69atGj58uLKzs1VWViZJqusTznFxcVFtMwAAcDfyCQAAAJzE9t8CnJ2drezs7KA/X7JkiaZPn+67cfbSpUtVUFCg5cuXKzc3V126dPFbUf/00091wQUXBH2+yspKVVZW+h5XV1fr0KFD6tChA8EcAIAgjDH66quvlJaWpmbNbL++2GTkEwAA7M9r+QSoj+0LgPU5duyYiouLddttt/ltHzNmjDZt2iRJOv/88/XBBx/os88+U7t27bR69WrdfvvtQZ8zNzdXixYtimq7AQBwq127dqlr165WN8NS5BMAAOyFfAI4vAB44MABVVVVKTU11W97amqq9u7dK0mKj4/XQw89pFGjRqm6ulq33nqrOnToEPQ558+fr7lz5/oeHz58WN27d9ePl72m+38wJDodge0tfPk9v8d3Xd3fopbADgKvB4AxQSovL1e3bt3Utm1bq5tiOfIJYunUOYmxyNvIJwjEmEA+AU7l6AJgjcCPvhhj/LZNnDhREydODOm5EhMTlZiYWHt7y9Zq165d0xoKx0ps1cbv8d2v/Uf3XzfQmsbAUre+UFLreoC3MRb44+Oo34pVPmFO8q7AOYlrwbvIJ6gL//36LfIJ4IAvAalPx44d1bx5c99qeo39+/fXWnWPhFtfKIn4c8L+gp13rgfv4ZwDCEWs8wm8iXwCoD4sBgAI5OgCYEJCgjIzM1VYWOi3vbCwUEOHDm3Sc+fl5SkjI0NZWVl+2wlV3sL5BlAfwjXqQj5BtDV0vrkevIXzjUDkEwB1sX0B8MiRIyopKVFJSYkkaceOHSopKVFZWZkkae7cuXryySf19NNPa9u2bZozZ47Kyso0Y8aMJr1uTk6OSktLVVRUVOtnTLLeEMp55lrwDs41AhGuvY18AsAOeN8jEPkEQDC2vwfgli1bNGrUKN/jmhtgT506VStWrNDkyZN18OBBLV68WHv27FHfvn21evVqpaenW9VkeMytL5Qw0boc4RqBeM/DrvmEOcn9Qp2TuBbcj3wCAAhHnDHGWN0IOysvL1dycrJmPbOx1o11CVXu1ZhAxfXgToRr1IX3e2018+Xhw4e56XgMkE+8iXyCU5FREIj3e23kE+Bbtv8IsFWC3WPnVEy67sR5BVAfwjWsRD5BuLge3InzikDkEwANoQAYRH332DkVk6+7NOV8ci24D+cUgQjXsBr5xLs4p6jBtYBA5BMAoaAACEQQgcw9OJcIRLiG0zCOuUdTzyXXAgAAoAAYAYQqd4jUeeR6cD7OIQDALsgnOBXnEYFYoAQQKgqAQYRyj51TMRk7G+cPQH0I17AL8gmaguvB2Th/CEQ+ARAOCoBBhHqPnVMxKTtTNM4b14Jzce4QiHANOyGfeAvnDjW4FhCIfAIgXBQAgSghqDkP5wyBCNdwC8Y354nWOeNaAADAmygARhihylmifb64HpyDcwUAsAvyCU7F+UIgFigBNAYFwChgknYGzhOA+hCu4TbMezgV14MzcJ4QiHwCoLEoAAYR7k22AzFZowbXgv1xjhCIcA27Ip+4H+cINbgWEIh8AqApKAAG0ZibbMM5Yh2oCHD2xblBIMI17CwS+YRxz77IJwAAIJhVq1apd+/e6tWrl5588smwf58CYBQRquzJqvPC9QAAAIIhn+BUnBcEYoES8LYTJ05o7ty5euONN/SPf/xDv/jFL3To0KGwnoMCYJQxedsL5wOn4npAIMI1vILxD6fierAXzgcCkU8AbN68WX369FGXLl3Utm1bjRs3TgUFBWE9BwXAGGASRw2uBfvgXCAQ4RpewzhoH5wL1OBaQCDyCeAOGzZs0IQJE5SWlqa4uDjl5+fX2mfZsmXq2bOnkpKSlJmZqY0bN/p+tnv3bnXp0sX3uGvXrvrss8/CagMFQHiGXQKVXdrhZZwDBCJcw6sYD61nl3Ngl3YAAOBGFRUVGjBggB555JE6f75y5UrNnj1bCxYs0NatWzV8+HBlZ2errKxMkmSMqfU7cXFxYbUhPvxme0NeXp7y8vJUVVUVkee79YUS/gPTQnYLtVwPAIDGiHQ+gbXIJziV3a4HWI/3I2Lt6NGjOnbsmNXNcARjTK0CXGJiohITE+vcPzs7W9nZ2UGfb8mSJZo+fbpuuukmSdLSpUtVUFCg5cuXKzc3V126dPH7i79PP/1UF1xwQVhtjjN1lRHhU15eruTkZM16ZqMSW7Vp8vMxiMeeXcMU14I17Ho9wDq8FyOjZr48fPiw2rVrZ3VzXI984g52nZO4HmLPrtcCrMP7MDLIJ6E7evSoOp7RTRVfHrC6KY7Qpk0bHTlyxG/bHXfcoTvvvLPB342Li9Mrr7yiK6+8UpJ07NgxtWrVSi+++KKuuuoq334/+clPVFJSovXr1+vEiRM699xz9eabb6pdu3Y677zz9Pbbb6tDhw4ht5m/AIwxVlZRg2sh9gjXCMR7EDiJOSn2mJNQg2sBgRiPYYVjx46p4ssDmrHsNSW0bG11c2zt2DcVenTmZdq1a5dfYTnYX/815MCBA6qqqlJqaqrf9tTUVO3du1eSFB8fr4ceekijRo1SdXW1br311rCKfxIFQLic3QMV/8EVO3a/FhB7vPcAf8xJsWP3OYlrAQC8K6Fl64h8usAL2rVrF9G/LA38SHHgx4wnTpyoiRMnNvr5+RIQC9g99LmFU46zU9oJAACazinzvlPa6XQcZwSi+A54T8eOHdW8eXPfX/vV2L9/f62/CmwKCoAWYbKPLo4vTsX1gECEa6BujJc4FddDdHF8EYh8AnhTQkKCMjMzVVhY6Le9sLBQQ4cOjdjrUAC0EJM+anAtRA/HFoEI10D9GDejh2OLGlwLCEQ+AdztyJEjKikpUUlJiSRpx44dKikpUVlZmSRp7ty5evLJJ/X0009r27ZtmjNnjsrKyjRjxoyItYECIFzHqYHKqe22M44pAhGugdAwfkaeU4+pU9sNAICdbNmyRYMGDdKgQYMknSz4DRo0SLfffrskafLkyVq6dKkWL16sgQMHasOGDVq9erXS09Mj1gYKgEHk5eUpIyNDWVlZUX0dQlVkOf14Or39AIDoilU+QWQ5fX53evvthuOJQCxQAu43cuRIGWNq/VuxYoVvn5kzZ2rnzp2qrKxUcXGxRowYEdE2UAAMIicnR6WlpSoqKor6axECIoPjiFNxPSAQ4RpuQD6BVbgeIoPjiEDkEwCxQgHQJggDqMG10HQcQwQiXAONw3jadBxD1OBaQCDyCYBYogAIV3BboHJbf2KJY4dAhGugaRhXG89tx85t/QEAwEsoANoIoapx3Hrc3NovAAC8wK3zuFv7FW0cNwRigRJArFEAtBnCQXg4XjgV1wMCEa6ByGB8xam4HsLD8UIg8gkAK1AAtCFCAmpwLYSOY4VAhGsgshhnQ8exQg2uBQQinwCwCgVAOJZXApVX+tkUHCMEIlwD0cF42zCvHCOv9BMAALegAGhThKr6ee34eK2/AAA4kdfma6/1N1wcHwRigRKAlSgABpGXl6eMjAxlZWVZ1gZCQ904LjgV1wMCEa7hZuQT2A3XQ904LghEPgFgNQqAQeTk5Ki0tFRFRUWWtoPwgBpcC7VxTBCIcA23I5/YF8cENbgWEIh8AsAOKADCUbweqLze/1NxLBCIcA3EFuPwt7x+LLzefwAAnIACoAMQqk7iOAAAALshn5zEcTiJ44BALFACsAsKgA7h9TDh9f6fimPBMUBthGvAGozHOJXXrwev9x+1kU8A2AkFQMCBvBwwvdx31I1wDVjLy+Oyl/sOf1wLCEQ+AWA3FAAdxKvBwqv9bogXj4sX+4z6Ea4Be/Di+OzFPoeC4wIAgD1RAHQYr4Uqr/UXAADYH/mkfl47Pl7rLxrGAiUAO6IA6EBeCRle6WdTeOkYeamvCA3hGrAXxmmcyivXg1f6idCRTwDYFQVAwOG8EDy90EeEh3AN2JMXxmsv9BGh4VpAIPIJADujAOhQbg8cbu9fpLn5eLm5b2gcwjVgb24et93ct2jgeAEAYB8UAB3MraHKrf0CAADORT5pHLceN7f2C43HAiUAu6MA6HBuCx9u608sufHYubFPaBrCNeAMjN9wM65vBCKfAHACCoCAi7gpkLqpL4gMwjXgLG4ax93UFyu46fi5qS+IDPIJAKegABhEXl6eMjIylJWVZXVTGuSWIOKWfljNDcfRDX1AZBGugZOclE/cgjkpMjiOAABYiwJgEDk5OSotLVVRUZHVTQmJ00OV09sPAEAskE9iy+nttxunH0+ntx+RxwIlACehAOgiTg0lTm23nTn5mDq57YgOwjXgbIzrcAOuYwQinwBwGgqAgEs5Mag6sc2ILsI14A5OHN+d2GYncOJxdWKbEV3kEwBORAHQZZwWUJzWXqdx0vF1UlsRG4RrAFZhToouji8AALFHAdCFnBKqnNJOAADQdE6Z953STqdzynF2SjsROyxQAnAqCoAuZfewYvf2uYkTjrUT2ojYIlwD7sR4DyfhekUg8gkAJ6MACHiAnQOsndsGaxCuAXez87hv57a5kZ2Pt53bBmuQTwA4HQVAF7NrcLFru9zOjsfdjm2CtQjXAKzCnGQNjjsAALFBAdDl7Baq7NYeAAAQe3bLA3Zrj9fY7fjbrT2wHguUANyAAqAH2CXE2KUdXmanc2CntsAeCNeAtzAPwI64LhGIfALALSgAAh5jh2BrhzbAXgjXgDfZYT6wQxtgj/NghzYAABAtFAA9wupAY/Xrw5+V54NrAYEo/gGwCnOSvXA+YDdkFABuQgHQQ6wKVYQ5AAAQDPkEp+J6gF1Q/APgNhQAPSbW4YYwZV9WnBuuBwQiXAOQmB9gLa4/BCKfAHAjCoCAh8Uy8BKuEYhwDeBUzEmowbUAAEDkUQD0oFgFHQKVM8TiPHEtIBDFPwBWYU5yBs4TrEJGAeBWnigAXnXVVTrttNN0zTXXWN0U24h2qCK0AQBQP/JJbeQTnIrrAbFG8Q+Am3miADhr1iw9++yzVjfDdqIVeghTzhPNc8b1gECEa+Ak8kndmDcQC1xnCEQ+AeB2nigAjho1Sm3btrW6GYCtRSMIE64RiHANfIt8EhxzEmpwLQAAEBmWFwA3bNigCRMmKC0tTXFxccrPz6+1z7Jly9SzZ08lJSUpMzNTGzdujH1DXSrSAYhA5WyRPH9cCwCcjHziLsxJzsb5Q7SxQAnACywvAFZUVGjAgAF65JFH6vz5ypUrNXv2bC1YsEBbt27V8OHDlZ2drbKyMt8+mZmZ6tu3b61/u3fvjlU3HC1SoYpwBqA+hGs4CfnEeuQTnIrrAdFCPgHgFfFWNyA7O1vZ2dlBf75kyRJNnz5dN910kyRp6dKlKigo0PLly5WbmytJKi4ujlh7KisrVVlZ6XtcXl4esee2s1tfKGnS5EeYco+mXgs1zwGcinANpyGf2EMk5iSgBvkEgRhfAHiJ5X8BWJ9jx46puLhYY8aM8ds+ZswYbdq0KSqvmZubq+TkZN+/bt26ReV1ADtrSkAmXCMQ4RpuQz6JLeYk1OBaAACg8WxdADxw4ICqqqqUmprqtz01NVV79+4N+XnGjh2ra6+9VqtXr1bXrl1VVFQUdN/58+fr8OHDvn+7du1qdPudprHBiEDlTo05r1wLALyAfOIMzEnuxHlFpLBACcBrLP8IcCji4uL8Hhtjam2rT0FBQcj7JiYmKjExMeT93Sbcj9oQwgDUh3ANNyOfxA75BKfiekBTkU8AeJGt/wKwY8eOat68ea3V9P3799dadUfkhBqSCFPuF8455npAIMI13Ip8Yg3mGTQG1w0CkU8AeJWtC4AJCQnKzMxUYWGh3/bCwkINHTo0qq+dl5enjIwMZWVlRfV1ALsLJTgTrhGIcA03I59YhzkJNbgWAAAIj+UFwCNHjqikpEQlJSWSpB07dqikpERlZWWSpLlz5+rJJ5/U008/rW3btmnOnDkqKyvTjBkzotqunJwclZaW1ns/HjdrKDARqLylvvPNtQDAjcgnzsSc5C2cb4SLBUoAXmb5PQC3bNmiUaNG+R7PnTtXkjR16lStWLFCkydP1sGDB7V48WLt2bNHffv21erVq5Wenm5Vkz0j2P1VCFsA6kO4hhuQT+yLfIJTcT0gVOQTAF4XZ4wxVjfCzsrLy5WcnKxZz2xUYqs2VjfHEqdOloQpbwsMTlwPCES49q6a+fLw4cNq166d1c1xPfIJcxK+xbWAhpBPvIt8EjqyRegqvz6iX90w3HHXleUfAbYrr99jB6jLqYGacI1AhGsg+sgn32JOQg2uBQAAGkYBMAjusfOtmiBFoIJ08jrgWgAAa5BPamNOgsR1gOBYoASAkygAIiSEKgD1IVwDsAL5BKfiekAg8gkAfIsCIACgSQjXkKSFL79ndRMAAPAhn0AinwCnogAYBPfY8ccECqAujA2Q+KubWCKfAAAQGvIJ4I8CYBDcY6c2/kMfABCIcB1b5BN/9183kHwCoBbGBQCojQIgGsQECqAujA0ArHTqGMR4BKAG4wEkFiiBulAARL0CJ1AmVAASYwFOIlzDKoxBAOrC2ACJfAIEQwEQQQWbQJlYAW9jDIBEuIb9MDYBAMgnQHAUAIPgJtv1I2QDgHcRrq1DPqk/g5BPAO/i/Q8A9aMAGITXb7LNBAqgLowNgLXIJwMjsg8Ad+F9D4kFSqAhFABRS6gTKBMt4C285yERrmEdxiAAdWFsgEQ+AUJBARB+wp1AmXABb+C9DolwDedgzAIA7yCfAKGhAIgmI2QDgPsRrmGlxmQN8gngfrzPASB0FADhwwQKoC6MDQCs1JQxiPELcC/e35BYoATCQQEwCK99y15TJ1AmYMCdeG9DIlzbCfkEABgbcBL5BAgPBcAgvPQte5GaQJmIAXfhPQ2JcG03XsonkcJYBgAAQAEQAAAEQfEPVopk4Y4iIOAevJ8hkVGAxqAA6HGRnkCZkAF34L0MwErRGIMY1wDn430MieIf0FgUAD0sWhMoEzPgbLyHIRGuYR3GIAB1YWyARD4BmoICoEdFewJlggacifcuJMI13IsxDgAAeBUFQAAA4EPxD1aKRYGOIiDgPLxvIZFRgKaiAOhBsZpAmagBZ+E9C8BKjEEA6sLYAIniHxAJFACDyMvLU0ZGhrKysqxuSkTFegJlwgacgfcqJMK1E5BPnPl6ABqH9yok8gkQKRQAg8jJyVFpaamKioqsbkrEWDWBMnED9sZ7FBLh2incmE+swtgHAAC8hAIgAAAALGNlIY4iIGBfvD8hsUAJRBIFQI+wegK1+vUB1I33JiTCNazDGASgLowNkMgnQKRRAPQAu0ygdmkHgJN4T0IiXMM6dhmD7NIOACfxnoREPgGigQKgy9ltArVbewCv4r0IiXAN1GBMBAAAbkcBEAAAADFlx4KbHdsEeA3vQ0gsUALRQgHQxew6gdq1XYBX8B6ERLiGdRiDANSFsQES+QSIJgqALmX3CdTu7QPcivceJMI1rGP3Mcju7QPcivceJPIJEG0UAIPIy8tTRkaGsrKyrG5K2JwygTqlnYBb8J6DRLh2OifnE6dgrAQAAG5EATCInJwclZaWqqioyOqmAAAASHJ2PnFSYc1JbQWcjvcbJBYogVigAOgyTptAndZewKl4r0EiXMM6jEEA6sLYAIl8AsQKBUAXceoE6tR2A07BewwS4RrWceoY5NR2A07BewwS+QSIJQqALuH0CdTp7QfsivcWJMI10FiMoQAAwC0oAAIAACAq3FBAc0MfALvhfQWJBUog1igAuoBbJlC39AOwC95TkAjXsA5jEIC6MDZAIp8AVqAA6HBum0Dd1h/AKryXIBGuYR23jUFu6w9gFd5LkMgngFUoADqYWydQt/YLiBXeQ5AI10CkMbYCAAAnowAIAACAiHFzoczNfQOijfcPJBYoAStRAHQot0+gbu8fEC28dyARrmEdxiAAdWFsgEQ+AaxGAdCBvDKBeqWfQKTwnoFEuIZ1vDIGeaWfQKTwnoFEPgHsgAKgw3htAvVaf4HG4r0CiXANxApjLgAAcBoKgAAAAGgSLxbEvNhnIFy8TyCxQAnYBQXAIPLy8pSRkaGsrCyrm+Lj1QnUq/0GQsV7BBLh2ivIJwCcgrEBEvkEsBMKgEHk5OSotLRURUVFVjdFEhOo1/sPBMN7AxLh2kvIJ/bi9f4DwfDegEQ+AeyGAqADMIGexHEA/PGegES4BqzGWAwAAJyAAiAAAADCRuHrWxwL4Fu8HyCxQAnYEQVAm2MC9cfxAE7ivQCJcA3rMAYBqAtjAyTyCWBXFABtjAm0bhwXeB3vAUiEa1iHMahuHBd4He8BSOQTwM4oANoUE2j9OD7wKq59SIRrwK4YowEAgF1RAAQAAEBIKHA1jGMEL+K6h8QCJWB3FABtiAk0NBwneA3XPCTCNazDGASgLowNkMgngBNQALQZJtDwcLzgFVzrkAjXsA5jUHg4XvAKrnVI5BPAKSgA2ggTaONw3OB2XOOQCNeA0zB2AwAAO6EACAAAgKAoZDUexw5uxvUNiQVKwEkoANoEE2jTcPzgVlzbkAjXsA5jEIC6MDZAIp8ATkMB0AaYQCOD4wi34ZqGRLiGdRiDIoPjCLfhmoZEPgGciAKgxZhAI4vjCbfgWoZEuAbcgjEdAABYjQIgAAAA/FCwijyOKdyA6xgSC5SAU1EAtBATaHRwXOF0XMOQCNewDmMQgLowNkAinwBO5voC4K5duzRy5EhlZGSof//+evHFF61ukiQm0Gjj+MKpuHYhEa69wK75BNHFGA+n4tqFRD4BnM71BcD4+HgtXbpUpaWlWrt2rebMmaOKigpL28QEGhscZzgN1ywkwrVX2DGfSIxDscAxBgAAVnB9AfCMM87QwIEDJUmdOnVSSkqKDh06ZG2jAACAp9kxn1CYih2ONZyE6xUSC5SAG1heANywYYMmTJigtLQ0xcXFKT8/v9Y+y5YtU8+ePZWUlKTMzExt3LixUa+1ZcsWVVdXq1u3bk1sdeMxgcYWxxtOwbUKiXBtJ+QTAGBswEnkE8AdLC8AVlRUaMCAAXrkkUfq/PnKlSs1e/ZsLViwQFu3btXw4cOVnZ2tsrIy3z6ZmZnq27dvrX+7d+/27XPw4EFdf/31evzxx6Pep2CYQK3BcYfdcY1CIlzbjZfyCazB2A/ACcgngHvEW92A7OxsZWdnB/35kiVLNH36dN10002SpKVLl6qgoEDLly9Xbm6uJKm4uLje16isrNRVV12l+fPna+jQoQ3uW1lZ6XtcXl4ealfqRciz1v3XDWTygi0xNkAiXNuRV/KJxDhkJfIJ7IyxAQDcxfK/AKzPsWPHVFxcrDFjxvhtHzNmjDZt2hTScxhjNG3aNF1yySWaMmVKg/vn5uYqOTnZ98/Kj+MAAAD7cVM+4T/wrcc5gB1xXUJigRJwG1sXAA8cOKCqqiqlpqb6bU9NTdXevXtDeo633npLK1euVH5+vgYOHKiBAwfq/fffD7r//PnzdfjwYd+/Xbt2NakPEhOoXXAeYDdck5AI105EPgHgZowNkMgngBtZ/hHgUMTFxfk9NsbU2hbMRRddpOrq6pBfKzExUYmJiWG1rz5MoPbCR21gF4wNkAjXTufkfAJ7IZ8AsBPGI8CdbP0XgB07dlTz5s1rrabv37+/1qo7ECoKL7Aa1yAkwrWTuSGfMA7ZD+cEdsB1CADuZesCYEJCgjIzM1VYWOi3vbCwsMGbZTdVXl6eMjIylJWV1ejnYAIFAMB9yCeIFs4NrMT1B4kFSsDNLP8I8JEjR7R9+3bf4x07dqikpEQpKSnq3r275s6dqylTpmjw4MEaMmSIHn/8cZWVlWnGjBlRbVdOTo5ycnJUXl6u5OTksH+fCdTe+KgNrMLYAIlw7QTkEwBewtgAiXwCuJ3lBcAtW7Zo1KhRvsdz586VJE2dOlUrVqzQ5MmTdfDgQS1evFh79uxR3759tXr1aqWnp1vV5AYxgToDRUDEGmMDJMK1U7gxn8AZyCcArMC4A7if5QXAkSNHyhhT7z4zZ87UzJkzY9QieAkhG0AsMd44hxvzCYsQzkE+QSwxNgCAN9j6HoBWauw9dphAAdSFsQFAJJBPvINzhljgOoPEAiXgFRQAg8jJyVFpaamKiopC/h0mUGfivCHauMYgEa4RGeQTAJHC2ACJfAJ4CQXACGECdTbOH6KFawsS4RpA4zCHAIgm8gngLRQAgf+PkA0gGgjXsBJzm/NxDhENXFcA4D0UAIMI5x47TKAA6sLYACDSyCfexLlEJHE9QWKBEvAiCoBBhHqPHSZQd+F8IlK4liARrhF55BMATcHYAIl8AngVBcAmYAJ1J84rmoprCBLhGkBkMbcAiATyCeBdFACBOhCyATQF4RpWYg5zL84tmoLrBwC8jQJgIzGBAqgLYwMAKzEGuR/nGI3BdQOJBUrA6ygABlHfTbaZQL2B84xwcc1AIlwjusgnAMLF2ACJfAKAAmBQwW6yzQTqLZxvhIprBRLhGtEX6peAwN2YcwCEg3wCQKIACDSIkA0gFIRrWIm5yns45wgF1wkAoAYFwDAwgQKoC2MDACsxBnkX5x714fqAxAIlgG9RAAzRXVf3t7oJsBABCsFwbUAiXMM65BMAdSGfQCKfAPBHARAAGolwDYlwDQAA7Id8AiAQBcAgAr9lb+HL71ncIliJCRRAXRgbEGvkEwANYYESAFAXCoBB8C17AOpDuAZghbryCYVo7+LcIxD5BBJjA4C6UQAMAwOpN3HeEYhwDYmxAYC1GIMQiHwCibEBQHAUAMPEgOotnG8EIlxDYmyA/XBNegvnG0BdGBsA1IcCYCMwsHoD5xlAXRgbYFdcm4B3sUAJAGgIBUAACBHhGoDdUQR0P84xApFPIDE2AGgYBcBGYoB1N84vAhGuITE2ALAWYxACkU8gMTYACA0FwCZgoHUnzisCEa4hMTbAObhWAcA7GPMBhIoCYBB5eXnKyMhQVlZWvfsx4LoL5xNAXRgbYBfkE+/inCIQC5QAgHBQAAwiJydHpaWlKioqsropACxEuAZgJ+HkEwpG7sG5RCDyCSTGBgDhoQAYAQy87sB5RCDCNSTGBgDWYgxCIPIJJMYGAOGjABghDMDOxvlDIMI1JMYGOB/XMAAAACQKgBFFyHYmzhuAujA2wC24lp2Lc4dALFBCYmwA0DgUAAEgAOEagNvwH4vOwzlDIPIJJMYGAI1HATDCGJCdhfOFQIRrSIwNAKzFGIRA5BNIjA0AmoYCYBQwMDsD5wmBCNeQGBvgXlzbAAAA3kUBMEoI2QDgPIzdcDuucfvjHCEQC5SQGBsANB0FwCDy8vKUkZGhrKwsq5uCKGACRSDCNQAniEQ+YQ60L84NApFPIDE2AIgMCoBB5OTkqLS0VEVFRY1+DgZqe+K8IBDhGhJjA5whEvkE9sQYhEDkE0iMDQAihwJglDFg2wvnA4EI15AYG+A9XPMAAADeQgEwBgjZAADAbsgn9sG5QCAWKCExNgCILAqA8AwmUAQiXENibIC3cf1bj3OAQOQTSIwNACKPAmCMMIBbi+OPQIRrSIwNAKzFGIRA5BNIjA0AooMCYAwxkFuD445AhGtIjA1ADd4LAAAA7kcBMMYI2QAAwG7IJ7HHMUcgFighMTYAiB4KgHA1JlAEIlxDYmwA6sL7InY41ghEPoHE2AAguigAWoCBPTY4zghEuIbE2ADAWoxBCEQ+gcTYACD6KABahAE+uji+CES4hsTYADSE9wgAAIA7UQC0ECEbAADYDfkkeji2CMQCJSTGBgCxQQEQrsMEikCEa0iMDUA4eL9EHscUgcgnkBgbAMQOBUCLMeBHFscTgQjXkBgbAFiLMQiByCeQGBsAxBYFwCDy8vKUkZGhrKysqL8WA39kcBwRiHANibEB7kI+AQAAQGNQAAwiJydHpaWlKioqisnrEbIBAEBDyCfOwzFEIBYoITE2AIg9CoBwBSZQBCJcQ2JsACKB91HjcewQiHwCibEBgDUoANoIE0HjcNwQiHANibEBgLUYgxCIfAKJsQGAdSgA2gwTQng4XghEuIbE2ABEGu8pAAAAZ6MAaEOEbAAAYDfkk9BxrBCIBUpIjA0ArEUBEI7FBIpAhGtIjA1ANPH+ahjHCIHIJ5AYGwBYjwKgTTFB1I/jg0CEa0iMDQCsxRiEQOQTSIwNAOyBAqCNMVHUjeOCQIRrSIwNQKzwXgMAAHAeCoA2R8gGAAB2Qz6pjWOCQCxQQmJsAGAfFADhKEygCES4hsTYAFiB9923OBYIRD6BxNgAwF4oADoAE8dJHAcEIlxDYmwAYC3GIAQin0BibABgPxQAHcLrE4jX+4/aCNeQGBsAq/EeBAAAcAYKgAAAAGg0LxcBvdx31I0FSkiMDQDsiQKgg3h1IvFqvxEc4RoSYwNgJ158P3qxz6gf+QQSYwMA+6IA6DBem1C81l80jHANibEBgLUYgxCIfAKJsQGAvVEAdCCvTCxe6SdCR7iGxNgA2BXvTQAAAPtyfQHwq6++UlZWlgYOHKh+/frpiSeesLpJAADA49yaT7xQBPRCHxEeFighMTYAsD/XFwBbtWql9evXq6SkRO+8845yc3N18OBBq5vVZG6fYNzeP4SPcA2JsQHu4dZ8Irn7fermvqFxyCeQGBsAOIPrC4DNmzdXq1atJElHjx5VVVWVjDEWtyoy3DrRuLVfaDzCNSTGBriLm/OJWzEGIRD5BBJjAwDnsLwAuGHDBk2YMEFpaWmKi4tTfn5+rX2WLVumnj17KikpSZmZmdq4cWNYr/Hll19qwIAB6tq1q2699VZ17NgxQq23ntsmHLf1B01HuIbE2IDYI580De9ZAAAAe7G8AFhRUaEBAwbokUceqfPnK1eu1OzZs7VgwQJt3bpVw4cPV3Z2tsrKynz7ZGZmqm/fvrX+7d69W5LUvn17vfvuu9qxY4eef/557du3LyZ9AwAAzkQ+aTo3FQHd1BdEBguUkBgbADhLvNUNyM7OVnZ2dtCfL1myRNOnT9dNN90kSVq6dKkKCgq0fPly5ebmSpKKi4tDeq3U1FT1799fGzZs0LXXXlvnPpWVlaqsrPQ9Li8vD7Urlrn1hRJXhBAmUARyw3WNpmNsgBXIJ6jBGIRA5BNIjA0AnMfyvwCsz7Fjx1RcXKwxY8b4bR8zZow2bdoU0nPs27fPF5LLy8u1YcMG9e7dO+j+ubm5Sk5O9v3r1q1b4zsQQ06fgJzefkQe4RoSYwPsiXwSOqe/h53efkQe+QQSYwMAZ7J1AfDAgQOqqqpSamqq3/bU1FTt3bs3pOf49NNPNWLECA0YMEAXXXSRbrnlFvXv3z/o/vPnz9fhw4d9/3bt2tWkPsSSUycip7Yb0UO4hsTYAPsin4SH9zIAAID1LP8IcCji4uL8Hhtjam0LJjMzUyUlJSG/VmJiohITE8NpHgAA8CDySeiceLsSCpcI5LRrGNHB2ADAqWz9F4AdO3ZU8+bNa62m79+/v9aqO05y2oTktPYi+gjXkBgbYG/kE/djDEIg8gkkxgYAzmbrAmBCQoIyMzNVWFjot72wsFBDhw6N6mvn5eUpIyNDWVlZUX2daHDKxOSUdiJ2CNeQGBtgf+STxnHKe9sp7UTskE8gMTYAcD7LC4BHjhxRSUmJ72MwO3bsUElJicrKyiRJc+fO1ZNPPqmnn35a27Zt05w5c1RWVqYZM2ZEtV05OTkqLS1VUVFRVF8nWuw+Qdm9fYg9wjUkxgbYB/kkOniPAwAAWMPyewBu2bJFo0aN8j2eO3euJGnq1KlasWKFJk+erIMHD2rx4sXas2eP+vbtq9WrVys9Pd2qJgMAAJcjn0SPne8HSIESgex6rSK2GBsAuIHlBcCRI0fKGFPvPjNnztTMmTNj1CL3sGvAZgJFIDtep4g9xgbYCfnEexiDEIh8AomxAYB7WP4RYLty8j12TmW3Cctu7YH1CNeQGBuAUJFPosNu7QFgD4wNANyEAmAQTr/HzqnsMnHZpR2wD4p/kBgbgHCQT4DYIKMAANyGAiAAAAAsYYcioB3aAHuh+AeJsQGA+1AA9AirJzCrXx/2Q7iGxNgAwFqMQQhEPoHE2ADAnSgABuGWe+ycyqqJjAkUgQjXkBgbgMYgnzj/dQHYG2MDALeiABiEm+6xc6pYT2hMoAhE8Q8SYwPQWOQTIHrIKAAAN6MACAAAAMvFsghIwRGBKP5BYmwA4G4UAD0oVhMbEygCEa4hMTYAsBZjEAKRTyAxNgBwPwqAHhXtCY4JFIEI15AYGwDUj3wCwAqMDQC8gAJgEG68yXagaE10TKAA6sLYADQd+QSILBYoAQBeQQEwCLfeZBuwAuEaACLDK/kkGkVACosIRD6BxNgAwDsoAHpcpCc8JlAEIlxDYmwAYC3GIAQin0BibADgLRQAEbGJjwkUgQjXkBgbADQO+QRANDE2APAaCoCQ1PQJkAkUQF0YGwA0BWMIooEFSgCAF1EABBAVhGsAQCQ0pQhIARGByCeQGBsAeBMFwCC88C17gRo7ETKBIhDhGhJjAxANXswnjcUYhEDkE0iMDQC8iwJgEF75lr1A4U6ITKAIRLiGxNgARAv5JDr7A/AGxgYAXkYBELWEOjEygQKoC2MDgGhgbEFTsEAJAPA6CoAAIoZwDQCIplCKgBQKEYh8AomxAQAoAKJODU2QTKAIRLiGxNgAwFqMQQhEPoHE2AAAkhQfyk6nnXaa4uLiQnrCQ4cONalBsI9bXyipMzQxgSIQ4RoSYwNij3ziTeQTAOFgbACAk0IqAC5dutT3/w8ePKi7775bY8eO1ZAhQyRJf//731VQUKCFCxdGpZGwTmDIZgIFUBfGBliBfOJdwYqAwKm4RgAA+FZIBcCpU6f6/v+kSZO0ePFi3XLLLb5ts2bN0iOPPKK1a9dqzpw5kW8lANsiXAOwCvnE204tArIIgUDkE0iMDQBwqrDvAVhQUKDLLrus1vaxY8dq7dq1EWmUHeTl5SkjI0NZWVlWN8VyNRMnEygCEa4hMTbAHsgn3sUYhEDkE0iMDQAQKOwCYIcOHfTKK6/U2p6fn68OHTpEpFF2kJOTo9LSUhUVFVndFFtgAkUgwjUkxgbYB/nEmxiDANSFsQEAagvpI8CnWrRokaZPn64333zTd4+dt99+W6+99pqefPLJiDcQAGBPhGvYCfkEgMQCJQAAwYRdAJw2bZrOPfdc/epXv9LLL78sY4wyMjL01ltv6YILLohGGwHYDOEagN2QTwCQTyCxQAkAwYRVADx+/LhuvvlmLVy4UM8991y02gTAxgjXkAjXsBfyCQDyCSTyCQDUJ6x7ALZo0aLO++sA8AbCNSTCNeyHfAIAIJ8AQP3C/hKQq666Svn5+VFoCgDA7gjXsCvyCeBdLFACANCwsO8BePbZZ+uuu+7Spk2blJmZqdatW/v9fNasWRFrHAD7IFwDsDPyCeBN5BNILFACQCjCLgA++eSTat++vYqLi1VcXOz3s7i4OAI24EKEa0iEa9gb+QTwHvIJJPIJAIQq7ALgjh07otEO28nLy1NeXp6qqqqsbgpgKcI1JMI17I98AgDeQz4BgNCFfQ/AUxljZIyJVFtsJScnR6WlpSoqKrK6KQBgKcI1nIZ8ArgfC5QAAISnUQXAZ599Vv369VPLli3VsmVL9e/fX7/97W8j3TYAFiNcA3AS8gngDeQTSCxQAkC4wv4I8JIlS7Rw4ULdcsstGjZsmIwxeuuttzRjxgwdOHBAc+bMiUY7AcQY4RoS4RrOQT4BvIF8Aol8AgCNEXYB8Ne//rWWL1+u66+/3rftiiuuUJ8+fXTnnXcSsAEXIFxDIlzDWcgnAAAAQHBhfwR4z549Gjp0aK3tQ4cO1Z49eyLSKACAtSj+wWnIJ4D7sUAJiYwCAI0VdgHw7LPP1gsvvFBr+8qVK9WrV6+INAqAdQjXAJyIfAK4G/kEEsU/AGiKsD8CvGjRIk2ePFkbNmzQsGHDFBcXp7/97W96/fXX6wzeAJyDcA2JcA1nIp8A7kU+gUQ+AYCmCvsvACdNmqR33nlHHTt2VH5+vl5++WV17NhRmzdv1lVXXRWNNgKIAcI1JMI1nIt8AgAAAAQX9l8ASlJmZqZ+97vfRbotAAALUfyD05FPAPdhgRISGQUAIqFRBcCqqirl5+dr27ZtiouLU0ZGhiZOnKjmzZtHun0AYoBwDcANyCeAu5BPIFH8A4BICbsAuH37dl1++eX69NNP1bt3bxlj9K9//UvdunXTX/7yF5111lnRaCeAKCFcQyJcw/nIJ4C7kE8gkU8AIJLCvgfgrFmzdOaZZ2rXrl36xz/+oa1bt6qsrEw9e/bUrFmzotFGAFFCuIZEuIY7kE8AAACA4ML+C8D169fr7bffVkpKim9bhw4ddN9992nYsGERbRwAAEAoyCeAe7BACYkFSgCItLD/AjAxMVFfffVVre1HjhxRQkJCRBplB3l5ecrIyFBWVpbVTQGignANiXAN9yCfAO5APoFEPgGAaAi7ADh+/HjdfPPNeuedd2SMkTFGb7/9tmbMmKGJEydGo42WyMnJUWlpqYqKiqxuChBxhGtIhGu4C/kEcD7yCSTyCQBES9gFwF/96lc666yzNGTIECUlJSkpKUnDhg3T2WefrV/+8pfRaCOACCJcQyJcw33IJwAAAEBwYd8DsH379vrTn/6k7du3a9u2bTLGKCMjQ2effXY02gcAANAg8gngbCxQQmKBEgCiKewCYI2zzz6bUA04DOEaEuEa7kY+AZyHfAKJfAIA0Rb2R4CvueYa3XfffbW2P/DAA7r22msj0igAkUe4hkS4hnuRTwBnIp9AIp8AQCyEXQBcv369Lr/88lrbL7vsMm3YsCEijQIQWYRrSIRruBv5BAAAAAgu7ALgkSNHlJCQUGt7ixYtVF5eHpFGAQAAhIN8AjgPC5SQWKAEgFgJuwDYt29frVy5stb2P/zhD8rIyIhIowBEDuEaEuEa7kc+AZyFfAKJfAIAsRT2l4AsXLhQkyZN0r///W9dcsklkqTXX39dv//97/Xiiy9GvIEAGo9wDYlwDW8gnwDOQT6BRD4BgFgLuwA4ceJE5efn695779VLL72kli1bqn///lq7dq0uvvjiaLQRQCMQriERruEd5BMAAAAguLALgJJ0+eWX13mjbQAAAKuQTwD7Y4ESEguUAGCFsO8BeKqZM2fqwIEDkWoLgAghXEMiXMO7yCeAPZFPIJFPAMAqTSoA/u53v+Ob9QCbIVxDIlzD28gngP2QTyCRTwDASk0qABpjItUOABFAuIZEuAbIJwAAAIC/JhUAAQAAAKA+LFBCYoESAKwW9peAVFRUqHXr1pKkr776KuINAtA4hGtIhGt4F/kEsCfyCSTyCQDYQdh/AZiamqobb7xRf/vb36LRnqj5+uuvlZ6ernnz5lndFCDiCNeQCNfwNvIJYD/kE0jkEwCwi7ALgL///e91+PBhjR49Wuecc47uu+8+7d69Oxpti6h77rlHF1xwgdXNACKOcA2JcA2QTwAAAIDgwi4ATpgwQX/84x+1e/du/fd//7d+//vfKz09XePHj9fLL7+sEydORKOdTfLxxx/rn//8p8aNG2d1UwAAQBSQTwB7YYESEguUAGAnjf4SkA4dOmjOnDl69913tWTJEq1du1bXXHON0tLSdPvtt+vrr78O6Xk2bNigCRMmKC0tTXFxccrPz6+1z7Jly9SzZ08lJSUpMzNTGzduDKut8+bNU25ubli/AzgB4RoS4Ro4FfkEsB75BBL5BADsJuwvAamxd+9ePfvss3rmmWdUVlama665RtOnT9fu3bt133336e2339aaNWsafJ6KigoNGDBAN9xwgyZNmlTr5ytXrtTs2bO1bNkyDRs2TI899piys7NVWlqq7t27S5IyMzNVWVlZ63fXrFmjoqIinXPOOTrnnHO0adOmxnYXsB3CNSTCNRCIfAJYi3wCiXwCAHYUdgHw5Zdf1jPPPKOCggJlZGQoJydHP/zhD9W+fXvfPgMHDtSgQYNCer7s7GxlZ2cH/fmSJUs0ffp03XTTTZKkpUuXqqCgQMuXL/etmhcXFwf9/bffflt/+MMf9OKLL+rIkSM6fvy42rVrp9tvv73O/SsrK/3Cenl5eUj9AGKJcA2JcA2cinwCAAAABBf2R4BvuOEGpaWl6a233lJJSYluueUWv3AtSWeeeaYWLFjQ5MYdO3ZMxcXFGjNmjN/2MWPGhLxanpubq127dmnnzp168MEH9aMf/ShouK7ZPzk52fevW7duTeoDAACIPvIJYD0WKCGxQAkAdhX2XwDu2bNHrVq1qnefli1b6o477mh0o2ocOHBAVVVVSk1N9duempqqvXv3Nvn56zJ//nzNnTvX97i8vJyQDVshXEMiXAOByCeAtcgnkMgnAGBnYRcAGwrX0RAXF+f32BhTa1sopk2b1uA+iYmJSkxMDPu5gVggXEMiXAN1IZ8A1iGfQCKfAIDdNfpbgGOhY8eOat68ea3V9P3799dadQfcjnANiXAN2AH5BAAAAE5j6wJgQkKCMjMzVVhY6Le9sLBQQ4cOjepr5+XlKSMjQ1lZWVF9HQAA4CzkE+BbLFBCYoESAJwg7I8AR9qRI0e0fft23+MdO3aopKREKSkp6t69u+bOnaspU6Zo8ODBGjJkiB5//HGVlZVpxowZUW1XTk6OcnJyVF5eruTk5Ki+FtAQwjUkwjUQS+QToGHkE0jkEwBwikYXALdv365///vfGjFihFq2bNno+95s2bJFo0aN8j2uucH11KlTtWLFCk2ePFkHDx7U4sWLtWfPHvXt21erV69Wenp6Y5sOOArhGhLhGggV+QSIDfIJJPIJADhJ2AXAgwcPavLkyXrjjTcUFxenjz/+WGeeeaZuuukmtW/fXg899FBYzzdy5EgZY+rdZ+bMmZo5c2a4TQUcj3ANiXANhIJ8AgAAAAQX9j0A58yZo/j4eJWVlfl9497kyZP12muvRbRxVuIeOwAAOAf5BIgdFighsUAJAE4T9l8ArlmzRgUFBeratavf9l69eumTTz6JWMOsxj12YDXCNSTCNRAq8gkQG+QTSOQTAHCisP8CsKKiwm9lvcaBAweUmJgYkUYBXke4hkS4BsJBPgGij3wCiXwCAE4VdgFwxIgRevbZZ32P4+LiVF1drQceeMDvZtkAGodwDYlwDYSLfAIAAAAEF/ZHgB944AGNHDlSW7Zs0bFjx3Trrbfqww8/1KFDh/TWW29Fo42WyMvLU15enqqqqqxuCgAAaAD5BIguFighsUAJAE4W9l8AZmRk6L333tP555+vSy+9VBUVFbr66qu1detWnXXWWdFooyVycnJUWlqqoqIiq5sCDyFcQyJcA41BPgGih3wCiXwCAE4X9l8ASlLnzp21aNGiSLcF8DTCNSTCNdAU5BMg8sgnkMgnAOAGYf8F4DPPPKMXX3yx1vYXX3xRv/nNbyLSKMBrCNeQCNdAU5BPAAAAgODCLgDed9996tixY63tnTp10r333huRRgEAAISDfAJEHguUkFigBAC3CLsA+Mknn6hnz561tqenp6usrCwijbKDvLw8ZWRkKCsry+qmwOUI15AI10BTkU+AyCKfQCKfAICbhF0A7NSpk957771a299991116NAhIo2yA26yjVggXEMiXAORQD4BgMginwCAu4RdAPyv//ovzZo1S+vWrVNVVZWqqqr0xhtv6Cc/+Yn+67/+KxptBFyJ4h8kwjUQKeQTIHLIKAAAuE/Y3wJ8991365NPPtHo0aMVH3/y16urq3X99ddzjx0AAGAJ8gkQGRT/ILFACQBuFFYB0BijPXv26JlnntHdd9+tkpIStWzZUv369VN6enq02gi4DuEaEuEaiBTyCRAZ5BNI5BMAcKuwC4C9evXShx9+qF69eqlXr17RahfgWoRrSIRrIJLIJwAQGeQTAHCvsO4B2KxZM/Xq1UsHDx6MVntsg2/ZQzRQ/INEuAYijXwCNB0ZBQAAdwv7S0Duv/9+/exnP9MHH3wQjfbYBt+yBwCAc5BPgMaj+AeJBUoAcLuwvwTkhz/8ob7++msNGDBACQkJatmypd/PDx06FLHGAW5CuIZEuAaihXwCNA75BBL5BAC8IOwC4NKlS6PQDMDdCNeQCNdANJFPAKBxyCcA4A1hFwCnTp0ajXYAgKsRroHoIp8A4WOBEgAA7wi7AFhWVlbvz7t3797oxgBuRLgGgOgjnwDhIZ9AYoESALwk7AJgjx49FBcXF/TnVVVVTWoQ4CaEa0iEayAWyCdA6MgnkMgnAOA1YRcAt27d6vf4+PHj2rp1q5YsWaJ77rknYg0DnI5wDYlwDcQK+QQAQkc+AQDvCbsAOGDAgFrbBg8erLS0ND3wwAO6+uqrI9Iwq+Xl5SkvL4+/GADQaIRrIHbIJ0BoWKAEAMCbmkXqic455xwVFRVF6uksl5OTo9LSUlf1CbFDuAYAeyCfAN8in0BigRIAvCrsvwAsLy/3e2yM0Z49e3TnnXeqV69eEWsY4FSEa0iEayDWyCdA/cgnkMgnAOBlYRcA27dvX+sm28YYdevWTX/4wx8i1jDAiQjXkAjXgBXIJwBQP/IJAHhb2AXAdevW+T1u1qyZTj/9dJ199tmKjw/76QDAVQjXgDXIJ0BwLFACAICwE/HFF18cjXYAjke4BgDrkE+AupFPILFACQBoRAFQkv79739r6dKl2rZtm+Li4nTuuefqJz/5ic4666xItw9wBMI1JMI1YDXyCeCPfAKJfAIAOCnsbwEuKChQRkaGNm/erP79+6tv375655131KdPHxUWFkajjYCtEa4hEa4Bq5FPAKA28gkAoEbYfwF42223ac6cObrvvvtqbf/5z3+uSy+9NGKNAwAnIFwD1iOfAP5YoAQAAKcK+y8At23bpunTp9fafuONN6q0tDQijbKDvLw8ZWRkKCsry+qmwMYI1wBgD+QT4FvkE0gsUAIA/IVdADz99NNVUlJSa3tJSYk6deoUiTbZQk5OjkpLS1VUVGR1U2BThGtIhGvALsgnwEnkE0jkEwBAbWF/BPhHP/qRbr75Zv3nP//R0KFDFRcXp7/97W/6xS9+oZ/+9KfRaCNgO4RrSIRrwE7IJwBwEvkEAFCXsAuACxcuVNu2bfXQQw9p/vz5kqS0tDTdeeedmjVrVsQbCAB2RLgG7IV8ArBACQAAggu7ABgXF6c5c+Zozpw5+uqrryRJbdu2jXjDALsiXAOA/ZBP4HXkE0gsUAIAggv7HoDffPONvv76a0kng/WhQ4e0dOlSrVmzJuKNA+yGcA2JcA3YEfkEXkY+gUQ+AQDUL+wC4BVXXKFnn31WkvTll1/q/PPP10MPPaQrrrhCy5cvj3gDAbsgXEMiXAN2RT4B4GXkEwBAQ8IuAP7jH//Q8OHDJUkvvfSSOnfurE8++UTPPvusfvWrX0W8gQBgF4RrwL7IJ/AqFigBAEAowi4Afv3117576qxZs0ZXX321mjVrpgsvvFCffPJJxBsI2AHhGgDsjXwCLyKfQGKBEgAQmrALgGeffbby8/O1a9cuFRQUaMyYMZKk/fv3q127dhFvIGA1wjUkwjVgd+QTeA35BBL5BAAQurALgLfffrvmzZunHj166IILLtCQIUMknVxtHzRoUMQbCFiJcA2JcA04AfkEgNeQTwAA4YgP9xeuueYaXXTRRdqzZ48GDBjg2z569GhdddVVEW0cAFiNcA04A/kEXsICJQAACFfYBUBJ6ty5szp37uy37fzzz49IgwC7IFwDgLOQT+AF5BNILFACAMIX9keAAS8gXEMiXAMA7IV8Aol8AgBoHAqAQeTl5SkjI0NZWVlWNwUxRriGRLgGYE/kEwAAADQGBcAgcnJyVFpaqqKiIqubAiDGKP4BsCvyiXexQAmJjAIAaDwKgMApCNcAAMBuyCeQKP4BAJqGAiDw/xGuIRGuAQD2Qj6BRD4BADQdBUBAhGucRLgGAAAAALgRBUAAEMU/AID9sEAJiYwCAIgMCoDwPMI1AACwG/IJJIp/AIDIoQAITyNcQyJcAwDshXwCiXwCAIgsCoDwLMI1JMI1AAAAAMD9KAACAAAANsECJSQWKAEAkUcBEJ5EuIZEuAYA2Av5BBL5BAAQHRQA4TmEa0iEawCAvZBPIJFPAADRQwEQnkK4hkS4BgAAAAB4CwVAAAAAwEIsUEJigRIAEF0UAOEZhGtIhGsAgL2QTyCRTwAA0UcBEJ5AuIZEuAYA2Av5BBL5BAAQGxQA4XqEa0iEawAAAACAd3miABgfH6+BAwdq4MCBuummm6xuDgAAAPnE41ighMQCJQAgduKtbkAstG/fXiUlJVY3AxYgXEMiXAOwJ/KJd5FPIJFPAACx5Ym/AIQ3Ea4hEa4BAPZCPoFEPgEAxJ7lBcANGzZowoQJSktLU1xcnPLz82vts2zZMvXs2VNJSUnKzMzUxo0bw3qN8vJyZWZm6qKLLtL69esj1HLYGeEaEuEaQOORTwAAAOAmln8EuKKiQgMGDNANN9ygSZMm1fr5ypUrNXv2bC1btkzDhg3TY489puzsbJWWlqp79+6SpMzMTFVWVtb63TVr1igtLU07d+5UWlqaPvjgA11++eV6//331a5du6j3DQAAOBP5BNHAAiUkFigBANawvACYnZ2t7OzsoD9fsmSJpk+f7rs59tKlS1VQUKDly5crNzdXklRcXFzva6SlpUmS+vbtq4yMDP3rX//S4MGD69y3srLSL6yXl5eH1R9Yj3ANiXANoGnIJ4g08gkk8gkAwDqWfwS4PseOHVNxcbHGjBnjt33MmDHatGlTSM/xxRdf+ALzp59+qtLSUp155plB98/NzVVycrLvX7du3RrfAcQc4RoS4RpAdJFPEC7yCSTyCQDAWrYuAB44cEBVVVVKTU31256amqq9e/eG9Bzbtm3T4MGDNWDAAI0fP16//OUvlZKSEnT/+fPn6/Dhw75/u3btalIfEDuEa0iEawDRRz4BAACA01j+EeBQxMXF+T02xtTaFszQoUP1/vvvh/xaiYmJSkxMDKt9AADAe8gnCAULlJBYoAQAWM/WfwHYsWNHNW/evNZq+v79+2utusPbCNeQCNcAYoN8glCRTyCRTwAA9mDrAmBCQoIyMzNVWFjot72wsFBDhw6N6mvn5eUpIyNDWVlZUX0dNB3hGhLhGkDskE8QCvIJJPIJAMA+LP8I8JEjR7R9+3bf4x07dqikpEQpKSnq3r275s6dqylTpmjw4MEaMmSIHn/8cZWVlWnGjBlRbVdOTo5ycnJUXl6u5OTkqL4WGo9wDYlwDSDyyCcAAABwE8sLgFu2bNGoUaN8j+fOnStJmjp1qlasWKHJkyfr4MGDWrx4sfbs2aO+fftq9erVSk9Pt6rJAADA5cgnaAoWKCGxQAkAsBfLC4AjR46UMabefWbOnKmZM2fGqEVwCsI1JMI1gOggn6CxyCeQyCcAAPux9T0ArcQ9duyNcA2JcA3Ae8gn9kY+gUQ+AQDYEwXAIHJyclRaWqqioiKrm4IAhGtIhGsA3kQ+AQAAQGNQAAQAAACaiAVKSCxQAgDsiwIgHIVwDYlwDQCwF/IJJPIJAMDeKAAGwT127IdwDYlwDcDbyCf2Qz6BRD4BANgfBcAguMeOvRCuIRGuAYB8AgAAgMagAAgAAAA0AguUkFigBAA4AwVA2B7hGhLhGgBgL+QTSOQTAIBzUACErRGuIRGuAQD2Qj6BRD4BADgLBcAguMm29QjXkAjXAHAq8gkAAAAagwJgENxkGwAA2A35xHosUEJigRIA4DwUAGFLhGtIhGsAgL2QTyCRTwAAzkQBELZDuIZEuAYA2Av5BBL5BADgXBQAYSuEa0iEawAAAAAAIokCIAAAAFAPFighsUAJAHA2CoBB8C17sUe4hkS4BoD6kE9ij3wCiXwCAHA+CoBB8C17sUW4hkS4BoCGkE9ii3wCiXwCAHAHCoCwHOEaEuEaAAAAAIBooQAIAAAABGCBEhILlAAA96AACEsRriERrgEA9kI+gUQ+AQC4CwVAWIZwDYlwDQAA7Id8AgBwGwqAsATFP0iEawCA/ZBRAACAG1EABAAAAETxDyexQAkAcCMKgEHk5eUpIyNDWVlZVjfFdQjXkAjXANAY5JPoIZ9AIp8AANyLAmAQOTk5Ki0tVVFRkdVNcRXCNSTCNQA0FvkEiB7yCQDAzSgAImYo/kEiXAMA7IeMAgAA3I4CIAAAADyL4h8kFigBAO5HARAxQbiGRLgGANgL+QQS+QQA4A0UABF1hGtIhGsAAGA/5BMAgFdQAAQQdYRrAIDdsEAJAAC8hAIgoopwDQAA7IZ8AokFSgCAt1AARNQQriERrgEA9kI+gUQ+AQB4DwXAIPLy8pSRkaGsrCyrm+JIhGtIhGsAiDTyCdB05BMAgBdRAAwiJydHpaWlKioqsropgCMRrgEg8sgnTcMCJQAA8CoKgIg4wjUAALAb8gkkFigBAN5FARARRbiGRLgGANgL+QQS+QQA4G0UABExhGtIhGsAAGA/5BMAgNdRAAQQMYRrAIDdsEAJAABAARARQrgGAAB2Qz6BxAIlAAASBUBEAOEaEuEaAGAv5BNI5BMAAGpQAESTEK4hEa4BAID9kE8AAPgWBUAATUK4BgDYDQuUAAAA/igAotEI1wAAwG7IJ5BYoAQAIBAFQDQK4RoS4RoAYC/kE0jkEwAA6kIBEGEjXEMiXAMAAPshnwAAUDcKgADCRrgGANgNC5QAAADBUQAMIi8vTxkZGcrKyrK6KbZCuAYAwDrkk7qRTyCxQAkAQH0oAAaRk5Oj0tJSFRUVWd0U2yBcQyJcA4CVyCe1kU8gkU8AAGgIBUCEhHANiXANAADsh3wCAEDDKAACCAnhGgBgNyxQAgAAhIYCIBpEuAYAAHZDPoHEAiUAAKGiAIh6Ea4hEa4BAPZCPoFEPgEAIBwUABEU4RoS4RoAANgP+QQAgPBQAAQQFOEaAGA3LFACAACEjwIg6kS4BgAAdkM+gcQCJQAAjUEBELUQriERrgEA9kI+gUQ+AQCgsSgAwg/hGhLhGgAAAAAAN6EACMAPxT8AgN2wQAmJjAIAQFNQAIQP4RoAANgN+QQSxT8AAJqKAiAkEa5xEuEaAGAn5BNI5BMAACKBAiAI15BEuAYAAAAAwK0oAAKg+AcAsB0WKCGRUQAAiBQKgB5HuAYAAHZDPoFE8Q8AgEjyRAFwx44dGjVqlDIyMtSvXz9VVFRY3SRbIFxDIlwDgFXIJ3Ujn0AinwAAEGnxVjcgFqZNm6a7775bw4cP16FDh5SYmGh1kyxHuIZEuAYAK5FPAAAAECuuLwB++OGHatGihYYPHy5JSklJsbhFAADA68gndWOBEhILlAAARIPlHwHesGGDJkyYoLS0NMXFxSk/P7/WPsuWLVPPnj2VlJSkzMxMbdy4MeTn//jjj9WmTRtNnDhR5513nu69994Itt6ZCNeQCNcAUB/ySeyRTyCRTwAAiBbL/wKwoqJCAwYM0A033KBJkybV+vnKlSs1e/ZsLVu2TMOGDdNjjz2m7OxslZaWqnv37pKkzMxMVVZW1vrdNWvW6Pjx49q4caNKSkrUqVMnXXbZZcrKytKll14a9b7ZEeEaEuEaABpCPokt8gkk8gkAANFkeQEwOztb2dnZQX++ZMkSTZ8+XTfddJMkaenSpSooKNDy5cuVm5srSSouLg76+127dlVWVpa6desmSRo3bpxKSkqCBuzKykq/sF5eXh52n+yKcA2JcA0AoSCfAAAAwE0s/whwfY4dO6bi4mKNGTPGb/uYMWO0adOmkJ4jKytL+/bt0xdffKHq6mpt2LBB5557btD9c3NzlZyc7PtXE8wBAAAk8kmksUAJiQVKAACizdYFwAMHDqiqqkqpqal+21NTU7V3796QniM+Pl733nuvRowYof79+6tXr14aP3580P3nz5+vw4cP+/7t2rWrSX2wC8I1JMI1AEQC+SRyyCeQyCcAAMSC5R8BDkVcXJzfY2NMrW31aehjPKdKTExUYmJiWO2zO8I1JMI1AEQa+aRpyCeQyCcAAMSKrf8CsGPHjmrevHmt1fT9+/fXWnVH3QjXkAjXABBJ5BMAAAA4ja0LgAkJCcrMzFRhYaHf9sLCQg0dOjSqr52Xl6eMjAxlZWVF9XUAAICzkE+ajgVKSCxQAgAQS5Z/BPjIkSPavn277/GOHTtUUlKilJQUde/eXXPnztWUKVM0ePBgDRkyRI8//rjKyso0Y8aMqLYrJydHOTk5Ki8vV3JyclRfK1oI15AI1wDQGOST6CGfQCKfAAAQa5YXALds2aJRo0b5Hs+dO1eSNHXqVK1YsUKTJ0/WwYMHtXjxYu3Zs0d9+/bV6tWrlZ6eblWTHYFwDYlwDQCNRT6JDvIJJPIJAABWsLwAOHLkSBlj6t1n5syZmjlzZoxa5HyEa0iEawBoCvIJAAAA3MTW9wC0klvusQMAANzDyfmEBUpILFACAGAVCoBB5OTkqLS0VEVFRVY3JSyEa0iEawBwK/IJnIx8AgCAdSgAugjhGhLhGgBgL+QTSOQTAACsRgHQJQjXkAjXAAAAAACgNgqAQTj5HjsAAMCdnJZPWKCExAIlAAB2QAEwCCfdY4dwDYlwDQBeQD6B05BPAACwBwqADke4hkS4BgDYC/kEEvkEAAA7oQDoYIRrSIRrAAAAAABQPwqAAAAAiBgWKCGxQAkAgN1QAAzC7jfZJlxDIlwDgNeQT+AE5BMAAOyHAmAQdr7JNuEaEuEaALyIfAK7I58AAGBPFAAdhnANiXANAAAAAABCRwEQAAAATcICJSQWKAEAsDMKgA5CuIZEuAYA2Av5BBL5BAAAu6MA6BCEa0iEawCAvZBPIJFPAABwAgqAQdjpW/YI15AI1wAAe+UTAAAAOAcFwCDs/C17AADAm+yUT1ighMQCJQAATkEB0OYI15AI1wAAeyGfQCKfAADgJBQAbYxwDYlwDQCwF/IJJPIJAABOQwHQpgjXkAjXAAAAAACg6SgAAgAAICQsUEJigRIAACeiAGhDhGtIhGsAgL2QTyCRTwAAcCoKgDZDuIZEuAYA2Av5BBL5BAAAJ6MAGEReXp4yMjKUlZUVs9ckXEMiXAMAgrMinwAAAMD5KAAGkZOTo9LSUhUVFVndFAAAAEnW5BMWKCGxQAkAgNNRALQJwjUkwjUAwF7IJ5DIJwAAuAEFQBsgXEMiXAMA7IV8Aol8AgCAW1AAtBjhGhLhGgAAAAAARA8FQAAAAPhhgRISC5QAALgJBUALEa4hEa4BAPZCPoFEPgEAwG0oAFqEcA2JcA0AAOyHfAIAgPtQALQAxT9IhGsAgP2QUQAAANyJAmAQeXl5ysjIUFZWltVNAQAAkBTdfELxDxILlAAAuBUFwCBycnJUWlqqoqKiiD4v4RoS4RoA0DjkE0QT+QQAAPeiABhDhGtIhGsAAGA/5BMAANyNAmCMUPyDRLgGANgPGQUAAMD9KAACAAB4FMU/SCxQAgDgBRQAY4BwDYlwDQCwF/IJJPIJAABeQQEwygjXkAjXAADAfsgnAAB4BwVAIMoI1wAAu2GBEgAAwFsoAEYR4RoAANgN+QQSC5QAAHgNBcAoIVxDIlwDAOyFfAKJfAIAgBdRAIwCwjUkwjUAALAf8gkAAN5EARCIAsI1AMBuWKAEAADwLgqAEUa4BgAAdkM+gcQCJQAAXkYBMIII15AI1wAAeyGfQCKfAADgdRQAg8jLy1NGRoaysrJC2p9wDYlwDQCIrnDzCSCRTwAAAAXAoHJyclRaWqqioiKrmwKHIFwDAKIt3HzCAiUAAAAkCoARQbgGAAB2Qz6BxAIlAAA4iQJgExGuIRGuAQD2Qj6BRD4BAADfogDYBIRrSIRrAABgP+QTAABwKgqAQBMQrgEAdsMCJQAAAAJRAGwkwjUAALAb8gkkFigBAEBtFAAbgXANiXANALAX8gkk8gkAAKgbBcAwEa4hEa4BAID9kE8AAEAwFACBMBGuAQB2wwIlAAAA6kMBMAyEawAAYDfkE0gsUAIAgPpRAAzRXVf3t7oJsAHCNQDATsgnkMgnAACgYRQAgRARrgEAgN2QTwAAQCgoAAIhIFwDAAAAAACnogAIAAAAOBALlAAAIFQUAIEGEK4BAIDdkE8AAEA4KAAC9SBcAwAAuyGfAACAcLm+APjRRx9p4MCBvn8tW7ZUfn6+1c2CAxCuAQDRQj4BAABALMVb3YBo6927t0pKSiRJR44cUY8ePXTppZda2ygAAOBp5BM0FguUAACgMVz/F4CnevXVVzV69Gi1bt3a6qbA5gjXAIBYIZ8gVOQTAADQWJYXADds2KAJEyYoLS1NcXFxdX78ZdmyZerZs6eSkpKUmZmpjRs3Nuq1XnjhBU2ePLmJLYbbEa4BAOQTAAAAuInlBcCKigoNGDBAjzzySJ0/X7lypWbPnq0FCxZo69atGj58uLKzs1VWVubbJzMzU3379q31b/fu3b59ysvL9dZbb2ncuHFR7xOci+IfAEAin8B+yCgAAKApLL8HYHZ2trKzs4P+fMmSJZo+fbpuuukmSdLSpUtVUFCg5cuXKzc3V5JUXFzc4Ov86U9/0tixY5WUlFTvfpWVlaqsrPQ9Li8vD6UbAADARcgnsBOKfwAAoKks/wvA+hw7dkzFxcUaM2aM3/YxY8Zo06ZNYT1XqB+vyc3NVXJysu9ft27dwnodOBfhGgAQCvIJYol8AgAAIsHWBcADBw6oqqpKqampfttTU1O1d+/ekJ/n8OHD2rx5s8aOHdvgvvPnz9fhw4d9/3bt2hV2u+E8hGsAQKjIJwAAAHAayz8CHIq4uDi/x8aYWtvqk5ycrH379oW0b2JiohITE8NqH5yN4h8AoDHIJ4g2MgoAAIgUW/8FYMeOHdW8efNaq+n79++vteoOAAAQC+QTxALFPwAAEEm2LgAmJCQoMzNThYWFftsLCws1dOjQqL52Xl6eMjIylJWVFdXXgbUI1wCAcJFPEG3kEwAAEGmWfwT4yJEj2r59u+/xjh07VFJSopSUFHXv3l1z587VlClTNHjwYA0ZMkSPP/64ysrKNGPGjKi2KycnRzk5OSovL1dycnJUXwvWIFwDAIIhnwAAAMBNLC8AbtmyRaNGjfI9njt3riRp6tSpWrFihSZPnqyDBw9q8eLF2rNnj/r27avVq1crPT3dqiYDAACXI5/AKixQAgCAaLC8ADhy5EgZY+rdZ+bMmZo5c2aMWgQvIFwDAOpDPoEVyCcAACBabH0PQCtxjx33IlwDAJyKfOJe5BMAABBNFACDyMnJUWlpqYqKiqxuCiKIcA0AcDLyCQAAABqDAiAAAABgIRYoAQBAtFEAhGcQrgEAgN2QTwAAQCxQAAyCe+y4C+EaAOAG5BN3IZ8AAIBYoQAYBPfYcQ/CNQDALcgnAAAAaAwKgAAAAECMsUAJAABiiQIgXI1wDQAA7IZ8AgAAYo0CIFyLcA0AAOyGfAIAAKxAATAIbrLtbIRrAIAbkU8AAADQGBQAg+Am2wAAwG7IJ87GAiUAALAKBUC4DuEaAADYDfkEAABYiQIgXIVwDQAA7IZ8AgAArEYBEK5BuAYAAAAAAKiNAiAAAAAQJSxQAgAAO6AAGATfsucshGsAgBeQT5yFfAIAAOyCAmAQfMuecxCuAQBeQT5xDvIJAACwEwqAcDTCNQAAAAAAQP0oAAIAAAARxAIlAACwGwqAcCzCNQAAsBvyCQAAsCMKgHAkwjUAALAb8gkAALArCoBwHMI1AAAAAABA6CgAAgAAAE3EAiUAALAzCoBB5OXlKSMjQ1lZWVY3BacgXAMAvIx8Yk/kEwAAYHcUAIPIyclRaWmpioqKrG4K/j/CNQDA68gn9kM+AQAATkABEI5AuAYAAAAAAGgcCoAAAABAI7BACQAAnIICIGyPcA0AAOyGfAIAAJyEAiBsjXANAADshnwCAACchgIgbItwDQAAAAAA0HQUAAEAAIAQsUAJAACciAIgbIlwDQAA7IZ8AgAAnIoCYBB5eXnKyMhQVlaW1U3xHMI1AAB1I59Yh3wCAACcjAJgEDk5OSotLVVRUZHVTfEUwjUAAMGRTwAAANAYFAABAACAerBACQAAnI4CIGyDcA0AAOyGfAIAANwg3uoGABLhGgAA2A/5BADgNce+qbC6Cbbn1GNEARCWI1wDAAAAAGCdhIQEde7cWY/OvMzqpjhC586dlZCQYHUzwkIBEAAAAAjAAiUAwEuSkpK0Y8cOHTt2zOqmOEJCQoKSkpKsbkZYKADCUoRrAABgN+QTAIAXJSUlOa6ohdDxJSCwDOEaAADYDfkEAAC4EQVAWIJwDQAAAAAAEBsUAAEAAACxQAkAANyLAiBijnANAADshnwCAADcjAIgYopwDQAA7IZ8AgAA3I4CIGKGcA0AAAAAABB7FACDyMvLU0ZGhrKysqxuCgAAgCTySTSwQAkAALwgzhhjrG6EnZWXlys5OVmHDx9Wu3btrG6OYxGuAcDdKr8+ol/dMJz5MkbIJ5FBPgEAdyOfAN/iLwARdYRrAABgN+QTAADgJRQAEVWEawAAAAAAAGtRAAQAAICnsEAJAAC8hgIgooZwDQAA7IZ8AgAAvIgCIKKCcA0AAOyGfAIAALyKAiAijnANAAAAAABgHxQAAQAA4HosUAIAAC+jAIiIIlwDAAC7IZ8AAACvowCIiCFcAwAAuyGfAAAAUABEhBCuAQAAAAAA7IkCIAAAAFyJBUoAAICTKACiyQjXAADAbsgnAAAA36IAiCYhXAMAALshnwAAAPijAIhGI1wDAAAAAADYHwVAAAAAuAYLlAAAALV5ogD48MMPq0+fPsrIyNCsWbNkjLG6SY5HuAYAoGnIJ5FHPgEAAKib6wuAn3/+uR555BEVFxfr/fffV3Fxsd5++22rm+VohGsAAJqGfBJ55BMAAIDg4q1uQCycOHFCR48elSQdP35cnTp1srhFzkW4BgAgMsgnAAAAiBXL/wJww4YNmjBhgtLS0hQXF6f8/Pxa+yxbtkw9e/ZUUlKSMjMztXHjxpCf//TTT9e8efPUvXt3paWl6bvf/a7OOuusCPYAAAC4DfnEWVigBAAAqJ/lBcCKigoNGDBAjzzySJ0/X7lypWbPnq0FCxZo69atGj58uLKzs1VWVubbJzMzU3379q31b/fu3friiy+0atUq7dy5U5999pk2bdqkDRs2xKp7rkK4BgB4BfnEOcgnAAAADbP8I8DZ2dnKzs4O+vMlS5Zo+vTpuummmyRJS5cuVUFBgZYvX67c3FxJUnFxcdDff/HFF3X22WcrJSVFknT55Zfr7bff1ogRI+rcv7KyUpWVlb7Hhw8fliSVl5eH1zGXWfjye1Y3AQBgY5XfVEiSa77IgnziDOQTAEB93JZPgKawvABYn2PHjqm4uFi33Xab3/YxY8Zo06ZNIT1Ht27dtGnTJh09elQtWrTQm2++qZtvvjno/rm5uVq0aFGdzwMAAOp38OBBJScnW92MqCKfAADgLF7IJ0BDbF0APHDggKqqqpSamuq3PTU1VXv37g3pOS688EKNGzdOgwYNUrNmzTR69GhNnDgx6P7z58/X3LlzfY+//PJLpaenq6ysrEkDRlZWloqKipq0X7Cf1bX91G2BPw/82euvv65u3bpp165dateuXch9Crf9oe4Xaj8b6lfg/y8vL49IPzmXoe/nhXMZ7OehbKuvn5zL8HAuQ98vWufy8OHD6t69u+8v2tzMi/mkoX2j8d6x2xgRiffOqY+t6mND+3Iuwz+XNf/fCeM957Lhx5zL8Nn5v4/Wrl3rmXwCNMTWBcAacXFxfo+NMbW21eeee+7RPffcE9K+iYmJSkxMrLU9OTm5SYNi8+bNQ/r9+vYL9rO6tp+6LfDnwX7Wrl27Jk9wsexnqP0K3K+p/eRchr6fF85lsJ+Hsi2UfnIuQ8O5DH2/aJ/LZs0sv71wzHgpnzS0bzTfO5I9xohIvHdOfWxVHxval3MZ/rkM/P92Hu85lw0/5lyGz87/fVSzSOalfAIEY+t3QceOHdW8efNaq+n79++vtepudzk5OU3eL9jP6tp+6rbAn9f3s6aKZT9D7ZeT+xi4jXNpvz4G+3ko25zUT85l/duc1E+7n0sn8GI+aWhf3jvhP7aqjw3ty7ls3GOn9JNz2fBjp/TTq+cycFsszyXgdHHGRnfDjIuL0yuvvKIrr7zSt+2CCy5QZmamli1b5tuWkZGhK664wneT7WgqLy9XcnKyDh8+3OTVH7vyQh8lb/TTC32UvNFPL/RR8kY/vdBHyd39JJ9Yxwv99EIfJW/00wt9lLzRTy/0UfJGP73QRyBUln8E+MiRI9q+fbvv8Y4dO1RSUqKUlBR1795dc+fO1ZQpUzR48GANGTJEjz/+uMrKyjRjxoyYtC8xMVF33HFHnR+7cQsv9FHyRj+90EfJG/30Qh8lb/TTC32U3NdP8ok9eKGfXuij5I1+eqGPkjf66YU+St7opxf6CITK8r8AfPPNNzVq1Kha26dOnaoVK1ZIkpYtW6b7779fe/bsUd++ffXwww9rxIgRMW4pAADwCvIJAAAA3MTyAiAAAAAAAACA6LH1l4AAAAAAAAAAaBoKgAAAAAAAAICLUQAEAAAAAAAAXIwCIAAAAAAAAOBiFAAj6OGHH1afPn2UkZGhWbNmyY3fr/LRRx9p4MCBvn8tW7ZUfn6+1c2KuB07dmjUqFHKyMhQv379VFFRYXWToiI+Pt53Lm+66SarmxM1X3/9tdLT0zVv3jyrmxIVX331lbKysjRw4ED169dPTzzxhNVNirhdu3Zp5MiRysjIUP/+/fXiiy9a3aSoueqqq3TaaafpmmuusbopEbNq1Sr17t1bvXr10pNPPml1czyHfOIe5BN3IZ+4g1cyihvziURGgbfwLcAR8vnnn+vCCy/Uhx9+qBYtWmjEiBF68MEHNWTIEKubFjVHjhxRjx499Mknn6h169ZWNyeiLr74Yt19990aPny4Dh06pHbt2ik+Pt7qZkVcx44ddeDAAaubEXULFizQxx9/rO7du+vBBx+0ujkRV1VVpcrKSrVq1Upff/21+vbtq6KiInXo0MHqpkXMnj17tG/fPg0cOFD79+/Xeeedp48++sh1Y48krVu3TkeOHNFvfvMbvfTSS1Y3p8lOnDihjIwMrVu3Tu3atdN5552nd955RykpKVY3zRPIJ+4aI8gn7kI+cQevZBS35ROJjALv4S8AI+jEiRM6evSojh8/ruPHj6tTp05WNymqXn31VY0ePdp1k1vNfyQNHz5ckpSSkuLKcO0VH3/8sf75z39q3LhxVjclapo3b65WrVpJko4ePaqqqirX/YXPGWecoYEDB0qSOnXqpJSUFB06dMjaRkXJqFGj1LZtW6ubETGbN29Wnz591KVLF7Vt21bjxo1TQUGB1c3yFPKJO5BP3IV84h5eyShuyycSGQXe45kC4IYNGzRhwgSlpaUpLi6uzo+FLFu2TD179lRSUpIyMzO1cePGkJ//9NNP17x589S9e3elpaXpu9/9rs4666wI9iA00e7nqV544QVNnjy5iS0OX7T7+PHHH6tNmzaaOHGizjvvPN17770RbH3oYnEuy8vLlZmZqYsuukjr16+PUMtDF4s+zps3T7m5uRFqcePEop9ffvmlBgwYoK5du+rWW29Vx44dI9T60MRy7NmyZYuqq6vVrVu3JrY6fLHsp100tc+7d+9Wly5dfI+7du2qzz77LBZNdwTyybfIJ/Ujn8QO+eRbTs8nkjcyihfziURGAcLlmQJgRUWFBgwYoEceeaTOn69cuVKzZ8/WggULtHXrVg0fPlzZ2dkqKyvz7ZOZmam+ffvW+rd792598cUXWrVqlXbu3KnPPvtMmzZt0oYNG2LVPZ9o97NGeXm53nrrLUtWLaPdx+PHj2vjxo3Ky8vT3//+dxUWFqqwsDBW3fOJxbncuXOniouL9eijj+r6669XeXl5TPpWI9p9/NOf/qRzzjlH55xzTqy6VKdYnMv27dvr3Xff1Y4dO/T8889r3759MelbjViNPQcPHtT111+vxx9/POp9qkus+mknTe1zXX/tERcXF9U2Own55CTyyUnkE/JJLHkhn0jeyChezCcSGQUIm/EgSeaVV17x23b++eebGTNm+G37zne+Y2677baQnvOFF14wM2fO9D2+//77zS9+8Ysmt7UpotHPGs8++6z5wQ9+0NQmNlk0+rhp0yYzduxY3+P777/f3H///U1ua1NE81zWuOyyy0xRUVFjm9hk0ejjbbfdZrp27WrS09NNhw4dTLt27cyiRYsi1eRGicW5nDFjhnnhhRca28Qmi1Yfjx49aoYPH26effbZSDSzyaJ5LtetW2cmTZrU1CZGXGP6/NZbb5krr7zS97NZs2aZ5557LuptdSLyCfmkPuQTa5BP3JNPjPFGRvFiPjGGjAKEwjN/AVifY8eOqbi4WGPGjPHbPmbMGG3atCmk5+jWrZs2bdrku7/Fm2++qd69e0ejuY0WiX7WsOrjNQ2JRB+zsrK0b98+ffHFF6qurtaGDRt07rnnRqO5jRaJfn7xxReqrKyUJH366acqLS3VmWeeGfG2NlYk+pibm6tdu3Zp586devDBB/WjH/1It99+ezSa22iR6Oe+fft8fx1RXl6uDRs22Gr8iUQfjTGaNm2aLrnkEk2ZMiUazWyySI6xThFKn88//3x98MEH+uyzz/TVV19p9erVGjt2rBXNdRzyCfnkVOQTeyCfuCefSN7IKF7MJxIZBagLdw6WdODAAVVVVSk1NdVve2pqqvbu3RvSc1x44YUaN26cBg0apGbNmmn06NGaOHFiNJrbaJHopyQdPnxYmzdv1h//+MdIN7HJItHH+Ph43XvvvRoxYoSMMRozZozGjx8fjeY2WiT6uW3bNv34xz9Ws2bNFBcXp1/+8pe2+sarSF2vdheJfn766aeaPn26jDEyxuiWW25R//79o9HcRolEH9966y2tXLlS/fv3993f5be//a369esX6eY2WqSu2bFjx+of//iHKioq1LVrV73yyivKysqKdHMjIpQ+x8fH66GHHtKoUaNUXV2tW2+91XXfABkt5BPyyanIJ/ZAPnFPPpG8kVG8mE8kMgpQFwqApwj8vL8xJqx7ANxzzz265557It2siGtqP5OTky25f0c4mtrH7OxsZWdnR7pZEdeUfg4dOlTvv/9+NJoVUU09lzWmTZsWoRZFR1P6mZmZqZKSkii0KrKa0seLLrpI1dXV0WhWxDX1mnXit8811OeJEyfarujkJOST0JBP7IN8EjryiT14IaN4MZ9IZBTgVHwEWFLHjh3VvHnzWisg+/fvr7Vi4GRe6KcX+ih5o59e6KPkjX56oY+Sd/p5Ki/2OZa8cny90E8v9FHyRj+90EeJfrqpn17oY1282m+gPhQAJSUkJCgzM7PWN6kVFhZq6NChFrUq8rzQTy/0UfJGP73QR8kb/fRCHyXv9PNUXuxzLHnl+Hqhn17oo+SNfnqhjxL9dFM/vdDHuni130B9PPMR4CNHjmj79u2+xzt27FBJSYlSUlLUvXt3zZ07V1OmTNHgwYM1ZMgQPf744yorK9OMGTMsbHX4vNBPL/RR8kY/vdBHyRv99EIfJe/081Re7HMseeX4eqGfXuij5I1+eqGPEv10Uz+90Me6eLXfQKPF6uuGrbZu3Tojqda/qVOn+vbJy8sz6enpJiEhwZx33nlm/fr11jW4kbzQTy/00Rhv9NMLfTTGG/30Qh+N8U4/T+XFPseSV46vF/rphT4a441+eqGPxtBPN/XTC32si1f7DTRWnDHGhFosBAAAAAAAAOAs3AMQAAAAAAAAcDEKgAAAAAAAAICLUQAEAAAAAAAAXIwCIAAAAAAAAOBiFAABAAAAAAAAF6MACAAAAAAAALgYBUAAAAAAAADAxSgAAgAAAAAAAC5GARAALLBz507FxcWppKTE6qYAAABIIp8AgJtRAAQAAAAAAABcjAIggKiqqqpSdXW11c2wzLFjx6xuAgAACEA+IZ8AgNdQAAQ85qWXXlK/fv3UsmVLdejQQd/97ndVUVEhSaqurtbixYvVtWtXJSYmauDAgXrttdd8v/vmm28qLi5OX375pW9bSUmJ4uLitHPnTknSihUr1L59e61atUoZGRlKTEzUJ598osrKSt16663q1q2bEhMT1atXLz311FO+5yktLdW4cePUpk0bpaamasqUKTpw4EDQftx4443q37+/KisrJUnHjx9XZmamfvCDH9Tb/w8//FCXX3652rVrp7Zt22r48OH697//HVL/Jen999/XJZdc4jt+N998s44cOeL7+bRp03TllVcqNzdXaWlpOueccyRJmzdv1qBBg5SUlKTBgwdr69at9bYTAAAvIZ+QTwAA0UUBEPCQPXv26Hvf+55uvPFGbdu2TW+++aauvvpqGWMkSb/85S/10EMP6cEHH9R7772nsWPHauLEifr444/Dep2vv/5aubm5evLJJ/Xhhx+qU6dOuv766/WHP/xBv/rVr7Rt2zY9+uijatOmja9dF198sQYOHKgtW7botdde0759+3TdddcFfY1f/epXqqio0G233SZJWrhwoQ4cOKBly5YF/Z3PPvtMI0aMUFJSkt544w0VFxfrxhtv1IkTJ0Lq/9dff63LLrtMp512moqKivTiiy9q7dq1uuWWW/xe5/XXX9e2bdtUWFioVatWqaKiQuPHj1fv3r1VXFysO++8U/PmzQvrmAIA4FbkE/IJACAGDADPKC4uNpLMzp076/x5Wlqaueeee/y2ZWVlmZkzZxpjjFm3bp2RZL744gvfz7du3WokmR07dhhjjHnmmWeMJFNSUuLb56OPPjKSTGFhYZ2vu3DhQjNmzBi/bbt27TKSzEcffRS0P5s2bTItWrQwCxcuNPHx8Wb9+vVB9zXGmPnz55uePXuaY8eO1fnzhvr/+OOPm9NOO80cOXLE9/O//OUvplmzZmbv3r3GGGOmTp1qUlNTTWVlpW+fxx57zKSkpJiKigrftuXLlxtJZuvWrfW2GQAAtyOfkE8AANHHXwACHjJgwACNHj1a/fr107XXXqsnnnhCX3zxhSSpvLxcu3fv1rBhw/x+Z9iwYdq2bVtYr5OQkKD+/fv7HpeUlKh58+a6+OKL69y/uLhY69atU5s2bXz//l879w7SZhuGcfyOfnk1irZUM0QRRYLalBhxa0sEl5YOImodnNShzi0KHTpJ6VA6dHCVCp2qpQilVbTQIvWIg4fiKaDg4OYmIlSb6xs+fDGf0brUwuv/B4HkefKctis3eZ+qqiozM/fxl3Ru375tPT099vz5c+vu7ra6ujq378GDB+5ct27dcvcRj8fN7/efmusi519bW7NYLGa5ubkp/clk0jY2Nty2aDRqjuO4n4/H5eTkpOwdAACQT8gnAIDL8M/f3gCAy5OZmWlfvnyx6elpGx8ft76+Pnv27JnNzc1ZQUGBmZn5fL6UMZLctoyMDLft2OHh4al1AoFAyjyBQODcfSWTSWtoaLCXL1+e6guFQueOm5qasszMzFOPAfX399vBwYGZmRuof7cPs/PPf/L9eeNOBvDjcQAAID3yCfkEAPDn8Q9A4Irx+Xx29+5d6+3ttYWFBXMcx4aHhy0/P9+KiopscnIy5fvT09N28+ZNMzMLBoNm9t+dOMcWFxd/u2Y0GrVkMmkTExNp+2tra21lZcXKysosHA6nvP4fVk969eqVra2t2cTEhI2NjdnAwIDbV1xc7M5RWlpqZmbV1dX2/fv3tD8KLnL+SCRii4uL7qXkZmZTU1OWkZHhXqadTiQSsaWlJTfwm5nNzs6e+X0AAK4a8gn5BADwh/2tZ48BXL7Z2Vm9ePFC8/Pz2t7e1tDQkBzH0cjIiCTp9evXys/P17t377S+vq6nT5/K7/crkUhIkn7+/KmSkhK1trZqY2NDnz59UmVl5ak7dq5du3Zq7Y6ODpWUlGh4eFhbW1v69u2bBgcHJUk7OzsKBoN6+PCh5ubmtLm5qbGxMXV2duro6CjtWRYWFuQ4jj5+/ChJ6u/vV15enjY3N888/+7urgoKCtTc3Kz5+XklEgm9fftW6+vrFzr//v6+QqGQWlpa9OPHD339+lXl5eVqb29312hvb1djY2PKunt7eyosLFRbW5tWVlb0+fNnhcNh7tgBAEDkE/IJAOAyUAAErpDV1VXdv39fwWBQWVlZqqioUF9fn9v/69cv9fb2qri4WH6/X7FYTKOjoylzTE5OKhqNKjs7W/F4XO/fv79QwD44ONCTJ08UCoXkOI7C4bDevHnj9icSCTU1Nen69esKBAKqqqrS48ePlUwm084ViUTU1dWV0t7U1KQ7d+6cGcolaWlpSffu3VNOTo7y8vIUj8fdUH6R8y8vL6u+vl7Z2dm6ceOGHj16pL29Pbc/XcCWpJmZGcViMTmOo5qaGn348IGADQCAyCcS+QQA8Of5JC5/AAAAAAAAALyKOwABAAAAAAAAD6MACAAAAAAAAHgYBUAAAAAAAADAwygAAgAAAAAAAB5GARAAAAAAAADwMAqAAAAAAAAAgIdRAAQAAAAAAAA8jAIgAAAAAAAA4GEUAAEAAAAAAAAPowAIAAAAAAAAeBgFQAAAAAAAAMDDKAACAAAAAAAAHvYvMJH8Q5nZy5AAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABOEAAALACAYAAADVBWZCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACR5ElEQVR4nOzde3yT5f3/8Xeg9MChxVIpFNpSFJGCgJaqgAjoLJaDJ5xsKidBx4hfhHqYjHkAD9WprFMC6kQYKoo4ZMr4ClUcoHgolXoq+04ULUqBUbQF1CLl+v3hrxkhTZu0SXMneT0fjz40d+7c+SSluT7XO/fBZowxAgAAAAAAABAwLYJdAAAAAAAAABDuCOEAAAAAAACAACOEAwAAAAAAAAKMEA4AAAAAAAAIMEI4AAAAAAAAIMAI4QAAAAAAAIAAI4QDAAAAAAAAAowQDgAAAAAAAAgwQjgAAAAAAAAgwAjhfLBt2zZddtllSklJUevWrXX66adr3rx5+v777z0+ZtiwYbLZbA3+3H333c33QrzgTc02m03//Oc//facw4YN07Bhw/y2vfr89NNPeuKJJ5Sdna3ExES1bt1a6enpuvTSS/Xyyy/7/fms9Ds2xmj58uW64IILdNJJJykmJkbdu3eX3W7Xrl27mrz9L7/8UjabTUuXLm16sV7w9G/zgQceaPQ2u3XrptGjR/uxSu80599AY23evFkxMTH66quvnMu8fb+a+99GuFi2bJl+9atfqWfPnmrRooW6desWsOfq1q1bnX9P06ZNc1lv8eLF6tKliw4fPhywWuA9+hP6k8ay0u843PqTgoICXXHFFcrIyJDNZvP4b2jVqlX69a9/rVNPPVVxcXHq1q2brrnmGn322WeNfu5//vOfstlseumllxq9jcYIlXH+uuuu08UXX+y87cv7dffdd8tmswWyPNSB/gThJCrYBYSK0tJSDRo0SD179lRBQYGSkpK0adMmzZs3T8XFxfr73/9e5+MWLlyoqqoq5+1//OMfuvfee7VkyRKdfvrpzuVdu3YN+GvwxTvvvONy+5577tGbb76pDRs2uCzPzMxszrL8Zvz48Vq1apVmzpypuXPnKiYmRl988YVee+01rVu3Tpdffrlfn++dd96xxO/42LFjuvrqq7VixQr9+te/1tKlS5WQkKCPPvpIDz30kJYvX641a9Zo8ODBwS7VJ1deeaVuvvlml2VpaWlBqiZ8GWM0c+ZMXX/99UpPTw92ORHjmWee0Z49e3T22Wfr2LFj+umnnwL6fIMHD9bDDz/ssiw5Odnl9sSJE/Xggw/qj3/8o+bOnRvQelA/+hP6k6agPwmcxx9/XG3atNEFF1ygV1991eN6Dz74oDp16qQ5c+aoe/fu2rVrl+6//36dddZZevfdd9W7d+9mrDr8bdu2TX/961/13nvvBbsU+Ij+BGHDwCtz5swxksyOHTtclt9www1Gkjlw4IBX21myZImRZIqKivxS1+HDh/2ynYZMnDjRtGnTJqDPMXToUDN06FC/bOvYsWPm+++/r/O+L774wkgyd955Z53319TUBLyGYLn//vuNJPPAAw+43bdnzx6Tnp5ukpOTzbffflvvdur7d7dz504jySxZsqSJ1f7s+++/N8eOHfN4vyRjt9v98ly10tPTzahRo/y6TW/4828gENauXWskmX/9618uy719v/z9b8NKPP1N+Po5UF1dbXbu3Omy7PjPpFGjRpn09PTGlOgVX/7tP/zwwyYhIaHZxiHUjf6E/sSfNQRLOPYnx/++evfu7fHf0N69e92WffPNN6ZVq1ZmypQpjartzTffNJLMypUrG/X4xgqFcf6qq64y5557rssyX96vu+66y4TjFLq+z4WG/q2faPfu3aaystJfpRlj6E8QXjgc1UutWrWSJCUkJLgsb9++vVq0aKHo6OgmbX/FihUaOHCg2rRpo7Zt22rEiBHatm2byzqTJk1S27Zt9fHHHysnJ0ft2rXThRdeKOnnwwluvPFGLVmyRD179lRcXJwGDBigd999V8YYPfTQQ8rIyFDbtm11wQUXaMeOHU2qV5IcDofOP/98dezYUW3atNEZZ5yhP/7xjy57adxzzz2Kioqq8zCC6667Th06dNCPP/7o8TkOHDig6dOnq0uXLoqOjlb37t01Z84cVVdXu6xX+/off/xx9erVSzExMfrrX/9a5zYrKiokSZ07d67z/hYtXP8sqqqqdMsttygjI0PR0dHq0qWLZs6c6babc3011HW4x549e/Sb3/xGXbt2VXR0tDIyMjR37lwdPXrUZb1FixapX79+atu2rdq1a6fTTz9dv//97z2+Z54cOXJEDz30kHr16qXbbrvN7f7k5GTl5+dr7969Wrx4sXP5sGHD1KdPH23atEmDBg1S69atdd1110mSdu/erauuukrt2rVTQkKCxo0bpz179tT5/Fu3btUll1yixMRExcbG6swzz9SLL77oss7SpUtls9m0fv16XXfddTr55JPVunVrt9+3FRQWFurSSy9V165dFRsbq1NPPVW/+c1vtH//fpf1ag9b2LZtm6644grFx8crISFB1157rf7zn/80+Dxz587VOeeco8TERMXHx+uss87S4sWLZYxxW3f58uUaOHCg2rZtq7Zt26p///4uv0tJev3113XhhRcqPj5erVu31uDBg/XGG2949ZoXLVqk7Oxs9ezZs877X375ZfXt21exsbHq3r27Hn300Qa3OWnSpDoPr6zrcA9jjBYuXKj+/fsrLi5OJ510kq688kp98cUXXtXvDX99FnvzWVTr2LFj2rBhg66//np16tRJBQUFLvef+JlUn88++0xXX321OnbsqJiYGPXq1UsOh8Prx/vimmuuUVVVlV544YWAbB/eoT9xR39Cf2KF/sTbz+6OHTu6LUtJSVHXrl39chhufbztMWpPO9GYcX7Hjh2aPHmyevToodatW6tLly4aM2aMPv74Y7d1v/vuO918883q3r27YmJi1LFjR40cOVL/+te/nOscOXJE9957r04//XTFxMTo5JNP1uTJk73qqfbu3auXX35Z48ePr/P+H3/8UXl5eerUqZPi4uI0dOhQt8+7ung6rLtbt26aNGmSyzJv/74aq6mfC43txb/99lstXrxYv/jFL9S1a1e33oz+BDhOUCPAELJz507Tvn17c+WVV5rPP//cVFVVmVdffdUkJCSY//mf//F6O3V903zfffcZm81mrrvuOrNmzRqzatUqM3DgQNOmTRvz6aefOtebOHGiadWqlenWrZvJz883b7zxhlm3bp0x5ue9gdLT082gQYPMqlWrzMsvv2xOO+00k5iYaGbNmmUuvfRSs2bNGvPcc8+Z5ORk07dvX5++0ajrm+ZZs2aZRYsWmddee81s2LDB/OlPfzJJSUlm8uTJznX27t1rYmJizJw5c1weW1FRYeLi4sytt97qXHbiN80//PCD6du3r2nTpo15+OGHzfr1680dd9xhoqKizMiRI122J8l06dLF9O3b1yxfvtxs2LDBfPLJJ3W+lkOHDpn27dubTp06mSeeeMJtr5PjHT582PTv398kJSWZ+fPnm9dff938+c9/NgkJCeaCCy5weQ/rq0GSueuuu5zrlpeXm9TUVJOenm6eeOIJ8/rrr5t77rnHxMTEmEmTJjnXe/75540k8z//8z9m/fr15vXXXzePP/64mTFjhseaPdmyZYuRZH73u995XOfgwYOmRYsWZsSIEc5lQ4cONYmJiSY1NdU89thj5s033zQbN24033//venVq5dJSEgwjz32mFm3bp2ZMWOGSUtLc/sWdMOGDSY6OtoMGTLErFixwrz22mtm0qRJbuvV/n106dLF3HDDDeZ///d/zUsvvWSOHj3qsWZJ5qSTTjKxsbEmOjranHXWWebpp5/2+f05njffti1atMjk5+ebV155xWzcuNH89a9/Nf369TM9e/Y0R44cca5X+41penq6ufXWW826devM/PnzTZs2bcyZZ57psm5de1tMmjTJLF682BQWFprCwkJzzz33mLi4ODN37lyX9e644w4jyVxxxRVm5cqVZv369Wb+/PnmjjvucK7zzDPPGJvNZi677DKzatUq8+qrr5rRo0ebli1bmtdff73e11tdXW3i4uLMbbfdVuf71aVLF5OWlmaefvpps3btWnPNNdcYSeahhx5yrlfXN+QTJ06sc8+uur5pvv76602rVq3MzTffbF577TWzfPlyc/rpp5vk5GSzZ88e53o1NTXmp59+avDnxH9X/vos9vaz6L333jMzZ840nTt3NpLMWWedZf74xz+ar7/+2uPvob494T799FOTkJBgzjjjDLNs2TKzfv16c/PNN5sWLVqYu+++2+M2j5eenm7atWtn2rZta6KiokyvXr3Mww8/7PFvsFevXuaKK67watsIDPoT+hP6E2v2J8erb0+4unz++eemRYsWZtasWV4/5nje7tnlbY/RlHF+48aN5uabbzYvvfSS2bhxo3n55ZfNZZddZuLi4lz2rK+qqjK9e/c2bdq0MfPmzTPr1q0zf/vb38xNN91kNmzYYIz5eXy/+OKLTZs2bczcuXNNYWGheeqpp0yXLl1MZmZmg3t4Llu2zEgypaWldb5fqamp5tJLLzWvvvqqefbZZ82pp55q4uPjzeeff+5ct67+5MS/o+Pft4kTJzpve/v3ZYwxR48e9aqXOX6PS398Lvjyb/3w4cPmhRdeMJdccomJjo42cXFxZuzYsWblypWmurrauR79CeCKEM4H27dvN6effrqR5PyZMWOGT83iiU1uWVmZiYqKcmuUDx48aDp16mSuuuoq57KJEycaSXUGDJJMp06dzKFDh5zLVq9ebSSZ/v37u9RYUFBgJJmPPvrI67obOtyjdtK7bNky07JlS5fDXyZOnGg6duzo8mH84IMPmhYtWrg0mCc2uY8//riRZF588UWX53rwwQeNJLN+/XqX15+QkOD1YTf/+Mc/TFJSkvP32KFDB/PLX/7SvPLKKy7r5efnmxYtWrgdnvPSSy8ZSWbt2rVe1XDi4Pyb3/zGtG3b1nz11Vcu6z388MNGknNyc+ONN5r27dt79Zoa8sILLxhJ5vHHH693veTkZNOrVy/n7aFDhxpJ5o033nBZb9GiRUaS+fvf/+6y/Prrr3drwE4//XRz5plnmp9++sll3dGjR5vOnTs7G4jav48JEyZ4/bquvvpq89xzz5lNmzaZl156yeTm5hpJ5g9/+IPX2ziRr4ejHjt2zPz000/mq6++cntPapu1Exvp5557zkgyzz77rHNZQ4c81f6dzZs3z3To0MH5d/3FF1+Yli1bmmuuucbjYw8fPmwSExPNmDFj3LbZr18/c/bZZ9f7Gt977z0jybzwwgtu96WnpxubzWZKSkpcll900UUmPj7eeThAU0K4d955x0gyjzzyiMt6u3btcgsHax/b0M/xz+vPz+L6Pos+/fRT84c//MGccsopRpLp3bu3ueeee8xnn31W5/onqi+EGzFihOnatavbISA33nijiY2N9erzcfr06ebpp582GzduNKtXr3ZOsq699to617/mmmtMcnKyV7UjcOhP6E9q0Z9Ypz85ni8h3E8//WSGDRtm4uPjTVlZWaOerzGHo3rqMYxp2jh/oqNHj5ojR46YHj16uPRG8+bNM5JMYWGhx8fWhr9/+9vfXJYXFRUZSWbhwoX1vsbf/va3Ji4uzu2zsfb9Ouuss1zu+/LLL02rVq3M1KlTncuaEsJ5+/dV+1hvepnjn9cfnwsN/Vs/cuSIWbNmjbn66qtNmzZtTHR0tBk9erR59tlnzcGDB+t8DP0J4IrDUb305ZdfasyYMerQoYNeeuklbdy4UX/84x+1dOlSTZ061bnesWPHdPToUedPTU1Nvdtdt26djh49qgkTJrg8LjY2VkOHDq3z6l5jx46tc1vDhw9XmzZtnLd79eolScrNzXU5rKt2+fFXN2yMbdu26ZJLLlGHDh3UsmVLtWrVShMmTFBNTY3+/e9/O9e76aabtG/fPq1cuVLSz+/RokWLNGrUqHqv8rdhwwa1adNGV155pcvy2t26TzyErvZqWt4YOXKkysrK9PLLL+uWW25R7969tXr1al1yySW68cYbneutWbNGffr0Uf/+/V1+PyNGjKjz6mve1rBmzRoNHz5cKSkpLtvNzc2VJG3cuFGSdPbZZ+u7777Tr3/9a/397393O9QxEIwxbocBnnTSSbrgggtclr355ptq166dLrnkEpflV199tcvtHTt26F//+peuueYaSXJ5vSNHjlR5ebn+7//+z+Uxnv6N1+W5557T1VdfrSFDhmjs2LFau3atRo8erQceeMCrQxMaa9++fZo2bZpSU1MVFRWlVq1aOS9WsH37drf1a19/rauuukpRUVF68803632eDRs26Be/+IUSEhKcf2d33nmnKioqtG/fPkk/HxpbU1Mju93ucTtbtmzRgQMHNHHiRJffwbFjx3TxxRerqKio3itJ7d69W1Ldh81IUu/evdWvXz+XZVdffbWqqqr0wQcf1PsavbFmzRrZbDZde+21LvV36tRJ/fr1c/lbvOGGG1RUVNTgz/EnyvbnZ7Gnz4Ff/OIX6t27t/PE459++qk++eQT/eEPf9Cpp57apPfnxx9/1BtvvKHLL79crVu3dvs7+/HHH/Xuu+9Kkmpqatz+DdRyOByaPHmyzj//fF166aV69tlndeONN+rZZ5+t85Ccjh07at++fX47jAa+oz9xR39Cf2KF/qQxjDGaMmWKNm/erGXLlik1NTWgz+dNj1GrseP80aNHdf/99yszM1PR0dGKiopSdHS0PvvsM5d+6X//93912mmn6Re/+IXHba1Zs0bt27fXmDFjXH5f/fv3V6dOnRq8KvLu3bt18skne7y66dVXX+1yX3p6ugYNGtRgr+Ytb/++JOnVV1/1qpe54YYbXLbvr8+Fuv6tf/TRR+rUqZMuvfRS7d+/X48++qj27t2rV199Vddcc43atm3r9hj6E8AdV0f10u23366qqiqVlJQ4G8nzzz9fSUlJuu666zRhwgQNHTpU8+bNc7kSS3p6ur788kuP2927d68kKTs7u877TzyfROvWrRUfH1/nuomJiS63a88D42l5fec6aUhZWZmGDBminj176s9//rO6deum2NhYvf/++7Lb7frhhx+c65555pkaMmSIHA6HrrnmGq1Zs0ZffvmlnnjiiXqfo6KiQp06dXIbKDt27KioqCjnuVNqeTqHiidxcXG67LLLdNlllzlfU25urhwOh37729+qd+/e2rt3r3bs2OE8586JTmw6va2hdsBqaLvjx4/X0aNH9Ze//EVjx47VsWPHlJ2drXvvvVcXXXSRl6/0Z7VXC925c6fHdQ4fPqz9+/frzDPPdFle1+uqqKhwuyKRJHXq1Mnldu2/8VtuuUW33HJLnc/b2PfRk2uvvVZr1qzR1q1bnY2NPx07dkw5OTnavXu37rjjDp1xxhlq06aNjh07pnPPPdfl33+tE9+XqKgodejQwe3f8fHef/995eTkaNiwYfrLX/7iPH/I6tWrdd999zmfpzZsrO8Kd7W/hxMnjcc7cOCAy0T5eLXPFRsbW+f9J76+45fV9xq9tXfvXhlj6vw3J0ndu3d3eV5PYeHxjv9s8ednsad/vyeddJJatGihgwcPqrKyUt9++22dk8rGqKio0NGjR/XYY4/pscceq3Od2r+zU045xSXkuOuuu+o8l02ta6+9VgsWLNC7777r9tkQGxsrY4x+/PHHOptvBB79iSv6k5/Rn1izP6mPMUZTp07Vs88+q7/+9a+69NJLA/Zckvc9Rq3GjvN5eXlyOBz63e9+p6FDhzrHwqlTp7o8x3/+858Gr2y/d+9efffddx7PddlQGPzDDz947GMkz6/xww8/rHe73vL270v6+QrPpo7z/57o+M9if34u1HVfq1atlJCQoAMHDqiyslKVlZU6dOiQ2rdv73E79CeAO0I4L5WUlCgzM9NtglrbnH7yyScaOnSobrjhBo0ePdp5f0xMTL3bTUpKkiS99NJLzr1o6uOPyZo/rF69WocPH9aqVatc6i4pKalz/RkzZuiXv/ylPvjgAy1YsECnnXZag01ahw4d9N5777lNUmu/1ah972o19b1JS0vTDTfcoJkzZ+rTTz9V7969lZSUpLi4OD399NN1PqaxNSQlJalv376677776rw/JSXF+f+TJ0/W5MmTdfjwYW3atEl33XWXRo8erX//+99e/ZuplZWVpZNOOkmvvPKK8vPz66z1lVde0bFjx9x+N3Wt26FDB73//vtuy0888XHtezR79mxdccUVddZ24on+m/q7rG1afDmhvS8++eQTffjhh1q6dKkmTpzoXF7fCcX37NmjLl26OG8fPXpUFRUV6tChg8fHvPDCC2rVqpXWrFnj0jSuXr3aZb2TTz5ZkvT11197/Na89vfw2GOP6dxzz61zHU8B1/GPP3DgQJ3313XC69pl9b3G2NjYOk/2e2KjmJSUJJvNps2bN9f5uXr8shPDBk+ODyH8+Vns6b6VK1dq9+7dWrFihZYvX67HHntMXbt21VVXXaVx48bp7LPPbvB5PTnppJPUsmVLjR8/3uMekRkZGZJ+/nb9+Pf8+M+butT393TgwAHFxMTQ4AYR/Ykr+pOf0Z9Ysz/xpDaAW7JkiRYvXqxrr702IM9zPG97jFqNHeefffZZTZgwQffff7/L8v3797uENyeffLK+/vrremtOSkpShw4d9Nprr9V5f7t27Rp8fH177Xl6jfW9Punnz9O6epkTw0lf/r5ODKQ8OT6o8ufnQl339erVS1988YXeeecdLV++XA888IBuvvlmDR48WOPGjdOVV17pFmTSnwDuCOG8lJKSok8++USHDh1y+WN+5513JP13D5SUlJQGPzCON2LECEVFRenzzz8P+C7u/lT7wXx8E2+M0V/+8pc617/88suVlpamm2++WRs3btSf/vSnBhuZCy+8UC+++KJWr16tyy+/3Ll82bJlzvsb4+DBg7LZbHV+KNfuFl/7Oxw9erTuv/9+dejQwTlA+MPo0aO1du1anXLKKV4fotKmTRvl5ubqyJEjuuyyy/Tpp5/61ORGR0fr1ltv1e9//3s99NBDblcg27dvn2bPnq3k5GSXQ5g8GT58uF588UW98sorLod8LF++3GW9nj17qkePHvrwww/dGrBAeeaZZ9SqVStlZWUFZPt1/fuXVO/eE88995xLPS+++KKOHj2qYcOG1fs8UVFRatmypXPZDz/8oGeeecZlvZycHLVs2VKLFi3SwIED69zW4MGD1b59e5WWlroc0uSt2sPEPv/88zrv//TTT/Xhhx+6HKqyfPlytWvXTmeddZbH7Xbr1k379u3T3r17nSHgkSNHtG7dOpf1ag8x/uabb3TVVVfVW+uJYYMnx//+muuzOCUlRbNmzdKsWbP02Wef6fnnn9fzzz+v+fPnKyMjQ1dddZWuu+46nXbaaT5tt3Xr1ho+fLi2bdumvn371ntFzDPOOMOnbdd+5tYV3n7xxRfKzMz0aXvwL/oTV/QnTUN/0vyMMbr++uu1ZMkSPfHEE5o8eXKzPK+3PUatxo7zNpvNrV/6xz/+oW+++cblVAy5ubm68847tWHDBrdDjGuNHj1aL7zwgmpqanTOOed49TqPd/rpp+v5559XZWWl2xWlJen5559XXl6e8zPgq6++0pYtWzRhwoR6t9utWzd99NFHLss2bNigQ4cOudXv7d/XiYGUJ8d/rgfqc+FEAwcO1MCBA1VQUKA33nhDy5cv15w5c3TTTTdp6NChGjdunCZMmKC4uDj6E6AOhHBemjlzpi677DJddNFFmjVrlpKSkvTuu+8qPz9fmZmZjT7krVu3bpo3b57mzJmjL774QhdffLFOOukk7d27V++//77atGnj1R4dze2iiy5SdHS0fv3rX+u2227Tjz/+qEWLFunbb7+tc/2WLVvKbrfrd7/7ndq0aeN2ue66TJgwQQ6HQxMnTtSXX36pM844Q2+99Zbuv/9+jRw5st5zRtTn//7v/zRixAj96le/0tChQ9W5c2d9++23+sc//qEnn3xSw4YN06BBgyT9/Hv/29/+pvPPP1+zZs1S3759dezYMZWVlWn9+vW6+eabG9UEzJs3T4WFhRo0aJBmzJihnj176scff9SXX36ptWvX6vHHH1fXrl11/fXXKy4uToMHD1bnzp21Z88e5efnKyEhweUQodpz19R3aJEk/e53v9OHH37o/O+4ceOUkJCgjz76SA899JAOHjyoNWvW1NmYnGjChAn605/+pAkTJui+++5Tjx49tHbtWrfwRPo5nMrNzdWIESM0adIkdenSRQcOHND27dv1wQcfOM/H46uHHnpIpaWluvDCC9W1a1ft27dPixcv1vr163X33Xe7fOP35ZdfKiMjQxMnTtTSpUsb3PaePXv00ksvuS3v1q2b+vXrp1NOOUW33367jDFKTEzUq6++qsLCQo/bW7VqlaKionTRRRfp008/1R133KF+/frVGyiNGjVK8+fP19VXX60bbrhBFRUVevjhh92a2W7duun3v/+97rnnHv3www/69a9/rYSEBJWWlmr//v2aO3eu2rZtq8cee0wTJ07UgQMHdOWVV6pjx476z3/+ow8//FD/+c9/tGjRIo+1dO3aVd27d9e7776rGTNmuN2fkpKiSy65RHfffbc6d+6sZ599VoWFhXrwwQfVunVrj9sdN26c7rzzTv3qV7/Srbfeqh9//FGPPvqo2/mqBg8erBtuuEGTJ0/W1q1bdf7556tNmzYqLy/XW2+9pTPOOEO//e1vnbX4EjbUvofN/Vnco0cP3Xnnnbrzzjv1wQcf6Pnnn9dzzz2nH3/8UQUFBc71SktLVVpaKunnf5fff/+9899mZmams8n885//rPPOO09DhgzRb3/7W3Xr1k0HDx7Ujh079Oqrr2rDhg311rN8+XKtWrVKo0aNUnp6ur777jutXLlSL7zwgiZNmuR2LqBjx47p/fff15QpU/z4rsBX9Ceu6E/oT6zQn0jS1q1bna+7qqpKxhjnZ3d2drYzqJwxY4YWL16s6667TmeccYbz/FjSz2Hy8YfZ3X333Zo7d67efPPNer/Eq3X8to43dOhQr3uMWo0d50ePHq2lS5fq9NNPV9++fVVcXKyHHnrI7RQaM2fO1IoVK3TppZfq9ttv19lnn60ffvhBGzdu1OjRozV8+HD96le/0nPPPaeRI0fqpptu0tlnn61WrVrp66+/1ptvvqlLL73UJRg/0bBhw2SM0XvvvaecnBy3+/ft26fLL79c119/vSorK3XXXXcpNjZWs2fP9rhN6efDs++44w7deeedGjp0qEpLS7VgwQK3f6/e/n1JvgdSte9hID4XPGnZsqVycnKUk5Ojxx9/XP/4xz+0fPlyzZw5U+ecc4769+8vif4EcNOsl4EIcRs2bDA5OTmmU6dOJi4uzpx22mnm5ptvNvv37/d6GydefazW6tWrzfDhw018fLyJiYkx6enp5sorrzSvv/66c536rgAmydjtdpdltVcoOv7S4cY07opJdT33q6++avr162diY2NNly5dzK233mr+93//10gyb775pts2vvzySyPJTJs2rc7nqOvKkBUVFWbatGmmc+fOJioqyqSnp5vZs2ebH3/80WW9ul6/J99++6259957zQUXXGC6dOlioqOjTZs2bUz//v3Nvffe63Z580OHDpk//OEPpmfPniY6Otp5ie1Zs2aZPXv2eFWD6rhq0n/+8x8zY8YMk5GRYVq1amUSExNNVlaWmTNnjvMqcn/961/N8OHDTXJysomOjjYpKSnmqquucrtyXFJSkjn33HO9ev3Hjh0zzz33nBk2bJhp3769iY6ONhkZGea3v/2t29WajPn599K7d+86t/X111+bsWPHmrZt25p27dqZsWPHmi1bttR5ZawPP/zQXHXVVaZjx46mVatWplOnTuaCCy5wuRqap78PT1555RVz3nnnmZNPPtlERUWZdu3amSFDhpjnn3/ebd2PP/7YSDK33357g9ut74pUtVe5Ki0tNRdddJFp166dOemkk8wvf/lLU1ZW5va7rr2KVnFxsRkzZozzvfr1r39t9u7d6/K8df0NPP3006Znz54mJibGdO/e3eTn55vFixcbSS5X7zPGmGXLlpns7GwTGxtr2rZta84880y338PGjRvNqFGjTGJiomnVqpXp0qWLGTVqlFefB3fccYc56aST3P7+aq8m+9JLL5nevXub6Oho061bNzN//nyX9TxdNW3t2rWmf//+Ji4uznTv3t0sWLCgzquP1b4f55xzjmnTpo2Ji4szp5xyipkwYYLZunVrg/V7IxCfxb44duyYKS8vd1lW39VeT/xc2blzp7nuuutMly5dTKtWrczJJ59sBg0aZO69994Gn/udd94xF154oenUqZNp1aqVad26tcnOzjYLFy50XiHweG+88Ybz3zaCi/6E/oT+xFWw+xNj/nvV4Lp+jq+hvp7jxKth33zzzcZms5nt27fX+9y1f0uefmr/DrztMZoyzn/77bdmypQppmPHjqZ169bmvPPOM5s3b67z7+rbb781N910k0lLSzOtWrUyHTt2NKNGjTL/+te/nOv89NNP5uGHH3b+jbdt29acfvrp5je/+U2DVxqvqakx3bp1M9OnT6/z/XrmmWfMjBkzzMknn2xiYmLMkCFD3PqLuvqT6upqc9ttt5nU1FQTFxdnhg4dakpKStyujmqMd39fTdHUz4XG/Fs/UWVlpdtroT8B/stmjBdnfAT84LHHHtOMGTP0ySefqHfv3sEuJ2yUlpaqd+/eWrNmjUaNGhXscixr4cKFuu222/T555/Xe+4zf6v91vo///mP27k4Qs3u3buVkZGhZcuWady4ccEuB0E2fvx4ffHFF3r77beDXQrQJPQngUF/4n9nn3220tPTm7SHXmN069ZNffr00Zo1a5r1eQPhkUce0X333advvvlGcXFxwS4HAUB/AqsLzFnLgeNs27ZNq1at0rx583TppZfS4PrZm2++qYEDB9LgNuDNN9/UjBkzmjWACzcpKSmaOXOm7rvvPpfLxiPyfP7551qxYoUefPDBYJcCNBr9SWDRn/hXVVWVPvzwQ82bNy/YpYQ0u92uhIQE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IYADAAAAAAChZty4caqoqNC8efNUXl6uPn36aO3atUpPTw92aZaydetWDR8+3Hk7Ly9PkjRx4kQtXbrUq20QwgEAAAAAAESw6dOna/r06cEuw9KGDRsmY0yTtsE54fyAveAAAAAAAABQH0K4JiKAAwAAAAAAQEMI4ZqAAA4AAAAAAADeIIQDAAAAAAAAAiwiQrg//elP6t27tzIzMzVjxowmn0hPYi84AADQNIHoTwAAAGBdYR/C/ec//9GCBQtUXFysjz/+WMXFxXr33XebtE0COAAA0BSB6E8AAABgbVHBLqA5HD16VD/++KMk6aefflLHjh0bvS0COAAA4A/+7E8AAABgfUHfE27Tpk0aM2aMUlJSZLPZtHr1ard1Fi5cqIyMDMXGxiorK0ubN2/2evsnn3yybrnlFqWlpSklJUW/+MUvdMopp/jxFQAAgHBDfwIAAAB/C3oId/jwYfXr108LFiyo8/4VK1Zo5syZmjNnjrZt26YhQ4YoNzdXZWVlznWysrLUp08ft5/du3fr22+/1Zo1a/Tll1/qm2++0ZYtW7Rp06ZG1cpecAAARIZQ6k8AAAAQGmzGQmcBttlsevnll3XZZZc5l51zzjk666yztGjRIueyXr166bLLLlN+fn6D21y5cqX++c9/yuFwSJIeeughGWN022231bl+dXW1qqurnbcrKyuVlpamXbt2KT4+vpGvDACA8FZVVaXU1FR99913SkhICHY5fkV/AgBAaArn/gShydLnhDty5IiKi4t1++23uyzPycnRli1bvNpGamqqtmzZoh9//FGtWrXSP//5T91www0e18/Pz9fcuXPr3A4AAKhfRUVF2De59CcAAISWSOhPEBosHcLt379fNTU1Sk5OdlmenJysPXv2eLWNc889VyNHjtSZZ56pFi1a6MILL9Qll1zicf3Zs2crLy/Pefu7775Tenq6ysrKmvRHm52draKioiat5+m+upYfv+zE+0+874033lBqaqpfvk1vztfZ0Os68f9rvwVp6uvkd+n9epHwu/R0vzfL6nud/C59w+/S+/UC9bus3TMrMTHRp9cUiiKxP2lo3UD87VjtM8IffzvH3w7Wa2xoXX6Xvv8ua/8/FD7v+V02fJvfpe+sPD96/fXXI6Y/QWiwdAhXy2azudw2xrgtq899992n++67z6t1Y2JiFBMT47Y8ISGh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", "text/plain": [ "
" ] @@ -810,13 +808,13 @@ ], "source": [ "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", - "cs1 = ax1.contourf(x_grid, y_grid,plot_me_lap1.T/plot_me_lap2.T < 1, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs1 = ax1.contourf(x_grid, y_grid,plot_me_lap2.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "\n", - "cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap1.T/plot_me_lap2.T < 1, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap1.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "\n", "fig.subplots_adjust(right=0.8)\n", "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", - "fig.colorbar(cs1, cax=cbar_ax)\n", + "#fig.colorbar(cs1, cax=cbar_ax)\n", "\n", "\n", "ax1.set_xscale('log')\n", @@ -830,15 +828,15 @@ "ax2.set_xlabel(\"source x-coord\")\n", "ax2.set_ylabel(\"source y-coord\")\n", "\n", - "ax1.set_title('4-Term Taylor Series, Order 5, Laplace')\n", - "ax2.set_title('4-Term Taylor Series, Order 8, Laplace')\n", + "ax1.set_title('8-Term Taylor Series, Order 5, Laplace (blue=err<1e-5)')\n", + "ax2.set_title('8-Term Taylor Series, Order 12, Laplace (blue=err Date: Tue, 14 Jan 2025 13:02:22 -0800 Subject: [PATCH 139/143] Plot changes --- sumpy/recurrence_grid.py | 4 +- test/plot_normal_recurrence.ipynb | 105 +++++--------- test/plot_taylor_recurrence.ipynb | 220 ++++++++++++++++++++++++------ 3 files changed, 208 insertions(+), 121 deletions(-) diff --git a/sumpy/recurrence_grid.py b/sumpy/recurrence_grid.py index b21aa7c3..f669d529 100644 --- a/sumpy/recurrence_grid.py +++ b/sumpy/recurrence_grid.py @@ -8,8 +8,8 @@ - :math:`f` only depends on the radius :math:`r`, i.e. :math:`f(\boldsymbol x)=f(|\boldsymbol x|_2)`. - However, unlike recurrence.py, the recurrences produced here are numerically - stable in a different source-location space. +However, unlike recurrence.py, the recurrences produced here are numerically +stable in a different source-location space. .. autofunction:: get_grid .. autofunction:: convert diff --git a/test/plot_normal_recurrence.ipynb b/test/plot_normal_recurrence.ipynb index 5460a228..8eccbe06 100644 --- a/test/plot_normal_recurrence.ipynb +++ b/test/plot_normal_recurrence.ipynb @@ -68,7 +68,7 @@ " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", " for i in range(p)]\n", " return derivs\n", - "l_max = 15\n", + "l_max = 20\n", "derivs_laplace = compute_derivatives(l_max)" ] }, @@ -90,7 +90,7 @@ " for i in range(p)]\n", " return derivs_helmholtz\n", "h_max = 8\n", - "derivs_helmholtz = compute_derivatives_h2d(h_max)" + "#derivs_helmholtz = compute_derivatives_h2d(h_max)" ] }, { @@ -173,9 +173,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'derivs_helmholtz' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[9], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m order_plot \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m5\u001b[39m\n\u001b[0;32m----> 2\u001b[0m x_grid, y_grid, plot_me_hem \u001b[38;5;241m=\u001b[39m generate_error_grid(res\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, order_plot\u001b[38;5;241m=\u001b[39morder_plot, recur\u001b[38;5;241m=\u001b[39mrecur_helmholtz, derivs\u001b[38;5;241m=\u001b[39m\u001b[43mderivs_helmholtz\u001b[49m, n_initial\u001b[38;5;241m=\u001b[39mn_init_helm, n_order\u001b[38;5;241m=\u001b[39morder_helm)\n\u001b[1;32m 3\u001b[0m x_grid, y_grid, plot_me_lap \u001b[38;5;241m=\u001b[39m generate_error_grid(res\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, order_plot\u001b[38;5;241m=\u001b[39morder_plot, recur\u001b[38;5;241m=\u001b[39mrecur_laplace, derivs\u001b[38;5;241m=\u001b[39mderivs_laplace, n_initial\u001b[38;5;241m=\u001b[39mn_init_lap, n_order\u001b[38;5;241m=\u001b[39morder_lap)\n\u001b[1;32m 5\u001b[0m fig, (ax1, ax2) \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39msubplots(\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m, figsize\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m15\u001b[39m, \u001b[38;5;241m8\u001b[39m))\n", + "\u001b[0;31mNameError\u001b[0m: name 'derivs_helmholtz' is not defined" + ] + } + ], "source": [ "order_plot = 5\n", "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=order_plot, recur=recur_helmholtz, derivs=derivs_helmholtz, n_initial=n_init_helm, n_order=order_helm)\n", @@ -207,78 +219,22 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_14919/1312385240.py:6: UserWarning: Log scale: values of z <= 0 have been masked\n", - " cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "/var/folders/8s/7hlc6ky15zzflj9wcf92cdxh0000gn/T/ipykernel_14919/1312385240.py:7: UserWarning: Log scale: values of z <= 0 have been masked\n", - " cs2 = ax2.contourf(x_grid, y_grid, plot_me_hem.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABOEAAALACAYAAADVBWZCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACO2klEQVR4nOzde1xUBf7/8feIMngDUxSjBKmsJFILyQUztRLD1C620bdNzbQyp68ptZXrZulW2EVzW0Fzs6ztxtYaW8Y3pbbSzS7oSrVhu1kWlqALFngpVDy/P/wx6zgMzMAczlxez8eDx+6cOTPzOVzGd+9zGZthGIYAAAAAAAAAmKad1QMAAAAAAAAAoY4SDgAAAAAAADAZJRwAAAAAAABgMko4AAAAAAAAwGSUcAAAAAAAAIDJKOEAAAAAAAAAk1HCAQAAAAAAACajhAMAAAAAAABMRgkHAAAAAAAAmIwSzksfffSRrrjiCiUkJMhutysuLk7p6em6/fbbXdbLz8/XqlWrrBny/7vvvvtks9na5LW++eYb2Wy2Zrf53Xfflc1mc35FRESoZ8+eGjdunDZt2tQms8JVdXW15syZo+TkZHXq1EnR0dH6xS9+oby8PB06dKjVz9+Wv4cjRoxw+f06/quystLn52z4nX3llVdMmNgzb/+mrHbDDTfokksucd725fvVlr8boWLv3r268847lZmZqZ49e8pms+m+++4z5bWOf78+9uvDDz90WfeCCy7QrFmzTJkDnpFJGkcmCS2GYeiFF17QhRdeqBNOOEF2u12nnHKKHA6HduzY0ernb+t/b5csWaIrr7xSSUlJstlsGjFihFeP++1vfyubzaaUlJQWvzaZpmlkmuDTt2/fRnPK9OnTXdZbuXKlTjrpJO3fv9+iSQF37a0eIBi88cYbGj9+vEaMGKGHH35YJ554oioqKrRp0ya99NJLWrRokXPd/Px8xcbG6vrrr7du4AD24IMPauTIkTp06JC2bNmi+fPna/jw4SotLVW/fv2sHi9sfPHFF8rMzNS+fft0++23KyMjQz/99JPWrFmj2267TS+//LKKiorUqVMnq0f1Sn5+vmpra12WHThwQJdccolSU1PVu3dviyYLTVu2bNEzzzyjjz76yOpRwkZ1dbVWrFihgQMH6vLLL9eTTz5p+ms2vF8f6/j/CPzd736nUaNG6ZZbbtEZZ5xh+kwgk/gTmSRwHTlyRNdee60KCgr0P//zP1q1apViYmL06aef6pFHHtELL7ygNWvWaOjQoVaP6rXly5erc+fOuvDCC/X666979ZjS0lI9+uijiouLM3m68EWmCV5Dhw7Vo48+6rLs+L+VyZMn66GHHtLDDz+s+fPnt+V4gEeUcF54+OGHlZSUpLVr16p9+/9+y6655ho9/PDDFk7WNg4cOOC3MqZfv376xS9+IUkaNmyYunXrpsmTJ+u5554LyDdGT9tuGIZ+/vlndezY0YKpWqe+vl4TJkxQbW2tPv74Y51++unO+8aMGaPhw4frmmuuUU5OjpYvX97k8xw+fFh2u70txm7y9zA5Odlt2TPPPKNDhw5p2rRpZo8WdhYuXKjzzjtPgwcPtnqUgNLU+8JPP/2kqKgor/eWV1RUqHPnzoqOjpYkJSYm6ocffpDNZlNVVVWblHDHvl97Mnz4cJ1xxhlatGiRVqxYYfpMIJOQSUIrk3jy0EMPqaCgQAsXLtRdd93lXD5ixAhlZ2dryJAhmjBhgr744gt169bN4/P48/elOc29z5eVlaldu6MnIXlzVNvhw4c1ZcoU3Xzzzfrkk09UVVXl13lxFJmmcWZmGn/p1q1bszmlffv2uvnmm/W73/1Od911V9AcYIDQxumoXqiurlZsbKxL2G3Q8I+pdPSw2M8//1zvvfee85DYvn37SpJ+/vln3X777Ro0aJBiYmLUvXt3paen669//avbc9psNt16663605/+pP79+6tTp04aOHCg1qxZ47buG2+8oUGDBslutyspKcltb0CDvLw8XXDBBerVq5c6d+6ss88+Ww8//LDbaYcjRoxQSkqK1q9fr4yMDHXq1Ek33HCDJGnnzp26+uqr1bVrV8XExCg7O7tFp/kdq+EfvF27drks//LLL3XttdeqV69estvt6t+/v/Ly8twe/+OPP+r222/XKaecIrvdrl69emnMmDH64osvJP33cPJ3333X5XGNHR5//fXXq0uXLvrss8+UmZmprl276qKLLpL035/J8uXL1b9/f9ntdj3zzDNez9owx4svvqi5c+cqPj5e0dHRuvjii/Wvf/3LbbvefPNNXXTRRYqJiVGnTp3Uv39/5ebmuqyzadMmjR8/Xt27d1dUVJTOOecc/fnPf272e/7qq6+qrKxMd999t0sB1yA7O1uZmZlauXKl8+fb8P16+OGHdf/99yspKUl2u13vvPOOJO9/Dw3DUH5+vgYNGqSOHTvqhBNO0FVXXaWvv/7aZb2mfg+9tXLlSnXp0kXZ2dk+Pc5X8+fP15AhQ9S9e3dFR0fr3HPP1cqVK2UYhst6ffv21dixY/Xqq69qwIABioqK0imnnKLHH3+82dfYtm2bpkyZon79+qlTp0466aSTNG7cOH322Wdu6zb3NyFJBw8e1P33368zzzxTdrtdPXv21JQpU/Sf//yn2Vl27dqlV199VRMnTmz0/p9//lk5OTnq3bu3OnbsqOHDh2vLli3NPq+n0yv79u3rdhRPZWWlbr75Zp188smKjIxUUlKS5s+fr8OHDzf7Ot6ora3VHXfcoaSkJEVGRuqkk07SrFmz3E5l8PS+sGrVKtlsNq1bt0433HCDevbsqU6dOqmurq7J1/3hhx+0cuVKXXzxxTr55JNd/i4a/k3xVkFBgdLT09W5c2d16dJFo0eP9urn0BITJ07UCy+8oL1795ry/HBFJiGThFImaczBgwf1yCOPqH///rrzzjvd7o+Li1Nubq527dqllStXOpf76/fFm21pyfv8sX+f3li4cKH27NmjBx54wKfHtQaZxhWZxpxMI3n/vuoPv/rVr1RbW6uXXnrJlOcHfMWRcF5IT0/Xk08+qZkzZ+pXv/qVzj33XHXo0MFtvVdffVVXXXWVYmJilJ+fL0nOo4Tq6uq0Z88e3XHHHTrppJN08OBBvfXWW7ryyiv19NNPa9KkSS7P9cYbb6ikpEQLFixQly5d9PDDD+uKK67Qv/71L51yyimSpLfffluXXXaZ0tPT9dJLL6m+vl4PP/ywW3iUpK+++krXXnut8w34k08+0QMPPKAvvvhCTz31lMu6FRUVuu6663TnnXfqwQcfVLt27fTTTz/p4osv1s6dO5Wbm6vTTz9db7zxRqsLju3bt0uSSxlUVlamjIwMJSQkaNGiRerdu7fWrl2rmTNnqqqqSvfee6+ko9dIOv/88/XNN9/orrvu0pAhQ7Rv3z6tX79eFRUVOvPMM32e5+DBgxo/frxuvvlm3X333S7/ABYWFmrDhg2aN2+eevfurV69enk9a4Pf/OY3Gjp0qJ588knV1tbqrrvu0rhx47R161ZFRERIOloe3XjjjRo+fLiWL1+uXr166d///rf++c9/Op/nnXfe0SWXXKIhQ4Zo+fLliomJ0UsvvaTs7GwdOHCgyVOPiouLJUmXX365x3Uuv/xyrVu3Tu+++66uueYa5/LHH39cp59+uh599FFFR0erX79+Pv0e3nzzzVq1apVmzpyphx56SHv27NGCBQuUkZGhTz75xOUQ8sZ+D7315ZdfasOGDZo2bZq6dOni9eNa4ptvvtHNN9+shIQESdKHH36o//3f/9X333+vefPmuaxbWlqqWbNm6b777lPv3r31/PPP67bbbtPBgwd1xx13eHyNnTt3qkePHlq4cKF69uypPXv26JlnntGQIUO0ZcsW52mA3vxNHDlyRJdddpk2bNigO++8UxkZGfr222917733asSIEdq0aVOTR1OsW7dOhw4dcjtNscFvfvMbnXvuuXryySdVU1Oj++67TyNGjNCWLVuc712tUVlZqfPOO0/t2rXTvHnzdOqpp+qDDz7Q/fffr2+++UZPP/20c936+nq3/3BoTLt27Zy/XwcOHNDw4cP13Xff6Te/+Y0GDBigzz//XPPmzdNnn32mt956y6UMa+x9oaSkRNLRa8xceuml+tOf/qT9+/c3+u/GgQMH9Prrr+uFF17Qm2++qYiICI0ZM0YFBQWNHuHpjQcffFC//e1vNWXKFP32t791/gftsGHD9PHHH3v9vA6HQ9dcc406deqk9PR03XPPPTr//PPd1hsxYoTuuusuvfvuuxo3blyLZob3yCRkEil0MkljNm/erB9++EE33XSTx50P48aNU7t27VRcXOxyLcTW/r74ui3evM+3RFlZme6//36tXr3a9BxzLDKNKzKNOZnG1/cqT9avX6+uXbvq559/Vr9+/TR16lTNmjXL+f7VoHfv3jrzzDP1xhtv+LxTHzCFgWZVVVUZ559/viHJkGR06NDByMjIMHJzc429e/e6rHvWWWcZw4cPb/Y5Dx8+bBw6dMiYOnWqcc4557jcJ8mIi4szamtrncsqKyuNdu3aGbm5uc5lQ4YMMeLj442ffvrJuay2ttbo3r270dSPtr6+3jh06JDx7LPPGhEREcaePXuc9w0fPtyQZLz99tsuj1m2bJkhyfjrX//qsvzGG280JBlPP/10k9v7zjvvGJKMgoIC49ChQ8aBAweM999/3zjjjDOM5ORk44cffnCuO3r0aOPkk082ampqXJ7j1ltvNaKiopzzLliwwJBkFBcXN/u677zzjsvy7du3u809efJkQ5Lx1FNPuT2PJCMmJsble+XLrA1zjBkzxmW9P//5z4Yk44MPPjAMwzD27t1rREdHG+eff75x5MgRj9t15plnGuecc45x6NAhl+Vjx441TjzxRKO+vt7jYy+55BJDkvHzzz97XOf//u//DEnGQw89ZBjGf79fp556qnHw4EGXdb39Pfzggw8MScaiRYtcHr9jxw6jY8eOxp133ulc5un30Ft33XWXy/e1JRp+Zi+//LLXj2n421qwYIHRo0cPl59hYmKiYbPZjNLSUpfHjBo1yoiOjjb2799vGEbjv5vHO3z4sHHw4EGjX79+xuzZs53LvfmbePHFFw1Jxl/+8heX5SUlJYYkIz8/v8ltvOWWW4yOHTu6/X42fL/OPfdcl/u++eYbo0OHDsa0adOcy+6991639yhJxr333uv2eomJicbkyZOdt2+++WajS5cuxrfffuuy3qOPPmpIMj7//HOXxza8bzf1dezr5ubmGu3atTNKSkpcnv+VV14xJBlFRUUuMzf2vvD0008bkoxJkya5bY9hGMbBgweNNWvWGNdee63RuXNnIzIy0hg7dqzx3HPPuf2b0pj//Oc/Hr9f5eXlRvv27Y3//d//dVm+d+9eo3fv3sbVV1/d7PP/4x//MG677Tbj1VdfNdavX2889dRTRv/+/Y2IiAjjzTffbHR7bDabcddddzX73Gg9MgmZJJQySWNeeuklQ5KxfPnyJteLi4sz+vfv77ztj98Xb7eluff55jT1t1lfX28MGTLE+J//+R+XbTvrrLNa9FqGQabxhExjTabx9r2qKTNmzDCeeuop47333jMKCwuNX/3qV4Yk47rrrmt0/V/96ldGXFxcs88LtAVOR/VCjx49tGHDBpWUlGjhwoW67LLL9O9//1tz5szR2Wef7fU1Gl5++WUNHTpUXbp0Ufv27dWhQwetXLlSW7dudVt35MiR6tq1q/N2XFycevXqpW+//VaStH//fpWUlOjKK69UVFSUc72uXbs2eiTCli1bNH78ePXo0UMRERHq0KGDJk2apPr6ev373/92WfeEE07QhRde6LLsnXfeUdeuXTV+/HiX5ddee61X294gOztbHTp0UKdOnTR06FDV1tbqjTfecF7P4+eff9bbb7+tK664Qp06ddLhw4edX2PGjNHPP//s/HS+//u//9Ppp5+u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KisrG/0kMm907txZ5513nlavXq1HHnnE+Y/l3r179frrr7u9dsNsDQzD0B//+EevX2/kyJH685//rNdee83lcP4XXnihRfM3uPPOO7Vq1SotXLhQN998s7p27aqRI0dqy5YtGjBggMc9W5KUlZWlefPm6W9/+5vH0xYbjur49NNPNXr0aOfy1157rVVzS0f3UHs7q7cyMjIUExOj5cuX65prrmn0H7wzzjhD/fr10yeffOIWYLxxxRVXKDk5WQsXLtSVV17p9gmpBQUFWrdunaZPn95sGeDL7+HYsWO1cOFCff/997r66qt9ntsblZWVKioq0pVXXtlsQPIHm82m9u3bu1wA9qefftKf/vSnRtf//PPP9cknn7icvvHCCy+oa9euOvfcc5t8neNLyjfeeEPff/+9TjvtNOcyb/4mxo4d67xo+pAhQ7zazmOdeeaZevHFF1VTU6OYmBi3+1988UXl5OQ4f3e//fZbbdy40e1C78fr27evPv30U5dlf/vb37Rv3z63+YuKinTqqad6PGWiwfHhzZNj38PHjh2rBx98UD169PD5P1h9kZ6ervT0dC1ZskRvv/22XnjhBc2dO1e33Xabhg8fruzsbE2aNMnnox1Gjx6t9u3b66uvvmryNKmuXbs6ywdv/PDDD1qzZo0GDRrkdtTAzp079fPPP7f4gyTgGzIJmaQxwZpJGhMZGalf//rX+s1vfqNHHnnE7TT43bt3a86cOYqLi9O0adOafT5vf1/M2BZfDRo0qNFTHWfNmqWamho9/fTTTR6Z2BpkGjJNS/mSaXx5rzr77LN9muPZZ5+VpEYvR/P111+TUxAwKOG8MHr0aJ188skaN26c85N4SktLtWjRInXp0sVlT9XZZ5+tl156SQUFBTrllFMUFRWls88+W2PHjtXq1as1Y8YMXXXVVdqxY4d+97vf6cQTT9SXX37Zorl+97vf6ZJLLtGoUaN0++23q76+Xg899JA6d+6sPXv2ONcbNWqUIiMj9T//8z+688479fPPP2vZsmX64YcfvH6tSZMm6bHHHtOkSZP0wAMPqF+/fioqKtLatWtbNHuDDh066MEHH9TVV1+t3//+9/rtb3+r3//+9zr//PM1bNgw3XLLLerbt6/27t2rbdu26fXXX9ff/vY3SUcDSUFBgS677DLdfffdOu+88/TTTz/pvffe09ixYzVy5Ej17t1bF198sXJzc3XCCScoMTFRb7/9tlavXt2quRt4O6u3unTpokWLFmnatGm6+OKLdeONNyouLk7btm3TJ598oqVLl0qSnnjiCWVlZWn06NG6/vrrddJJJ2nPnj3aunWr/vGPf+jll1/2+BoRERH6y1/+olGjRik9PV2333670tPTVVdXp9dff10rVqzQ8OHDtWjRIq9m9vb3cOjQobrppps0ZcoUbdq0SRdccIE6d+6siooK/f3vf9fZZ5+tW265xafv1/GeeeYZHT58uMlQft9992n+/Pl655133I70a8zx19BpMHz4cF166aVavHixrr32Wt10002qrq7Wo48+2uiRftLRYDR+/Hjdd999OvHEE/Xcc8+puLhYDz30kDp16uRxhrFjx2rVqlU688wzNWDAAG3evFmPPPKIWxD35m/immuu0fPPP68xY8botttu03nnnacOHTrou+++0zvvvKPLLrtMV1xxhcdZRowYIcMw9NFHHykzM9Pt/t27d+uKK67QjTfeqJqaGt17772KiorSnDlzPD6nJE2cOFH33HOP5s2bp+HDh6usrExLly51C8ULFixQcXGxMjIyNHPmTJ1xxhn6+eef9c0336ioqEjLly93fl98DW8N38O//OUvuuCCCzR79mwNGDBAR44cUXl5udatW6fbb7+9RUHfk4iICGVmZiozM1PLly/XG2+8oRdeeEGzZs3SkCFDNGjQIOe6//d//6f9+/dr7969ko5+utgrr7wiSRozZow6deqkvn37asGCBZo7d66+/vprXXLJJTrhhBO0a9cuffzxx+rcubPmz5/f5EzXXnutEhISNHjwYMXGxurLL7/UokWLtGvXLq1atcpt/Ya/EU+fLgf/IpOQSTwJhkzSUEQ2XPbCk7vuukuffPKJ83+zs7MVExOjTz/9VI888oj27t2rNWvWNFqcHM+X35fW5KvmbNq0ybndtbW1MgzD+R6elpamxMREdevWrdFs0q1bNx0+fNjtPjINmaYpgZppWvte9cILL2j16tW69NJLlZiYqB9//FEvv/yyXnrpJV1//fVu1yo8cuSIPv74Y02dOtVv2wq0ihWfBhFsCgoKjGuvvdbo16+f0aVLF6NDhw5GQkKCMXHiRKOsrMxl3W+++cbIzMw0unbtakgyEhMTnfctXLjQ6Nu3r2G3243+/fsbf/zjHz1+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kZEhm82mv//973rooYd0++23mzEjQgShCABgFvIJAAAAAp3PJdw999yjrl27atGiRZozZ44kKT4+Xvfdd59mzpzp9wEBAACaQz4BwA5fAECg87mEs9lsmj17tmbPnq29e/dKkrp27er3wRBaCEUAADORT4DwRtYEAAQDn68J99NPP+nAgQOSjobbPXv2aMmSJVq3bp3fh0NoIBQBAMxGPgHCF1kTABAsfC7hLrvsMj377LOSpB9//FHnnXeeFi1apMsuu0zLli3z+4AIboQiAEBbIJ8AAAAg0Plcwv3jH//QsGHDJEmvvPKKevfurW+//VbPPvusHn/8cb8PCAAA0BzyCRCe2OELAAgmPpdwBw4ccF5jZd26dbryyivVrl07/eIXv9C3337r9wERvAhFAIC2Qj4Bwg9ZE0Aoy8/PV1JSkqKiopSamqoNGzZ49bj3339f7du316BBg8wdEC3icwl32mmnqbCwUDt27NDatWuVmZkpSdq9e7eio6P9PiCCE6EIANCWyCdAeCFrAghlBQUFmjVrlubOnastW7Zo2LBhysrKUnl5eZOPq6mp0aRJk3TRRRe10aTwlc8l3Lx583THHXeob9++GjJkiNLT0yUd3et8zjnn+H1ABB9CEQCgrZFPAABAqFi8eLGmTp2qadOmqX///lqyZIn69OnT7HVub775Zl177bXOHITA097XB1x11VU6//zzVVFRoYEDBzqXX3TRRbriiiv8OhwAAIA3yCdA+GCHL4BQdvDgQW3evFl33323y/LMzExt3LjR4+OefvppffXVV3ruued0//33N/s6dXV1qqurc96ura1t+dDwms8lnCT17t1bvXv3dll23nnn+WUgBDdCEQDAKuQTIPSRNQGEuqqqKtXX1ysuLs5leVxcnCorKxt9zJdffqm7775bGzZsUPv23tU8ubm5mj9/fqvnhW98Ph0V8IRQBAAAAABA69lsNpfbhmG4LZOk+vp6XXvttZo/f75OP/10r59/zpw5qqmpcX7t2LGj1TOjeS06Ei4c5OXlKS8vT/X19VaPEhQo4AAAMB/5BOGMvAkgHMTGxioiIsLtqLfdu3e7HR0nSXv37tWmTZu0ZcsW3XrrrZKkI0eOyDAMtW/fXuvWrdOFF17o9ji73S673W7ORsAjjoTzwOFwqKysTCUlJVaPAgAAIIl8gvBFAQcgXERG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cPTo0Sden4iISDXsJ+wnRERKsNXnYInI+o4ePSpLliyRnJwcuXTpkqSkpIher5c9e/aIiMinn34qnp6esnXrVjl79qy888474uzsLOfOnRMRkQcPHkhgYKBMmjRJCgsLJS0tTYKDgx8750qbNm0eu++kpCQJDAyU1NRU+eOPPyQjI0O2bdsmIiLFxcXi4+MjEydOlGPHjsmFCxdk37598sorr0hNTU29WfLy8kSv18uuXbtERGTTpk3i4eEhFy5ceGL+0tJS8fb2lvHjx0tOTo6cO3dOtmzZImfPnm1Q/srKSunYsaNMmDBBTp8+Lfv375du3brJ9OnTzfcxffp0efHFF+vc7507d6R9+/YyefJkyc/Pl927d0v37t15zhUiIiJhP2E/ISJSBxfhiBRy5swZiYuLEx8fH3FxcZGgoCBZs2aNeX9tba0sXrxY/P39xdnZWcLCwuTHH3+sc4zDhw+LwWAQV1dXiY6Olu3btzeo5N67d0/efPNN6dixo+j1eunevbt89dVX5v3nzp2TcePGSdu2bcXNzU169uwp8+bNE5PJVO+xQkJCZNasWXW2jxs3TgYNGvTEYiwicvLkSYmNjZVWrVqJh4eHREdHm4txQ/KfOnVKYmJixNXVVby8vGTmzJly584d8/76Sq6IyJEjRyQsLEz0er2Eh4fLzp07WXKJiIiE/USE/YSISBU6EZ4MgIiIiIiIiIiISEs8JxwREREREREREZHGuAhHRERERERERESkMS7CERERERERERERaYyLcERERERERERERBrjIhwREREREREREZHGuAhHRERERERERESkMS7CERERERERERERaYyLcERERERERERERBrjIhwREREREREREZHGuAhHRERERERERESkMS7CERERERERERERaYyLcERERERERERERBr7H8rrXYYrh/iBAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "order_plot = 7\n", - "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=2*order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", - "x_grid, y_grid, plot_me_lap = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", - " \n", - "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", - "cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "cs2 = ax2.contourf(x_grid, y_grid, plot_me_hem.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "\n", - "fig.subplots_adjust(right=0.8)\n", - "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", - "#fig.colorbar(cs1, cax=cbar_ax)\n", - "\n", - "ax1.set_xscale('log')\n", - "ax1.set_yscale('log')\n", - "ax1.set_xlabel(\"source x-coord\")\n", - "ax1.set_ylabel(\"source y-coord\")\n", - "\n", - "\n", - "ax2.set_xscale('log')\n", - "ax2.set_yscale('log')\n", - "ax2.set_xlabel(\"source x-coord\")\n", - "ax2.set_ylabel(\"source y-coord\")\n", - "\n", - "ax1.set_title('Standard Recurrence Order 7, Laplace (blue=err<1e-5)')\n", - "ax2.set_title('Standard Recurrence, Order 14, Laplace (blue=err" ] @@ -288,13 +244,15 @@ } ], "source": [ - "order_plot = 6\n", - "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=2*order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", - "x_grid, y_grid, plot_me_lap = generate_error_grid(res=5, order_plot=order_plot, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + "order1 = 7\n", + "order2 = 19\n", + "cutoff = 1e-9\n", + "x_grid, y_grid, plot_me_hem = generate_error_grid(res=5, order_plot=order1, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", + "x_grid, y_grid, plot_me_lap = generate_error_grid(res=5, order_plot=order2, recur=recur_laplace, derivs=derivs_laplace, n_initial=n_init_lap, n_order=order_lap)\n", " \n", "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", - "cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", - "cs2 = ax2.contourf(x_grid, y_grid, plot_me_hem.T < 1e-5, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs1 = ax1.contourf(x_grid, y_grid, plot_me_hem.T < cutoff, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap.T < cutoff, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", "\n", "fig.subplots_adjust(right=0.8)\n", "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", @@ -305,14 +263,13 @@ "ax1.set_xlabel(\"source x-coord\")\n", "ax1.set_ylabel(\"source y-coord\")\n", "\n", - "\n", "ax2.set_xscale('log')\n", "ax2.set_yscale('log')\n", "ax2.set_xlabel(\"source x-coord\")\n", "ax2.set_ylabel(\"source y-coord\")\n", "\n", - "ax1.set_title('Standard Recurrence Order 6, Laplace (blue=err<1e-5)')\n", - "ax2.set_title('Standard Recurrence, Order 12, Laplace (blue=err" ] @@ -836,37 +852,148 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "x_grid, y_grid, plot_me_lap1_abs = generate_grid_abs(8, 5, laplace2d, derivs_lap, 8, 2)\n", + "x_grid, y_grid, plot_me_lap2_abs = generate_grid_abs(8, 12, laplace2d, derivs_lap, 8, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[1.00000000e+00, 2.89514005e-06, 8.56354551e-11, 2.29844392e-15,\n", - " 6.16604120e-20, 1.65416130e-24, 4.43761157e-29, 1.19047619e-33],\n", - " [5.28523776e-01, 1.00000000e+00, 2.89514005e-06, 8.56354551e-11,\n", - " 2.29844392e-15, 6.16604120e-20, 1.65416130e-24, 4.43761157e-29],\n", - " [5.30293276e-01, 5.28523776e-01, 1.00000000e+00, 2.89514005e-06,\n", - " 8.56354551e-11, 2.29844392e-15, 6.16604120e-20, 1.65416130e-24],\n", - " [5.30475650e-01, 5.30293279e-01, 5.28523776e-01, 1.00000000e+00,\n", - " 2.89514005e-06, 8.56354551e-11, 2.29844392e-15, 6.16604120e-20],\n", - " [8.05901688e-01, 5.30353964e-01, 5.30293278e-01, 5.28523776e-01,\n", - " 1.00000000e+00, 2.89514005e-06, 8.56354551e-11, 2.29844392e-15],\n", - " [7.12387827e-01, 1.14390958e+00, 5.30265663e-01, 5.30293278e-01,\n", - " 5.28523776e-01, 1.00000000e+00, 2.89514005e-06, 8.56354551e-11],\n", - " [4.17490497e-01, 3.10768481e-01, 3.62945854e-01, 5.30267821e-01,\n", - " 5.30293275e-01, 5.28523776e-01, 1.00000000e+00, 2.89514005e-06],\n", - " [5.50502400e-01, 1.00000000e+00, 4.15177240e-01, 1.00000000e+00,\n", - " 5.30333992e-01, 5.30293280e-01, 5.28523776e-01, 1.00000000e+00]])" + "Text(0.5, 1.0, '8-Term Taylor Series, Order 12, Laplace Abs Val')" ] }, - "execution_count": 35, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAALACAYAAADSYu9+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACd/0lEQVR4nOzde1xUdeL/8fcoAoqKIorhBS0vhSQWUqtlaW0apnaxcrdd09Itf05fV6mtXLcyt6LWMncTLbfS7baZbVG5fiNMV91cNySpjG6WhpWXRJPAvMHn94ffmWaEQQZmOGdmXs/Hg0fNmcM5nxmc4c17zvkchzHGCAAAAAAAAAA8NLN6AAAAAAAAAADsh+IQAAAAAAAAQA0UhwAAAAAAAABqoDgEAAAAAAAAUAPFIQAAAAAAAIAaKA4BAAAAAAAA1EBxCAAAAAAAAKAGikMAAAAAAAAANVAcAgAAAAAAAKiB4jBMbN68WVdccYWSk5PVqlUrnX766ZozZ44OHjzo83uGDh0qh8Nx0q/Zs2c33QOph/qM2eFw6F//+lfA9jl06FANHTo0YNury9GjR/XEE08oMzNTCQkJatWqlVJSUnT55Zfr1VdfDfj+7PQzNsbohRde0EUXXaT27dsrJiZGp556qpxOp3bs2NHo7W/fvl0Oh0NLly5t/GDrwde/zQcffLDB2+zRo4dGjRoVwFHWT1O+Bhrjww8/lMPhUIsWLbRz585a1wnmc/jnP/9ZDodDb775ps91/vrXv8rhcOiVV16p93ZD5flHZCOLkEUayk4/43DLIvPnz9dVV12lnj17yuFw+Pw39Morr+iXv/ylevXqpZYtW6pHjx761a9+pc8//7zB+/7Xv/4lh8Ohl19+ucHbaIimfo4bIzs7Ww6Hw2cuCfZzeNZZZ6lLly6qqqryuc55552nxMREHTlypF7bDKXnH0D9RFk9ADReSUmJBg8erL59+2r+/PlKTEzUunXrNGfOHBUVFem1116r9fsWLlyo8vJy9+1//vOfuu+++7RkyRKdfvrp7uVdu3YN+mPwx3/+8x+v23/84x+1Zs0arV692mt5ampqUw4rYMaPH69XXnlF06dP17333quYmBh9+eWXevPNN5Wfn68rr7wyoPv7z3/+Y4ufcXV1ta677jotW7ZMv/zlL7V06VLFx8frgw8+0Ny5c/XCCy9oxYoVOu+886weql+uvvpq3XrrrV7LunfvbtFowt+TTz4pSTp27JieeeYZ3XHHHU26/1//+te644479PTTT+vSSy+tdZ0lS5aoY8eOGj16dJOODQgmsghZpDHIIsHz+OOPKy4uThdddJHeeOMNn+s99NBD6ty5s2bNmqVTTz1VO3bs0AMPPKCzzz5bGzduVL9+/Zpw1JHh6NGjeu655yRJb775pr755ht16dKlSccwadIk/c///I/y8/M1cuTIGvd/9tln2rBhg6ZPn67o6OgmHRsAGzEIebNmzTKSzNatW72W33TTTUaS2bdvX722s2TJEiPJFBYWBmRclZWVAdnOyUyYMMHExcUFdR8XXnihufDCCwOyrerqanPw4MFa7/vyyy+NJHP33XfXen9VVVXQx2CVBx54wEgyDz74YI37du3aZVJSUkxSUpLZv39/ndup69/dtm3bjCSzZMmSRo72uIMHD5rq6mqf90syTqczIPtySUlJMZdddllAt1kfgXwNBMuhQ4dMhw4dTHp6uunSpYvp06dPresF+zm89tprTXR0tNm7d2+N+z7++GMjydx6661+bTMUnn9ENrIIWSSQY7BKOGYRz59Xv379fP4b2r17d41l33zzjWnRooWZNGlSg8a2Zs0aI8ksX768Qd/fUIF+joNl+fLlRpK57LLLjCRz//3311gn2M/hvn37TGxsrBk7dmyt999xxx1Gkvnggw/qvc1Qef4B1B+nKoeBFi1aSJLi4+O9lrdr107NmjVr9KdDy5Yt06BBgxQXF6fWrVtrxIgR2rx5s9c6EydOVOvWrfXhhx9q+PDhatOmjS6++GJJx08/ueWWW7RkyRL17dtXLVu21MCBA7Vx40YZYzR37lz17NlTrVu31kUXXaStW7c2arySlJubqwsuuECdOnVSXFyczjzzTP3pT3/S0aNH3ev88Y9/VFRUVK2nndx4443q0KGDDh065HMf+/bt09SpU9WlSxdFR0fr1FNP1axZs3T48GGv9VyP//HHH9cZZ5yhmJgY/e1vf6t1m2VlZZKkU045pdb7mzXzfsmWl5frtttuU8+ePRUdHa0uXbpo+vTpqqysrPcYajs9aNeuXbr55pvVtWtXRUdHq2fPnrr33nt17Ngxr/UWLVqk9PR0tW7dWm3atNHpp5+u3//+9z6fM1+OHDmiuXPn6owzztDtt99e4/6kpCTl5ORo9+7deuqpp9zLhw4dqrS0NK1bt06DBw9Wq1atdOONN0qSvv32W1177bVq06aN4uPjNW7cOO3atavW/W/atEljxoxRQkKCYmNjddZZZ+mll17yWmfp0qVyOBx66623dOONN6pjx45q1apVjZ+3HRQUFOjyyy9X165dFRsbq169eunmm2/W3r17vdabPXu2HA6HNm/erKuuukpt27ZVfHy8fv3rX+u777476X7uvfdenXvuuUpISFDbtm119tln66mnnpIxpsa6L7zwggYNGqTWrVurdevWGjBggNfPUpJWrVqliy++WG3btlWrVq103nnn6e233673487Ly1NZWZkmT56sCRMm6LPPPtO///1vn+u/+uqr6t+/v2JjY3XqqafqL3/5i9f91dXVuu+++9zvW+3atVP//v315z//uc5xTJo0SUeOHNELL7xQ474lS5ZIkvvfqT/PIWBnZJGayCJkETtkkRN/Xr506tSpxrLk5GR17do1IKdo16W+vwtdU42c7Pd3bbZu3aobbrhBvXv3VqtWrdSlSxeNHj1aH374YY11v//+e91666069dRTFRMTo06dOmnkyJH65JNP3OscOXJE9913n04//XTFxMSoY8eOuuGGG+qVn1yeeuopRUdHa8mSJerWrZuWLFni8/f/oUOHlJ2drc6dO6tly5a68MILa7wHfvnll/rFL36h5ORkxcTEKCkpSRdffLGKi4t9jqF9+/a68sor9cYbb7hf+y5VVVV69tlnlZmZqTPPPNOv5xBAmLGytURgbNu2zbRr185cffXV5osvvjDl5eXmjTfeMPHx8eZ//ud/6r2d2j7lv//++43D4TA33nijWbFihXnllVfMoEGDTFxcnPnoo4/c602YMMG0aNHC9OjRw+Tk5Ji3337b5OfnG2OOH3WVkpJiBg8ebF555RXz6quvmj59+piEhAQzY8YMc/nll5sVK1aY559/3iQlJZn+/fvX+cnpiWr7lH/GjBlm0aJF5s033zSrV682jz76qElMTDQ33HCDe53du3ebmJgYM2vWLK/vLSsrMy1btjS/+93v3MtO/JT/xx9/NP379zdxcXHm4YcfNm+99Za56667TFRUlBk5cqTX9iSZLl26mP79+5sXXnjBrF692mzZsqXWx1JRUWHatWtnOnfubJ544gmzbds2n4+7srLSDBgwwCQmJpp58+aZVatWmT//+c8mPj7eXHTRRV7PYV1jkGTuuece97o7d+403bp1MykpKeaJJ54wq1atMn/84x9NTEyMmThxonu9v//970aS+Z//+R/z1ltvmVWrVpnHH3/cTJs2zeeYfdmwYYORZO644w6f6/zwww+mWbNmZsSIEe5lF154oUlISDDdunUzjz32mFmzZo1Zu3atOXjwoDnjjDNMfHy8eeyxx0x+fr6ZNm2a6d69e41PQFevXm2io6PNkCFDzLJly8ybb75pJk6cWGM91+ujS5cu5qabbjL/+7//a15++WVz7Ngxn2OWZNq3b29iY2NNdHS0Ofvss83TTz/t9/PjqT5Hyy1atMjk5OSY119/3axdu9b87W9/M+np6aZv377myJEj7vXuuece9+vzd7/7ncnPzzfz5s0zcXFx5qyzzvJat7YjXSZOnGieeuopU1BQYAoKCswf//hH07JlS3Pvvfd6rXfXXXcZSeaqq64yy5cvN2+99ZaZN2+eueuuu9zrPPvss8bhcJgrrrjCvPLKK+aNN94wo0aNMs2bNzerVq2q13NzySWXmJiYGLNv3z6zdetW43A4vP7Nej6HXbp0Md27dzdPP/20WblypfnVr35lJJm5c+e618vJyTHNmzc399xzj3n77bfNm2++aebPn29mz55d5ziqqqpMSkqKGTBggNfyY8eOmVNOOcX87Gc/8/s55IhD2B1ZhCxCFrFnFvFU1xGHtfniiy9Ms2bNzIwZM+r9PZ7qe7RcfX8X1vf3d21HvK1du9bceuut5uWXXzZr1641r776qrniiitMy5YtzSeffOJer7y83PTr18/ExcWZOXPmmPz8fPOPf/zD/Pa3vzWrV682xhz/PX/ppZeauLg4c++995qCggLz5JNPmi5dupjU1NR6HUm7Y8cO06xZM3PNNdcYY4z5wx/+YCSZf/3rX7U+h926dTOXX365eeONN8xzzz1nevXqZdq2bWu++OIL97p9+/Y1vXr1Ms8++6xZu3at+cc//mFuvfVWs2bNmjrHsmrVKiPJzJ8/32v5P//5TyPJPP744349hxxxCIQfisMw8fHHH5vTTz/dSHJ/TZs2za/Qe2JYLy0tNVFRUTUC/w8//GA6d+5srr32WveyCRMmGEm1liKSTOfOnU1FRYV7WV5enpFkBgwY4DXG+fPn+304/MlOD6qqqjJHjx41zzzzjGnevLnX6VITJkwwnTp1MocPH3Yve+ihh0yzZs28gvKJYf3xxx83ksxLL73kta+HHnrISDJvvfWW1+OPj4+v92la//znP01iYqL759ihQwdzzTXXmNdff91rvZycHNOsWbMap3O9/PLLRpJZuXJlvcZwYli/+eabTevWrc1XX33ltd7DDz9sJLn/SLvllltMu3bt6vWYTubFF1/0Cia+JCUlmTPOOMN9+8ILLzSSzNtvv+213qJFi4wk89prr3kt/81vflMjyJx++unmrLPOMkePHvVad9SoUeaUU05xn+Ljen1cf/319X5c1113nXn++efNunXrzMsvv2yysrKMJPOHP/yh3ts4kb+n2VZXV5ujR4+ar776qsZz4ioOT/yD4PnnnzeSzHPPPededrLiyvU6mzNnjunQoYP7df3ll1+a5s2bm1/96lc+v7eystIkJCSY0aNH19hmenq6Oeecc076OLdv326aNWtmfvGLX3iNOS4uzpSXl3utm5KSYhwOhykuLvZafskll5i2bdu6TzEbNWpUjfKvvlzP7Xvvvede9sYbbxhJ5q9//Wut3+PrOXQ9FopD2B1ZhCziQhaxTxbx5E9xePToUTN06FDTtm1bU1pa2qD9NeQ027p+F9b393d9iqtjx46ZI0eOmN69e3vloDlz5hhJpqCgwOf3ugrrf/zjH17LCwsLjSSzcOHCkz5O137efPNNY8zxvORwOMz48eO91nM9h2effbbXc7F9+3bTokULM3nyZGOMMXv37q21/KuP6upq07NnT9O/f3+v5WPHjjWtWrUyBw4cqPX7fD2HFIdA+OFU5TCwfft2jR49Wh06dNDLL7+stWvX6k9/+pOWLl2qyZMnu9errq7WsWPH3F91XT1LkvLz83Xs2DFdf/31Xt8XGxurCy+8sNYrBY4dO7bWbQ0bNkxxcXHu22eccYYkKSsrSw6Ho8byr776qt6PvzabN2/WmDFj1KFDBzVv3lwtWrTQ9ddfr6qqKn322Wfu9X77299qz549Wr58uaTjz9GiRYt02WWXqUePHj63v3r1asXFxenqq6/2Wj5x4kRJqnF6pevKfPUxcuRIlZaW6tVXX9Vtt92mfv36KS8vT2PGjNEtt9ziXm/FihVKS0vTgAEDvH4+I0aMqPVKjvUdw4oVKzRs2DAlJyd7bTcrK0uStHbtWknSOeec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jh319ddf1znmxMREdejQQW+++Wat97s+IPTF9YHmvHnzNG/evFrvv/nmm72W+Xrcno85JSXFve3PPvtML730kmbPnq0jR47o8ccfr3NMXbt21fDhw/XCCy/okUce0ZIlS9SrVy9dcMEF7nXq+xwCCD8Uh2EgOTlZW7ZsUUVFhVq3bu1e/p///EfST0f6JCcnewWtkxkxYoSioqL0xRdfBP2UiEByhSnPP0aMMfrrX/9a6/pXXnmlunfvrltvvVVr167Vo48+etJAdvHFF+ull15SXl6errzySvfyZ555xn1/Q/zwww9yOBxeP0cX1ykArp/hqFGj9MADD6hDhw7q2bNng/ZXm1GjRmnlypU67bTT6n1KU1xcnLKysnTkyBFdccUV+uijj/wK69HR0frd736n3//+95o7d26Nqxnu2bNHM2fOVFJSktcpb74MGzZML730kl5//XWvU4ROvMpt37591bt3b73//vs1QlCwPPvss2rRooUyMjKCsv3a/v1L0hNPPOHze55//nmv8bz00ks6duyYhg4dWud+oqKi1Lx5c/eyH3/8Uc8++6zXesOHD1fz5s21aNEiDRo0qNZtnXfeeWrXrp1KSkpOeoRNbZ566ik1a9ZMr7zySo0run799dfuI1Iefvhh9/KPPvpI77//vtfpTi+88ILatGmjs88+u8Y+2rVrp6uvvlrffPONpk+fru3bt3sVkbW54oor1KFDBz399NPauXOn+vTpo/PPP999f32fQyAUkEW8kUUahyzS9Iwx+s1vfqMlS5boiSee0A033NAk+/X3d6G/v78993NiNvrnP/+pb775Rr169XIvy8rK0t13363Vq1fXOP3cZdSoUXrxxRdVVVWlc889t16P02X//v169dVXdd555+m+++6rcf+TTz6p559/Xlu2bFFaWpp7+d///ndlZ2e73xe++uorbdiwQddff32t++nTp4/+8Ic/6B//+Eedp3B7mjRpkt58803dfffdKi4u1v333+/1PlTf5xBA+KE4DAPTp0/XFVdcoUsuuUQzZsxQYmKiNm7cqJycHKWmprrng/FXjx49NGfOHM2aNUtffvmlLr30UrVv3167d+/Wu+++q7i4ON17770BfjSNd8kllyg6Olq//OUvdfvtt+vQoUNatGiR9u/fX+v6zZs3l9Pp1B133KG4uDj33EB1uf7665Wbm6sJEyZo+/btOvPMM/Xvf/9bDzzwgEaOHFnnvCh1+fTTTzVixAj94he/0IUXXqhTTjlF+/fv1z//+U8tXrxYQ4cO1eDBgyUd/7n/4x//0AUXXKAZM2aof//+qq6uVmlpqd566y3deuutfocZ6fhpZAUFBRo8eLCmTZumvn376tChQ9q+fbtWrlypxx9/XF27dtVvfvMbtWzZUuedd55OOeUU7dq1Szk5OYqPj3cfYSLJPT/T9u3b69zvHXfcoffff9/933Hjxik+Pl4ffPCB5s6dqx9++EErVqyoUQzV5vrrr9ejjz6q66+/Xvfff7969+6tlStXKj8/v8a6TzzxhLKysjRixAhNnDhRXbp00b59+/Txxx/rvffec8855a+5c+eqpKREF198sbp27ao9e/boqaee0ltvvaXZs2d7HYWxfft29ezZUxMmTNDSpUtPuu1du3bp5ZdfrrG8R48eSk9P12mnnaY777xTxhglJCTojTfeqPO0rVdeeUVRUVG65JJL9NFHH+muu+5Senq6rr32Wp/fc9lll2nevHm67rrrdNNNN6msrEwPP/xwjUDZo0cP/f73v9cf//hH/fjjj/rlL3+p+Ph4lZSUaO/evbr33nvVunVrPfbYY5owYYL27dunq6++Wp06ddJ3332n999/X999950WLVpU6zjKysr02muvacSIET5Pp3r00Uf1zDPPKCcnRy1atJB0/I/eMWPGaPbs2TrllFP03HPPqaCgQA899JD7SMLRo0crLS1NAwcOVMeOHfXVV19p/vz5SklJUe/evX0+Ny4xMTH61a9+pccee0zGGD344IMNeg6BUEAW8UYWIYvYIYtI0qZNm9yPu7y8XMYYd4bIzMx0l6vTpk3TU089pRtvvFFnnnmme4oT6fjvs7POOst9e/bs2br33nu1Zs2aOj9kdPHclqcLL7zQ79+F9fn9XZtRo0Zp6dKlOv3009W/f38VFRVp7ty5NU5Lnj59upYtW6bLL79cd955p8455xz9+OOPWrt2rUaNGqVhw4bpF7/4hZ5//nmNHDlSv/3tb3XOOeeoRYsW+vrrr7VmzRpdfvnlXmW+p+eff16HDh3StGnTan3uOnTooOeff15PPfWUHn30UffyPXv26Morr9RvfvMbHThwQPfcc49iY2M1c+ZMSdIHH3ygW265Rddcc4169+6t6OhorV69Wh988IHuvPNOn8+LpzFjxigxMVFz585V8+bNvc5c8ec5BBCGmvpqLAiO1atXm+HDh5vOnTubli1bmj59+phbb73V7N27t97bOPFKhi55eXlm2LBhpm3btiYmJsakpKSYq6++2qxatcq9Tl1XE5RknE6n1zLX1bbmzp3rtbwhV1+rbd9vvPGGSU9PN7GxsaZLly7md7/7nfnf//1fI8msWbOmxja2b99uJJkpU6bUuo/armhaVlZmpkyZYk455RQTFRVlUlJSzMyZM82hQ4e81qvt8fuyf/9+c99995mLLrrIdOnSxURHR5u4uDgzYMAAc99995mDBw96rV9RUWH+8Ic/mL59+5ro6GgTHx9vzjzzTDNjxgyza9eueo1BJ1zJ0BhjvvvuOzNt2jTTs2dP06JFC5OQkGAyMjLMrFmz3Fek/Nvf/maGDRtmkpKSTHR0tElOTjbXXnttjatQJiYmmp/97Gf1evzV1dXm+eefN0OHDjXt2rUz0dHRpmfPnub//b//V+PKisYc/7n069ev1m19/fXXZuzYsaZ169amTZs2ZuzYsWbDhg21XuXt/fffN9dee63p1KmTadGihencubO56KKLvK6s6Ov14cvrr79uzj//fNOxY0cTFRVl2rRpY4YMGWL+/ve/11j3ww8/NJLMnXfeedLtpqSkeF2x1PNrwoQJxhhjSkpKzCWXXGLatGlj2rdvb6655hpTWlpa42ftuvJvUVGRGT16tPu5+uUvf2l2797ttd/aXgNPP/206du3r4mJiTGnnnqqycnJMU899ZSR5HUlUGOMeeaZZ0xmZqaJjY01rVu3NmeddVaNn8PatWvNZZddZhISEkyLFi1Mly5dzGWXXVbn+4Hr6qd5eXk+13FdedR19UPXlalffvll069fPxMdHW169Ohh5s2b5/V9jzzyiBk8eLBJTEw00dHRpnv37mbSpElm+/btPvd1ovfff99IMs2bNzfffvttjfvr+xxyVWWEArIIWYQs4s3qLGLMT1cbr+3Lcwx15YuUlBSvbd56663G4XCYjz/+uM59u15Lvr5cr4P6/i6s7+/v2q7qu3//fjNp0iTTqVMn06pVK3P++eeb9evX1/q62r9/v/ntb39runfvblq0aGE6depkLrvsMvPJJ5+41zl69Kh5+OGH3a/x1q1bm9NPP93cfPPN5vPPP/f5nAwYMKDG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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plot_me_lap1.T/plot_me_lap2.T" + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", + "cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap2_abs.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap1_abs.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "\n", + "fig.subplots_adjust(right=0.8)\n", + "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", + "fig.colorbar(cs1, cax=cbar_ax)\n", + "\n", + "\n", + "ax1.set_xscale('log')\n", + "ax1.set_yscale('log')\n", + "ax1.set_xlabel(\"source x-coord\")\n", + "ax1.set_ylabel(\"source y-coord\")\n", + "\n", + "\n", + "ax2.set_xscale('log')\n", + "ax2.set_yscale('log')\n", + "ax2.set_xlabel(\"source x-coord\")\n", + "ax2.set_ylabel(\"source y-coord\")\n", + "\n", + "ax1.set_title('8-Term Taylor Series, Order 5, Laplace Abs Val')\n", + "ax2.set_title('8-Term Taylor Series, Order 12, Laplace Abs Val')" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, '8-Term Taylor Series, Order 12, Laplace Rel. Err')" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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eSotLdXWrVt1//33h28fO3asCgsLtXLlSo0ePVqdO3fWpZdeKkl67733dMEFF6hbt27KycnR5MmTo778Y82aNZo0aZJyc3OVnZ2tL3zhC3rsscci7uNeAvLMM8/o0ksv1SGHHKLOnTs3+PMOgoqKCp199tnq16+fsrOzdeSRR+ryyy/X9u3bI+7nXiqzbt06nXvuuerevbtycnJ04YUX6v333z/o89x666064YQTlJubq+7du+uLX/yi7r//fnme1+C+jzzyiEaNGqWuXbuqa9euGjFiRMSfpSQ9++yzOu2009S9e3d17txZJ554ov785z+3+PfBDR22bt0acXtzf77bQlM/V039fANBQ4s0RIvQIkFokc//eUXz+aGhJOXn56tfv35xeYl2U5rbE+64lt///vcaNmyYsrOzdfjhh+tnP/vZQZ9j/fr1uuSSSzRkyBB17txZhx12mCZOnKhXX321wX0//PBDXX311Tr88MOVlZWlPn366IwzzghvbEj283Lbbbfp6KOPVlZWlg455BBdcsklzeqnaKJ1S7z7qDWi/by7lzv/6Ec/0m233abBgwcrKytLK1as8GWdAOKLKw5TwNSpU7VgwQJ95zvf0V133aVDDjlEzz//vO677z6FQiF16dKlxY99xx136Ac/+IEuueQS/eAHPwhH1ZgxY/TSSy9FXCmwb98+TZo0SZdffrmuv/76iLB7+umntW7dOt15553KyMjQddddpzPPPFNTp07Vv/71L91zzz366KOPNGfOHJ133nmqqqpq8iqug3n77bf1zW9+Mxyxr7zyim6//Xa9+eab+t///V9J0uWXX67bb79d9913n2677bbwr925c6ceffRRXXHFFcrOzm708ffs2aNx48bp7bff1q233qphw4Zp1apVKi0tVVVVlf74xz9G3L+8vFyrVq3STTfdpL59+zYaZ5J0zDHHqEePHrr11lvVrl07jR8/Pup5aLt379Ypp5yid999V9///vc1bNgwvf7667rpppv06quv6tlnn434PWzuGrZs2aLjjz9e7dq100033aQjjjhCf/3rX3Xbbbdp48aNeuCBByRJjz76qGbOnKnvfve7+vGPf6x27dpp/fr1qq6ubvwPpQlr167VBx98oMsuuyzqn/vEiRPVrl07VVRURLz0d/Pmzbrwwgt17bXX6o477lC7du30ySef6Mtf/rLee+89lZaW6qijjtIf//hHTZ48ucHjrlixQl/5yld0wgkn6N5771VOTo4effRRTZ48Wbt379bFF18ccf9LL71UZ555pn71q1+prq7uoC8leeSRR3T//ffrwIEDKiws1BVXXKFLLrkk5t+jWLz99tsaNWqUpk+frpycHG3cuFHz58/XSSedpFdffbXBms855xxdcMEFmjFjhl5//XXdeOONqq6u1t/+9rcmv7+NGzfq8ssvD7/0+sUXX9R3v/td/fvf/9ZNN90Uvt9NN92kH/7whzr33HN19dVXKycnR6+99preeeed8H1+/etf66KLLtLZZ5+tBx98UB07dtR9992nCRMmaPny5eH/+I/Fhg0bJElHHXVU+Lbm/nzHS2PDyHbt2jX4D7loP1eN/XwDQUSLNESL0CJBaZGW+te//qV33nlHX/3qVxPy+E5ze0KSqqqqNHv2bN1yyy3q27evHn74YV155ZXat2+frrnmmqjP8d5776lXr1668847dcghh2jnzp168MEHdcIJJ2jdunUaOnSoJOnjjz/WSSedpI0bN+q6667TCSecoF27dmnlypXavHmzjj76aB04cEBnn322Vq1apWuvvVajR4/WO++8o5tvvlljx47VmjVrGr2a92Aa65ZE9FE0Bw4caLRbOnSIHBk01SY/+9nPdNRRR+nHP/6xunfvriFDhsRtfQB85CElvPHGG97RRx/tSQp/zJo1yztw4ECzH+OBBx7wJHmVlZWe53leTU2N16FDB++73/1uxP0+/vhjr2/fvt4FF1wQvm3q1KmeJO9///d/GzyuJK9v377erl27wreVl5d7krwRI0ZErHHBggWeJO/vf/97s9c9depUr0uXLlG/Xl9f7+3fv9976KGHvPbt23s7d+6M+LV9+vTx9u7dG77trrvu8tq1a+dt2LAhfNspp5zinXLKKeHP7733Xk+S99hjj0U811133eVJ8p555pmI7z8nJyfieZvyxz/+0evdu3f4z7FXr17e1772Ne+pp56KuF9paanXrl278J+X88QTT3iSvGXLljVrDZK8m2++Ofz55Zdf7nXt2tV75513Iu734x//2JPkvf76657ned4VV1zh9ejRo1nf08E8+uijniTv3nvvbfJ+eXl53jHHHBP+/JRTTvEkeX/+858j7rdo0SJPkvfkk09G3P7tb3/bk+Q98MAD4duOPvpo7wtf+IK3f//+iPueddZZ3qGHHurV19d7nvffvx8XXXRRs7+vb37zm97DDz/srVy50nviiSe8kpIST5L3gx/8oNmP8XkDBw70zjzzzGbf/8CBA97+/fu9d955p8Hvyc033+xJ8q666qqIX/Pwww97krxf//rX4ds+/3fg89zfs3nz5nm9evUK/73+17/+5bVv39771re+FfXX1tXVebm5ud7EiRMbPObw4cO9448/vsnvccOGDZ4k76677vL279/v7dmzx6uqqvJGjRrlHXrooRF/l5v78+15Df9uxML9bDb2MW3atPD9mvq5ivbzDQQVLUKLOLRIcFrks4499tgm/13+Wfv37/fGjh3rde/e3aupqWnR861YscKT5D3++OPN/jXResLzrIEyMjK8qqqqiF9z+umne927d/fq6uo8z/tvF3z29/jzPv30U2/fvn3ekCFDIjpo3rx5niSvoqIi6q/9zW9+40nyfvvb30bcXllZ6UnyFi5c2OT36Ppry5Yt3v79+70PPvjAe+yxx7wuXbp43/jGN8L3i6WP3M/GZ/+Z0Vzu9yvax6pVq8L3jfbz7h7jiCOO8Pbt2xfzGgAEG5cupICNGzdq4sSJ6tWrl5544gk9//zz+tGPfqQlS5Zo+vTp4fu5XST3UV9f3+TjLl++XJ9++qkuuuiiiF+XnZ2tU045pdF3CjzvvPMafaxx48ZFXG1wzDHHSJJKSkoidnXd7Z+9Eqkl1q1bp0mTJqlXr15q3769OnbsqIsuukj19fX65z//Gb7flVdeqW3btunxxx+XZL9HixYt0plnntnkO58+99xz6tKli84///yI292O8OdfPuDema85zjjjDNXU1Oj3v/+9rrnmGh177LEqLy/XpEmTdMUVV4Tv9/TTT6uwsFAjRoyI+POZMGFCo+/k2Nw1PP300xo3bpzy8/MjHrekpESS9Pzzz0uSjj/+eH344Yf6xje+oSeffLLBy2ATwfO8BlcB9OzZU6eeemrEbStWrFC3bt00adKkiNs/f+Dz+vXr9eabb+pb3/qWJEV8v2eccYY2b96sf/zjHxG/JtrPeGMefvhhffOb39SYMWN03nnnadmyZTrrrLN05513tuqlLAezbds2zZgxQ/3791eHDh3UsWNHDRw4UJL0xhtvNLi/+/6dCy64QB06dDjoy0uee+45ffnLX1ZOTk7479lNN92kHTt2aNu2bZLsZdP19fUKhUJRH2f16tXauXOnpk6dGvFncODAAX3lK19RZWVlg5e8Nea6665Tx44dlZ2drREjRui1117TH/7wh4i/y839+Y6HI444QpWVlQ0+brzxxgb3jfZz1djPNxBEtEhDtAgtEoQWaQnP8zRt2jStWrVKDz30kPr375/Q52tOTzjHHnushg8fHnHbN7/5TdXW1urll1+O+hyffvqp7rjjDhUUFCgzM1MdOnRQZmam3nrrrYg2+n//7//pqKOO0pe//OWoj/X000+rR48emjhxYsSf14gRI9S3b99mv5t637591bFjR/Xs2VMXXHCBioqKIo4QiFcfNdeVV17ZaLeMGDEi4n5NtcmkSZN8eWMXAInFS5VTwPXXX6/a2lpVVVWFg/jkk09W7969demll+qiiy7SKaeconnz5kUccj1w4EBt3Lgx6uO68zWKi4sb/frnXzLXuXNnde/evdH75ubmRnzuzjqKdntT5/kcTE1NjcaMGaOhQ4fqpz/9qQYNGqTs7Gy99NJLCoVC+uSTT8L3/cIXvqAxY8aorKxM3/rWt/T0009r48aNuu+++5p8jh07dqhv374NwrFPnz7q0KFD+HwgJ9o5QdF06tRJX/3qV8MvDampqVFJSYnKysr0ne98R8cee6y2bt2q9evXR/2X8+fjublr2Lp1q/7whz8c9HGnTJmiTz/9VL/4xS903nnn6cCBAyouLtZtt92m008/vZnfqXEvTXEv0WhMXV2dtm/fri984QsRtzf2fe3YsUN5eXkNbu/bt2/E5+5n/Jprron68paW/j5Gc+GFF+rpp5/WmjVrwv8BFE8HDhzQ+PHj9d577+nGG2/Ucccdpy5duujAgQP60pe+FPHz73z+96VDhw7q1atXg5/jz3rppZc0fvx4jR07Vr/4xS/CZ1CVl5fr9ttvDz+PG5A29Y587s/h8//x+1k7d+486Esdr7zySl144YXau3evXnzxRf3gBz/Q2WefrVdeeUW9evUKP1dzfr7jITs7u9lv7hDt56q1P29AW6FFItEihhYJZos0xfM8TZ8+Xb/+9a/14IMP6uyzz07Yc0nN7wnn879/n72tqW6ZM2eOysrKdN111+mUU05Rz5491a5dO02fPj3iOd5///3wz0I0W7du1Ycffhj17NbmtsSzzz6rnJwc7dy5U4sXL9Zvf/tbffe739W9994bfh6p9X3UXP369WtWtzT180e3AKmJwWEKqKqqUkFBQYN/abjIfu2113TKKafosssu01lnnRX++sHe4cq9y9cTTzwRvlqpKa05ByieysvLVVdXp9/97ncR666qqmr0/rNmzdLXvvY1vfzyy7rnnnt01FFHHTQ2e/Xqpb/97W8Ndp23bdumTz/9NPx757T292bAgAG67LLLNHv2bL3++us69thj1bt3b3Xq1Cl8TtLntXQNvXv31rBhw3T77bc3+vX8/Pzw/7/kkkt0ySWXqK6uTitXrtTNN9+ss846S//85z+b9TPjFBUVqWfPnnrqqadUWlra6FqfeuopHThwoMGfTWP37dWrl1566aUGt3/+QHL3e3TDDTfo3HPPbXRt7sybpp4vFt5/DvpO1Fl1r732ml555RUtWbJEU6dODd/e1EH/W7Zs0WGHHRb+/NNPP9WOHTvCw7bGPProo+rYsaOefvrpiPO3ysvLI+53yCGHSJLefffdqFcsuD+Hn//851Hfza+x//j6vM8G74knnqi+ffvqwgsv1M0336x77rkn/FzN/fluS9F+roLyz1XgYGiRSLSIoUWC2SLRuKHhAw88oPvvv18XXnhhQp7ns5rbE05jby7jbmuqW9xZgXfccUfE7du3b494h+xDDjlE7777bpNr7t27t3r16qU//elPjX69W7duTf56Z/jw4eE//9NPP10TJkzQ4sWLNW3aNBUXF8etj+KtqZ+/oPwzGEB8MThMAfn5+Xrttde0a9cude3aNXz7X//6V0n/vdInPz8/pv8onjBhgjp06KC333474S+JiCf3L6zP/seI53n6xS9+0ej9zznnHA0YMEBXX321nn/+ef3P//zPQf+ld9ppp+mxxx5TeXm5zjnnnPDtDz30UPjrLfHxxx8rIyMj4s/RcS+jcH+GZ511lu644w716tVLgwcPbtHzNeass87SsmXLdMQRRzT7JU1dunRRSUmJ9u3bp69+9at6/fXXY4r1zMxMfe9739P3v/993X333Q3ezXDbtm264YYblJeXF/GSt2jGjRunxx57TE899VTES4QeeeSRiPsNHTpUQ4YM0SuvvNIgJBPlV7/6lTp27KiioqKEPH5jP/+Smrxy5eGHH45Yz2OPPaZPP/1UY8eObfJ5OnTooPbt24dv++STT/SrX/0q4n7jx49X+/bttWjRIo0aNarRxzrxxBPVo0cPVVdXR7wErrW+9a1v6Ze//KV+8Ytf6Hvf+54GDhzYop9vAAdHi0SiRVqHFml7nufp29/+th544AHdd999CX8jN6e5PeG8/vrreuWVVyJervzII4+oW7du+uIXv9jk83y+jf74xz/q3//+t4488sjwbSUlJbrpppv03HPPRX057llnnaVHH31U9fX1OuGEE5r1fR5MRkaGysrKVFBQoB/84Adavnx5wvoIAGLF4DAFzJ49W1/96ld1+umn66qrrlLv3r314osvqrS0VAUFBS1+OeSgQYM0b948zZ07V//617/0la98RT179tTWrVv10ksvqUuXLhEvNwqK008/XZmZmfrGN76ha6+9Vnv27NGiRYv0wQcfNHr/9u3bKxQK6brrrlOXLl0avHNdYy666CKVlZVp6tSp2rhxo4477jj95S9/0R133KEzzjijyXNRmvKPf/xDEyZM0Ne//nWdcsopOvTQQ/XBBx/oj3/8oxYvXqyxY8dq9OjRkuzP/be//a1OPvlkXXXVVRo2bJgOHDigmpoaPfPMM7r66qtbFDPz5s1TRUWFRo8erVmzZmno0KHas2ePNm7cqGXLlunee+9Vv3799O1vf1udOnXSiSeeqEMPPVRbtmxRaWmpcnJyIl5S5s5nauqlaJKdT/fKK6+E/3fy5MnKycnR3//+d9199936+OOP9fTTTysnJ+eg38NFF12k//mf/9FFF12k22+/XUOGDNGyZcu0fPnyBve97777VFJSogkTJujiiy/WYYcdpp07d+qNN97Qyy+/HD5zKlZ33323qqurddppp6lfv37atm2b7r//fj3zzDO65ZZbIq7C2LhxowYPHqypU6dqyZIlB33sLVu26Iknnmhw+6BBgzR8+HAdccQRuv766+V5nnJzc/WHP/xBFRUVUR/vd7/7nTp06KDTTz89/K7Kw4cP1wUXXBD115x55pmaP3++vvnNb+qyyy7Tjh079OMf/7hBlA8aNEjf//739cMf/lCffPKJvvGNbygnJ0fV1dXavn27br31VnXt2lU///nPNXXqVO3cuVPnn3+++vTpo/fff1+vvPKK3n//fS1atOigvy+Nueuuu3TCCSfohz/8oX75y182++e7Me+8846OOOIITZ06Vffff/9Bn/uTTz7Riy++2OjXol05ACQrWiQSLUKLBKFFJGnNmjXh77u2tlae54Ubori4ODxcnTVrlu6//35deumlOu644yL+/ZWVlRXx8uxbbrlFt956q1asWNHkJqMT7d+Fp5xySrN7wsnPz9ekSZN0yy236NBDD9Wvf/1rVVRU6K677lLnzp2jruGss87SkiVLdPTRR2vYsGFau3at7r777gb/zp89e7aWLl2qs88+W9dff72OP/54ffLJJ3r++ed11llnady4cfr617+uhx9+WGeccYauvPJKHX/88erYsaPeffddrVixQmeffXbEML+5hgwZossuu0wLFy7UX/7yF5100kmt6qN58+Zp3rx5+vOf/6xTTjnloM9fU1PT6J/VIYccoiOOOCLm7wdACvHlLVkQd88995w3fvx4r2/fvl6nTp28o446yrv66qu97du3N/sxPv9Ohk55ebk3btw4r3v37l5WVpY3cOBA7/zzz/eeffbZ8H2aejdBSV4oFIq4zb3z1t133x1xe0vefa2x5/7DH/7gDR8+3MvOzvYOO+ww73vf+573//7f//MkeStWrGjwGBs3bvQkeTNmzGj0ORp7R9kdO3Z4M2bM8A499FCvQ4cO3sCBA70bbrjB27NnT8T9Gvv+o/nggw+82267zTv11FO9ww47zMvMzPS6dOnijRgxwrvtttu83bt3R9x/165d3g9+8ANv6NChXmZmppeTk+Mdd9xx3lVXXeVt2bKlWWtQI+8c+/7773uzZs3yBg8e7HXs2NHLzc31ioqKvLlz54bfkfLBBx/0xo0b5+Xl5XmZmZlefn6+d8EFFzR4F8revXt7X/rSl5r1/R84cMB7+OGHvbFjx3o9evTwMjMzvcGDB3vf+c53GryzoufZn8uxxx7b6GO9++673nnnned17drV69atm3feeed5q1evbvRd9l555RXvggsu8Pr06eN17NjR69u3r3fqqadGvLNitL8f0Tz11FPeSSed5B1yyCFehw4dvG7dunljxozxfvOb3zS476uvvupJ8q6//vqDPu7AgQOjvuvd1KlTPc/zvOrqau/000/3unXr5vXs2dP72te+5tXU1DT4s3bv6rd27Vpv4sSJ4d+rb3zjG97WrVsjnrexvwP/+7//6w0dOtTLysryDj/8cK+0tNS7//77G31Xv4ceesgrLi72srOzva5du3pf+MIXGvw5PP/8896ZZ57p5ebmeh07dvQOO+ww78wzzzzoPw+i/fPE+drXvuZ16NDBW79+ved5zfv59ryGfzfc87jf56Y09a7KksLvnNnUz1VTP99AENEitAgtEsnvFvG8/77beGMfn11DU30xcODAiMe8+uqrvYyMDO+NN95o8rnd36VoH+7vQXN7YuDAgd6ZZ57pPfHEE96xxx7rZWZmeoMGDfLmz58f8byNvavyBx984E2bNs3r06eP17lzZ++kk07yVq1a1ejfqw8++MC78sorvQEDBngdO3b0+vTp45155pnem2++Gb7P/v37vR//+Mfhv+Ndu3b1jj76aO/yyy/33nrrrSZ/X1x/vf/++w2+tnXrVq9r167euHHjwrc1p48ae1dl9zyN/fOmsd+vaB/f+ta3wveN9vN+sBYDkNwyPO8/B24BaeznP/+5Zs2apddee03HHnus38tJGdXV1Tr22GP19NNP68wzz/R7OYG1cOFCXXvttXr77bfb9Kwad8XA+++/3+AcKgBA26JFEoMWib/jjz9eAwcObNWVkC0xaNAgFRYW6umnn27T5wWAdMdLlZHW1q1bpw0bNmjevHk6++yzCfU4W7FihUaNGkWoH8SKFSs0a9YsXw64BgD4ixZJLFokvmpra/XKK6/owQcf9HspAIA2khZXHD799NO6+uqrdeDAAV133XXNOtAY6WHQoEHasmWLxowZo1/96lfq27ev30sC2gxXHAL+ok8g0SJAc3HFIQD4I+UHh59++qkKCgq0YsUKde/eXV/84hf1t7/9Tbm5uX4vDQAApCn6BAAAAMmgnd8LSLSXXnpJxx57rA477DB169ZNZ5xxRqPvZgYAANBW6BMAAAAkg8APDleuXKmJEycqPz9fGRkZKi8vb3CfhQsXavDgwcrOzlZRUZFWrVoV/tp7772nww47LPx5v3799O9//7stlg4AAFIUfQIAAIB0EPjBYV1dnYYPH6577rmn0a8vXbpUs2fP1ty5c7Vu3TqNGTNGJSUlqqmpkSQ19krsjIyMhK4ZAACkNvoEAAAA6SDw76pcUlKikpKSqF+fP3++pk2bFj5QfMGCBVq+fLkWLVqk0tJSHXbYYRE7+O+++65OOOGEqI+3d+9e7d27N/z5gQMHtHPnTvXq1YugBwAgCs/z9PHHHys/P1/t2gV+X7LV6BMAAIIv3foESITADw6bsm/fPq1du1bXX399xO3jx4/X6tWrJUnHH3+8XnvtNf373/9W9+7dtWzZMt10001RH7O0tFS33nprQtcNAECq2rRpk/r16+f3MnxFnwAAECz0CdByST043L59u+rr65WXlxdxe15enrZs2SJJ6tChg37yk59o3LhxOnDggK699lr16tUr6mPecMMNmjNnTvjzjz76SAMGDFC7836ojI7ZiflGAABIYkcdM1T1e3brn6VfV7du3fxeju/oEwAA/EefAPGR1IND5/Mv0fE8L+K2SZMmadKkSc16rKysLGVlZTV8jo7Zysjs1LqFAgCQYo4+9piIz3nZ7H/RJwAA+Kd9dpfw/6dPgJZL6hf59+7dW+3btw/v3jvbtm1rsMsPAADQFugTAAD89fmNTQAtl9SDw8zMTBUVFamioiLi9oqKCo0ePbpVj11WVqaCggIVFxe36nEAAEhVRHnj6BMAAPxDnwDxFfiXKu/atUvr168Pf75hwwZVVVUpNzdXAwYM0Jw5czRlyhSNHDlSo0aN0uLFi1VTU6MZM2a06nlDoZBCoZBqa2uVk5PT2m8DAICUku5RTp8AABA86d4nQCIEfnC4Zs0ajRs3Lvy5Oxh86tSpWrJkiSZPnqwdO3Zo3rx52rx5swoLC7Vs2TINHDjQryUDAJDSMnJ5V0L6BAAAAOkgw/M8z+9FBJnb0W//9bs5fBwAADW+m1+/p05v3DxJH330kbp37+7DqtILfQIAQCT6BEiMpD7jMJE4QwgAgIZ4CZC/6BMAABqiT4DEYXAYRSgUUnV1tSorK/1eCgAAgUCU+48+AQAgEn0CJBaDQwAAcFCcawgAAACkHwaHAADgoIYe2s3vJQAAAETgakMg8RgcRsEZQgAAGKI8OOgTAAAMfQK0DQaHUXCGEAAARHnQ0CcAAABoSwwOAQBAozjXEAAABBEbm0DbYXAIAAAaxbmGAAAgaBgaAm2LwSEAAGiAKAcAAEFDnwBtj8FhFBw+DgBIV0R5cNEnAAAAaEsMDqPg8HEAQDriXMNgo08AAOmKjU2ku3POOUc9e/bU+eefH3F7hw4dNGLECI0YMULTp09v9teaq0OLVwwAAFIO5xoCAICgYWgISLNmzdKll16qBx98MOL2Hj16qKqqqtFf09TXmosrDgEAgCSiHAAABA99Aphx48apW7e23+RncAgAAIhyAAAAIEFWrlypiRMnKj8/XxkZGSovL29wn4ULF2rw4MHKzs5WUVGRVq1a1azHrq2tVVFRkU466SQ9//zzzf5aczE4BAAAAAAAgcPGJlJFXV2dhg8frnvuuafRry9dulSzZ8/W3LlztW7dOo0ZM0YlJSWqqak56GNv3LhRa9eu1b333quLLrpItbW1zfpac3HGYRRlZWUqKytTfX2930sBACChiPLkQZ8AANIFfdL29uzZo3379vm9jKTgeZ4yMjIibsvKylJWVlaj9y8pKVFJSUnUx5s/f76mTZsWfgOTBQsWaPny5Vq0aJFKS0ubXEt+fr4kqbCwUAUFBfrnP/+pkSNHHvRrzcXgMIpQKKRQKKTa2lrl5OT4vRwAABKCKE8u9AkAIB3QJ21vz549GjxosLZs3eL3UpJC165dtWvXrojbbr75Zt1yyy0xP9a+ffu0du1aXX/99RG3jx8/XqtXr27y137wwQfq3LmzsrKy9O6776q6ulqHH374Qb8WCwaHAACkKaIcAAAAkg2vtmzdovXV69W9W3e/lxNotR/X6siCI7Vp0yZ17/7f36toVxsezPbt21VfX6+8vLyI2/Py8rRly38HuRMmTNDLL7+suro69evXT7///e+1f/9+XX755WrXrp0yMjL005/+VLm5uZKkN954I+rXYsHgEAAAAAAABAIbm/7q3q17xDAM0XXvHt/fq8+/9PnzL4devnx5o7/u1VdfbfT20aNHR/1aLHhzFAAA0hBRDgAAgoY+QTrq3bu32rdvH3F1oSRt27atwVWIfmBwCABAmiHKAQBA0NAnSFeZmZkqKipSRUVFxO0VFRUaPXq0T6v6L16qDABAGiHKAQAAgLa1a9curV+/Pvz5hg0bVFVVpdzcXA0YMEBz5szRlClTNHLkSI0aNUqLFy9WTU2NZsyY4eOqDYNDAAAAAADgGzY2kerWrFmjcePGhT+fM2eOJGnq1KlasmSJJk+erB07dmjevHnavHmzCgsLtWzZMg0cONCvJYcxOIyirKxMZWVlqq+v93spAADEBVGe/OgTAECqoU+QDsaOHSvP85q8z8yZMzVz5sw2WlHzccZhFKFQSNXV1aqsrPR7KQAAtBpRnhroEwBAKqFPgOBjcAgAQIojygEAAAC0BINDAAAAAADQptjYBJIDg0MAAFIYUQ4AAIKGPgGSB4NDAABSFFEOAACChj4BkguDQwAAUlBGbj+/lwAAAAAgyTE4BAAgBQ09tJvfSwAAAIjA1YZA8mFwCABAiiHKAQBA0NAnQHJicBhFWVmZCgoKVFxc7PdSAABoNqI8tdEnAIBkRJ8AyYvBYRShUEjV1dWqrKz0eykAADQL5xqmPvoEAAAAbYnBIQAAKYJzDQEAQNBwtSGQ3BgcAgCQAohyAAAQNPQJkPwYHAIAkOSIcgAAEDT0CZAaGBwCAJDEONcQAAAAQKIwOAQAIIlxriEAAAgarjYEUgeDQwAAkhRRDgAAgoY+AVILg0MAAJIQUQ4AAIKGPgFSD4NDAACSDOcaAgAAAGgLDA4BAEgynGsIAACChqsNgdTE4BAAgCRClAMAgKChT4DUxeAQAIAkQZQDAICgoU+A1MbgEACAJMC5hgAAAADaGoPDKMrKylRQUKDi4mK/lwIAAOcaQhJ9AgAIFq42BFIfg8MoQqGQqqurVVlZ6fdSAABpjiiHQ58AAIKCPgHSA4NDAAACjCgHAABBQ58A6YPBIQAAAcW5hgAAAAD8xOAQAICA4lxDAAAQNFxtCKQXBocAAAQQUQ4AAIKGPgHSD4NDAAAChigHAABBQ58A6YnBIQAAAcK5hgAAAACCgsEhAAABwrmGAAAgaLjaEEhfDA4BAAgIohwAAAQNfQKkNwaHAAAEAFEOAACChj4BwOAQAACfca4hAAAAgCBicAgAgM841xAAAAQNVxsCkBgcAgDgK6IcAAAEDX0CwGFwCACAT4hyAAAQNPQJgM9icAgAgA841xAAAABA0DE4BADAB5xrCAAAgoarDQF8XloMDs855xz17NlT559/vt9LAQCAKIck+gQAECz0CYDGpMXgcNasWXrooYf8XgYAALxEGWH0CQAgKBgaAogmLQaH48aNU7duvCQMAOCvjNx+vEQZYfQJAAAAgs73weHKlSs1ceJE5efnKyMjQ+Xl5Q3us3DhQg0ePFjZ2dkqKirSqlWr2n6hAAC0EkPD5EGfAADSBVcbAmiK74PDuro6DR8+XPfcc0+jX1+6dKlmz56tuXPnat26dRozZoxKSkpUU1MTvk9RUZEKCwsbfLz33ntt9W0AANAkojy50CcAgHRAnwA4mA5+L6CkpEQlJSVRvz5//nxNmzZN06dPlyQtWLBAy5cv16JFi1RaWipJWrt2bdzWs3fvXu3duzf8eW1tbdweGwCQnjjXMPnQJwCAVMfQEEBz+H7FYVP27duntWvXavz48RG3jx8/XqtXr07Ic5aWlionJyf80b9//4Q8DwAgPXCuYeqhTwAAAJAuAj043L59u+rr65WXlxdxe15enrZs2dLsx5kwYYK+9rWvadmyZerXr58qKyuj3veGG27QRx99FP7YtGlTi9cPAABDw9RDnwAAkh1XGwJoLt9fqtwcGRkZEZ97ntfgtqYsX7682ffNyspSVlZWs+8PAEA0RHlqo08AAMmIPgEQi0APDnv37q327ds32L3ftm1bg11+AACChHMNUxd9AgBIVgwNcTAffrxH9cr0exmB9vHHe/xeQpsK9EuVMzMzVVRUpIqKiojbKyoqNHr06IQ+d1lZmQoKClRcXJzQ5wEApB7ONUxt9AkAAADShe9XHO7atUvr168Pf75hwwZVVVUpNzdXAwYM0Jw5czRlyhSNHDlSo0aN0uLFi1VTU6MZM2YkdF2hUEihUEi1tbXKyclJ6HMBAFILQ8PkR58AAFINVxsCaAnfB4dr1qzRuHHjwp/PmTNHkjR16lQtWbJEkydP1o4dOzRv3jxt3rxZhYWFWrZsmQYOHOjXkgEAiIooTw30CQAgldAnAFrK98Hh2LFj5Xlek/eZOXOmZs6c2UYrAgCgZTjXMHXQJwCAVMHQEEBrBPqMQz9xhhAAIBaca4i2QJ8AAACgLTE4jCIUCqm6ulqVlZV+LwUAkAQYGqIt0CcAgFhwtSGA1mJwCABAKxHlAAAgaOgTAPHA4BAAgFYgys1xh3TxewkAAOA/6BNDnwCtx+AwCs4QAgAcDFFuRvTp6vcS0gZ9AgBA89AnQHwwOIyCM4QAADg4orxt0ScAgINhYxNAPDE4BACgBYhyAAAQNPSJYWMTiB8GhwAAxIgoN0Q5AADBQZ8Y+gSILwaHAADEICO3n99LCASiHAAABA19AsQfg8MoOHwcANCYoYd283sJviPK/UOfAAAaw9WGABKFwWEUHD4OAPg8ohx+o08AAJ9Hnxg2NoHEYHAIAEAzEOWGKAcAIDjoE0OfAInD4BAAgIPgXENDlAMAgKChT4DEYnAIAMBBcK4hUQ4AQNBwtSGAtsDgEACAJhDlAAAgaOgTw8YmkHgMDqPgXQsBAES5IcqDgz4BAMDQJ0DbYHAYBe9aCADpjXMNDVEeLPQJAICNTQBticEhAACN4FxDhoYAAAQNQ0NDowBth8EhAACfQ5QDAICgoU8MQ0OgbTE4BADgM4hyQ5QDAICgoU+AtsfgEACA/+BcQ0OUAwAQLGxsAvALg0MAAP6Dcw0BAEDQMDQ0bGwC/mBwCACAiHKHKAcAIDjoE0OfAP5hcBhFWVmZCgoKVFxc7PdSAAAJRpQbojz46BMAQLqhTwB/MTiMIhQKqbq6WpWVlX4vBQCAhCPKkwN9AgDpg41NAEHA4BAAkNaIcgAAEDT0iWFjE/Afg0MAQNoiyg1RDgBAcNAnhj4BgoHBIQAgLRHlhigHAABBQ58AwcHgEACANEWUAwAQLGxsAggaBocAgLRDlAMAgKChTwwbm0CwMDgEAKQVotwQ5QAABAd9YugTIHgYHAIA0gZRbohyAAAQNPQJEEwMDqMoKytTQUGBiouL/V4KAABxQ5QnN/oEAFIPG5sAgozBYRShUEjV1dWqrKz0eykAgDggypEK6BMASC30iWFjEwguBocAgJRHlBuiHACA4KBPDH0CBBuDQwBASiPKDVEOAACChj4Bgo/BIQAAKY4oBwAgWNjYBJAsGBwCAFIWUQ4AAIKGPjFsbALJgcEhACAlEeWGKAcAIDjoE0OfAMmDwSEAIOVk5PbzewmBQJQDAICgoU+A5MLgEACQcoYe2s3vJfiOKAcAIFi42hBAMmJwCABIKUQ5AAAIGvrEsLEJJB8GhwCAlEGUG6IcAIDgoE8MfQIkJwaHAICUwLmGhigHAABBQ58AyYvBIQAgJXCuIVEOAEDQcLUhgGTH4BAAkPSIcgAAEDT0iWFjE4iPc845Rz179tT555/frNv/8Y9/aMSIEeGPTp06qby8PObnZXAYRVlZmQoKClRcXOz3UgAATSDKDVGeHugTAEgO9ImhT4D4mTVrlh566KFm3z506FBVVVWpqqpKf/nLX9SlSxedfvrpMT8vg8MoQqGQqqurVVlZ6fdSAABRcK6hIcrTB30CAEgW9AkQX+PGjVO3bg2PZ4p2+2c99dRTOu2009SlS5eYn5fBIQAgaXGuIVEOAEDQcLUhgM9buXKlJk6cqPz8fGVkZDT6kuGFCxdq8ODBys7OVlFRkVatWhW353/sscc0efLkFv1aBocAgKRElAMAgKChTwwbm0Ckuro6DR8+XPfcc0+jX1+6dKlmz56tuXPnat26dRozZoxKSkpUU1PT6ueura3VCy+8oDPOOKNFv75Dq1cAAEAbI8oNUQ4AQHDQJ4Y+Qbqora2N+DwrK0tZWVmN3rekpEQlJSVRH2v+/PmaNm2apk+fLklasGCBli9frkWLFqm0tLRV63zyySc1YcIEZWdnt+jXMzgEACQVzjU0RDkAAAga+iT5vf/hJ/rkU0ZFTdm16xNJUv/+/SNuv/nmm3XLLbfE/Hj79u3T2rVrdf3110fcPn78eK1evbrF63Qee+wxXXbZZS3+9fw0AACSCucaEuUAAAQNVxsC6WfTpk3q3r17+PNoVxsezPbt21VfX6+8vLyI2/Py8rRly5bw5xMmTNDLL7+suro69evXT7///e9VXFwc9XZJ+uijj/TSSy/pt7/9bYvWJjE4BAAkEaIcAAAEDX1i2NhEuunevXvE4LC1MjIyIj73PC/ituXLlzf666LdLkk5OTnaunVrq9bFm6MAAJICUW6IcgAAgoM+MfQJ0HK9e/dW+/btI64ulKRt27Y1uArRDwwOAQCBx7mGhigHAABBQ58ArZOZmamioiJVVFRE3F5RUaHRo0f7tKr/4qXKAIDA41xDohwAgKDhakMAzbVr1y6tX78+/PmGDRtUVVWl3NxcDRgwQHPmzNGUKVM0cuRIjRo1SosXL1ZNTY1mzJjh46oNg0MAQKAR5QAAIGjoE8PGJtA8a9as0bhx48Kfz5kzR5I0depULVmyRJMnT9aOHTs0b948bd68WYWFhVq2bJkGDhzo15LDGBwCAAKLKDdEOQAAwUGfGPoEaL6xY8fK87wm7zNz5kzNnDmzjVbUfJxxCAAIJM41NEQ5AAAIGvoESB8MDgEAgcS5hkQ5AABBw9WGANINg0MAQOAQ5QAAIGjoE8PGJpBeGBwCAAKFKDdEOQAAwUGfGPoESD8pPzjctGmTxo4dq4KCAg0bNkyPP/6430sCAETBuYaGKE999AkAINnQJ0B6Svl3Ve7QoYMWLFigESNGaNu2bfriF7+oM844Q126dPF7aQCAz+FcQ6I8XdAnAJA8uNoQQDpL+cHhoYceqkMPPVSS1KdPH+Xm5mrnzp2EOQAEDFGOdEKfAEByoE8MG5tA+vL9pcorV67UxIkTlZ+fr4yMDJWXlze4z8KFCzV48GBlZ2erqKhIq1atatFzrVmzRgcOHFD//v1buWoAQDwR5YYoDw76BABAnxj6BEhvvg8O6+rqNHz4cN1zzz2Nfn3p0qWaPXu25s6dq3Xr1mnMmDEqKSlRTU1N+D5FRUUqLCxs8PHee++F77Njxw5ddNFFWrx4ccK/JwBA83GuoSHKg4U+AQCAPgEQgJcql5SUqKSkJOrX58+fr2nTpmn69OmSpAULFmj58uVatGiRSktLJUlr165t8jn27t2rc845RzfccINGjx590Pvu3bs3/HltbW1zvxUAQAtwriFRHkT0CQCkN642BADj+xWHTdm3b5/Wrl2r8ePHR9w+fvx4rV69ulmP4XmeLr74Yp166qmaMmXKQe9fWlqqnJyc8AcvGwKAxCHKkYzoEwBIbfSJYWMTgBTwweH27dtVX1+vvLy8iNvz8vK0ZcuWZj3GCy+8oKVLl6q8vFwjRozQiBEj9Oqrr0a9/w033KCPPvoo/LFp06ZWfQ8AgMYR5YYoTz70CQCkLvrE0CcAHN9fqtwcGRkZEZ97ntfgtmhOOukkHThwoNnPlZWVpaysrJjWBwCIDecaGqI8udEnAIBURJ8A+KxAX3HYu3dvtW/fvsHu/bZt2xrs8gMAkgfnGhLlyYw+AYDUxNWGANBQoAeHmZmZKioqUkVFRcTtFRUVBz1EvLXKyspUUFCg4uLihD4PAKQbohzJjj4BgNRDnxg2NgF8nu8vVd61a5fWr18f/nzDhg2qqqpSbm6uBgwYoDlz5mjKlCkaOXKkRo0apcWLF6umpkYzZsxI6LpCoZBCoZBqa2uVk5OT0OcCgHTBS5QNUR589AkApA+GhoY+AdAY3weHa9as0bhx48Kfz5kzR5I0depULVmyRJMnT9aOHTs0b948bd68WYWFhVq2bJkGDhzo15IBAC2QkduPlyiLKE8W9AkAIJ3QJwCi8X1wOHbsWHme1+R9Zs6cqZkzZ7bRigAAicDQkChPJvQJAKQHrjYEgKYF+oxDP3GGEADED1EOxAd9AgDxQ58YNjYBNIXBYRShUEjV1dWqrKz0eykAkNQ419AQ5YgH+gQA4oOhoaFPABwMg0MAQMJwrqEhygEAQNDQJwCag8EhACBhGBoS5QAABA1XGwJA8zE4jIIzhACgdYhyIP7oEwBoHfrEsLEJoLkYHEbBGUIA0HKca2iIcsQbfQIALcfQ0NAnAGLB4BAAEFeca2iIcgAAEDT0CYBYMTgEAMQVQ0OiHACAoOFqQwBoGQaHAIC4IcoBAEDQ0CeGjU0ALcHgMAoOHweA2HCuoSHKkUj0CQDEhqGhoU8AtBSDwyg4fBwAmo9zDQ1RjkSjTwAAsaJPALQGg0MAQKsxNCTKAQAIGq42BIDWY3AIAGgVohwAAAQNfWLY2ATQWgwOAQAtxrmGhigHACA4GBoa+gRAPHTwewEAgORElBui3BT07OL3EgAAwH/QJ4Y+AVqPKw6j4F0LAQAHQ5SbwlyivK3QJwDQNDY24dAnQHwwOIyCdy0EgOiIcjhEeduiTwAgOvrEsLEJIJ4YHAIAYkKUG6IcAIDgoE8MfWLY2ATih8EhAKDZeDMUQ5QbohwAgOCgTwx9AsQXg0MAQLMNPbSb30vwHVFuiHIAQFBwtSEc+gSIPwaHAIBmIcrhEOUAgKCgTwwbmwAShcEhAOCgiHJDlAMAEBz0iaFPDBubQGIwOAQANIlzDQ1RbohyAACCgz4x9AmQOAwOoygrK1NBQYGKi4v9XgoA+IpzDYlyhyj3H30CAIarDeHQJ0BiMTiMIhQKqbq6WpWVlX4vBQB8Q5TDIcqDgT4BAPrEYWMTQFtgcAgAaBRRbohyAAAQNPSJYWMTSDwGhwCABjjX0BDlhigHAAQFG5tw6BOgbTA4BAA0wLmGDA0dohwAEBQMDQ2NAqAtMTgEAEQgyuEwNAQABAV9YhgaGhoFaDsMDgEAYUS5IcoBAEDQ0CeGoSHQtjr4vQAAQDBwrqEhyg1RDgAICjY24dAnibfxw0/UeT+joqbsrvvE7yW0Ka44BABI4lxD/BdRDgAICoaGho1NAH5hcBhFWVmZCgoKVFxc7PdSACDhiHJDlDM0DDr6BEA6oU8MfWJoFMAfDA6jCIVCqq6uVmVlpd9LAYCEIsoNUY5kQJ8AQHqhTwxDQ8A/DA4BAGmPKDdEOQAgKNjYhEOfAP5icAgAaYwoh0OUAwCCgj4xbGwCCAIGhwCQpohyQ5QDABAc9ImhTwwbm4D/GBwCQBoiyg1RbohyAACCgz4x9AkQDAwOAQBpiSg3RDkAICjY2IRDnwDBweAQANIMUQ6HKAcABAV9YtjYBBA0DA4BII0Q5YYoBwAgOOgTQ58YNjaBYGFwCABpgig3RLkhygEACA76xNAnQPAwOAQApA2i3BDlAICgYGMTDn0CBBODQwBIA0Q5HKIcABAU9IlhYxNAkDE4BIAUR5QbohwAgOCgTwx9YtjYBIKLwSEApDCi3BDlhigHACA46BNDnwDBxuAwirKyMhUUFKi4uNjvpQAAWoEoN0R5aqBPAKQCNjbh0CdA8DE4jCIUCqm6ulqVlZV+LwUAWoQoh0OUpw76BECyo08MG5sAkgWDQwBIQUS5IcoBAAgO+sTQJ4aNTSA5MDgEgBRDlBui3BDlAAAEB31i6BMgeTA4BACkHKLcEOUAgKBgYxMOfQIkFwaHAJBCiHI4RDkAICjoE8PGJoBkxOAQAFIEUW6IcgAAgoM+MfSJYWMTSD4MDgEgBWTk9vN7CYFAlBuiHACA4KBPDH0CJCcGhwCQAoYe2s3vJfiOKDdEOQAgKLjaEA59AiQvBocAkOSIcjhEOQAgKOgTw8YmgGTH4BAAkhhRbohyAACCgz4x9IlhYxNIbgwOASBJca6hIcoNUQ4AQHDQJ4Y+AZIfg0MASFKca0iUO0Q5ACAouNoQDn0CpAYGhwCQhIhyOEQ5ACAo6BPDxiaAVMLgEACSDFFuiHIAAIKDPjH0iWFjE0gdDA4BIIlwrqEhyg1RDgBAcNAnhj4BUguDQwBIIpxrSJQ7RDkAICi42hAOfQKknpQfHH788ccqLi7WiBEjdNxxx+kXv/iF30sCgBYhyuEQ5cmPPgGQKugTw8YmgFTVwe8FJFrnzp31/PPPq3Pnztq9e7cKCwt17rnnqlevXn4vDQCajSg3RDlSBX0CIBXQJ4Y+MWxsAqkp5a84bN++vTp37ixJ2rNnj+rr6+V5ns+rAoDm41xDQ5Qbojw10CcAkBroE0OfAKnL98HhypUrNXHiROXn5ysjI0Pl5eUN7rNw4UINHjxY2dnZKioq0qpVq2J6jg8//FDDhw9Xv379dO2116p3795xWj0AJB7nGhLlDlHedugTAGgaVxvCoU+A1Ob74LCurk7Dhw/XPffc0+jXly5dqtmzZ2vu3Llat26dxowZo5KSEtXU1ITvU1RUpMLCwgYf7733niSpR48eeuWVV7RhwwY98sgj2rp1a5t8bwDQWkQ5HKK8bdEnABAdfWLY2ASQDnw/47CkpEQlJSVRvz5//nxNmzZN06dPlyQtWLBAy5cv16JFi1RaWipJWrt2bbOeKy8vT8OGDdPKlSv1ta99rdH77N27V3v37g1/Xltb29xvBQDiiig3RDn8QJ8AQOPoE0OfGDY2gdTn+xWHTdm3b5/Wrl2r8ePHR9w+fvx4rV69ulmPsXXr1nBc19bWauXKlRo6dGjU+5eWlionJyf80b9//5Z/AwDQQpxraIhyQ5QHC30CAOmNPjH0CZAeAj043L59u+rr65WXlxdxe15enrZs2dKsx3j33Xd18skna/jw4TrppJN0xRVXaNiwYVHvf8MNN+ijjz4Kf2zatKlV3wMAtATnGhLlDlEePPQJgHTF1YZw6BMgffj+UuXmyMjIiPjc87wGt0VTVFSkqqqqZj9XVlaWsrKyYlkeAMQVUQ6HKA82+gRAOqFPDBubANJNoK847N27t9q3b99g937btm0NdvkBIBUQ5YYoR5DRJwDSDX1i6BPDxiaQXgI9OMzMzFRRUZEqKioibq+oqNDo0aMT+txlZWUqKChQcXFxQp8HABzONTREuSHKg4s+AYD0Q58Y+gRIP76/VHnXrl1av359+PMNGzaoqqpKubm5GjBggObMmaMpU6Zo5MiRGjVqlBYvXqyamhrNmDEjoesKhUIKhUKqra1VTk5OQp8LACTONZSIcoco9x99AgCGqw3h0CdAevJ9cLhmzRqNGzcu/PmcOXMkSVOnTtWSJUs0efJk7dixQ/PmzdPmzZtVWFioZcuWaeDAgX4tGQDijiiHQ5QHA30CAPSJw8YmgHTm++Bw7Nix8jyvyfvMnDlTM2fObKMVAUDbIsoNUY4goU8ApDv6xNAnho1NIH0F+oxDP3GGEIC2wLmGhig3RDkOhj4BgLZDnxj6BEhvDA6jCIVCqq6uVmVlpd9LAZDCONeQKHeIcjQHfQKgLXC1IRz6BACDQwDwCVEOhygHAAQFfWLY2AQAw+AQAHxAlBuiHACA4KBPDH1i2NgEguMf//iHRowYEf7o1KmTysvLJUk//vGPdeyxx6qwsFC//vWv4/7cvr85SlCVlZWprKxM9fX1fi8FQIrhXENDlBuiHLGgTwAgsegTQ58AwTJ06FBVVVVJknbt2qVBgwbp9NNP16uvvqpHHnlEa9eulSSddtppOuuss9SjR4+4PTdXHEbBGUIAEoVzDYlyhyhHrOgTAInC1YZw6BMg2J566imddtpp6tKli9544w2NHj1a2dnZys7O1ogRI/SnP/0prs/H4BAA2hBRDocoBwAEBX1i2NgEkCgrV67UxIkTlZ+fr4yMjPDLjD9r4cKFGjx4sLKzs1VUVKRVq1Y1+liPPfaYJk+eLEkqLCzUihUr9OGHH+rDDz/Uc889p3//+99xXTuDQwBoI7xE2RDlAAAEB0NDQ58YNjaBxKirq9Pw4cN1zz33NPr1pUuXavbs2Zo7d67WrVunMWPGqKSkRDU1NRH3q62t1QsvvKAzzjhDklRQUKBZs2bp1FNP1TnnnKPi4mJ16BDfUwkZHAJAG8jI7cdLlEWUO0Q5AADBQZ8Y+gSITW1tbcTH3r17o963pKREt912m84999xGvz5//nxNmzZN06dP1zHHHKMFCxaof//+WrRoUcT9nnzySU2YMEHZ2dnh2y6//HK9/PLLWrFihTIzM3XkkUfG5xv8D94cJQoOHwcQTwwNiXKHKEdr0CcA4omrDeHQJ3De+miPsvczKmrKnt17JEn9+/ePuP3mm2/WLbfcEvPj7du3T2vXrtX1118fcfv48eO1evXqiNsee+wxXXbZZRG3bdu2TX369NE//vEPvfTSS7r33ntjXkNT+GmIIhQKKRQKqba2Vjk5OX4vB0ASI8rhEOVoLfoEQLzQJ4aNTQAttWnTJnXv3j38eVZWVoseZ/v27aqvr1deXl7E7Xl5edqyZUv4848++kgvvfSSfvvb30bc76tf/ao+/PBDdenSRQ888EDcX6rM4BAAEohzDQ1RDgBAcDA0NPSJYWMTaJnu3btHDA5bKyMjI+Jzz/MibsvJydHWrVsb/LrPX5UYb5xxCAAJwrmGhig3RDkAAMFBnxj6BPBf79691b59+4irCyV7CfLnr0L0A4NDAEgQhoZEuUOUAwCCgqsN4dAnQDBkZmaqqKhIFRUVEbdXVFRo9OjRPq3qv3ipMgAkAFEOhygHAAQFfWLY2ATQ1nbt2qX169eHP9+wYYOqqqqUm5urAQMGaM6cOZoyZYpGjhypUaNGafHixaqpqdGMGTN8XLVhcBgF71oIoKU419AQ5UD80ScAWoqhoaFPDBubQNtas2aNxo0bF/58zpw5kqSpU6dqyZIlmjx5snbs2KF58+Zp8+bNKiws1LJlyzRw4EC/lhzG4DAK3rUQQEtwrqEhyg1RjnijTwCg5egTQ58AbW/s2LHyPK/J+8ycOVMzZ85soxU1H2ccAkAcMTQkyh2iHAAQFFxtCIc+ARArBocAECdEORyiHAAQFPSJYWMTAFqGwSEAxAHnGhqiHACA4GBoaOgTw8YmgJZo1hmHPXv2VEZGRrMecOfOna1aEAAkG841NES5IcrbDn0CADgY+sTQJwBaqlmDwwULFoT//44dO3TbbbdpwoQJGjVqlCTpr3/9q5YvX64bb7wxIYsEgCBjaEiUO0R526JPACA6rjaEQ58AaI1mDQ6nTp0a/v/nnXee5s2bpyuuuCJ826xZs3TPPffo2Wef1VVXXRX/VQJAQBHlcIjytkefAEDj6BPDxiYAtF7MZxwuX75cX/nKVxrcPmHCBD377LNxWVQQlJWVqaCgQMXFxX4vBUBAca6hIcoRBPQJABiGhoY+MWxsAmitmAeHvXr10u9///sGt5eXl6tXr15xWVQQhEIhVVdXq7Ky0u+lAAggzjU0RLkhyv1HnwAAHPrE0CcA4qFZL1X+rFtvvVXTpk3T//3f/4XPEHrxxRf1pz/9Sb/85S/jvkAACCKGhkS5Q5SbITnZvj4/fQIAXG2I/6JPjN99AqSCmAeHF198sY455hj97Gc/0+9+9zt5nqeCggK98MILOuGEExKxRgAIFKIcDlFuhvbopN11H/u6BvoEQLqjTwwbm3CC0CdAKohpcLh//35ddtlluvHGG/Xwww8nak0AEFhEuSHK4Qzt0cnvJdAnANIefWLoE8PGJoB4iumMw44dOzZ6fhAApAPeDMUQ5YYoDw76BABAnxj6xARhYxNIFTG/Oco555yj8vLyBCwFAIKNcw2JcocoN0GKcvoEQLriakM49IkJUp8AqSDmMw6PPPJI/fCHP9Tq1atVVFSkLl0i/+E0a9asuC0OAIKCKIdDlJugRTl9AiAd0SeGjU04QesTIBXEPDj85S9/qR49emjt2rVau3ZtxNcyMjIIcwAphyg3RDmcIEY5fQIg3dAnhj4xbGwCSJSYB4cbNmxIxDoCp6ysTGVlZaqvr/d7KQB8xLmGhig3RHlw0ScAkH7oE0OfmCBubAKpIOYzDj/L8zx5nhevtQRKKBRSdXW1Kisr/V4KAB9xriFR7hDlJhminD4BkOq42hAOfWKSoU+AZNWiweFDDz2k4447Tp06dVKnTp00bNgw/epXv4r32gDAV0Q5HKLcBD3K6RMA6YA+MWxswgl6nwDJLuaXKs+fP1833nijrrjiCp144onyPE8vvPCCZsyYoe3bt+uqq65KxDoBoE0R5YYohxP0KKdPACB90CeGjU0AbSHmweHPf/5zLVq0SBdddFH4trPPPlvHHnusbrnlFsIcQNLjXENDlBuiPDnQJwDSARubcOgTE/SNTSAVxPxS5c2bN2v06NENbh89erQ2b94cl0UBgJ8415ChoUOUm2SIcvoEQKpjaGhoFDjJ0CdAKoh5cHjkkUfqsccea3D70qVLNWTIkLgsCgD8QpTDYWhokiXK6RMAqYw+MQwNDY0CoC3F/FLlW2+9VZMnT9bKlSt14oknKiMjQ3/5y1/05z//udFgB4BkQZQbohxOsgwNJfoEAFIdfWIYGppkahQg2cV8xeF5552nv/3tb+rdu7fKy8v1u9/9Tr1799ZLL72kc845JxFrBICE41xDQ5Qbojz50CcAUhUbm3DoE8PQEGhbMV9xKElFRUX69a9/He+1AIBvONcQDlFukjHK6RMAqYahoWFjE04y9gmQ7Fo0OKyvr1d5ebneeOMNZWRkqKCgQJMmTVL79u3jvT4ASDii3BDlDA2dZI1y+gRAKqFPDH1iaBQAfol5cLh+/XqdeeaZevfddzV06FB5nqd//vOf6t+/v/74xz/qiCOOSMQ6ASAhiHJDlMNJ1qEhfQIAqYc+MQwNTbI2CpDsYj7jcNasWTr88MO1adMmvfzyy1q3bp1qamo0ePBgzZo1KxFrBAAkEFFuiPLkRp8ASCVsbMKhTwxDQ8A/MV9x+Pzzz+vFF19Ubm5u+LZevXrpzjvv1IknnhjXxQFAIhHlcIhyk8xRTp8ASBX0iWFjE04y9wmQCmK+4jArK0sff/xxg9t37dqlzMzMuCwqCMrKylRQUKDi4mK/lwIgAYhyQ5TDSfYop08ApAL6xNAnho1NAEEQ8+DwrLPO0mWXXaa//e1v8jxPnufpxRdf1IwZMzRp0qRErNEXoVBI1dXVqqys9HspAOKMKDdEuSHKUwN9AgCpgT4x9IlJ9o1NIBXEPDj82c9+piOOOEKjRo1Sdna2srOzdeKJJ+rII4/UT3/600SsEQAQZ0S5IcpNKkQ5fQIg2bGxCYc+ManQJ0AqiPmMwx49eujJJ5/U+vXr9cYbb8jzPBUUFOjII49MxPoAIK6IcjhEuUmVKKdPACQz+sSwsQknVfoESAUxDw6dI488khgHkFSIckOUw0nFKKdPACQb+sTQJ4aNTQBBE/NLlc8//3zdeeedDW6/++679bWvfS0uiwKAeCPKDVFuiPLUQ58AQPKiTwx9YlJxYxNIZjEPDp9//nmdeeaZDW7/yle+opUrV8ZlUQCA+CPKDVFuUi3K6RMAyYiNTTj0iUm1PgFSQcyDw127dikzM7PB7R07dlRtbW1cFgUA8USUwyHKTSpGOX0CINnQJ4aNTTip2CdAKoh5cFhYWKilS5c2uP3RRx9VQUFBXBYFAPFClBuiHE6qRjl9AiCZ0CeGPjFsbAIIspjfHOXGG2/Ueeedp7ffflunnnqqJOnPf/6zfvOb3+jxxx+P+wIBoKWIckOUG6I8tdEnAJBc6BNDn5hU3dgEUkHMg8NJkyapvLxcd9xxh5544gl16tRJw4YN07PPPqtTTjklEWsEALQQUW6IcpPKUU6fAEgWbGzCoU9MKvcJkApiHhxK0plnntnoAeQAEBREORyi3KRDlNMnAIKOPjFsbMJJhz4Bkl3MZxx+1syZM7V9+/Z4rQUA4oIoN0Q5nHSLcvoEQBDRJ4Y+MWxsAkgWrRoc/vrXv+adCgEEClFuiHJDlKcn+gQAgok+MfSJSbeNTSBZtWpw6HlevNYBAIgTotwQ5SYdo5w+ARA0bGzCoU9MOvYJkKxaNTgEgCAhyuEQ5YYoBwD/0SeGjU049AmQXGJ+c5S6ujp16WL/Qfbxxx/HfUEA0BJEuSHK4aRblNMnAIKIPjH0iWFjE0AyivmKw7y8PF166aX6y1/+koj1JMzu3bs1cOBAXXPNNX4vBUCcZeT283sJgUCUG6I8PdEnABBM9ImhT0y6bWwCqSDmweFvfvMbffTRRzrttNN01FFH6c4779R7772XiLXF1e23364TTjjB72UASIChh3bzewm+I8oNUW7SMcrpEwBBw9WGcOgTk459AqSCmF+qPHHiRE2cOFE7duzQQw89pCVLlujGG2/UhAkTdOmll2rSpEnq0CHmh02ot956S2+++aYmTpyo1157ze/lAIgjohwOUW7SNcrpEwBBQp8YNjbhpGufJKPqD+qUuSfD72UE2r5P6vxeQptq8Zuj9OrVS1dddZVeeeUVzZ8/X88++6zOP/985efn66abbtLu3bub9TgrV67UxIkTlZ+fr4yMDJWXlze4z8KFCzV48GBlZ2erqKhIq1atimmt11xzjUpLS2P6NQCCjyg3RDkcopw+AeA/+sTQJ4aNTQDJrsVb71u2bNFDDz2kBx54QDU1NTr//PM1bdo0vffee7rzzjv14osv6plnnjno49TV1Wn48OG65JJLdN555zX4+tKlSzV79mwtXLhQJ554ou677z6VlJSourpaAwYMkCQVFRVp7969DX7tM888o8rKSh111FE66qijtHr16pZ+uwAChnMNDVFuiHI49AkA+I8+MfSJYWMTSG4xDw5/97vf6YEHHtDy5ctVUFCgUCikCy+8UD169AjfZ8SIEfrCF77QrMcrKSlRSUlJ1K/Pnz9f06ZN0/Tp0yVJCxYs0PLly7Vo0aLwLv3atWuj/voXX3xRjz76qB5//HHt2rVL+/fvV/fu3XXTTTc1ev+9e/dGRH5tbW2zvg8AbYtzDYlyhyg36R7l9AmAIOBqQzj0iUn3PgFSQcwvVb7kkkuUn5+vF154QVVVVbriiisiolySDj/8cM2dO7fVi9u3b5/Wrl2r8ePHR9w+fvz4Zu/Ol5aWatOmTdq4caN+/OMf69vf/nbUKHf3z8nJCX/079+/Vd8DgPgjyuEQ5YYop08A+I8+MWxswqFPgNQQ8xWHmzdvVufOnZu8T6dOnXTzzTe3eFHO9u3bVV9fr7y8vIjb8/LytGXLllY/fmNuuOEGzZkzJ/x5bW0tcQ4ECFFuiHI4RLmhTwD4iT4x9IlhYxNAKol5cHiwKE+EjIzId/TxPK/Bbc1x8cUXH/Q+WVlZysrKivmxASQe5xoaotwQ5fgs+gQA/EWfGPrEsLEJpI4Wv6tyW+jdu7fat2/fYPd+27ZtDXb5AaQ+zjUkyh2i3BDl/qBPAHwWVxvCoU8MfQKklkAPDjMzM1VUVKSKioqI2ysqKjR69OiEPndZWZkKCgpUXFyc0OcB0DxEORyi3BDl/qFPADj0iWFjEw59AqSemF+qHG+7du3S+vXrw59v2LBBVVVVys3N1YABAzRnzhxNmTJFI0eO1KhRo7R48WLV1NRoxowZCV1XKBRSKBRSbW2tcnJyEvpcAJpGlBuiHA5Rnnj0CYCDoU8MfWLY2ASQqlo8OFy/fr3efvttnXzyyerUqVOLz/VZs2aNxo0bF/7cHfw9depULVmyRJMnT9aOHTs0b948bd68WYWFhVq2bJkGDhzY0qUDSCKca2iIckOU42DoEwBoO/SJoU8MG5tAaop5cLhjxw5NnjxZzz33nDIyMvTWW2/p8MMP1/Tp09WjRw/95Cc/ienxxo4dK8/zmrzPzJkzNXPmzFiXCiAFcK4hUe4Q5YYobxx9AqAtcbUhHPrE0CdA6or5jMOrrrpKHTp0UE1NTcQ7GE6ePFl/+tOf4ro4P3GGEOA/ohwOUW6I8ujoEwBthT4xbGzCoU+A1BbzFYfPPPOMli9frn79Il8+OGTIEL3zzjtxW5jfOEMI8BdRbohyOER50+gTAG2BPjH0iWFjE0A6iPmKw7q6uoidfGf79u3KysqKy6IApDfONTREuSHK0Rz0CQC0DfrE0CeGjU0g9cU8ODz55JP10EMPhT/PyMjQgQMHdPfdd0ccIg4ALcW5hkS5Q5Qbovzg6BMAicbVhnDoE0OfAOkh5pcq33333Ro7dqzWrFmjffv26dprr9Xrr7+unTt36oUXXkjEGn1RVlamsrIy1dfX+70UIK0Q5XCIckOUNw99AiCR6BPDxiYc+gRIHzFfcVhQUKC///3vOv7443X66aerrq5O5557rtatW6cjjjgiEWv0RSgUUnV1tSorK/1eCpA2iHJDlMMhypuPPgGQKPSJoU8MG5sA0k3MVxxKUt++fXXrrbfGey0A0hjnGhqi3BDlaAn6BAASgz4x9IlhYxNILzFfcfjAAw/o8ccfb3D7448/rgcffDAuiwKQfjjXkCh3iHJDlMeGPgGQCFxtCIc+MfQJkH5iHhzeeeed6t27d4Pb+/TpozvuuCMuiwKQXohyOES5IcpjR58AiDf6xLCxCYc+AdJTzIPDd955R4MHD25w+8CBA1VTUxOXRQVBWVmZCgoKVFxc7PdSgJRGlBuiHA5R3jL0CYB4ok8MfWLY2ASQzmIeHPbp00d///vfG9z+yiuvqFevXnFZVBBw+DiQeJxraIhyQ5SjNegTAIgv+sTQJ4aNTSB9xTw4/PrXv65Zs2ZpxYoVqq+vV319vZ577jldeeWV+vrXv56INQJIUZxrSJQ7RLkhyluOPgEQL1xtCIc+MfQJkN5iflfl2267Te+8845OO+00dehgv/zAgQO66KKLOEMIQLMR5XCIckOUtw59AiAe6BPDxiYc+gRATINDz/O0efNmPfDAA7rttttUVVWlTp066bjjjtPAgQMTtUYAKYYoN0Q5HKK8degTAPFAnxj6xLCxCQAm5sHhkCFD9Prrr2vIkCEaMmRIotYFIEVxrqEhyg1RjnigTwAgPugTQ58YNjYBSDGecdiuXTsNGTJEO3bsSNR6AoN3LQQSg3MNiXKHKDdEeevRJwBai6sN4dAnhj4B4MT85ig/+tGP9L3vfU+vvfZaItYTGLxrIRB/RDkcotwQ5fFDnwBoKfrEsLEJhz4B8FkxvznKhRdeqN27d2v48OHKzMxUp06R/1DZuXNn3BYHIHXwEmVDlMMhyuOLPgHQEgwNDX1i2NgEgIZiHhwuWLAgAcsAkMoycvvxEmUR5Q5RjkSgTwCgZegTQ58YNjYBfF7Mg8OpU6cmYh0AUhhDQ6LcIcoNUR5/9AmAWHG1IRz6xNAnABoT8+Cwpqamya8PGDCgxYsBkHqIcjhEuSHKE4M+ARAL+sSwsQmHPgEQTcyDw0GDBikjIyPq1+vr61u1IACpg3MNDVEOhyhPHPoEQHMxNDT0iWFjEwCaFvPgcN26dRGf79+/X+vWrdP8+fN1++23x21hAJIb5xoaotwQ5Ug0+gQAmo8+MfSJYWMTQFNiHhwOHz68wW0jR45Ufn6+7r77bp177rlxWZjfysrKVFZWxhUKQAsxNCTKHaLcEOWJRZ8AaA6uNoRDnxj6BMDBtIvXAx111FGqrKyM18P5LhQKqbq6OqW+J6CtEOVwiHJDlPuHPgHg0CeGjU049AmA5oj5isPa2tqIzz3P0+bNm3XLLbdoyJAhcVsYgOTEuYaGKIdDlLcN+gRAUxgaGvrEsLEJAM0X8+CwR48eDQ4f9zxP/fv316OPPhq3hQFIPpxraIhyQ5SjLdEnANA0+sTQJ4aNTQDNFfPgcMWKFRGft2vXTocccoiOPPJIdegQ88MBSCEMDYlyhyg3RHnboU8ARMPVhnDoE0OfAIhFzCV9yimnJGIdAJIcUQ6HKDdEeduiTwA0hj4xbGzCoU8AxKpFW/Bvv/22FixYoDfeeEMZGRk65phjdOWVV+qII46I9/oAJAHONTREORyi3B/0CYDPYmho6BPDxiYAtEzM76q8fPlyFRQU6KWXXtKwYcNUWFiov/3tbzr22GNVUVGRiDUCCDDONTREuSHK4Rf6BAAaok8MfWLY2ATQEjFfcXj99dfrqquu0p133tng9uuuu06nn3563BYHIPgYGhLlDlFuiHJ/0CcAPourDeHQJ4Y+AdBSMV9x+MYbb2jatGkNbr/00ktVXV0dl0UFQVlZmQoKClRcXOz3UoDAIsrhEOWGKPcPfQLAoU8MG5tw6BMArRHz4PCQQw5RVVVVg9urqqrUp0+feKwpEEKhkKqrq1VZWen3UoBA4lxDQ5TDIcr9RZ8AkBgaOvSJYWMTAFov5pcqf/vb39Zll12mf/3rXxo9erQyMjL0l7/8RXfddZeuvvrqRKwRQMBwrqEhyg1RjiCgTwDA0CeGPjFsbAJorZgHhzfeeKO6deumn/zkJ7rhhhskSfn5+brllls0a9asuC8QQPAwNCTKHaLcEOX+o08AcLUhHPrE0CcA4iHmwWFGRoauuuoqXXXVVfr4448lSd26MUQA0gVRDocoN0S5GeTz7wN9AqQ3+sSwsQmHPjF+9wmQCmI+4/CTTz7R7t27JVmQ79y5UwsWLNAzzzwT98UBCBai3BDlcIhyc3hP/38f6BMgfdEnhj4xbGzCCUKfAKkg5sHh2WefrYceekiS9OGHH+r444/XT37yE5199tlatGhR3BcIIBh4MxRDlBuiHE5Qopw+AZDO6BNDnxg2NoHUtXv3bg0cOFDXXHNN+LZzzjlHPXv21Pnnn5+Q54x5cPjyyy9rzJgxkqQnnnhCffv21TvvvKOHHnpIP/vZz+K+QADBwLmGRLlDlBuiPFjoEyA9cbUhHPrE0CcmKBubQLzdfvvtOuGEEyJumzVrVngDPRFiHhzu3r07fGbQM888o3PPPVft2rXTl770Jb3zzjtxXyAA/xHlcIhyQ5SbIEU5fQKkH/rEsLEJhz4xQeoTIJ7eeustvfnmmzrjjDMibh83blxCz/aOeXB45JFHqry8XJs2bdLy5cs1fvx4SdK2bdvUvXv3uC8QgL+IckOUwyHKTdCinD4B0gt9YugTw8YmnKD1CeCsXLlSEydOVH5+vjIyMlReXt7gPgsXLtTgwYOVnZ2toqIirVq1KuLr11xzjUpLS9toxf8V8+Dwpptu0jXXXKNBgwbphBNO0KhRoyTZ7v4XvvCFuC8QgH8419AQ5YYohxPEKKdPAKQb+sTQJ4aNTSDY6urqNHz4cN1zzz2Nfn3p0qWaPXu25s6dq3Xr1mnMmDEqKSlRTU2NJOnJJ5/UUUcdpaOOOqotly1J6hDrLzj//PN10kknafPmzRo+fHj49tNOO03nnHNOXBcHwF+ca0iUO0S5IcqDiz4B0gdXG8KhTwx9YoK4sYnUVltbG/F5VlaWsrKyGr1vSUmJSkpKoj7W/PnzNW3aNE2fPl2StGDBAi1fvlyLFi1SaWmpXnzxRT366KN6/PHHtWvXLu3fv1/du3fXTTfdFL9vKIqYB4eS1LdvX/Xt2zfituOPPz4uCwIQDEQ5HKLcEOUmyFFOnwCpjz4xbGzCoU9MkPsk2bz6fp3aZ/u9imCr31MnSerfv3/E7TfffLNuueWWmB9v3759Wrt2ra6//vqI28ePH6/Vq1dLkkpLS8MvU16yZIlee+21NhkaSi0cHAJIbUS5IcrhEOWGKAcA/9Enho1NOPQJ/LJp06aIs7SjXW14MNu3b1d9fb3y8vIibs/Ly9OWLVsO+usnTJigl19+WXV1derXr59+//vfq7i4uEVraQyDwyjKyspUVlam+vp6v5cCtCnONTREuSHK4RDlwUCfIJ2xsQmHPjFsbAL+6t69e1zfhC8jIyPic8/zGtwmSRdffHHE58uXL4/bGhoT85ujpItQKKTq6mpVVlb6vRSgTXGuIUNDhyg3RDmChD5BumJoaGgUOPSJYWMTqaB3795q3759g6sLt23b1uAqRD8wOAQQRpTDYWhoiHJDlAPwE31iGBoaGgUOfYJUkZmZqaKiIlVUVETcXlFRodGjR/u0qv/ipcoAJBHlDlEOh6GhIcoBwH/0iWFoaGgUIPns2rVL69evD3++YcMGVVVVKTc3VwMGDNCcOXM0ZcoUjRw5UqNGjdLixYtVU1OjGTNm+Lhqw+AQAOca/gdRbohyOAwNAfiNjU049IlhaGhoFCSbNWvWaNy4ceHP58yZI0maOnWqlixZosmTJ2vHjh2aN2+eNm/erMLCQi1btkwDBw70a8lhDA4BcK4hwohyQ5QDgP8YGho2NuHQJ4ahIZLR2LFj5Xlek/eZOXOmZs6c2UYraj7OOATSHFFuiHKGhg5RbohyAH6iTwx9YmgUOPQJ0PYYHAJpjCg3RDkchoaGKAcA/9EnhqGhoVEA+IXBIYC0RpQbohwOQ0MAfmNjEw59YhgaGhoF8AeDQyBNEeVwiHJDlAOA/+gTw8YmHPrEMDQE/MPgEEhDRLkhyuEQ5YYoB+An+sTQJ4aNTTj0CeAvBodAmiHKDVFuiHI4RDkA+I8+MfSJYWMTQBAwOASQdohyQ5QbohwA/MfGJhz6xNAnho1NwH8MDoE0QpTDIcoNUW6IcgB+ok8MG5tw6BNDnwDBwOAQSBNEuSHK4RDlhigH4Cf6xNAnho1NOPQJEBwMDoE0QJQbotwQ5XCIcgDwH31i6BPDxiaAoGFwCCAtEOWGKDdEOQD4j41NOPSJoU8MG5tAsKTF4LBDhw4aMWKERowYoenTp/u9HKBNEeVwiHJDlBui3H/0CdIZfWLY2IRDnxj6BAieDn4voC306NFDVVVVfi8DaHNEuSHK4RDlhigPBvoE6Yo+MfSJYWMTDn0CBFNaXHEIpCOi3BDlhiiHQ5QDgP/oE0OfGDY2AQSZ74PDlStXauLEicrPz1dGRobKy8sb3GfhwoUaPHiwsrOzVVRUpFWrVsX0HLW1tSoqKtJJJ52k559/Pk4rBxB0RLkhyg1RjljQJ0BisLEJhz4x9IlhYxMILt9fqlxXV6fhw4frkksu0Xnnndfg60uXLtXs2bO1cOFCnXjiibrvvvtUUlKi6upqDRgwQJJUVFSkvXv3Nvi1zzzzjPLz87Vx40bl5+frtdde05lnnqlXX31V3bt3T/j3BviFKIdDlBui3BDlzUefAPFHnxg2NuHQJ4Y+AYLN98FhSUmJSkpKon59/vz5mjZtWvjQ8AULFmj58uVatGiRSktLJUlr165t8jny8/MlSYWFhSooKNA///lPjRw5stH77t27NyLya2trY/p+AL8R5YYoh0OUG6I8NvQJEF/0iaFPDBubcOgTIPh8f6lyU/bt26e1a9dq/PjxEbePHz9eq1evbtZjfPDBB+HQfvfdd1VdXa3DDz886v1LS0uVk5MT/ujfv3/LvwGgjRHlhig3RDkcojy+6BMALUGfGPrEsLEJIFkEenC4fft21dfXKy8vL+L2vLw8bdmypVmP8cYbb2jkyJEaPny4zjrrLP30pz9Vbm5u1PvfcMMN+uijj8IfmzZtatX3AKBtEeWGKDdEORKBPgFiw8YmHPrE0CeGjU0gOfj+UuXmyMjIiPjc87wGt0UzevRovfrqq81+rqysLGVlZcW0PiAIiHI4RLkhyg1Rnjj0CXBw9IlhYxMOfWLoEyB5BPqKw969e6t9+/YNdu+3bdvWYJcfSGdEuSHK4RDlhihPDPoEaB76xNAnho1NOPQJkFwCPTjMzMxUUVGRKioqIm6vqKjQ6NGjE/rcZWVlKigoUHFxcUKfB2itjNx+fi8hEIhyQ5TDIcoThz4B0Fz0iaFPDBubAJKR7y9V3rVrl9avXx/+fMOGDaqqqlJubq4GDBigOXPmaMqUKRo5cqRGjRqlxYsXq6amRjNmzEjoukKhkEKhkGpra5WTk5PQ5wJaY+ih3fxegu+IckOUG6Ic8UCfAK3D1YZw6BNDnxg2NoHk4/vgcM2aNRo3blz48zlz5kiSpk6dqiVLlmjy5MnasWOH5s2bp82bN6uwsFDLli3TwIED/VoyEBhEORyi3BDlhihvPfoEaDn6xLCxCYc+MfQJkJx8HxyOHTtWnuc1eZ+ZM2dq5syZbbQiIDkQ5YYoh0OUG6I8PugToGXoE0OfGDY24dAnQPIK9BmHfuIMIQQZ5xoaotwQ5XCI8tRHnwDBR58Y+sSwsQkg2TE4jCIUCqm6ulqVlZV+LwVogHMNiXKHKDdEOdIFfYIg42pDOPSJoU8MG5tAcmNwCCQZohwOUW6IckOUA/ATfWLY2IRDnxj6BEh+DA6BJEKUG6IcDlFuiHIAfqJPDH1i2NiEQ58AqYHBYRScIYSg4VxDQ5QbohwOUZ5e6BMgmOgTQ58YNjYBpBIGh1FwhhCChnMNiXKHKDdEOdIRfYKg4WpDOPSJoU8MG5tA6mBwCCQBohwOUW6IckOUA/ATfWLY2IRDnxj6BEgtDA6BgCPKDVEOhyg3RDkAP9Enhj4xbGzCoU+A1MPgEAgwzjU0RLkhyuEQ5QDgP/rE0CeGjU0AqYrBYRQcPo4g4FxDotwhyg1RjnRHnyAIuNoQDn1i6BPDxiaQmhgcRsHh4/AbUQ6HKDdEuSHK0xt9Ar/RJ4aNTTj0iaFPgNTF4BAIIKLcEOVwiHJDlAPwE31i6BPDxiYc+gRIbQwOgYDhXENDlBuiHA5RDgD+o08MfWLY2ASQDhgcAgHDuYZEuUOUG6IcAPzH1YZw6BNDnxg2NoHUx+AQCBCiHA5RbohyQ5QD8BN9YtjYhEOfGPoESA8MDqPgXQvR1ohyQ5TDIcoNUY7Pok/Q1ugTQ58YNjbh0CdA+mBwGAXvWoi2xLmGhig3RDkcohyfR58AbY8+MfSJYWMTQLphcAgEAOcaEuUOUW6IcgDwH1cbwqFPDH1i2NgE0guDQ8BnRDkcotwQ5YYoB+An+sSwsQmHPjH0CZB+GBwCPiLKDVEOhyg3RDkAP9Enhj4xbGzCoU+A9MTgEPAJ5xoaotwQ5XCIcgDwH31i6BPDxiaAdMbgEPAJ5xoS5Q5RbohyAPAfVxvCoU8MfWLY2ATSF4NDwAdEORyi3BDlhigH4Cf6xLCxCYc+MfQJkN46+L2AoCorK1NZWZnq6+v9XgpSDFFuiHI4RLkhytEc9AkShT4x9IlhYxMOfZJ+3tqySxlZB/xeRqB5e3f7vYQ2xRWHUYRCIVVXV6uystLvpSCFcK6hIcoNUQ6HKEdz0SdA4tAnhj4xbGwCgGFwCLQhzjUkyh2i3BDlAOA/rjaEQ58Y+sSwsQlAYnAItBmiHA5RbohyQ5QD8BN9YtjYhEOfGPoEgMPgEGgDvETZEOVwiHJDlAPwE0NDQ58YNjbh0CcAPovBIZBgGbn9eImyiHKHKIdDlAOA/+gTQ58YNjYBoCEGh0CCMTQkyh2i3BDlAOA/rjaEQ58Y+sSwsQng8xgcAglElMMhyg1RbohyAH6iTwwbm3DoE0OfAGgMg0MgQTjX0BDlcIhyQ5QD8BNDQ0OfGDY24dAnAKJhcBhFWVmZCgoKVFxc7PdSkIQ419AQ5YYoh0OUo7XoE6D16BNDnxg2NgGgaQwOowiFQqqurlZlZaXfS0ESYmhIlDtEuSHKgfigT9AaXG0Ihz4x9IlhYxNAUxgcAnFGlMMhyg1RbohyAH6iTwwbm3DoE0OfADgYBodAHHGuoSHK4RDlhigH4CeGhoY+MWxswqFPADQHg0MgTjjX0BDlhiiHQ5QDgP/oE0OfGDY2AaD5GBwCccLQkCh3iHJDlAOA/7jaEA59YugTw8YmgOZicAjEAVEOhyg3RLkhygH4iT4xbGzCoU8MfQIgFgwOgVbiXENDlMMhyg1RDsBPDA0NfWLY2IRDnwCIFYNDoBU419AQ5YYoh0OUA4D/6BNDnxg2NgGgZRgcAq3A0JAod4hyQ5QDgP+42hAOfWLoE8PGJoCWYHAItBBRDocoN0S5IcoB+Ik+MWxswqFPDH0CoKUYHAItwLmGhiiHQ5QbohyAnxgaGvrEsLEJhz4B0BoMDoEYca6hIcoNUQ6HKAcA/9Enhj4xbGwCQOsxOARixNCQKHeIckOUA4D/uNoQDn1i6BPDxiaA1mJwGEVZWZkKCgpUXFzs91IQIEQ5HKLcEOWGKEdboU/QGPrEsLEJhz4x9AmAeGBwGEUoFFJ1dbUqKyv9XgoCgig3RDkcotwQ5eYQfh7aBH2Cz6NPDH1i2NiEQ58Y+gRoPQaHQDPwZiiGKDdEORyi3PTp2dnvJQBIY/SJoU8MG5tw6BMgPhgcAs3AuYZEuUOUG6IcDlEO+IerDeHQJ4Y+MWxsAognBofAQRDlcIhyQ5QbohyAn+gTw8YmHPrE0CeGjU0gfhgcAk0gyg1RDocoN0S5IcoBf9Anhj4xbGzCoU8MfQLEF4NDIArONTREuSHK4RDlhigH4Cf6xNAnho1NOPQJEH8MDoEoONeQKHeIckOUwyHKAf9wtSEc+sTQJ4aNTQCJwuAQaARRDocoN0S5IcoB+Ik+MWxswqFPDH1i2NgEEoPBIfA5RLkhyuEQ5YYoN0Q5AD/RJ4aNTTj0iaFPgMRhcAh8BucaGqLcEOVwiHJDlAP+YWMTDn1i2NiEQ58AicXgEPgMzjVkaOgQ5YYoh0OUA/5haGhoFDj0iWFjE0BbYHAI/AdRDoehoSHKDVEOwE/0iWFoaGgUOPSJYWMTSDwGh4CIcocoh8PQ0BDlhigH4Cf6xDA0NDQKHPoEaBsMDpH2ONfQEOWGKIfD0NAQ5YB/2NiEQ58YhoaGRgHQlhgcIu1xriEcotwQ5XAYGgL+YWho2NiEQ58YhoaGRgHaDoNDpDWi3BDlDA0dotwQ5QD8RJ8Y+sTQKHDoE8PQEGhbaTE43LBhg8aNG6eCggIdd9xxqqur83tJCACi3BDlcBgaGqLcEOWJR58A0dEnhqGhoVHg0CdA2+vg9wLawsUXX6zbbrtNY8aM0c6dO5WVleX3koBAIMoNUQ6HoaEhytsGfYLGsLEJhz4xDA0NjQLALyk/OHz99dfVsWNHjRkzRpKUm5vr84oQBEQ5HKLcEOVwGBq2DfoEjaFPDBubcOgTw9DQ0CiAP3x/qfLKlSs1ceJE5efnKyMjQ+Xl5Q3us3DhQg0ePFjZ2dkqKirSqlWrmv34b731lrp27apJkybpi1/8ou644444rh7JiCg3RDkcotwQ5fgs+gRtjT4x9IlhYxMOfWIYGgL+8f2Kw7q6Og0fPlyXXHKJzjvvvAZfX7p0qWbPnq2FCxfqxBNP1H333aeSkhJVV1drwIABkqSioiLt3bu3wa995plntH//fq1atUpVVVXq06ePvvKVr6i4uFinn356wr83BA9RbohyQ5TDIcoNUf5f9AnQ9ugTQ58YNjbh0CeAv3wfHJaUlKikpCTq1+fPn69p06Zp+vTpkqQFCxZo+fLlWrRokUpLSyVJa9eujfrr+/Xrp+LiYvXv31+SdMYZZ6iqqipqmO/duzci8mtra2P+noAgI8oNUW6IcjhEeST6BG2JjU049ImhTwwbmwCCwPeXKjdl3759Wrt2rcaPHx9x+/jx47V69epmPUZxcbG2bt2qDz74QAcOHNDKlSt1zDHR46y0tFQ5OTnhDxf0SH5EORyi3BDlhihHrOgTxBN9YtjYhEOfGPrEsLEJ+C/Qg8Pt27ervr5eeXl5Ebfn5eVpy5YtzXqMDh066I477tDJJ5+sYcOGaciQITrrrLOi3v+GG27QRx99FP7YtGlTq74HBANRbohyOES5IcoNUR4b+gTxQp8Y+sSwsQmHPjH0CRAMvr9UuTkyMjIiPvc8r8FtTTnYy40+KysrS1lZWTGtD8FGlBui3BDlcIhyQ5S3HH0CtB59YugTw8YmHPoECI5AX3HYu3dvtW/fvsHu/bZt2xrs8gOIjig3RLkhyuEQ5S1DnyAe2NiEQ58Y+sSwsQkgaAI9OMzMzFRRUZEqKioibq+oqNDo0aMT+txlZWUqKChQcXFxQp8HiUWUwyHKDVFuiHK0Bn2C1qJPDBubcOgTQ58YNjaBhj7++GMVFxdrxIgROu644/SLX/yizZ7b95cq79q1S+vXrw9/vmHDBlVVVSk3N1cDBgzQnDlzNGXKFI0cOVKjRo3S4sWLVVNToxkzZiR0XaFQSKFQSLW1tcrJyUnocyExiHJDlMMhyg1RbojyptEnSBT6xNAnho1NOPSJoU+AxnXu3FnPP/+8OnfurN27d6uwsFDnnnuuevXqlfDn9n1wuGbNGo0bNy78+Zw5cyRJU6dO1ZIlSzR58mTt2LFD8+bN0+bNm1VYWKhly5Zp4MCBfi0ZSYAoN0S5IcrhEOWGKD84+gRIHPrE0CeGjU049AkQXfv27dW5s/0d2bNnj+rr6+V5Xps8t+8vVR47dqw8z2vwsWTJkvB9Zs6cqY0bN2rv3r1au3atTj75ZP8WDCQJotwQ5YYoh0OUNw99gkRgYxMOfWLoE8PGJpD6Vq5cqYkTJyo/P18ZGRkqLy9vcJ+FCxdq8ODBys7OVlFRkVatWhXx9Q8//FDDhw9Xv379dO2116p3795tsnbfB4dBxRlCyYsoh0OUG6LcEOVIBfRJ8qJPDBubcOgTQ58YNjaR6urq6jR8+HDdc889jX596dKlmj17tubOnat169ZpzJgxKikpUU1NTfg+PXr00CuvvKINGzbokUce0datW9tk7QwOowiFQqqurlZlZaXfS0EMiHJDlMMhyg1Rbojy5EefJCf6xNAnho1NOPSJoU+QrGprayM+9u7dG/W+JSUluu2223Tuuec2+vX58+dr2rRpmj59uo455hgtWLBA/fv316JFixrcNy8vT8OGDdPKlSvj9r00xfczDoF4IcoNUW6IcjhEuSHKAfiJPjH0iWFjEw59EjzeB/+WMvk72hRv3yeSpP79+0fcfvPNN+uWW26J+fH27duntWvX6vrrr4+4ffz48Vq9erUkaevWrerUqZO6d++u2tparVy5Ut/5znda9g3EiMEhkEKIckOUG6IcDlEO+IeNTTj0iaFPDBubQPLbtGmTunfvHv48KyurRY+zfft21dfXKy8vL+L2vLw8bdmyRZL07rvvatq0aeFzt6+44goNGzas5YuPAYPDKMrKylRWVqb6+nq/l4JmIMrhEOWGKDdEOVINfZJc6BPDxiYc+sTQJ4aNTSS77t27RwwOWysjIyPic8/zwrcVFRWpqqoqbs8VC844jIIzhJIHUW6IcjhEuSHKDVGeWuiT5EGfGPrEsLEJhz4x9AnwX71791b79u3DVxc627Zta3AVoh8YHCKpZeT283sJgUCUG6IcDlFuiHIAfqJPDH1i2NiEQ58AkTIzM1VUVKSKioqI2ysqKjR69GifVvVfvFQZSW3ood38XoLviHJDlBuiHA5RDviHqw3h0CeGPjFsbALpa9euXVq/fn348w0bNqiqqkq5ubkaMGCA5syZoylTpmjkyJEaNWqUFi9erJqaGs2YMcPHVRsGh0haRDkcotwQ5YYoB+An+sSwsQmHPjH0iWFjE+lqzZo1GjduXPjzOXPmSJKmTp2qJUuWaPLkydqxY4fmzZunzZs3q7CwUMuWLdPAgQP9WnIYg8MoOHw82IhyQ5TDIcoNUW6I8tRFnwQbfWLoE8PGJhz6xNAnSGdjx46V53lN3mfmzJmaOXNmG62o+TjjMAoOHw8uzjU0RLkhyuEQ5YYoT230CYKOPjH0iWFjEw59AiQvBodIOpxrSJQ7RLkhyuEQ5YB/uNoQDn1i6BPDxiaAZMfgEEmFKIdDlBui3BDlAPxEnxg2NuHQJ4Y+MWxsAsmNwSGSBlFuiHI4RLkhyg1RDviDPjH0iWFjEw59YugTIPkxOERS4FxDQ5QbohwOUW6IcgB+ok8MfWLY2IRDnwCpgcFhFGVlZSooKFBxcbHfS4E411Aiyh2i3BDlcIjy9EKfBAtXG8KhTwx9YtjYBJBKGBxGwbsWBgdRDocoN0S5IcqRjuiT4KBPDBubcOgTQ58YNjaB1MHgEIFGlBuiHA5RbohyQ5QD/qBPDH1i2NiEQ58Y+gRILQwOEVica2iIckOUwyHKDVEOwE/0iaFPDBubcOgTIPUwOERgca4hUe4Q5YYoh0OUA/7hakM49ImhTwwbmwBSFYNDBBJRDocoN0S5IcoB+Ik+MWxswqFPDH1i2NgEUhODQwQOUW6IcjhEuSHKDVEO+IM+MfSJYWMTDn1i6BMgdTE4RKBwrqEhyg1RDocoN0Q5AD/RJ4Y+MWxswqFPgNTG4DCKsrIyFRQUqLi42O+lpBXONSTKHaLcEOVwiHJI9IlfuNoQDn1i6BPDxiaAdMDgMIpQKKTq6mpVVlb6vZS0QZTDIcoNUW6IcuC/6JO2R58YNjbh0CeGPjFsbAKpj8EhAoEoN0Q5HKLcEOWGKAf8QZ8Y+sSwsQmHPjH0CZAeGBzCd5xraIhyQ5TDIcoNUQ7AT/SJoU8MG5tw6BMgfTA4hO8415Aod4hyQ5TDIcoB/3C1IRz6xNAnho1NAOmGwSF8RZTDIcoNUW6IcgB+ok8MG5tw6BNDnxg2NoH0wuAQviHKDVEOhyg3RLkhygF/0CeGPjFsbMKhTwx9AqQfBofwBecaGqLcEOVwiHJDlAPwE31i6BPDxiYc+gRITwwO4QvONSTKHaLcEOVwiHLAP1xtCIc+MfSJYWMTQDpjcBhFWVmZCgoKVFxc7PdSUg5RDocoN0S5IcqBg6NPEoc+MWxswqFPDH1i2NgE0heDwyhCoZCqq6tVWVnp91JSClFuiHI4RLkhyg1RjoOhTxKDPjH0iWFjEw59YugTIL0xOESb4VxDQ5QbohwOUW6IcgB+ok8MfWLY2IRDnwBgcIg2w7mGRLlDlBuiHA5RDviHqw3h0CeGPjFsbAKAYXCINkGUwyHKDVFuiHIAfqJPDBubcOgTQ58YNjYBSAwO0QaIckOUwyHKDVFuiHLAH/SJoU8MG5tw6BNDnwBwGBwioTjX0BDlhiiHQ5QbohyAn+gTQ58YNjbh0CcAPovBIRKKcw2JcocoN0Q5HKIc8A9XG8KhTwx9YtjYBICGGBwiYYhyOES5IcoNUQ7AT/SJYWMTDn1i6BPDxiaAz2NwiITgJcqGKIdDlBui3BDlgD8YGhr6xLCxCYc+MfQJgMYwOETcZeT24yXKIsodohwOUW6IcgB+ok8MfWLY2IRDnwCIhsEh4o6hIVHuEOWGKIdDlAP+4WpDOPSJoU8MG5sA0DQGh4grohwOUW6IckOUA/ATfWLY2IRDnxj6xLCxCaApDA4RN5xraIhyOES5IcoNUQ74g6GhoU8MG5tw6BNDnwA4GAaHUZSVlamgoEDFxcV+LyUpcK6hIcoNUQ6HKDdEOeKFPkFL0CeGPjFsbMKhTwA0B4PDKEKhkKqrq1VZWen3UpICQ0Oi3CHKDVEOhyhHPNEnseFqQzj0iaFPDBubANB8DA7RakQ5HKLcEOWGKAfgJ/rEsLEJhz4x9IlhYxNAczE4RKtwrqEhyuEQ5YYoN0Q54A+GhoY+MWxswqFPDH0CIBYMDtFinGtoiHJDlMMhyg1RDsBP9ImhTwwbm3DoEwCxYnCIFmNoSJQ7RLkhyuEQ5YB/uNoQDn1i6BPDxiYAtAyDQ7QIUQ6HKDdEuSHKAfiJPjFsbMKhTwx9YtjYBNASDA4RM841NEQ5HKLcEOWGKAf8wdDQ0CeGjU049ImhTwC0FINDxIRzDQ1RbohyOES5IcoB+Ik+MfSJYWMTDn0CoDUYHCImDA2JcocoN0Q5HKIc8A9XG8KhTwx9YtjYBIDWY3CIZiPK4RDlhig3RDkAP9Enho1NOPSJoU8MG5sAWovBIZqFcw0NUQ6HKDdEuSHKAX8wNDT0iWFjEw59YugTAPHQwe8FIPg419AQ5YYoh0OUG6Lc9OiW7fcSgLREnxj6xLCxCYc+MfRJ7Lytb0kdMv1eRqB5n+7zewltiisOcVAMDYlyhyg3RDkcotz07E6Uo+1xtSEc+sTQJ4aNTTj0CRAfDA7RJKIcDlFuiHJDlMMhyuEH+sSwsQmHPjH0iWFjE0A8MThEVES5IcrhEOWGKDdEOeAP+sTQJ4aNTTj0iaFPDBubQPwwOESjeDMUQ5QbohwOUW6IckOUA/6gTwx9YtjYhEOfGPoEiK+UHxz+4x//0IgRI8IfnTp1Unl5ud/LCjzONSTKHaLcEOVwiHJDlLcOfdIyXG0Ihz4x9IlhYxMOfQLEX8q/q/LQoUNVVVUlSdq1a5cGDRqk008/3d9FBRxRDocoN0S5IcrhEOWtR5/Ejj4xbGzCoU8MfWLY2ASQKCl/xeFnPfXUUzrttNPUpQvDkGiIckOUwyHKDVFuiHIkAn2C5qJPDBubcOgTQ58YNjaBxPB9cLhy5UpNnDhR+fn5ysjIaPRlOgsXLtTgwYOVnZ2toqIirVq1qkXP9dhjj2ny5MmtXHHq4lxDQ5QbohwOUW6IcpMuUU6fBAsbm3DoE8PGJhz6xKRLnwB+8H1wWFdXp+HDh+uee+5p9OtLly7V7NmzNXfuXK1bt05jxoxRSUmJampqwvcpKipSYWFhg4/33nsvfJ/a2lq98MILOuOMMxL+PSUrzjVkaOgQ5YYoh0OUm3SKcvokOBgaGhoFDn1i2NiEk059AvjB9zMOS0pKVFJSEvXr8+fP17Rp0zR9+nRJ0oIFC7R8+XItWrRIpaWlkqS1a9ce9HmefPJJTZgwQdnZTf9DZe/evdq7d2/489ra2uZ8G0mPKIfD0NAQ5YYoh5NuUU6fBAN9YhgaGhoFDn1i2NgE0BZ8v+KwKfv27dPatWs1fvz4iNvHjx+v1atXx/RYzX0ZUGlpqXJycsIf/fv3j+l5khFRbohyOAwNDVFuiHJ8Hn2CtkSfGIaGhkaBQ5+YdNvYBPwQ6MHh9u3bVV9fr7y8vIjb8/LytGXLlmY/zkcffaSXXnpJEyZMOOh9b7jhBn300Ufhj02bNsW87mTCuYaGKDdEORyGhoYoN0R5JPqkbbCxCYc+MQwNDY0Chz4B2obvL1VujoyMjIjPPc9rcFtTcnJytHXr1mbdNysrS1lZWTGtL5lxriEcotwQ5XAYGhqiPDr6JHEYGho2NuHQJ4ahoaFRALSlQF9x2Lt3b7Vv377B7v22bdsa7PIjdkS5IcoZGjpEuSHK4TA0bBx9klj0iaFPDI0Chz4xDA0NjQK0nUAPDjMzM1VUVKSKioqI2ysqKjR69OiEPndZWZkKCgpUXFyc0OfxC1FuiHI4DA0NUW6IcjSFPkGi0SeGoaGhUeDQJ4ahIdC2fH+p8q5du7R+/frw5xs2bFBVVZVyc3M1YMAAzZkzR1OmTNHIkSM1atQoLV68WDU1NZoxY0ZC1xUKhRQKhVRbW6ucnJyEPhf8QZQbohwOQ0NDlJt0j3L6xB9sbMKhTwxDQ0OjwEn3PgH84PvgcM2aNRo3blz48zlz5kiSpk6dqiVLlmjy5MnasWOH5s2bp82bN6uwsFDLli3TwIED/Vpy0iPK4RDlhiiHw9DQEOX0iR/oE8PGJhz6xDA0NDQKAL/4PjgcO3asPM9r8j4zZ87UzJkz22hFqY0oN0Q5HKLcEOVwGBoa+qRt0SeGPjFsbMKhTwxDQ0OjAP4I9BmHfkrFM4SIckOUG6IcDlFuiHIkg1TsExj6xNAnho1NOPSJYWgI+IfBYRShUEjV1dWqrKz0eymII6LcEOWGKIdDlBuiPPhSsU/Y2IRDnxj6xLCxCYc+AfzF4DBNEOVwiHJDlBuiHA5RDj/QJ4aNTTj0iaFPDBubAIKAwWEaIMoNUQ6HKDdEuSHKAX/QJ4Y+MWxswqFPDH1i2NgE/MfgMIpUOUOIKDdEuSHK4RDlhig3RHnySJU+gaFPDH1i2NiEQ58Y+gQIBgaHUaTiGULpiig3RLkhyuEQ5YYoTy6p0idsbMKhTwx9YtjYhEOfAMHB4DCFEeVwiHJDlBuiHA5RDj/QJ4aNTTj0iaFPDBubAIKGwWGKIsoNUQ6HKDdEuSHKAX/QJ4Y+MWxswqFPDH1i2NgEgoXBYQoiyg1RbohyOES5IcoNUQ74gz4x9IlhYxMOfWLoEyB4GBxGweHjyY0oN0S5IcrhEOWGKE9eydwnbGzCoU8MfWLY2IRDnwDBxOAwimQ9fJwoh0OUG6LcEOVwiPLkRp8kNzY24dAnhj4xbGwCCDIGhymEKDdEORyi3BDlhigH/EGfGPrEsLEJhz4x9IlhYxMILgaHKYIoN0S5IcrhEOWGKDdEOeAP+sTQJ4aNTTj0iaFPgGBjcIiUQZQbotwQ5XCIckOUww9sbMKhTwx9YtjYhEOfAMHH4DAFEOVwiHJDlBuiHA5RDj/QJ4aNTTj0iaFPDBubAJIFg8MokuVdC4lyQ5TDIcoNUW6IcqQa+iS50CeGjU049ImhTwwbm0ByYHAYRTK8a2FGbj+/lxAIRLkhyuEQ5YYoN0R5akmGPoGhTwx9YtjYhEOfGPoESB4MDpPY0EO7+b0E3xHlhig3RDkcotwQ5fADVxvCoU8MfWLY2IRDnwDJhcFhkiLK4RDlhig3RDkcohx+oE8MG5tw6BNDnxg2NgEkIwaHSYgoN0Q5HKLcEOWGKAf8QZ8Y+sSwsQmHPjH0iWFjE0g+DA6TDOcaGqLcEOVwiHJDlBuiHPAHfWLoE8PGJhz6xNAnQHJicJhkONeQKHeIckOUwyHKDVEOP3C1IRz6xNAnho1NOPQJkLwYHCYRohwOUW6IckOUwyHK4Qf6xLCxCYc+MfSJYWMTQLJjcBhFWVmZCgoKVFxc7PdSJBHlDlEOhyg3RLkhypEu6JNgok8MG5tw6BNDnxg2NoHkxuAwilAopOrqalVWVvq9FM41/A+i3BDlcIhyQ5Qbojw9BKlPYOgTQ58YNjbh0CeGPgGSH4PDJMC5hkS5Q5QbohwOUW6IcviBqw3h0CeGPjFsbMKhT4DUwOAw4IhyOES5IcoNUQ6HKIcf6BPDxiYc+sTQJ4aNTQCphMFhgBHlhiiHQ5QbotwQ5YA/6BNDnxg2NuHQJ4Y+MWxsAqmDwWFAca6hIcoNUQ6HKDdEuSHKAX/QJ4Y+MWxswqFPDH0CpBYGhwHFuYZEuUOUG6IcDlFuiHL4gasN4dAnhj4xbGzCoU+A1MPgMICIcjhEuSHKDVEOhyiHH+gTw8YmHPrE0CeGjU0AqYrBYcAQ5YYoh0OUG6LcEOWAP+gTQ58YNjbh0CeGPjFsbAL++fjjj1VcXKwRI0bouOOO0y9+8YuIr3fo0EEjRozQiBEjNH369Jgeu0M8F5pKysrKVFZWpvr6+jZ7Ts41NES5IcrhEOWGKDdEeXrzo09g6BNDnxg2NuHQJ4Y+AfzVuXNnPf/88+rcubN2796twsJCnXvuuerVq5ckqUePHqqqqmrRY3PFYRShUEjV1dWqrKxss+fkXEOi3CHKDVEOhyg3RDn86BOuNoRDnxj6xLCxCYc+AfzXvn17de5s/820Z88e1dfXy/O8uDw2g8OAIMrhEOWGKDdEORyiHH6gTwwbm3DoE0OfGDY2ATTXypUrNXHiROXn5ysjI0Pl5eUN7rNw4UINHjxY2dnZKioq0qpVq2J6jg8//FDDhw9Xv379dO2116p3797hr9XW1qqoqEgnnXSSnn/++Zgel8FhABDlhiiHQ5QbotwQ5YA/6BNDnxg2NuHQJ4Y+MWxsAs1T9//bu/fgqMr7j+OfTSAJCAHDJSUQ8AoaSIIErKBBEScYqoi3+nMcLtWqlDoOpQzFYaxiixkRS1VAi7RaO3UEdLAOWmlUIEi8YJoghQhoE7mDUSAQhAB5fn88c7aETWCTvZxkz/s1kxnOZc9+vzlk88nznD1bU6Ps7GzNnz+/we1LlizRlClTNHPmTJWWlio3N1f5+fnavn27f5+cnBwNGDAg4Gv37t2S7NuRN2zYoIqKCr322mvat2+f/7GVlZUqKSnRiy++qPHjx6u6ujro2rnHocu4r6FFKLcI5XAQyi1CuUUoB9xBPrHIJxYTm3CQTyzySYw6WavwvME1hp2slaSAwbfExEQlJiY2+JD8/Hzl5+c3esg//OEPuu+++/wfXPLHP/5RK1eu1AsvvKCCggJJUklJSVDlpaamKisrS0VFRbrzzjslSWlpaZKkAQMGKCMjQ1u3btXgwYODOh4Dhy7jvoaEcgeh3CKUw0EotwjlcANXG8JBPrHIJxYTm3CQT2JPQkKCfvSjH2nv2lfcLqVV6NChg9LT0+ute+yxx/T44483+Vi1tbUqKSnRjBkz6q3Py8tTcXFxUMfYt2+f2rVrp+TkZFVXV6uoqEi/+MUvJEkHDhxQ+/btlZiYqJ07d2rz5s266KKLgq6PgUMXEcrhIJRbhHKLUA4HoRxuIJ9YTGzCQT6xyCcWE5uIVUlJSaqoqFBtba3bpbQKxhj5fL566xq72vBcqqqqdOrUKaWmptZbn5qaqr179wZ1jJ07d+q+++6TMUbGGD300EPKysqSJJWXl+vBBx9UXFycfD6fnn32WaWkpARdHwOHLiGUW4RyOAjlFqHcIpQD7iCfWOQTi4lNOMgnFvnEYmIzdiUlJSkpifPrljMHIhsanGxMTk6OysrKGtw2bNgwbdy4sdl18eEoLuC+hhah3CKUw0EotwjlFqEccAf5xCKfWExswkE+scgnQPh17dpV8fHxAVcX7t+/P+AqRDcwcOgC7mtIKHcQyi1CORyEcotQDjdwtSEc5BOLfGIxsQkH+QSIjISEBOXk5KiwsLDe+sLCQg0bNsylqv6HtypHGaEcDkK5RSi3COVwEMrhBvKJxcQmHOQTi3xiMbEJIFRHjhzRV1995V+uqKhQWVmZUlJS1Lt3b02dOlXjxo3T4MGDNXToUC1atEjbt2/XpEmTXKzaYuAwigjlFqEcDkK5RSi3COWAO8gnFvnEYmITDvKJRT6xmNgEQvP5559rxIgR/uWpU6dKkiZMmKBXXnlFd911l7777js98cQT2rNnjwYMGKB3331Xffr0catkPwYOo4T7GlqEcotQDgeh3CKUW4RywB3kE4t8YjGxCQf5xCKfAKG77rrrZIw56z6TJ0/W5MmTo1RR8LjHYZRwX0NCuYNQbhHK4SCUW4RyuIGrDeEgn1jkE4uJTTjIJwAYOGzEggULlJGRoSFDhoR8LEI5HIRyi1BuEcrhIJQjWOST8GNiEw7yiUU+sZjYBADLZ851raTHVVdXq1OnTor/v6flS2j6L1FCuUUotxg4JJQ7COUWodyKhYHD6upqdU/vrkOHDik5OdntcmIe+SQ8yCcW+cQio5BPHOQTi3wCQOKKw4jivoYWodwilMNBKLcI5VYshHKgNSKfWOQTi0FDOMgnFvkEgIOBwwjivoaEcgeh3CKUw0EotwjlcANXG8JBPrHIJxYTm3CQTwCcjoHDCCGUw0EotwjlFqEcDkI53EA+sZjYhIN8YpFPLCY2ASAQA4cRwFuULUI5HIRyi1BuEcoBdzBoaJFPLCY24SCfWOQTi4lNAGdi4DDMfCm9eIuyCOUOQjkchHKLUG4RygF3kE8s8onFxCYc5BOLfAKgIQwchhmDhoRyB6HcIpTDQSi3COVwA1cbwkE+scgnFhObcJBPADSGgcMwIpTDQSi3COUWoRwOQjncQD6xmNiEg3xikU8sJjYB4OwYOAwT7mtoEcrhIJRbhHKLUA64g0FDi3xiMbEJB/nEIp9YTGwCOBsGDsOA+xpahHKLUA4HodwilFuEcsAd5BOLfGIxsQkH+cQinwA4FwYOw4BBQ0K5g1BuEcrhIJRbhHK4gasN4SCfWOQTi4lNOMgnAILBwGGICOVwEMotQrlFKIeDUA43kE8sJjbhIJ9Y5BOLiU0ACB4DhyHgvoYWoRwOQrlFKLcI5YA7GDS0yCcWE5twkE8s8onFxCaAYDFw2Ezc19AilFuEcjgI5Rah3CKUA+4gn1jkE4uJTTjIJxb5BEBTMHDYTAwaEsodhHKLUA4HodwilMMNXG0IB/nEIp9YTGzCQT4B0FQMHDYDoRwOQrlFKLcI5XAQyuEG8onFxCYc5BOLfGIxsQkAzeOJgcN58+apf//+ysjI0MMPPyxjTLOPxX0NLUI5HIRyi1BuEcqB4IUznzBoaJFPLCY24SCfWOQTi4lNAM0R8wOH3377rebPn6+SkhJt3LhRJSUl+uSTT5p1LO5raBHKLUI5HIRyi1BuEcoRjHDmE1jkE4t8YjGxCQf5xCKfAGiuNm4XEA0nT57UsWPHJEknTpxQ9+7dm3UcBg0J5Q5CuUUoh4NQbhHK0RThyidcbQgH+cQin1hMbMJBPgEQCtevOCwqKtLNN9+stLQ0+Xw+vfXWWwH7LFy4UBdeeKGSkpKUk5OjtWvXBn38bt26adq0aerdu7fS0tJ0ww036OKLL25ynX0v79fkxyA2EcotQrlFKIeDUB5byCetCxObcJBPLPKJxcQmAITO9YHDmpoaZWdna/78+Q1uX7JkiaZMmaKZM2eqtLRUubm5ys/P1/bt2/375OTkaMCAAQFfu3fv1oEDB7RixQpVVlZq165dKi4uVlFRUbTaiymEcjgI5Rah3CKUIxaRT1oP8onFxCYc5BOLfGIxsQkgVD4Typ24w8zn82n58uUaO3asf92Pf/xjDRo0SC+88IJ/3eWXX66xY8eqoKDgnMdctmyZVq9erQULFkiSnn76aRljNH369Ab3P378uI4fP+5fPnTokHr37q2+j7yu+CTv/vLJ7EYYlaSM8/k+SNKlnQggFzB4KknqxvdBktS5Iz8Thw8f1sUZF+vgwYPq1KmT2+WEFfmk5SKfWOQTi3xikVHIJw7ySWznEyBaWvQ9Dmtra1VSUqIZM2bUW5+Xl6fi4uKgjpGenq7i4mIdO3ZMbdu21erVq/XAAw80un9BQYFmzZoVsH5rwf81rfgYU+52AQCAVuG7776L+WBOPmk5yCcAgGB4IZ8AkdKiBw6rqqp06tQppaam1lufmpqqvXv3BnWMq666SqNHj9YVV1yhuLg4jRw5UmPGjGl0/0ceeURTp071Lx88eFB9+vTR9u3bQ3qhGTJkiNavXx/Sfo1ta2j96evO3H7mtg8++EDp6enasWOHkpOTg+6pqfUHu1+wfZ6rrzP/XV1dHZY+OZfB7+eFc9nY9mDWna1PzmXTcC6D3y9S59K5Ai4lJaVJPbVGXswn59o3Ej87Le01Ihw/O6cvu9XjufblXDb9XDr/bg2v95zLcy9zLpuuJf999P7773smnwCR0qIHDh0+n6/esjEmYN3ZzJ49W7Nnzw5q38TERCUmJgas79SpU0gvpvHx8UE9/mz7NbatofWnrztze2PbkpOTQ/7FGM0+g+3rzP1C7ZNzGfx+XjiXjW0PZl0wfXIug8O5DH6/SJ/LuDjXb58cNV7KJ+faN5I/O1LLeI0Ix8/O6ctu9XiufTmXTT+XZ/67Jb/ecy7Pvcy5bLqW/PeRM7nmpXwChFuL/unp2rWr4uPjA2bv9+/fHzDL39L98pe/DHm/xrY1tP70dWduP9u2UEWzz2D7as09nrmOc9nyemxsezDrWlOfnMuzr2tNfbb0c9kaeDGfnGtffnaavuxWj+fal3PZvOXW0ifn8tzLraVPr57LM9dF81wCXtUqPhwlJydHCxcu9K/LyMjQLbfcEtTNx0NVXV2tTp066dChQyHPNrVUXuhR8kafXuhR8kafXuhR8kafXuhRiu0+ySfu8UKfXuhR8kafXuhR8kafXuhR8kafXugRiDTX36p85MgRffXVV/7liooKlZWVKSUlRb1799bUqVM1btw4DR48WEOHDtWiRYu0fft2TZo0KSr1JSYm6rHHHmvw7UGxwgs9St7o0ws9St7o0ws9St7o0ws9SrHXJ/mkZfBCn17oUfJGn17oUfJGn17oUfJGn17oEYg01684XL16tUaMGBGwfsKECXrllVckSQsXLtScOXO0Z88eDRgwQPPmzdPw4cOjXCkAAPAK8gkAAADQAgYOAQAAAAAAALQ8LfrDUQAAAAAAAAC4g4FDAAAAAAAAAAEYOAQAAAAAAAAQgIFDAAAAAAAAAAEYOAyjefPmqX///srIyNDDDz+sWPzcmS1btmjgwIH+r3bt2umtt95yu6ywq6io0IgRI5SRkaHMzEzV1NS4XVJEtGnTxn8uf/7zn7tdTsQcPXpUffr00bRp09wuJSIOHz6sIUOGaODAgcrMzNRLL73kdklht2PHDl133XXKyMhQVlaWli1b5nZJEXPrrbfq/PPP1x133OF2KWGzYsUK9evXT5deeqkWL17sdjmeQz6JHeST2EI+iQ1eySixmE8kMgoQDD5VOUy+/fZbXXXVVdq0aZPatm2r4cOHa+7cuRo6dKjbpUXMkSNHdMEFF+ibb77Reeed53Y5YXXttdfq97//vXJzc/X9998rOTlZbdq0cbussOvatauqqqrcLiPiZs6cqW3btql3796aO3eu2+WE3alTp3T8+HG1b99eR48e1YABA7R+/Xp16dLF7dLCZs+ePdq3b58GDhyo/fv3a9CgQdqyZUvMvfZI0qpVq3TkyBH99a9/1RtvvOF2OSE7efKkMjIytGrVKiUnJ2vQoEH69NNPlZKS4nZpnkA+ia3XCPJJbCGfxAavZJRYyycSGQUIFlcchtHJkyd17NgxnThxQidOnFD37t3dLimi3n77bY0cOTLmfik6f1zl5uZKklJSUmIylHvFtm3b9OWXX2r06NFulxIx8fHxat++vSTp2LFjOnXqVMxdUdSjRw8NHDhQktS9e3elpKTo+++/d7eoCBkxYoQ6duzodhlh89lnn6l///7q2bOnOnbsqNGjR2vlypVul+Up5JPYQD6JLeST2OGVjBJr+UQiowDB8szAYVFRkW6++WalpaXJ5/M1+PaVhQsX6sILL1RSUpJycnK0du3aoI/frVs3TZs2Tb1791ZaWppuuOEGXXzxxWHsIDiR7vN0S5cu1V133RVixU0X6R63bdumDh06aMyYMRo0aJCefPLJMFYfvGicy+rqauXk5Oiaa67RmjVrwlR58KLR47Rp01RQUBCmipsnGn0ePHhQ2dnZ6tWrl6ZPn66uXbuGqfrgRPO15/PPP1ddXZ3S09NDrLrpotlnSxFqz7t371bPnj39y7169dKuXbuiUXqrQD75H/LJ2ZFPood88j+tPZ9I3sgoXswnEhkFiBbPDBzW1NQoOztb8+fPb3D7kiVLNGXKFM2cOVOlpaXKzc1Vfn6+tm/f7t8nJydHAwYMCPjavXu3Dhw4oBUrVqiyslK7du1ScXGxioqKotWeX6T7dFRXV2vdunWuzJJGuscTJ05o7dq1WrBggT7++GMVFhaqsLAwWu35ReNcVlZWqqSkRC+++KLGjx+v6urqqPTmiHSP//jHP9S3b1/17ds3Wi01KBrnsnPnztqwYYMqKir02muvad++fVHpzRGt157vvvtO48eP16JFiyLeU0Oi1WdLEmrPDV1d4vP5Ilpza0I+scgnFvmEfBJNXsgnkjcyihfziURGAaLGeJAks3z58nrrrrzySjNp0qR66y677DIzY8aMoI65dOlSM3nyZP/ynDlzzFNPPRVyraGIRJ+OV1991dxzzz2hlhiySPRYXFxsRo0a5V+eM2eOmTNnTsi1hiKS59Jx4403mvXr1ze3xJBFoscZM2aYXr16mT59+pguXbqY5ORkM2vWrHCV3CzROJeTJk0yS5cubW6JIYtUj8eOHTO5ubnm1VdfDUeZIYvkuVy1apW5/fbbQy0x7JrT87p168zYsWP92x5++GHz97//PeK1tkbkE/LJ2ZBP3EE+iZ18Yow3MooX84kxZBQgkjxzxeHZ1NbWqqSkRHl5efXW5+Xlqbi4OKhjpKenq7i42H//jtWrV6tfv36RKLfZwtGnw623AZ1LOHocMmSI9u3bpwMHDqiurk5FRUW6/PLLI1Fus4WjzwMHDuj48eOSpJ07d2rz5s266KKLwl5rc4Wjx4KCAu3YsUOVlZWaO3eu7r//fv32t7+NRLnNFo4+9+3b578ao7q6WkVFRS3q9SccPRpjNHHiRF1//fUaN25cJMoMWThfY1uLYHq+8sor9Z///Ee7du3S4cOH9e6772rUqFFulNvqkE/IJ6cjn7QM5JPYySeSNzKKF/OJREYBwok7KkuqqqrSqVOnlJqaWm99amqq9u7dG9QxrrrqKo0ePVpXXHGF4uLiNHLkSI0ZMyYS5TZbOPqUpEOHDumzzz7Tm2++Ge4SQxaOHtu0aaMnn3xSw4cPlzFGeXl5uummmyJRbrOFo8/y8nI9+OCDiouLk8/n07PPPtuiPkEsXP9fW7pw9Llz507dd999MsbIGKOHHnpIWVlZkSi3WcLR47p167RkyRJlZWX571/zt7/9TZmZmeEut9nC9X921KhR+ve//62amhr16tVLy5cv15AhQ8JdblgE03ObNm30zDPPaMSIEaqrq9P06dNj7hM1I4V8Qj45HfmkZSCfxE4+kbyRUbyYTyQyChBODBye5sz7GRhjmnSPg9mzZ2v27NnhLivsQu2zU6dOrtyfpClC7TE/P1/5+fnhLivsQulz2LBh2rhxYyTKCqtQz6Vj4sSJYaooMkLpMycnR2VlZRGoKrxC6fGaa65RXV1dJMoKu1D/z7bGT/M7V89jxoxpcYNVrQn5JDjkk5aDfBI88knL4IWM4sV8IpFRgHDgrcqSunbtqvj4+IAZl/379wfMULRmXujTCz1K3ujTCz1K3ujTCz1K3unzdF7sOZq88v31Qp9e6FHyRp9e6FGiz1jq0ws9NsSrfQORwMChpISEBOXk5AR8Ml1hYaGGDRvmUlXh54U+vdCj5I0+vdCj5I0+vdCj5J0+T+fFnqPJK99fL/TphR4lb/TphR4l+oylPr3QY0O82jcQCZ55q/KRI0f01Vdf+ZcrKipUVlamlJQU9e7dW1OnTtW4ceM0ePBgDR06VIsWLdL27ds1adIkF6tuOi/06YUeJW/06YUeJW/06YUeJe/0eTov9hxNXvn+eqFPL/QoeaNPL/Qo0Wcs9emFHhvi1b6BqIvWxze7bdWqVUZSwNeECRP8+yxYsMD06dPHJCQkmEGDBpk1a9a4V3AzeaFPL/RojDf69EKPxnijTy/0aIx3+jydF3uOJq98f73Qpxd6NMYbfXqhR2PoM5b69EKPDfFq30C0+YwxJthBRgAAAAAAAADewD0OAQAAAAAAAARg4BAAAAAAAABAAAYOAQAAAAAAAARg4BAAAAAAAABAAAYOAQAAAAAAAARg4BAAAAAAAABAAAYOAQAAAAAAAARg4BAAAAAAAABAAAYOAcAFlZWV8vl8Kisrc7sUAAAASeQTAEAgBg4BAAAAAAAABGDgEEBEnTp1SnV1dW6X4Zra2lq3SwAAAGcgn5BPAADBYeAQ8Jg33nhDmZmZateunbp06aIbbrhBNTU1kqS6ujo98cQT6tWrlxITEzVw4EC99957/seuXr1aPp9PBw8e9K8rKyuTz+dTZWWlJOmVV15R586dtWLFCmVkZCgxMVHffPONjh8/runTpys9PV2JiYm69NJL9ec//9l/nM2bN2v06NHq0KGDUlNTNW7cOFVVVTXax7333qusrCwdP35cknTixAnl5OTonnvuOWv/mzZt0k9+8hMlJyerY8eOys3N1ddffx1U/5K0ceNGXX/99f7v3wMPPKAjR474t0+cOFFjx45VQUGB0tLS1LdvX0nSZ599piuuuEJJSUkaPHiwSktLz1onAABeQj4hnwAAWiYGDgEP2bNnj+6++27de++9Ki8v1+rVq3XbbbfJGCNJevbZZ/XMM89o7ty5+uKLLzRq1CiNGTNG27Zta9LzHD16VAUFBVq8eLE2bdqk7t27a/z48Xr99df13HPPqby8XC+++KI6dOjgr+vaa6/VwIED9fnnn+u9997Tvn379NOf/rTR53juuedUU1OjGTNmSJIeffRRVVVVaeHChY0+ZteuXRo+fLiSkpL04YcfqqSkRPfee69OnjwZVP9Hjx7VjTfeqPPPP1/r16/XsmXL9P777+uhhx6q9zwffPCBysvLVVhYqBUrVqimpkY33XST+vXrp5KSEj3++OOaNm1ak76nAADEKvIJ+QQA0IIZAJ5RUlJiJJnKysoGt6elpZnZs2fXWzdkyBAzefJkY4wxq1atMpLMgQMH/NtLS0uNJFNRUWGMMebll182kkxZWZl/ny1bthhJprCwsMHnffTRR01eXl69dTt27DCSzJYtWxrtp7i42LRt29Y8+uijpk2bNmbNmjWN7muMMY888oi58MILTW1tbYPbz9X/okWLzPnnn2+OHDni3/7OO++YuLg4s3fvXmOMMRMmTDCpqanm+PHj/n3+9Kc/mZSUFFNTU+Nf98ILLxhJprS09Kw1AwAQ68gn5BMAQMvFFYeAh2RnZ2vkyJHKzMzUnXfeqZdeekkHDhyQJFVXV2v37t26+uqr6z3m6quvVnl5eZOeJyEhQVlZWf7lsrIyxcfH69prr21w/5KSEq1atUodOnTwf1122WWS5H+bTkOGDh2qadOm6Xe/+51+/etfa/jw4f5t+fn5/mP179/fX0dubq7atm0bcKxg+i8vL1d2drbOO++8etvr6uq0ZcsW/7rMzEwlJCT4l53HtW/fvl7tAACAfEI+AQC0ZG3cLgBA9MTHx6uwsFDFxcX617/+peeff14zZ87Up59+qi5dukiSfD5fvccYY/zr4uLi/OscJ06cCHiedu3a1TtOu3btzlpXXV2dbr75Zj311FMB23r06HHWx61bt07x8fEBb1davHixfvjhB0nyB/Fz1SGdvf/T/322x50e3J3HAQCAhpFPyCcAgJaLKw4Bj/H5fLr66qs1a9YslZaWKiEhQcuXL1dycrLS0tL00Ucf1du/uLhYl19+uSSpW7dukuw9fxxlZWXnfM7MzEzV1dVpzZo1DW4fNGiQNm3apAsuuECXXHJJva8zQ+7pnn76aZWXl2vNmjVauXKlXn75Zf+2nj17+o/Rp08fSVJWVpbWrl3b4B8TwfSfkZGhsrIy/83aJWndunWKi4vz32S8IRkZGdqwYYP/DwVJ+uSTTxrdHwAAryGfkE8AAC2UW++RBhB9n3zyiZk9e7ZZv369+eabb8zSpUtNQkKCeffdd40xxsybN88kJyeb119/3Xz55ZfmN7/5jWnbtq3ZunWrMcaY2tpak56ebu68806zZcsWs2LFCtOvX7+Aewh16tQp4LknTpxo0tPTzfLly81///tfs2rVKrNkyRJjjDG7du0y3bp1M3fccYf59NNPzddff21Wrlxpfvazn5mTJ0822EtpaalJSEgwb7/9tjHGmMWLF5uOHTuar7/+utH+q6qqTJcuXcxtt91m1q9fb7Zu3WpeffVV8+WXXwbVf01NjenRo4e5/fbbzcaNG82HH35oLrroIjNhwgT/c0yYMMHccsst9Z738OHDpmvXrubuu+82mzZtMu+884655JJLuIcQAACGfEI+AQC0ZAwcAh6yefNmM2rUKNOtWzeTmJho+vbta55//nn/9lOnTplZs2aZnj17mrZt25rs7Gzzz3/+s94xPvroI5OZmWmSkpJMbm6uWbZsWVDB/IcffjC/+tWvTI8ePUxCQoK55JJLzF/+8hf/9q1bt5pbb73VdO7c2bRr185cdtllZsqUKaaurq7BY2VkZJgHHnig3vpbb73VDBs2rNEwb4wxGzZsMHl5eaZ9+/amY8eOJjc31x/mg+n/iy++MCNGjDBJSUkmJSXF3H///ebw4cP+7Q0Fc2OM+fjjj012drZJSEgwAwcONG+++SbBHAAAQz4xhnwCAGi5fMZwcwsAAAAAAAAA9XGPQwAAAAAAAAABGDgEAAAAAAAAEICBQwAAAAAAAAABGDgEAAAAAAAAEICBQwAAAAAAAAABGDgEAAAAAAAAEICBQwAAAAAAAAABGDgEAAAAAAAAEICBQwAAAAAAAAABGDgEAAAAAAAAEICBQwAAAAAAAAABGDgEAAAAAAAAEOD/AdFFolX5J4enAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 8))\n", + "cs1 = ax1.contourf(x_grid, y_grid, plot_me_lap2.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "cs2 = ax2.contourf(x_grid, y_grid, plot_me_lap1.T, locator=ticker.LogLocator(), cmap=cm.PuBu_r)\n", + "\n", + "fig.subplots_adjust(right=0.8)\n", + "cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n", + "fig.colorbar(cs1, cax=cbar_ax)\n", + "\n", + "\n", + "ax1.set_xscale('log')\n", + "ax1.set_yscale('log')\n", + "ax1.set_xlabel(\"source x-coord\")\n", + "ax1.set_ylabel(\"source y-coord\")\n", + "\n", + "\n", + "ax2.set_xscale('log')\n", + "ax2.set_yscale('log')\n", + "ax2.set_xlabel(\"source x-coord\")\n", + "ax2.set_ylabel(\"source y-coord\")\n", + "\n", + "ax1.set_title('8-Term Taylor Series, Order 5, Laplace Rel. Err')\n", + "ax2.set_title('8-Term Taylor Series, Order 12, Laplace Rel. Err')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Compare with Predicted Taylor Error" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[log(sqrt(x1**2)), 0, x1**(-2), 0, -6/x1**4, 0, 120/x1**6, 0],\n", + " [0, -1/x1**2, 0, 6/x1**4, 0, -120/x1**6, 0, 5040/x1**8],\n", + " [x1**(-2), 0, -6/x1**4, 0, 120/x1**6, 0, -5040/x1**8, 0],\n", + " [0, 6/x1**4, 0, -120/x1**6, 0, 5040/x1**8, 0, -362880/x1**10],\n", + " [-6/x1**4, 0, 120/x1**6, 0, -5040/x1**8, 0, 362880/x1**10, 0],\n", + " [0, -120/x1**6, 0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12],\n", + " [120/x1**6, 0, -5040/x1**8, 0, 362880/x1**10, 0, -39916800/x1**12, 0],\n", + " [0, 5040/x1**8, 0, -362880/x1**10, 0, 39916800/x1**12, 0, -6227020800/x1**14]]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "true_grid_lap" ] }, { @@ -874,7 +1001,10 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def predicted_taylor_error(loc):\n", + " " + ] } ], "metadata": { From 24262ea34d81fd5e83463a0b0b1e27e73bf7362e Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sat, 25 Jan 2025 09:56:58 -0600 Subject: [PATCH 140/143] Added additional notebook --- test/plot_normal_recurrence.ipynb | 6 +- test/testing_pde_to_ode.ipynb | 127 ++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 test/testing_pde_to_ode.ipynb diff --git a/test/plot_normal_recurrence.ipynb b/test/plot_normal_recurrence.ipynb index 8eccbe06..f14ffa13 100644 --- a/test/plot_normal_recurrence.ipynb +++ b/test/plot_normal_recurrence.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ " make_identity_diff_op,\n", ")\n", "\n", - "from sumpy.recurrence import get_recurrence\n", + "from sumpy.recurrence import get_recurrence, _generate_nd_derivative_relations, pde_to_ode_in_r, ode_in_r_to_x\n", "\n", "import sympy as sp\n", "from sympy import hankel1\n", @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/test/testing_pde_to_ode.ipynb b/test/testing_pde_to_ode.ipynb new file mode 100644 index 00000000..23764dbf --- /dev/null +++ b/test/testing_pde_to_ode.ipynb @@ -0,0 +1,127 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from sumpy.recurrence import _make_sympy_vec, get_processed_and_shifted_recurrence\n", + "\n", + "from sumpy.expansion.diff_op import (\n", + " laplacian,\n", + " make_identity_diff_op,\n", + ")\n", + "\n", + "from sumpy.recurrence import get_recurrence, _generate_nd_derivative_relations, pde_to_ode_in_r, ode_in_r_to_x\n", + "\n", + "import sympy as sp\n", + "from sympy import hankel1\n", + "\n", + "import numpy as np\n", + "\n", + "import math\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm, ticker" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from sumpy.expansion.diff_op import DerivativeIdentifier, LinearPDESystemOperator\n", + "from immutabledict import immutabledict" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "def get_ode_in_x(x_order, y_order):\n", + " single_partial = DerivativeIdentifier((x_order,y_order), 0)\n", + " #Coefficients\n", + " list_pde_dict = immutabledict({single_partial: 1})\n", + " random_pde = LinearPDESystemOperator(2,(list_pde_dict,))\n", + "\n", + " ode_in_r_random, var, ode_order_random = pde_to_ode_in_r(random_pde)\n", + " ode_in_x_random = ode_in_r_to_x(ode_in_r_random, var, ode_order_random).simplify()\n", + "\n", + " return ode_in_x_random" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "size = 3\n", + "table = []\n", + "for i in range(size):\n", + " temp = []\n", + " for j in range(size):\n", + " temp.append(get_ode_in_x(i, j))\n", + " table.append(temp)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[f_x0, f_x1*x1/x0, (f_x1*x0**2 - f_x1*x1**2 + f_x2*x0*x1**2)/x0**3],\n", + " [f_x1,\n", + " x1*(-f_x1 + f_x2*x0)/x0**2,\n", + " (-f_x1*x0**2 + 3*f_x1*x1**2 + f_x2*x0**3 - 3*f_x2*x0*x1**2 + f_x3*x0**2*x1**2)/x0**4],\n", + " [f_x2,\n", + " x1*(2*f_x1 - 2*f_x2*x0 + f_x3*x0**2)/x0**3,\n", + " (2*f_x1*x0**2 - 12*f_x1*x1**2 - 2*f_x2*x0**3 + 12*f_x2*x0*x1**2 + f_x3*x0**4 - 5*f_x3*x0**2*x1**2 + f_x4*x0**3*x1**2)/x0**5]]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "inteq", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From e33c5c388d78524869e54f50a3070d0c9b6cfeab Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 26 Jan 2025 13:48:42 -0600 Subject: [PATCH 141/143] Update testing_pde_to_ode.ipynb --- test/testing_pde_to_ode.ipynb | 58 ++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/test/testing_pde_to_ode.ipynb b/test/testing_pde_to_ode.ipynb index 23764dbf..6df93276 100644 --- a/test/testing_pde_to_ode.ipynb +++ b/test/testing_pde_to_ode.ipynb @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -56,37 +56,47 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "size = 3\n", + "n_rows = 4\n", + "n_cols = 4\n", "table = []\n", - "for i in range(size):\n", + "for i in range(n_rows):\n", " temp = []\n", - " for j in range(size):\n", + " for j in range(n_cols):\n", " temp.append(get_ode_in_x(i, j))\n", " table.append(temp)" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[f_x0, f_x1*x1/x0, (f_x1*x0**2 - f_x1*x1**2 + f_x2*x0*x1**2)/x0**3],\n", + "[[f_x0,\n", + " f_x1*x1/x0,\n", + " (f_x1*x0**2 - f_x1*x1**2 + f_x2*x0*x1**2)/x0**3,\n", + " x1*(-3*f_x1*x0**2 + 3*f_x1*x1**2 + 3*f_x2*x0**3 - 3*f_x2*x0*x1**2 + f_x3*x0**2*x1**2)/x0**5],\n", " [f_x1,\n", " x1*(-f_x1 + f_x2*x0)/x0**2,\n", - " (-f_x1*x0**2 + 3*f_x1*x1**2 + f_x2*x0**3 - 3*f_x2*x0*x1**2 + f_x3*x0**2*x1**2)/x0**4],\n", + " (-f_x1*x0**2 + 3*f_x1*x1**2 + f_x2*x0**3 - 3*f_x2*x0*x1**2 + f_x3*x0**2*x1**2)/x0**4,\n", + " x1*(9*f_x1*x0**2 - 15*f_x1*x1**2 - 9*f_x2*x0**3 + 15*f_x2*x0*x1**2 + 3*f_x3*x0**4 - 6*f_x3*x0**2*x1**2 + f_x4*x0**3*x1**2)/x0**6],\n", " [f_x2,\n", " x1*(2*f_x1 - 2*f_x2*x0 + f_x3*x0**2)/x0**3,\n", - " (2*f_x1*x0**2 - 12*f_x1*x1**2 - 2*f_x2*x0**3 + 12*f_x2*x0*x1**2 + f_x3*x0**4 - 5*f_x3*x0**2*x1**2 + f_x4*x0**3*x1**2)/x0**5]]" + " (2*f_x1*x0**2 - 12*f_x1*x1**2 - 2*f_x2*x0**3 + 12*f_x2*x0*x1**2 + f_x3*x0**4 - 5*f_x3*x0**2*x1**2 + f_x4*x0**3*x1**2)/x0**5,\n", + " x1*(-36*f_x1*x0**2 + 90*f_x1*x1**2 + 36*f_x2*x0**3 - 90*f_x2*x0*x1**2 - 15*f_x3*x0**4 + 39*f_x3*x0**2*x1**2 + 3*f_x4*x0**5 - 9*f_x4*x0**3*x1**2 + f_x5*x0**4*x1**2)/x0**7],\n", + " [f_x3,\n", + " x1*(-6*f_x1 + 6*f_x2*x0 - 3*f_x3*x0**2 + f_x4*x0**3)/x0**4,\n", + " (-6*f_x1*x0**2 + 60*f_x1*x1**2 + 6*f_x2*x0**3 - 60*f_x2*x0*x1**2 - 3*f_x3*x0**4 + 27*f_x3*x0**2*x1**2 + f_x4*x0**5 - 7*f_x4*x0**3*x1**2 + f_x5*x0**4*x1**2)/x0**6,\n", + " x1*(180*f_x1*x0**2 - 630*f_x1*x1**2 - 180*f_x2*x0**3 + 630*f_x2*x0*x1**2 + 81*f_x3*x0**4 - 285*f_x3*x0**2*x1**2 - 21*f_x4*x0**5 + 75*f_x4*x0**3*x1**2 + 3*f_x5*x0**6 - 12*f_x5*x0**4*x1**2 + f_x6*x0**5*x1**2)/x0**8]]" ] }, - "execution_count": 30, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -95,6 +105,32 @@ "table" ] }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{f_r0: f_x0,\n", + " f_r1: f_x1*sqrt(x0**2 + x1**2)/x0,\n", + " f_r2: -f_x1*x1**2/x0**3 + f_x2 + f_x2*x1**2/x0**2,\n", + " f_r3: 3*f_x1*x1**2*sqrt(x0**2 + x1**2)/x0**5 - 3*f_x2*x1**2*sqrt(x0**2 + x1**2)/x0**4 + f_x3*sqrt(x0**2 + x1**2)/x0 + f_x3*x1**2*sqrt(x0**2 + x1**2)/x0**3,\n", + " f_r4: -12*f_x1*x1**2/x0**5 - 15*f_x1*x1**4/x0**7 + 12*f_x2*x1**2/x0**4 + 15*f_x2*x1**4/x0**6 - 6*f_x3*x1**2/x0**3 - 6*f_x3*x1**4/x0**5 + f_x4 + 2*f_x4*x1**2/x0**2 + f_x4*x1**4/x0**4,\n", + " f_r5: 60*f_x1*x1**2*sqrt(x0**2 + x1**2)/x0**7 + 105*f_x1*x1**4*sqrt(x0**2 + x1**2)/x0**9 - 60*f_x2*x1**2*sqrt(x0**2 + x1**2)/x0**6 - 105*f_x2*x1**4*sqrt(x0**2 + x1**2)/x0**8 + 30*f_x3*x1**2*sqrt(x0**2 + x1**2)/x0**5 + 45*f_x3*x1**4*sqrt(x0**2 + x1**2)/x0**7 - 10*f_x4*x1**2*sqrt(x0**2 + x1**2)/x0**4 - 10*f_x4*x1**4*sqrt(x0**2 + x1**2)/x0**6 + f_x5*sqrt(x0**2 + x1**2)/x0 + 2*f_x5*x1**2*sqrt(x0**2 + x1**2)/x0**3 + f_x5*x1**4*sqrt(x0**2 + x1**2)/x0**5}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "var = _make_sympy_vec(\"x\", 2)\n", + "_generate_nd_derivative_relations(var, 5)" + ] + }, { "cell_type": "code", "execution_count": null, From 9ab8efd8b548b894b3addb1364268a438d3e00e0 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Sun, 26 Jan 2025 23:23:28 -0600 Subject: [PATCH 142/143] Update testing_pde_to_ode.ipynb --- test/testing_pde_to_ode.ipynb | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/test/testing_pde_to_ode.ipynb b/test/testing_pde_to_ode.ipynb index 6df93276..c552b939 100644 --- a/test/testing_pde_to_ode.ipynb +++ b/test/testing_pde_to_ode.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -36,6 +36,32 @@ "from immutabledict import immutabledict" ] }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{f_r0: f_x0,\n", + " f_r1: f_x1*sqrt(x0**2 + x1**2)/x0,\n", + " f_r2: -f_x1*x1**2/x0**3 + f_x2 + f_x2*x1**2/x0**2,\n", + " f_r3: 3*f_x1*x1**2*sqrt(x0**2 + x1**2)/x0**5 - 3*f_x2*x1**2*sqrt(x0**2 + x1**2)/x0**4 + f_x3*sqrt(x0**2 + x1**2)/x0 + f_x3*x1**2*sqrt(x0**2 + x1**2)/x0**3,\n", + " f_r4: -12*f_x1*x1**2/x0**5 - 15*f_x1*x1**4/x0**7 + 12*f_x2*x1**2/x0**4 + 15*f_x2*x1**4/x0**6 - 6*f_x3*x1**2/x0**3 - 6*f_x3*x1**4/x0**5 + f_x4 + 2*f_x4*x1**2/x0**2 + f_x4*x1**4/x0**4,\n", + " f_r5: 60*f_x1*x1**2*sqrt(x0**2 + x1**2)/x0**7 + 105*f_x1*x1**4*sqrt(x0**2 + x1**2)/x0**9 - 60*f_x2*x1**2*sqrt(x0**2 + x1**2)/x0**6 - 105*f_x2*x1**4*sqrt(x0**2 + x1**2)/x0**8 + 30*f_x3*x1**2*sqrt(x0**2 + x1**2)/x0**5 + 45*f_x3*x1**4*sqrt(x0**2 + x1**2)/x0**7 - 10*f_x4*x1**2*sqrt(x0**2 + x1**2)/x0**4 - 10*f_x4*x1**4*sqrt(x0**2 + x1**2)/x0**6 + f_x5*sqrt(x0**2 + x1**2)/x0 + 2*f_x5*x1**2*sqrt(x0**2 + x1**2)/x0**3 + f_x5*x1**4*sqrt(x0**2 + x1**2)/x0**5}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "var = _make_sympy_vec(\"x\", 2)\n", + "_generate_nd_derivative_relations(var, 5)" + ] + }, { "cell_type": "code", "execution_count": 3, From 21bb2e432f7de245544e25da748f34b92a9d2943 Mon Sep 17 00:00:00 2001 From: Hirish Chandrasekaran Date: Thu, 6 Feb 2025 10:28:19 -0600 Subject: [PATCH 143/143] Update testing_pde_to_ode.ipynb --- test/testing_pde_to_ode.ipynb | 104 ++++++++++++++++++++++++++++++---- 1 file changed, 93 insertions(+), 11 deletions(-) diff --git a/test/testing_pde_to_ode.ipynb b/test/testing_pde_to_ode.ipynb index c552b939..a3ff70e3 100644 --- a/test/testing_pde_to_ode.ipynb +++ b/test/testing_pde_to_ode.ipynb @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -52,7 +52,7 @@ " f_r5: 60*f_x1*x1**2*sqrt(x0**2 + x1**2)/x0**7 + 105*f_x1*x1**4*sqrt(x0**2 + x1**2)/x0**9 - 60*f_x2*x1**2*sqrt(x0**2 + x1**2)/x0**6 - 105*f_x2*x1**4*sqrt(x0**2 + x1**2)/x0**8 + 30*f_x3*x1**2*sqrt(x0**2 + x1**2)/x0**5 + 45*f_x3*x1**4*sqrt(x0**2 + x1**2)/x0**7 - 10*f_x4*x1**2*sqrt(x0**2 + x1**2)/x0**4 - 10*f_x4*x1**4*sqrt(x0**2 + x1**2)/x0**6 + f_x5*sqrt(x0**2 + x1**2)/x0 + 2*f_x5*x1**2*sqrt(x0**2 + x1**2)/x0**3 + f_x5*x1**4*sqrt(x0**2 + x1**2)/x0**5}" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -64,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -82,12 +82,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "n_rows = 4\n", - "n_cols = 4\n", + "n_rows = 1\n", + "n_cols = 1\n", "table = []\n", "for i in range(n_rows):\n", " temp = []\n", @@ -141,10 +141,7 @@ "text/plain": [ "{f_r0: f_x0,\n", " f_r1: f_x1*sqrt(x0**2 + x1**2)/x0,\n", - " f_r2: -f_x1*x1**2/x0**3 + f_x2 + f_x2*x1**2/x0**2,\n", - " f_r3: 3*f_x1*x1**2*sqrt(x0**2 + x1**2)/x0**5 - 3*f_x2*x1**2*sqrt(x0**2 + x1**2)/x0**4 + f_x3*sqrt(x0**2 + x1**2)/x0 + f_x3*x1**2*sqrt(x0**2 + x1**2)/x0**3,\n", - " f_r4: -12*f_x1*x1**2/x0**5 - 15*f_x1*x1**4/x0**7 + 12*f_x2*x1**2/x0**4 + 15*f_x2*x1**4/x0**6 - 6*f_x3*x1**2/x0**3 - 6*f_x3*x1**4/x0**5 + f_x4 + 2*f_x4*x1**2/x0**2 + f_x4*x1**4/x0**4,\n", - " f_r5: 60*f_x1*x1**2*sqrt(x0**2 + x1**2)/x0**7 + 105*f_x1*x1**4*sqrt(x0**2 + x1**2)/x0**9 - 60*f_x2*x1**2*sqrt(x0**2 + x1**2)/x0**6 - 105*f_x2*x1**4*sqrt(x0**2 + x1**2)/x0**8 + 30*f_x3*x1**2*sqrt(x0**2 + x1**2)/x0**5 + 45*f_x3*x1**4*sqrt(x0**2 + x1**2)/x0**7 - 10*f_x4*x1**2*sqrt(x0**2 + x1**2)/x0**4 - 10*f_x4*x1**4*sqrt(x0**2 + x1**2)/x0**6 + f_x5*sqrt(x0**2 + x1**2)/x0 + 2*f_x5*x1**2*sqrt(x0**2 + x1**2)/x0**3 + f_x5*x1**4*sqrt(x0**2 + x1**2)/x0**5}" + " f_r2: -f_x1*x1**2/x0**3 + f_x2 + f_x2*x1**2/x0**2}" ] }, "execution_count": 10, @@ -154,7 +151,92 @@ ], "source": [ "var = _make_sympy_vec(\"x\", 2)\n", - "_generate_nd_derivative_relations(var, 5)" + "_generate_nd_derivative_relations(var, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "var = _make_sympy_vec(\"x\", 2)\n", + "var_t = _make_sympy_vec(\"t\", 2)\n", + "abs_dist = sp.sqrt((var[0]-var_t[0])**2 +\n", + " (var[1]-var_t[1])**2)\n", + "k = 1\n", + "g_x_y = (1j/4) * hankel1(0, k * abs_dist)\n", + "derivs = [sp.diff(g_x_y,\n", + " var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " for i in range(6)]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "var = _make_sympy_vec(\"x\", 2)\n", + "var_t = _make_sympy_vec(\"t\", 2)\n", + "g_x_y = sp.log(sp.sqrt((var[0]-var_t[0])**2 + (var[1]-var_t[1])**2))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "times = []\n", + "n_d = 8\n", + "for i in range(n_d):\n", + " start = time.time()\n", + " sp.diff(g_x_y, var_t[0], i).subs(var_t[0], 0).subs(var_t[1], 0)\n", + " end = time.time()\n", + " times.append(end-start)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "x_a = np.array([i+1 for i in range(n_d)])\n", + "times = np.array(times)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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dejQoUiXFRYZGRk9voj4ySefjHRpYfHpp5/qmWeeUWZmpuLj43Xbbbfp2WefDbyEOdxCusLujeLy5cv627/9Wz3yyCP61re+Felywm7//v168skn9dWvflWffvqp1qxZo9mzZ+vEiRMaMWJEpMsLudGjR+vHP/6xvvzlL0uStmzZonvvvVdHjhzRuHHjIlxd+NXU1GjTpk264447Il1KWI0bN05//vOfA/uxsbERrCb8Lly4oK997WuaMWOG9u7dq6SkJJ0+fVq33nprpEsLi5qaGrW3twf2a2trNWvWrC6vu7mRlZeX6xe/+IW2bNmicePG6eDBg3rkkUfkdDq1dOnSsNdDeBmAOXPmaM6cOZEuI2L27dvXZX/z5s1KSkrSoUOH9Pd///cRqip8CgsLu+yvW7dOFRUVeuedd6IuvFy6dEkPPvigfvWrX2nt2rWRLieshg0bFpW9LZ3Ky8uVmpqqzZs3B45lZGRErqAw+9KXvtRl/8c//rGysrKUn58foYrC68CBA7r33nt19913S7r2v/2//du/6eDBgxGph2EjBK3zXVSjRo2KcCXh197erh07dujy5cvKy8uLdDlh9+STT+ruu+/WN77xjUiXEnYnT55USkqKMjMzVVRUpPfeey/SJYXV7373O02aNEkPPPCAkpKSNGHCBP3qV7+KdFkRcfXqVW3btk2PPvrooL8AeKiaNm2a/uM//kPvvvuuJOmvf/2r3nrrLf3DP/xDROqh5wVBsSxLTz/9tKZNm6bc3NxIlxM2x44dU15entra2nTLLbdo9+7dysnJiXRZYbVjxw4dPnxYNTU1kS4l7KZMmaKtW7dq7Nix+vDDD7V27VrdddddOn78uBITEyNdXli89957qqio0NNPP60f/vCHqq6u1j//8z/LbrfrO9/5TqTLC6vf/va3unjxohYuXBjpUsJm5cqV8nq9ys7OVmxsrNrb27Vu3Tr90z/9U0TqIbwgKEuWLNF//dd/6a233op0KWH1N3/zNzp69KguXryoXbt26eGHH9b+/fujJsA0NDRo6dKlqqysVFxcXKTLCbvPDht/5StfUV5enrKysrRlyxY9/fTTEawsfDo6OjRp0iStX79ekjRhwgQdP35cFRUVURdefv3rX2vOnDlKSUmJdClhs3PnTm3btk3bt2/XuHHjdPToUS1btkwpKSl6+OGHw14P4QUD9v3vf1+/+93v9Oabb2r06NGRLiesbr755sCE3UmTJqmmpkb/+q//ql/+8pcRriw8Dh06pObmZt15552BY+3t7XrzzTe1ceNG+f3+qJrAOmLECH3lK1/RyZMnI11K2Hg8nm5h/fbbb9euXbsiVFFknD17Vn/+85/16quvRrqUsPrBD36gVatWqaioSNK1EH/27FmVlZURXjA0WZal73//+9q9e7eqqqqUmZkZ6ZIizrIs+f3+SJcRNl//+td17NixLsceeeQRZWdna+XKlVEVXCTJ7/frv//7v/V3f/d3kS4lbL72ta91WyLh3XffVXp6eoQqiozOBxY6J65Gi48//lgxMV2nycbGxvKo9FB26dIlnTp1KrBfX1+vo0ePatSoUUpLS4tgZeHx5JNPavv27XrttdfkcDjU1NQkSXI6nYqPj49wdaH3wx/+UHPmzFFqaqpaW1u1Y8cOVVVVdXsK60bmcDi6zXEaMWKEEhMTo2Lu0/Lly1VYWKi0tDQ1Nzdr7dq18vl8Efkvzkh56qmndNddd2n9+vX6x3/8R1VXV2vTpk3atGlTpEsLm46ODm3evFkPP/ywhg2Lrp/PwsJCrVu3TmlpaRo3bpyOHDmiDRs26NFHH41MQRb69Ze//MWS1G17+OGHI11aWPR075KszZs3R7q0sHj00Uet9PR06+abb7a+9KUvWV//+tetysrKSJcVcfn5+dbSpUsjXUZYfPvb37Y8Ho910003WSkpKda8efOs48ePR7qssNuzZ4+Vm5tr2e12Kzs729q0aVOkSwqrP/3pT5Ykq66uLtKlhJ3P57OWLl1qpaWlWXFxcdZtt91mrVmzxvL7/RGpx2ZZlhWZ2AQAABA81nkBAABGIbwAAACjEF4AAIBRCC8AAMAohBcAAGAUwgsAADAK4QUAABiF8AIAAIxCeAEAAEYhvAAAAKMQXgAAgFEILwAAwCj/H3ci9oGUxxGCAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.scatter(x_a,np.log(times))" ] }, {