@@ -235,25 +235,25 @@ def ellipse_params_via_border_pca_from(border_grid, xp=np, eps=1e-12):
235235 dx = border_grid [:, 1 ] - origin [1 ]
236236
237237 # Build data matrix in (x, y) order for PCA
238- X = xp .stack ([dx , dy ], axis = 1 ) # (M,2)
238+ X = xp .stack ([dx , dy ], axis = 1 ) # (M,2)
239239
240240 # Covariance matrix
241241 denom = xp .maximum (X .shape [0 ] - 1 , 1 )
242- C = (X .T @ X ) / denom # (2,2)
242+ C = (X .T @ X ) / denom # (2,2)
243243
244244 # Eigen-decomposition (ascending eigenvalues)
245245 evals , evecs = xp .linalg .eigh (C )
246246
247247 # Major axis = eigenvector with largest eigenvalue
248- v_major = evecs [:, - 1 ] # (2,) in (x,y)
248+ v_major = evecs [:, - 1 ] # (2,) in (x,y)
249249
250250 phi = xp .arctan2 (v_major [1 ], v_major [0 ])
251251
252252 # Rotate border points into ellipse-aligned frame
253253 c = xp .cos (phi )
254254 s = xp .sin (phi )
255255
256- xprime = c * dx + s * dy
256+ xprime = c * dx + s * dy
257257 yprime = - s * dx + c * dy
258258
259259 # Semi-axes from maximal extent
@@ -292,7 +292,7 @@ def relocated_grid_via_ellipse_border_from(grid, origin, a, b, phi, xp=np, eps=1
292292 s = xp .sin (phi )
293293
294294 # rotate into ellipse-aligned frame
295- xprime = c * dx + s * dy
295+ xprime = c * dx + s * dy
296296 yprime = - s * dx + c * dy
297297
298298 # ellipse radius in normalized coords
@@ -306,13 +306,10 @@ def relocated_grid_via_ellipse_border_from(grid, origin, a, b, phi, xp=np, eps=1
306306 yprime2 = yprime * scale
307307
308308 # rotate back to original frame
309- dx2 = c * xprime2 - s * yprime2
310- dy2 = s * xprime2 + c * yprime2
309+ dx2 = c * xprime2 - s * yprime2
310+ dy2 = s * xprime2 + c * yprime2
311311
312- moved = xp .stack (
313- [origin [0 ] + dy2 , origin [1 ] + dx2 ],
314- axis = 1
315- )
312+ moved = xp .stack ([origin [0 ] + dy2 , origin [1 ] + dx2 ], axis = 1 )
316313
317314 return xp .where (outside [:, None ], moved , grid )
318315
@@ -416,11 +413,17 @@ def relocated_grid_from(self, grid: Grid2D, xp=np) -> Grid2D:
416413 if len (self .sub_border_grid ) == 0 :
417414 return grid
418415
419- origin , a , b , phi = ellipse_params_via_border_pca_from (grid .array [self .border_slim ], xp = xp )
416+ origin , a , b , phi = ellipse_params_via_border_pca_from (
417+ grid .array [self .border_slim ], xp = xp
418+ )
420419
421- values = relocated_grid_via_ellipse_border_from (grid = grid .array , origin = origin , a = a , b = b , phi = phi , xp = xp )
420+ values = relocated_grid_via_ellipse_border_from (
421+ grid = grid .array , origin = origin , a = a , b = b , phi = phi , xp = xp
422+ )
422423
423- over_sampled = relocated_grid_via_ellipse_border_from (grid = grid .over_sampled .array , origin = origin , a = a , b = b , phi = phi , xp = xp )
424+ over_sampled = relocated_grid_via_ellipse_border_from (
425+ grid = grid .over_sampled .array , origin = origin , a = a , b = b , phi = phi , xp = xp
426+ )
424427
425428 return Grid2D (
426429 values = values ,
@@ -447,9 +450,13 @@ def relocated_mesh_grid_from(
447450 if len (self .sub_border_grid ) == 0 :
448451 return mesh_grid
449452
450- origin , a , b , phi = ellipse_params_via_border_pca_from (grid .array [self .border_slim ], xp = xp )
453+ origin , a , b , phi = ellipse_params_via_border_pca_from (
454+ grid .array [self .border_slim ], xp = xp
455+ )
451456
452- relocated_grid = relocated_grid_via_ellipse_border_from (grid = mesh_grid .array , origin = origin , a = a , b = b , phi = phi , xp = xp )
457+ relocated_grid = relocated_grid_via_ellipse_border_from (
458+ grid = mesh_grid .array , origin = origin , a = a , b = b , phi = phi , xp = xp
459+ )
453460
454461 return Grid2DIrregular (
455462 values = relocated_grid ,
0 commit comments