# How to change the default normalization for NDEigensystem?

I'm currently using NDEigensystem to solve a PDE that describes a particle travelling on a hyperbolic (negatively curved) surface. However, the eigenfunctions that are returned by NDEigensystem are not what I'm expecting and I firmly believe this is due to the default normalization that NDEigensystem uses.

According to the documentation, NDEigensystem approximately returns eigenfunctions $$\psi(x,y)$$ that satisfy the condition $$\int_D \psi^* \psi \ dxdy = 1$$ (D denotes the region where the eigenfunction lives). However, on this curved surface, the way that I'm looking to normalize the eigenfunction is through the condition $$\int_D \psi^* \psi \frac{1}{y^2} dx dy$$

How can I implement this condition into NDEigensystem? Reading through the documentation (documentation), I'm a little confused about the use of system matrices and the damping/stiffness parameters.

For reference, this is the code I'm currently using (keyhole basically defines the domain I'm working in and test is the actual PDE that I'm solving).

ymax = 100;
numVals = 300;
keyhole =
ImplicitRegion[x^2 + y^2 >= 1, {{x, -1/2, 1/2}, {y, 0, ymax}}];
test = NDEigensystem[{-y^2 (D[u[x, y], {x, 2}] + D[u[x, y], {y, 2}]),
PeriodicBoundaryCondition[u[x, y], x == -1/2,
TranslationTransform[{1, 0}]],
PeriodicBoundaryCondition[u[x, y], x^2 + y^2 == 1,
Function[x, {{-1, 0}, {0, 1}}.x]]},
u[x, y], {x, y} \[Element] keyhole, numVals,
Method -> {"PDEDiscretization" -> {"FiniteElement",
"MeshOptions" -> {"MaxCellMeasure" -> 0.1}}}];


I am not 100% sure this is correct, but perhaps like this:

ymax = 100;
numVals = 3;
keyhole =
ImplicitRegion[x^2 + y^2 >= 1, {{x, -1/2, 1/2}, {y, 0, ymax}}];
test = NDEigensystem[{-y^2 (D[u[x, y], {x, 2}] + D[u[x, y], {y, 2}]),
PeriodicBoundaryCondition[u[x, y], x == -1/2,
TranslationTransform[{1, 0}]],
PeriodicBoundaryCondition[u[x, y], x^2 + y^2 == 1,
Function[x, {{-1, 0}, {0, 1}}.x]]},
u[x, y], {x, y} \[Element] keyhole, numVals,
Method -> {"PDEDiscretization" -> {"FiniteElement",
"MeshOptions" -> {"MaxCellMeasure" -> 1}},
"VectorNormalization" ->
Function[{values, vectors, stiffness, damping},
s = stiffness; d = damping;
norm =
vectors/(Diagonal[
vectors.damping.ConjugateTranspose[vectors]]^(1/2) *
NIntegrate[1/y^2, {x, y} \[Element] keyhole])]
}]


I'd very useful if you can create a simpler example to test this.