(** Data structure for Atomic Orbitals. *)

type t 

(** {1 Accessors} *)

val basis : t -> Basis.t 
(** One-electron basis set *)

val overlap : t -> Overlap.t 
(** Overlap matrix *)

val ortho : t -> Orthonormalization.t 
(** Orthonormalization matrix of the overlap *)

val eN_ints : t -> NucInt.t 
(** Electron-nucleus potential integrals *)

val ee_ints : t -> ERI.t 
(** Electron-electron potential integrals *)

val f12_ints : t -> F12.t 
(** Electron-electron potential integrals *)

val kin_ints : t -> KinInt.t 
(** Kinetic energy integrals *)

val cartesian : t -> bool 
(** If true, use cartesian Gaussians (6d, 10f, ...) *)


(** {1 Creators} *)

val make : cartesian:bool -> basis:Basis.t ->  ?f12:F12factor.t ->  Nuclei.t -> t
(** Creates the data structure for atomic orbitals from a {Basis.t} and the
    molecular geometry {Nuclei.t} *)


(** {2 Tests} *)

val test_case : t -> unit Alcotest.test_case list
