Program Listing for File convention.hpp

Return to documentation for file (SeQuant/domain/mbpt/convention.hpp)

//
// Created by Eduard Valeyev on 2019-04-01.
//

#ifndef SEQUANT_CONVENTION_HPP
#define SEQUANT_CONVENTION_HPP

#include <SeQuant/domain/mbpt/fwd.hpp>

#include <SeQuant/core/context.hpp>
#include <SeQuant/core/index_space_registry.hpp>

namespace sequant {
namespace mbpt {

enum class Convention {
  Minimal,
  SR,
  MR,
  MinimalMR,
  F12,
  QCiFS
};

enum class SpinConvention {
  None,
  Default,
  Legacy,
};

void load(Convention conv = Convention::Minimal,
          SpinConvention spconv = SpinConvention::Default);

std::wstring decorate_label(std::wstring label, bool up);

void add_fermi_spin(IndexSpaceRegistry& isr);


void add_ao_spaces(std::shared_ptr<IndexSpaceRegistry>& isr, bool vbs = false,
                   bool abs = false);

void add_df_spaces(std::shared_ptr<IndexSpaceRegistry>& isr);

void add_thc_spaces(std::shared_ptr<IndexSpaceRegistry>& isr);


void add_pao_spaces(std::shared_ptr<IndexSpaceRegistry>& isr);

void add_batching_spaces(std::shared_ptr<IndexSpaceRegistry>& isr);


std::shared_ptr<IndexSpaceRegistry> make_min_sr_spaces(
    SpinConvention scv = SpinConvention::Default);

std::shared_ptr<IndexSpaceRegistry> make_F12_sr_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::shared_ptr<IndexSpaceRegistry> make_mr_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::shared_ptr<IndexSpaceRegistry> make_min_mr_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::shared_ptr<IndexSpaceRegistry> make_sr_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::shared_ptr<IndexSpaceRegistry> make_legacy_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::pair<std::shared_ptr<IndexSpaceRegistry>,
          std::shared_ptr<IndexSpaceRegistry>>
make_fermi_and_bose_spaces(SpinConvention spconv = SpinConvention::Default);


inline void check_for_batching_space() {
  SEQUANT_ASSERT(
      sequant::get_default_context().index_space_registry()->contains(L"z"));
}

}  // namespace mbpt
}  // namespace sequant

#endif  // SEQUANT_CONVENTION_HPP