(** A datastructure to represent pairs of atomic shells. *) type t val make : ?cutoff:float -> AtomicShell.t -> AtomicShell.t -> t option (** Creates an atomic shell pair from two atomic shells. The contracted shell pairs contains the only pairs of primitives for which the norm is greater than [cutoff]. If all the contracted shell pairs are not significant, the function returns [None]. *) val of_atomic_shell_array : ?cutoff:float -> AtomicShell.t array -> t option array array (** Creates all possible atomic shell pairs from an array of atomic shells. If an atomic shell pair is not significant, sets the value to [None]. *) val atomic_shell_a : t -> AtomicShell.t (** Returns the first {!AtomicShell.t} which was used to build the atomic shell pair. *) val atomic_shell_b : t -> AtomicShell.t (** Returns the second {!AtomicShell.t} which was used to build the atomic shell pair. *) val contracted_shell_pairs : t -> ContractedShellPair.t list (** Returns an array of {!ContractedShellPair.t}, containing all the pairs of contracted functions used to build the atomic shell pair. *) val a_minus_b : t -> Coordinate.t (* A-B *) val a_minus_b_sq : t -> float (* |A-B|^2 *) val norm_scales : t -> float array (* norm_coef.(i) / norm_coef.(0) *) val ang_mom : t -> AngularMomentum.t (* Total angular Momentum *) val monocentric : t -> bool (** If true, the two atomic shells have the same center. *)