import numpy as np META = {'name': 'anisotropic_oblique_bvp', 'domain': 'pde', 'description': '2D manufactured elliptic boundary-value regression with anisotropic oblique and normal no-flux boundaries.'} C = 0.8 def h(y): return y**3 * (1-y)**3 def hp(y): return 3*y**2*(1-y)**3 - 3*y**3*(1-y)**2 def solution(xy): x, y = xy[:, 0], xy[:, 1] return (h(y) - C*x*hp(y)).astype(np.float32) def get_dataset(seed, n_train=400, n_test=400): rng = np.random.default_rng(int(seed)) n_int = max(1, int(n_train*0.75)); n_edge = int(n_train)-n_int interior = rng.random((n_int,2)) edges = np.empty((n_edge,2), np.float32) for i in range(n_edge): t=rng.random(); s=i%4 edges[i] = (0,t) if s==0 else ((1,t) if s==1 else ((t,0) if s==2 else (t,1))) xtr=np.concatenate([interior,edges]).astype(np.float32) xte=rng.random((int(n_test),2), dtype=np.float32) return {'xtr':xtr,'ytr':solution(xtr),'xte':xte,'yte':solution(xte),'task':'regression','metric':'mse','out_dim':1}