Created an Operator base class, and moved all the logic for calculating impedance and source field on a CompositePart to there.
ImpedanceParts can now store mutual interaction terms, and an Operator can now calculate these terms
Fix bug in automatically naming a simulation
Models for self and mutual impedances of parts with multiple modes. Mutual model currently does direct evaluation
Model with mutual interaction now working, with interaction terms calculated directly
Plotting vectors now normalises according to average value, not maximum value
Model working for directly calculated mutual interaction, and model for self-interaction. Example showing that self-impedance being inaccurate away from resonance causes significant error in hybridised problem.
renamed  `project_modes` methods of ImpedanceMatrix and VectorParts to `weight` to remove ambiguity
Minor fixed to `weight`
Iterative eigenvalue problem now works correctly if the Gram matrix is a sparse matrix
When finding singularities, instead of the number of modes, can specify which modes are required
tweaking linear Newton iteration
Removing redundant code for projecting a source onto modes. Check for a slice with fancy indexing of ImpedanceParts
Introduced a "bordered matrix" version of Newton iteration, which avoids inverting a singular matrix, so should give better estimates of the eigenvalues. Does not result in any discernable difference.
Added the bordered method for the nonlinear problem, which does not seem to work. Some minor tweaks were added to the newton method
Example for ASRR showing that EEM eigenmodes are only really orthogonal to each other if direct eigenvalue decomposition is performed
Combined basis functions now have their gram matrix represented by a dense array. Sparse matrices have too many incompatibilities with numpy arrays, and cause multiple failures.
Eigencurrent determination now uses Gram matrix instead of its square root. An unsuccessful attempt was made to incorporate a starting guess into the dense eigenvalue decomposition to avoid spurious eigenvalues from the null-space of the scalar potential.
Scalar model now takes the operator directly to query for impedance
z_der is no longer stored