PSI4 Project Logo

Python Driver

wrappers_cfour

Module with functions for Psi4/Cfour interface. Portions that require calls to Boost Python psi4 module are here, otherwise in qcdb module. Also calls to qcdb module are here and not elsewhere in driver. Organizationally, this module isolates qcdb code from psi4 code.

reap_job_validate(dir, prefix, item, linkage, keys)[source]

For a given output file whose path is constructed with dir + ‘/’ + prefix + ‘-‘ + item + ‘.out’, tests that the file exists and has prefix RESULTS lines for each piece of information requested in list keys and that those lines correspond to the appropriate linkage and item. Returns keys along with their scanned values in dict reapings, along with error and success messages in instructions and a boolean isOk indicating whether all keys reaped sucessfully.

run_cfour_module(xmod)[source]
sown_jobs_status(dir, prefix, zmats, validate_func=None, linkage=None, keys=None)[source]

Evaluate the output file status of jobs in zmats which should exist at dir + ‘/’ + prefix + ‘-‘ + job + ‘.out’. Returns string with formatted summary of job status and boolean of whether all complete. Return boolean isOk signals whether all zmats have completed and, if validate_func present, are validated.

vpt2(name, **kwargs)[source]

Perform vibrational second-order perturbation computation through Cfour to get anharmonic frequencies. This version uses c4 for the disp and pt2 but gets gradients from p4.

Parameters:c4full (boolean) –

'on' || \Rightarrow 'off' \Leftarrow

Indicates whether when name indicates a Cfour method and mode indicates a sow/reap approach, sown files are direct ZMAT files and FJOBARC files are expected to reap, so that Cfour only, not Cfour-through-Psi4, is needed for distributed jobs.

Caution

Some features are not yet implemented. Buy a developer a coffee.

  • Presently uses all gradients. Could mix in analytic 2nd-derivs.
  • Collect resutls.
  • Manage scratch / subdir better.
  • Untangle CCSD(T) vs CCSD[T] and FJOBARC issue
  • Allow CFOUR_BASIS
  • Consider forcing some tighter convcrit, c4 and p4
  • sow/reap
  • mixed ang/bohr signals
  • error by converting to ang in psi?
  • Expand CURRENT DIPOLE XYZ beyond SCF
  • Remember additional FJOBARC record TOTENER2 if EXCITE .ne. NONE
  • S/R P4grad
  • S/R C4grad
  • C P4grad
  • C C4grad
  • switch C –> S/R with recovery using shelf
  • pure C mode where only need P4 for wrapper
vpt2_instructions(stage, dir, zmats)[source]

Stores all the instructions to the user for running vpt2() in sowreap mode. Depending on the stage, Pieces together instruction strings for the appropriate stage individualized by working directory dir and sown inputs zmats information.

vpt2_reaprun_files(item, linkage, isSowReap, isC4notP4, isC4fully, zmat, outdir, scrdir, c4scrdir, lowername, kwargs)[source]

Provided with the particular displacement number item and the associated zmat file with geometry and linkage, returns the FJOBARC contents. Depending on the mode settings of isC4notP4, isSowReap, and isC4fully, either runs (using lowername and kwargs) or reaps contents. outdir is where psi4 was invoked, scrdir is the psi4 scratch directory, and c4scrdir is Cfour scratch directory within.

vpt2_sow_files(item, linkage, isC4notP4, isC4fully, zmat, inputSansMol, inputGenbas)[source]

Provided with the particular displacement number item and the associated zmat file contents and linkage, and common contents inputSansMol, returns contents of input file to be sown.

inputparser

bad_option_syntax(line)[source]

Function to report bad syntax to screen and output file.

check_parentheses_and_brackets(input_string, exit_on_error)[source]

Function to check that all parenthesis and brackets in input_string are paired. On that condition, exit_on_error =1, otherwise 0.

parse_multiline_array(input_list)[source]

Function to squash multiline arrays into a single line until all parentheses and brackets are fully paired.

process_basis_block(matchobj)[source]

Function to process match of basis name { ... }.

process_cfour_command(matchobj)[source]

Function to process match of cfour name? { ... }.

process_external_command(matchobj)[source]

Function to process match of external name? { ... }.

process_extract_command(matchobj)[source]

Function to process match of extract_subsets.

process_filename(matchobj)[source]

Function to process match of filename ....

process_input(raw_input, print_level=1)[source]

Function to preprocess raw input, the text of the input file, then parse it, validate it for format, and convert it into legitimate Python. raw_input is printed to the output file unless print_level =0. Does a series of regular expression filters, where the matching portion of the input is replaced by the output of the corresponding function (in this module) call. Returns a string concatenating module import lines, a copy of the user’s .psi4rc files, a setting of the scratch directory, a dummy molecule, and the processed raw_input.

process_literal_blocks(matchobj)[source]

Function to process match of literals_psi4_yo-....

process_memory_command(matchobj)[source]

Function to process match of memory ....

process_molecule_command(matchobj)[source]

Function to process match of molecule name? { ... }.

process_multiline_arrays(inputfile)[source]

Function to find array inputs that are spread across multiple lines and squash them into a single line.

process_option(spaces, module, key, value, line)[source]

Function to process a line with set or in a set block into global/local domain and keyword/value.

process_pcm_command(matchobj)[source]

Function to process match of pcm name? { ... }.

process_print_command(matchobj)[source]

Function to process match of print and transform it to psi4.print_out().

process_pubchem_command(matchobj)[source]

Function to process match of pubchem in molecule block.

process_set_command(matchobj)[source]

Function to process match of all individual set (module_list) key {[value_list] or $value or value}.

process_set_commands(matchobj)[source]

Function to process match of set name? { ... }.

process_word_quotes(matchobj)[source]

Function to determine if argument needs wrapping in quotes as string.

quotify(string)[source]

Function to wrap anything that looks like a string in quotes and to remove leading dollar signs from python variables.

dashparam

Module to hold and distribute the -D dispersion correction parameters.

dash_server(func, dashlvl, mode='psi4')[source]

Function to serve up dispersion correction parameters in whatever form needed. When mode is ‘dftd3’, returns a string suitable for writing to ./dftd3_parameters to calculuate the correction at dashlvl with the default parameters for functional func. When mode is ‘psi4’, returns a tuple of arguments suitable for building a Dispersion object with dashlvl parameters for functional func.

There are four computational dashlvl choices. ‘d2p4’ calls the -D2 correction within psi4 (hence, faked for mode=’dftd3’). The other three, ‘d2gr’, ‘d3zero’, and ‘d3bj’ call the three dftd3 modes of operation (corresponding to -old, -zero, -bj). Additionally, there are three aliased dashlvl choices since the aliases in dash_alias above are imposed.

driver

gradient(name, **kwargs)[source]

Function complementary to optimize(). Carries out one gradient pass, deciding analytic or finite difference.

hessian(name, **kwargs)[source]

Function complementary to frequency(). Computes force constants, deciding analytic, finite difference of gradients, or finite difference of energies.

molden(filename)[source]

Function to write wavefunction information in molden format to filename

parse_arbitrary_order(name)[source]

Function to parse name string into a method family like CI or MRCC and specific level information like 4 for CISDTQ or MRCCSDTQ.

parse_cotton_irreps(irrep)[source]

Function to return validated Cotton ordering index from string or integer irreducible representation irrep.

frac

frac_nuke(mol, **kwargs)[source]
frac_traverse(mol, **kwargs)[source]
ip_fitting(mol, omega_l, omega_r, **kwargs)[source]

p4xcpt

Module with non-generic exceptions classes.

exception PsiException[source]

Error class for Psi.

exception ValidationError(msg)[source]

Error called for problems with the input file. Prints error message msg to standard output stream and output file.

aliases

Module with functions that call upon those in modules proc, driver, and wrappers.

Place in this file quickly defined procedures such as
  • aliases for complex methods
  • simple modifications to existing methods
fake_file11(filename='fake_file11.dat')[source]

Function to print a file filename of the old file11 format.

gaussian_n

run_gaussian_2(name, **kwargs)[source]

p4regex

pubchem

class PubChemObj(cid, mf, iupac)[source]
getCartesian()[source]

Function to return a string of the atom symbol and XYZ coordinates of the PubChem object.

getMoleculeString()[source]

Function to obtain a molecule string through getCartesian() or fail.

getSDF()[source]

Function to return the SDF (structure-data file) of the PubChem object.

getXYZFile()[source]

Function to obtain preferentially a molecule string through getCartesian() or a query string otherwise.

name()[source]

Function to return the IUPAC name of the PubChem object.

getPubChemResults(name)[source]

Function to query the PubChem database for molecules matching the input string. Builds a PubChem object if found.

functional

Module to provide lightweight definitions of functionals and SuperFunctionals

build_b2plyp_superfunctional(name, npoints, deriv)[source]
build_b2plypd2gr_superfunctional(name, npoints, deriv)[source]
build_b2plypd2p4_superfunctional(name, npoints, deriv)[source]
build_b2plypd3bj_superfunctional(name, npoints, deriv)[source]
build_b2plypd3zero_superfunctional(name, npoints, deriv)[source]
build_b3_x_functional(name)[source]
build_b3lyp5_superfunctional(name, npoints, deriv)[source]
build_b3lyp5d2gr_superfunctional(name, npoints, deriv)[source]
build_b3lyp5d2p4_superfunctional(name, npoints, deriv)[source]
build_b3lyp5d3bj_superfunctional(name, npoints, deriv)[source]
build_b3lyp5d3zero_superfunctional(name, npoints, deriv)[source]
build_b3lyp_superfunctional(name, npoints, deriv)[source]
build_b3lypchg_superfunctional(name, npoints, deriv)[source]
build_b3lypd1_superfunctional(name, npoints, deriv)[source]
build_b3lypd2gr_superfunctional(name, npoints, deriv)[source]
build_b3lypd2p4_superfunctional(name, npoints, deriv)[source]
build_b3lypd3bj_superfunctional(name, npoints, deriv)[source]
build_b3lypd3zero_superfunctional(name, npoints, deriv)[source]
build_b88_x_functional(name)[source]
build_b970_superfunctional(name, npoints, deriv)[source]
build_b971_superfunctional(name, npoints, deriv)[source]
build_b972_superfunctional(name, npoints, deriv)[source]
build_b97_x_functional(name)[source]
build_b97d2gr_superfunctional(name, npoints, deriv)[source]
build_b97d2p4_superfunctional(name, npoints, deriv)[source]
build_b97d3bj_superfunctional(name, npoints, deriv)[source]
build_b97d3zero_superfunctional(name, npoints, deriv)[source]
build_blyp_superfunctional(name, npoints, deriv)[source]
build_blypd1_superfunctional(name, npoints, deriv)[source]
build_blypd2gr_superfunctional(name, npoints, deriv)[source]
build_blypd2p4_superfunctional(name, npoints, deriv)[source]
build_blypd3bj_superfunctional(name, npoints, deriv)[source]
build_blypd3zero_superfunctional(name, npoints, deriv)[source]
build_bp86_superfunctional(name, npoints, deriv)[source]
build_bp86d1_superfunctional(name, npoints, deriv)[source]
build_bp86d2gr_superfunctional(name, npoints, deriv)[source]
build_bp86d2p4_superfunctional(name, npoints, deriv)[source]
build_bp86d3bj_superfunctional(name, npoints, deriv)[source]
build_bp86d3zero_superfunctional(name, npoints, deriv)[source]
build_dldf_superfunctional(name, npoints, deriv)[source]
build_dldfd09_superfunctional(name, npoints, deriv)[source]
build_dldfd_superfunctional(name, npoints, deriv)[source]
build_dsd_blyp_superfunctional(name, npoints, deriv)[source]
build_dsd_pbep86_superfunctional(name, npoints, deriv)[source]
build_dsd_pbepbe_superfunctional(name, npoints, deriv)[source]
build_ft97_superfunctional(name, npoints, deriv)[source]
build_functional(alias)[source]
build_hcth120_superfunctional(name, npoints, deriv)[source]
build_hcth120d3bj_superfunctional(name, npoints, deriv)[source]
build_hcth120d3zero_superfunctional(name, npoints, deriv)[source]
build_hcth147_superfunctional(name, npoints, deriv)[source]
build_hcth407_superfunctional(name, npoints, deriv)[source]
build_hcth_superfunctional(name, npoints, deriv)[source]
build_hfd_superfunctional(name, npoints, deriv)[source]
build_m05_2x_superfunctional(name, npoints, deriv)[source]
build_m05_2xd3zero_superfunctional(name, npoints, deriv)[source]
build_m05_superfunctional(name, npoints, deriv)[source]
build_m05d3zero_superfunctional(name, npoints, deriv)[source]
build_pbe0_2_superfunctional(name, npoints, deriv)[source]
build_pbe0_superfunctional(name, npoints, deriv)[source]
build_pbe0d2gr_superfunctional(name, npoints, deriv)[source]
build_pbe0d2p4_superfunctional(name, npoints, deriv)[source]
build_pbe0d3bj_superfunctional(name, npoints, deriv)[source]
build_pbe0d3zero_superfunctional(name, npoints, deriv)[source]
build_pbe_superfunctional(name, npoints, deriv)[source]
build_pbe_x_functional(name)[source]
build_pbed1_superfunctional(name, npoints, deriv)[source]
build_pbed2gr_superfunctional(name, npoints, deriv)[source]
build_pbed2p4_superfunctional(name, npoints, deriv)[source]
build_pbed3bj_superfunctional(name, npoints, deriv)[source]
build_pbed3zero_superfunctional(name, npoints, deriv)[source]
build_pbesol_x_functional(name)[source]
build_primitive_functional(name)[source]
build_primitive_superfunctional(name, npoints, deriv)[source]
build_pw91_superfunctional(name, npoints, deriv)[source]
build_pw91_x_functional(name)[source]
build_revpbe_x_functional(name)[source]
build_rpbe_x_functional(name)[source]
build_s_x_functional(name)[source]
build_sogga_superfunctional(name, npoints, deriv)[source]
build_sogga_x_functional(name)[source]
build_superfunctional(alias, npoints, deriv)[source]
build_svwn_superfunctional(name, npoints, deriv)[source]
build_vwn3_c_functional(name)[source]
build_vwn3rpa_c_functional(name)[source]
build_vwn5_c_functional(name)[source]
build_vwn5rpa_c_functional(name)[source]
build_wb88_x_functional(name)[source]
build_wb88_x_superfunctional(name, npoints, deriv)[source]
build_wb97_superfunctional(name, npoints, deriv)[source]
build_wb97x_2lp_superfunctional(name, npoints, deriv)[source]
build_wb97x_2tqz_superfunctional(name, npoints, deriv)[source]
build_wb97x_superfunctional(name, npoints, deriv)[source]
build_wb97xd_superfunctional(name, npoints, deriv)[source]
build_wblyp_superfunctional(name, npoints, deriv)[source]
build_wpbe0_superfunctional(name, npoints, deriv)[source]
build_wpbe2_superfunctional(name, npoints, deriv)[source]
build_wpbe_c_superfunctional(name, npoints, deriv)[source]
build_wpbe_superfunctional(name, npoints, deriv)[source]
build_wpbe_x_functional(name)[source]
build_wpbe_x_superfunctional(name, npoints, deriv)[source]
build_wpbesol0_superfunctional(name, npoints, deriv)[source]
build_wpbesol_superfunctional(name, npoints, deriv)[source]
build_wpbesol_x_functional(name)[source]
build_wpbesol_x_superfunctional(name, npoints, deriv)[source]
build_wpw92_c_superfunctional(name, npoints, deriv)[source]
build_ws_x_functional(name)[source]
build_ws_x_superfunctional(name, npoints, deriv)[source]
build_wsvwn_superfunctional(name, npoints, deriv)[source]
functional_list()[source]
superfunctional_list()[source]
test_ccl_functional(functional, ccl_functional)[source]

interactive

run()[source]

molutil

Module with utility functions that act on molecule objects.

BFS(self)[source]

Perform a breadth-first search (BFS) on the real atoms in molecule, returning an array of atom indices of fragments. Relies upon van der Waals radii and so faulty for close (esp. hydrogen-bonded) fragments. Original code from Michael S. Marshall.

activate(mol)[source]

Function to set molecule object mol as the current active molecule.

dynamic_variable_bind(cls)[source]

Function to dynamically add extra members to the psi4.Molecule class.

extract_cluster_indexing(mol, cluster_size=0)[source]

Function to returns a LIST of all subclusters of the molecule mol of real size cluster_size. If cluster_size = 0, returns all possible combinations of cluster size.

extract_clusters(mol, ghost=True, cluster_size=0)[source]

Function to return all subclusters of the molecule mol of real size cluster_size and all other atoms ghosted if ghost equals true, all other atoms discarded if ghost is false. If cluster_size = 0, returns all possible combinations of cluster size.

geometry(geom, name='default')[source]

Function to create a molecule object of name name from the geometry in string geom.

new_get_attr(self, name)[source]

Function to redefine __getattr__ method of molecule class.

new_set_attr(self, name, value)[source]

Function to redefine __setattr__ method of molecule class.

computation_cache

class AOMultipoleGetter(max_order)[source]

NOTE: This getter chunks the data incorrectly

get_shape(basis)[source]
class AOOEIGetter(kernel)[source]
VALID_KERNELS = ['overlap', 'kinetic', 'potential']
get_shape(basis)[source]
class AOOEIGetterWithComputer(integral_type)[source]
VALID_INTEGRAL_TYPES = ['overlap', 'kinetic', 'potential']
get_shape(basis)[source]
class AOTEIGetter(kernel_name, physicist_notation=False)[source]
get_shape(basis)[source]
class AOTEIGetterWithComputer(integral_type)[source]
VALID_INTEGRAL_TYPES = ['eri', 'f12', 'f12g12', 'f12_double_commutator', 'f12_squared', 'erf_eri', 'erf_complement_eri']
get_shape(basis)[source]
static shell_slice(bs, ish)[source]
class ArbitraryBasisAOOEIGetter(integral_type, bs1, bs2=None)[source]
get_shape(basis_sets)[source]
name[source]
class ArbitraryBasisAOTEIGetter(integral_type, bs1, bs2=None, bs3=None, bs4=None)[source]
get_shape(basis_sets)[source]
name[source]
class ArbitraryBasisDatumGetter(set_names)[source]
name[source]
class ArbitraryBasisThreeCenterOverlapGetter(bs1, bs2, bs3)[source]
get_shape(basis_sets)[source]
name[source]
exception CacheInconsistancyWarning[source]
class CachedComputation[source]

A computation on a given molecule with various relevant integrals and such cached for later as tensors or numpy memory maps.

PICKLE_VERSION = (2, 1, 2)
allow_analogous_load_ever = True
array_getters = {'mo_eigenvalues': <computation_cache.MOEigenvaluesGetter object at 0x1e1147b0>, 'ao_f12_double_commutator': <computation_cache.AOTEIGetter object at 0x1e114a50>, 'occupied_mo_coefficients': <computation_cache.OccupiedMOCoefficientsGetter object at 0x1e114b50>, 'ao_erf_eri': <computation_cache.AOTEIGetter object at 0x1e114890>, 'mo_coefficients_pipek_mezey': <computation_cache.MOCoefficientsGetter object at 0x1e114bb0>, 'occupied_mo_coefficients_boys': <computation_cache.OccupiedMOCoefficientsGetter object at 0x1e114b90>, 'ao_kinetic': <computation_cache.AOOEIGetter object at 0x1e114ad0>, 'occupied_mo_coefficients_pipek_mezey': <computation_cache.OccupiedMOCoefficientsGetter object at 0x1e114bd0>, 'mo_eri': <computation_cache.MOTEIGetter object at 0x1e114850>, 'mo_coefficients': <computation_cache.MOCoefficientsGetter object at 0x1e114b30>, 'ao_potential': <computation_cache.AOOEIGetter object at 0x1e114b10>, 'ao_eri': <computation_cache.AOTEIGetter object at 0x1e1147d0>, 'mo_erf_eri': <computation_cache.MOTEIGetter object at 0x1e1148d0>, 'ao_overlap': <computation_cache.AOOEIGetter object at 0x1e114a90>, 'mo_f12g12': <computation_cache.MOTEIGetter object at 0x1e114a10>, 'mo_f12_squared': <computation_cache.MOTEIGetter object at 0x1e1149b0>, 'ao_f12g12': <computation_cache.AOTEIGetter object at 0x1e1149d0>, 'mo_coefficients_boys': <computation_cache.MOCoefficientsGetter object at 0x1e114b70>, 'mo_f12_double_commutator': <computation_cache.MOTEIGetter object at 0x1e114a70>, 'ao_f12': <computation_cache.AOTEIGetter object at 0x1e114910>, 'mo_f12': <computation_cache.MOTEIGetter object at 0x1e114950>, 'ao_f12_squared': <computation_cache.AOTEIGetter object at 0x1e114990>}
begin_parallel_use()[source]
clear_all_data(clear_analogous=False)[source]
clear_data_regex(regex, fail_if_missing=False, flags=0, clear_analogous=False)[source]

Clear all data matching regex

@param regex: The regular expression to search for in the name of the datum @type regex: str or re.RegexObject @param fail_if_missing: Whether or not to raise an exception if no data match the regex @param flags: Flags to compile the regular expression with. Ignored if regex is an instance of re.RegexObject. @type flags: int @raise ValueError: if no data names match the regex and fail_if_missing is True @return: The number of data removed @rtype: int

clear_datum(name, fail_if_missing=False, clear_analogous=False)[source]

Clear a datum from the computation. If the datum has a file associated with it, delete the file.

@param name: The name of the datum to clear @type name: str @param fail_if_missing: Whether or not to raise an exception if the datum is not found @type fail_if_missing: bool @raise ValueError: if the datum named name is not found @return: True if the datum was found and deleted, False otherwise @rtype: bool

construct_basis(basis_name=None)[source]
construct_unit_basis()[source]
default_memory = 4294967296L
default_psi_options = {'scf_type': 'direct'}
end_parallel_use()[source]
get_data(names)[source]
get_datum(name=None, custom_getter=None, pre_computation_callback=None, post_computation_callback=None, analogous_load_callback=<function <lambda> at 0x1e1178b0>, allow_analogous_load=None)[source]
get_file_path(datum_name)[source]
get_lazy_attribute(needed_attr)[source]
classmethod get_nbasis(mol, basis)[source]
has_data(*args)[source]
has_datum(name)[source]
kernel = 'potential'
method = 'frzvpi'
optional_argument_given(arg)[source]
orbital_type = 'pipek_mezey'
other_getters = {'reference_wavefunction_nalphapi': <computation_cache.DimensionListGetter object at 0x1e114e70>, 'reference_wavefunction_energy': <computation_cache.SimpleMethodCallGetter object at 0x1e114db0>, 'basis_has_puream': <computation_cache.SimpleMethodCallGetter object at 0x1e114d30>, 'reference_wavefunction_nalpha': <computation_cache.SimpleMethodCallGetter object at 0x1e114dd0>, 'reference_wavefunction_nbeta': <computation_cache.SimpleMethodCallGetter object at 0x1e114df0>, 'reference_wavefunction_nsopi': <computation_cache.DimensionListGetter object at 0x1e114e50>, 'basis_nbf': <computation_cache.SimpleMethodCallGetter object at 0x1e114c70>, 'basis_nao': <computation_cache.SimpleMethodCallGetter object at 0x1e114cb0>, 'molecule_name': <computation_cache.SimpleMethodCallGetter object at 0x1e114c50>, 'basis_nprimitive': <computation_cache.SimpleMethodCallGetter object at 0x1e114cf0>, 'reference_wavefunction_frzcpi': <computation_cache.DimensionListGetter object at 0x1e114eb0>, 'reference_wavefunction_nso': <computation_cache.SimpleMethodCallGetter object at 0x1e114d50>, 'molecule_nuclear_repulsion_energy': <computation_cache.SimpleMethodCallGetter object at 0x1e114c10>, 'reference_wavefunction_nmo': <computation_cache.SimpleMethodCallGetter object at 0x1e114d70>, 'reference_wavefunction_doccpi': <computation_cache.DimensionListGetter object at 0x1e114e10>, 'reference_wavefunction_frzvpi': <computation_cache.DimensionListGetter object at 0x1e114ed0>, 'reference_wavefunction_soccpi': <computation_cache.DimensionListGetter object at 0x1e114e30>, 'molecule_natom': <computation_cache.SimpleMethodCallGetter object at 0x1e114c30>, 'reference_wavefunction_nirrep': <computation_cache.SimpleMethodCallGetter object at 0x1e114d90>, 'basis_nshell': <computation_cache.SimpleMethodCallGetter object at 0x1e114d10>, 'reference_wavefunction_nbetapi': <computation_cache.DimensionListGetter object at 0x1e114e90>}
register_basis(basis_name)[source]
register_dependency(attribute_name, dependency_object_or_function, depends_on=None, aliases=None, dependent_optional_arguments=None, required_locks=())[source]
register_dependency_alias(alias, original_name)[source]
save_computation()[source]
set_psi_memory(value)[source]
store_datum(name, value)[source]

@param name: str @param value: object @raise: NameError

uninitialized_basis(basis_name)[source]
class CachedComputationUnloader(comp)[source]

Callable, picklable class that CachedComputation.__reduce_ex__ returns an instance of. Pickling and unpickling proceeds by automatic mechanisms

class CachedDatum(value)[source]

Anything from a computation that might need to be cached. Assuming value is picklable, the pickling functionality of this class is trivial. Subclasses may override for more complex unpickling behavior

class CachedMemmapArray(filename, dtype='float64', shape=None, force_overwrite=False, mmap_load_mode='r')[source]

An instance of a numpy.ndarray subclass to be cached. Only the filename is pickled

DEFAULT_MMAP_LOAD_MODE = 'r'
files_needing_flush = set([])
flush_value()[source]
classmethod normalized_name(filename)[source]
classmethod read_file_metadata(filename)[source]

Try to get the shape, ordering, and dtype of the memmap cached in the file filename. If the file doesn’t exist, isn’t readable, or the data is invalid, returns (None, None, None).

See numpy.lib.format.read_array_header_1_0()

value = None[source]
class ComputationCache(directory, make_directory=False, make_path=False, make_shelve=True, writeback=None, read_only=False)[source]

A set of computations cached in a given directory

NoDefaultValue = '___NoDefaultValue___'
available_psi_options = ['scf_convergence']
case_sensative_attributes = []
clear_data_regex(regex, fail_if_missing=False, flags=0)[source]

Clear all data matching regex from known computations

@param regex: The regular expression to search for in the name of the datum @type regex: str or compiled regex @param fail_if_missing: Whether or not to raise an exception if no data match the regex @param flags: Flags to compile the regular expression with. Ignored if regex is an instance of re.RegexObject. @type flags: int @raise ValueError: if no data names match the regex and fail_if_missing is True @return: Length 2 tuple of the number of data removed and the number of computations it was removed from. @rtype: tuple @see CachedComputation.clear_data_regex

clear_datum(datum_name, fail_if_missing=False)[source]

Clear datum named datum_name from all computations in the cache

@param datum_name: The name of the datum to clear from all known computations @type datum_name: str @param fail_if_missing: Whether or not to raise an exception if no computations have a datum named datum_name @return: The number of data deleted @rtype: int @see CachedComputation.clear_datum, clear_data_regex

do_writeback_on_sync = False
get_computation(molecule, needed_data=None, **kwargs)[source]

@param molecule: @type molecule: Molecule, str, or anything for which Molecule(molecule) is sensible @param needed_data: @type needed_data: NoneType, Iterable @rtype: CachedComputation

classmethod get_molecule_key(molecule)[source]

For now, this just returns the xyz string representation of the Molecule object. A more sophisticated means could be devised if constant recomputation becomes a problem, but it would be a total mess (see my attempts in the MoleculeStub class in grendel)

optional_attributes = AliasedDict({('correlation_factor_exponent',): 1.0, ('df_basis_name', 'df_basis', 'density_fitting_basis', 'dfbasis', 'fitting_basis'): '___NoDefaultValue___'})
required_attributes = ['basis']
sync_computation(comp, sync_writeback=None)[source]
class DFThreeCenterAOTEIGetter(two_center_bra, integral_type='eri')[source]
get_shape(basis, df_basis)[source]
class DFTwoCenterAOTEIGetter(integral_type)[source]
get_shape(df_basis)[source]
class DatumGetter[source]
needs[source]
class DimensionListGetter(obj, method_name, *args)[source]
exception FileMissingWarning[source]
exception FileOverwriteWarning[source]
class GeneralCorrelationFactorAOTEIGetter(coefficients, exponents, *args, **kwargs)[source]
class MOCoefficientsGetter(orbital_type='canonical')[source]
ALLOWED_TYPES = ['canonical', 'boys', 'pipek_mezey']
get_shape(reference_wavefunction, basis)[source]
class MOEigenvaluesGetter[source]
get_shape(reference_wavefunction)[source]
class MOTEIGetter(kernel_name, physicist_notation=False)[source]
get_shape(reference_wavefunction)[source]
class MatrixGetter[source]
class MemmapArrayGetter[source]
get_shape(*args)[source]
class OEIGetter(kernel)[source]
class OccupiedMOCoefficientsGetter(orbital_type='canonical')[source]
get_shape(reference_wavefunction, basis)[source]
class SOOEIGetter(kernel)[source]
VALID_KERNELS = ['overlap', 'kinetic', 'potential']
get_shape(reference_wavefunction)[source]
exception ShapeMismatchWarning[source]
class SimpleMethodCallGetter(obj, method_name, *args)[source]
class TEIGetter(kernel_name, physicist_notation=False)[source]

Abstract parent class of AOTEIGetter and MOTEIGetter

VALID_KERNELS = ('eri', 'erf_eri', 'f12', 'f12_squared', 'f12g12', 'f12_double_commutator')
class ThreeCenterOverlapGetter[source]
class UninitializedDependency(init_func, owner, depends_on=None, requires_optional_arguments=None)[source]
initialize(memo=None)[source]
disable_all_warnings()[source]
disable_warning(w)[source]
enable_all_warnings()[source]
enable_warning(w)[source]
raise_on_warning(w)[source]
raise_warning(msg, warning_type)[source]
xproduct(*args)

interface_dftd3

Module with functions that interface with Grimme’s DFTD3 code.

pcmgetkw

class Getkw(top)[source]

Unified interface to sections and keywords. Implements a path stack.

find_sect(path)[source]
get_active_section()[source]
get_keyword(path)[source]
get_topsect()[source]
getkw(path)[source]
pop_sect()[source]
push_sect(path)[source]
run_callbacks(templ)[source]
sanitize(templ)[source]
setkw(path)[source]
class GetkwParser(templ=None)[source]

Implements a class to do the actual parsing of input files and store the results in Sections and Keywords. The parseFile() method returns a Getkw object.

add_sect(s, l, t)[source]
bnf = None
caseless = False
check_type(arg, argt)[source]
conv_dval(s, loc, toks)[source]
conv_ival(s, loc, toks)[source]
conv_lval(s, loc, toks)[source]
fixate_type(arg)[source]
getkw_bnf()[source]
no = <_sre.SRE_Pattern object at 0x1ae9c2f0>
parseFile(fil)[source]
parseString(str)[source]
pop_sect(s, l, t)[source]
push_sect(k)[source]
set_caseless(arg)[source]
store_data(s, l, t)[source]
store_key(s, l, t)[source]
store_vector(s, l, t)[source]
yes = <_sre.SRE_Pattern object at 0x11078ea0>
class Keyword(name, typ, arg=None, req=False, callback=None)[source]

Placehoder for keyword objects

get()[source]
is_required()[source]
is_set()[source]
is_type(typ)[source]
sanity_check(path)[source]
set(val)[source]
set_status(set)[source]
setkw(arg)[source]
typecheck()[source]
xvalidate(templ, path=None)[source]
class Section(name, tag=None, req=False, callback=None)[source]

Section class

Placehoder for section objects

add_kw(name, typ, arg=None, req=False, set=False, callback=None)[source]
add_kwkw(kw, set=False)[source]
add_sect(sect, set=False)[source]
check_key(key)[source]
equalize(templ)[source]
fetch_kw(name)[source]
fetch_sect(name)[source]
find_sect(path)[source]
get(k)[source]
get_keys()[source]
get_keyword(path)[source]
get_sects()[source]
getkw(path)[source]
is_required()[source]
is_set(key=None)[source]
run_callbacks(templ)[source]
sanitize(templ)[source]
sanity_check(path=None)[source]
set(k, val)[source]
set_status(set)[source]
setkw(name, arg)[source]
status()[source]
xvalidate(templ, path=None)[source]
check_ignored(list, sect)[source]
check_opt(sect, key)[source]
check_required(list, sect)[source]
parse_error(s, t, d, err)[source]
test(strng)[source]

pcmpreprocess

convert_area_scalar(keyword)[source]
convert_length_array(keyword)[source]
convert_length_scalar(keyword)[source]
preprocess()[source]

Takes the PCM input file in @pcmsolver.inp, and preprocesses to make it machine-readable.

setup_keywords()[source]
verify_cavity(section)[source]
verify_green(section)[source]
verify_medium(section)[source]
verify_spheres(keyword)[source]
verify_top(section)[source]

qmmm

Module with classes to integrate MM charges into a QM calculation.

class Diffuse(molecule, basisname, ribasisname)[source]
fitGeneral()[source]

Function to perform a general fit of diffuse charges to wavefunction density.

fitScf()[source]

Function to run scf and fit a system of diffuse charges to resulting density.

populateExtern(extern)[source]
class QMMM[source]
addChargeAngstrom(Q, x, y, z)[source]

Function to add a point charge of magnitude Q at position (x, y, z) Angstroms.

addChargeBohr(Q, x, y, z)[source]

Function to add a point charge of magnitude Q at position (x, y, z) Bohr.

addDiffuse(diffuse)[source]

Function to add a diffuse charge field diffuse.

populateExtern()[source]

Function to define a charge field external to the molecule through point and diffuse charges.

interface_cfour

Module with functions for Psi4/Cfour interface. Portions that require calls to Boost Python psi4 module are here, otherwise in qcdb module. Also calls to qcdb module are here and not elsewhere in driver. Organizationally, this module isolates qcdb code from psi4 code.

cfour_gradient_list()[source]

Form list of Cfour analytic gradient() arguments.

cfour_list()[source]

Form list of Cfour energy() arguments.

cfour_psivar_list()[source]

Form dictionary of PSI Variables set by Cfour methods.

write_zmat(name, dertype)[source]

Returns string with contents of Cfour ZMAT file as gathered from active molecule, current keyword settings, and cfour {...} block.

diatomic

wrappers

Module with functions that call the four main driver functions: driver.energy, driver.optimize, driver.response, and driver.frequency.

auto_fragments(name, **kwargs)[source]

Detects fragments if the user does not supply them. Currently only used for the WebMO implementation of SAPT Returns a new fragmented molecule

usage: auto_fragments(‘’)

call_function_in_1st_argument(funcarg, **largs)[source]

Function to make primary function call to energy(), opt(), etc. with options dictionary largs. Useful when funcarg to call is stored in variable.

convert(p, symbol)[source]
reconstitute_bracketed_basis(needarray)[source]

Function to reform a bracketed basis set string from a sequential series of basis sets (e.g, form ‘cc-pv[q5]z’ from array [cc-pvqz, cc-pv5z]). The basis set array is extracted from the f_basis field of a NEED dictionary in complete_basis_set(). Result is used to print a nicely formatted basis set string in the results table.

split_menial(menial)[source]

Function used by complete_basis_set() to separate menial ‘scftot’ into [scf, tot] and ‘mp2corl’ into [mp2, corl].

tblhead(tbl_maxrgt, tbl_delimit, ttype)[source]

Function that prints the header for the changable-width results tables in db(). tbl_maxrgt is the number of reagent columns the table must plan for. tbl_delimit is a string of dashes of the correct length to set off the table. ttype is 1 for tables comparing the computed values to the reference or 2 for simple tabulation and sum of the computed values.

validate_bracketed_basis(basisstring)[source]

Function to transform and validate basis sets for cbs(). A basis set with no paired square brackets is passed through with zeta level 0 (e.g., ‘6-31+G(d,p)’ is returned as [6-31+G(d,p)] and [0]). A basis set with square brackets is checked for sensible sequence and Dunning-ness and returned as separate basis sets (e.g., ‘cc-pV[Q5]Z’ is returned as [cc-pVQZ, cc-pV5Z] and [4, 5]). Note that this function has no communication with the basis set library to check if the basis actually exists. Used by complete_basis_set().

validate_scheme_args(functionname, **largs)[source]

Function called by each extrapolation scheme in complete_basis_set(). Checks that all the input arguments are present and suitable so that the scheme function can focus on defining the extrapolation.

proc

run_adc(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an algebraic diagrammatic construction calculation.

Caution

Get rid of active molecule lines- should be handled in energy.

run_bccd(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a Brueckner CCD calculation.

run_bccd_t(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a Brueckner CCD(T) calculation.

run_cc_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a CCSD and CCSD(T) gradient calculation.

run_cc_property(name, **kwargs)[source]

Function encoding sequence of PSI module calls for all CC property calculations.

run_ccenergy(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a CCSD, CC2, and CC3 calculation.

run_cdmp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a cholesky-decomposed MP2 computation

run_cdomp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a cholesky-decomposed orbital-optimized MP2 computation

run_cepa(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a cepa-like calculation.

>>> energy('cepa(1)')
run_cepa0(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a CEPA (LCCD) computation

run_cepa0_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a CEPA(0) gradient calculation.

run_dcft(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a density cumulant functional theory calculation.

run_dcft_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for DCFT gradient calculation.

run_detci(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a configuration interaction calculation, namely FCI, CIn, MPn, and ZAPTn.

run_detci_property(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a configuration interaction calculation, namely FCI, CIn, MPn, and ZAPTn, computing properties.

run_dfmp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a density-fitted MP2 calculation.

run_dfmp2_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a DFMP2 gradient calculation.

run_dfmp2_property(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a DFMP2 property calculation.

run_dfomp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an density-fitted orbital-optimized MP2 computation

run_dft(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a density-functional-theory calculation.

run_dft_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a density-functional-theory gradient calculation.

run_eom_cc(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an EOM-CC calculation, namely EOM-CC2, EOM-CCSD, and EOM-CC3.

run_eom_cc_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an EOM-CCSD gradient calculation.

run_fnocc(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a QCISD(T), CCSD(T), MP2.5, MP3, and MP4 computation.

>>> energy('fno-ccsd(t)')
run_fnodfcc(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a DF-CCSD(T) computation.

>>> energy('df-ccsd(t)')
run_libfock(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a calculation through libfock, namely RCPHF, RCIS, RTDHF, RTDA, and RTDDFT.

run_lmp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an LMP2 theory calculation.

run_mcscf(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a multiconfigurational self-consistent-field calculation.

run_mp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a MP2 calculation.

run_mp2_5(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a MP2.5 calculation.

run_mp2_5_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a MP3 gradient calculation.

run_mp2_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a MP2 gradient calculation.

run_mp2_select(name, **kwargs)[source]

Function selecting the algorithm for a MP2 energy call and directing toward the OCC (conv MP2) or the DFMP2 modules.

run_mp2_select_gradient(name, **kwargs)[source]

Function selecting the algorithm for a MP2 gradient call and directing toward the OCC (conv MP2) or the DFMP2 modules.

run_mp2c(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a coupled MP2 calculation.

run_mp3(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a MP3 calculation.

run_mp3_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a MP3 gradient calculation.

run_mrcc(name, **kwargs)[source]

Function that prepares environment and input files for a calculation calling Kallay’s MRCC code.

run_ocepa(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an orbital-optimized CEPA computation

run_ocepa_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for OCEPA gradient calculation.

run_oldmp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a MP2 calculation.

run_omp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an orbital-optimized MP2 computation

run_omp2_5(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an orbital-optimized MP2.5 computation

run_omp2_5_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for OMP2.5 gradient calculation.

run_omp2_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for OMP2 gradient calculation.

run_omp3(name, **kwargs)[source]

Function encoding sequence of PSI module calls for an orbital-optimized MP3 computation

run_omp3_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for OMP3 gradient calculation.

run_psimrcc(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a PSIMRCC computation using a reference from the MCSCF module

run_psimrcc_scf(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a PSIMRCC computation using a reference from the SCF module

run_sapt(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a SAPT calculation of any level.

run_sapt_ct(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a charge-transfer SAPT calcuation of any level.

run_scf(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a self-consistent-field theory (HF & DFT) calculation.

run_scf_gradient(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a SCF gradient calculation.

run_scf_property(name, **kwargs)[source]

Function encoding sequence of PSI module calls for SCF calculations. This is a simple alias to run_scf() since SCF properties all handled through oeprop.

run_scs_omp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a spin-component scaled OMP2 computation

run_scs_omp3(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a spin-component scaled OMP3 computation

run_sos_omp2(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a spin-opposite scaled OMP2 computation

run_sos_omp3(name, **kwargs)[source]

Function encoding sequence of PSI module calls for a spin-opposite scaled OMP3 computation

scf_helper(name, **kwargs)[source]

Function serving as helper to SCF, choosing whether to cast up or just run SCF with a standard guess. This preserves previous SCF options set by other procedures (e.g., SAPT output file types for SCF).

qcdb

Module to facilitate quantum chemical computations on chemical databases. Contains Molecule class and physical constants from psi4 suite.

class Psi4In(mem, mtd, bas, mol, sys, cast)[source]
format_basis()[source]
format_global_parameters()[source]
format_infile_string()[source]

File to

dictify_database_docstrings()[source]
drop_duplicates(seq)[source]

Function that given an array or array of arrays seq, returns an array without any duplicate entries. There is no guarantee of which duplicate entry is dropped.

useful()[source]
class LibmintsMolecule(psi4molstr=None)[source]

Class to store the elements, coordinates, fragmentation pattern, charge, multiplicity of a molecule. Largely replicates psi4’s libmints Molecule class, developed by Justin M. Turney and Andy M. Simmonett with incremental improvements by other psi4 developers. Major differences from the C++ class are: no basisset handling, no symmetry, no pubchem, no efp, no discarding dummies. This class translated so that databases can function independently of psi4.

>>> H2OH2O = qcdb.Molecule("""
    0 1
    O1  -1.551007  -0.114520   0.000000
    H1  -1.934259   0.762503   0.000000
    H2  -0.599677   0.040712   0.000000
    --
    0 1
    X    0.000000   0.000000   0.000000
    O2   1.350625   0.111469   0.000000
    H3   1.680398  -0.373741  -0.758561
    H4   1.680398  -0.373741   0.758561
    no_com
    no_reorient
    units angstrom
    """)
>>> H2O = qcdb.Molecule.init_with_xyz('h2o.xyz')
FullPointGroupList = ['ATOM', 'C_inf_v', 'D_inf_h', 'C1', 'Cs', 'Ci', 'Cn', 'Cnv', 'Cnh', 'Sn', 'Dn', 'Dnd', 'Dnh', 'Td', 'Oh', 'Ih']
Z(atom)[source]

Nuclear charge of atom (0-indexed)

>>> print H2OH2O.Z(4)
1
activate_all_fragments()[source]

Sets all fragments in the molecule to be active.

add_atom(Z, x, y, z, label='', mass=0.0, charge=0.0, lineno=-1)[source]

Add an atom to the molecule Z atomic number x cartesian coordinate y cartesian coordinate z cartesian coordinate symb atomic symbol to use mass mass to use if non standard charge charge to use if non standard lineno line number when taken from a string

atom_at_position(b, tol=0.05)[source]

Tests to see of an atom is at the passed position b in Bohr with a tolerance tol.

>>> print H2OH2O.atom_at_position([1.35*(1.0/psi_bohr2angstroms), 0.10*(1.0/psi_bohr2angstroms), 0.0*(1.0/psi_bohr2angstroms)])
3
atom_entry(atom)[source]

Returns the CoordEntry for an atom.

atom_to_unique(iatom)[source]

NYI Converts an atom number to the number of its generating unique atom. The return value is in [0, nunique).

atom_to_unique_offset(iatom)[source]

NYI Converts an atom number to the offset of this atom in the list of generated atoms. The unique atom itself is allowed offset 0.

center_of_mass()[source]

Computes center of mass of molecule (does not translate molecule).

>>> H2OH2O.center_of_mass()
[-0.12442647346606871, 0.00038657002584110707, 0.0]
charge(atom)[source]

Returns charge of atom (0-indexed). Related to SAD guess in libmints version.

>>> print H2OH2O.charge(4)
1.0
charge_specified()[source]

Whether the charge was given by the user

>>> print H2OH2O.charge_specified()
True
clear()[source]

Zero it out.

clone()[source]

Returns new, independent Molecule object.

>>> dimer = H2OH2O.clone()
create_molecule_from_string(text)[source]

Given a string text of psi4-style geometry specification (including newlines to separate lines), builds a new molecule. Called from constructor.

create_psi4_string_from_molecule()[source]

Regenerates a input file molecule specification string from the current state of the Molecule. Contains geometry info, fragmentation, charges and multiplicities, and any frame restriction.

deactivate_all_fragments()[source]

Sets all fragments in the molecule to be inactive.

distance_matrix()[source]

Computes a matrix depicting distances between atoms. Prints formatted and returns array.

>>> H2OH2O.distance_matrix()
        Interatomic Distances (Angstroms)
                  [1]         [2]         [3]         [4]         [5]         [6]
  [1]         0.00000
  [2]         0.95711     0.00000
  [3]         0.96391     1.51726     0.00000
  [4]         2.91042     3.34878     1.95159     0.00000
  [5]         3.32935     3.86422     2.43843     0.95895     0.00000
  [6]         3.32935     3.86422     2.43843     0.95895     1.51712     0.00000
equivalent(iuniq, j)[source]

NYI Returns the j’th atom equivalent to iuniq.

everything()[source]

Quick print of class data

extract_fragments(reals, ghosts=[])[source]

Makes a copy of the molecule, returning a new molecule with only certain fragment atoms present as either ghost or real atoms reals: The list or int of fragments (1-indexed) that should be present in the molecule as real atoms. ghosts: The list or int of fragments (1-indexed) that should be present in the molecule as ghosts. (method name in libmints is extract_subsets. This is different in qcdb because the psi4 input parser tries to process lines with that term, giving rise to Boost:Python type conlicts.) See usage at extract_fragments().

extract_subsets(reals, ghosts=[])[source]

Wrapper for extract_fragments(). See note there. This function can be used as long as not in psi4 input file. Use extract_fragments directly, then.

>>> H2OH2O.extract_subsets(2)  # monomer B, unCP-corrected
>>> H2OH2O.extract_subsets(2,1)  # monomer B, CP-corrected
>>> obj.extract_subsets(1,[2,3])  # monomer A, CP-corrected if obj is tri-molecular complex
fZ(atom)[source]

Nuclear charge of atom (includes dummies)

>>> print H2OH2O.fZ(4)
8
fcharge(atom)[source]

Returns charge of atom (0-indexed, includes dummies). Related to SAD guess in libmints version.

>>> print H2OH2O.fcharge(4)
8.0
find_highest_point_group(tol=1e-08)[source]

NYI Find highest molecular point group

find_point_group(tol=1e-08)[source]

NYI Find computational molecular point group, user can override this with the “symmetry” keyword

fix_orientation(_fix=True)[source]

Fix the orientation at its current frame (method name in libmints is set_orientation_fixed)

flabel(atom)[source]

Returns the original label of the atom (0-indexed) as given in the input file (C2, H4) (includes dummies)

>>> print H2OH2O.flabel(4)
O2
fmass(atom)[source]

Returns mass of atom (0-indexed, includes dummies)

>>> print H2OH2O.fmass(4)
15.9949146196
form_symmetry_information(tol=1e-08)[source]

NYI Initialize molecular specific symmetry information. Uses the point group object obtain by calling point_group()

fsymbol(atom)[source]

Returns the cleaned up label of the atom (C2 => C, H4 = H) (includes dummies)

>>> print H2OH2O.fsymbol(4)
O
full_geometry()[source]

Returns the full (dummies included) geometry in Bohr as a N X 3 array.

>>> print H2OH2O.full_geometry()
[[-2.930978460188563, -0.21641143673806384, 0.0], [-3.655219780069251, 1.4409218455037016, 0.0], [-1.1332252981904638, 0.0769345303220403, 0.0], [0.0, 0.0, 0.0], [2.5523113582286716, 0.21064588230662976, 0.0], [3.175492014248769, -0.7062681346308132, -1.4334725450878665], [3.175492014248769, -0.7062681346308132, 1.4334725450878665]]
full_pg_n()[source]

NYI Return n in Cnv, etc.; If there is no n (e.g. Td) it’s the highest-order rotation axis.

full_point_group_with_n()[source]

NYI Return point group name such as Cnv or Sn.

fx(atom)[source]

x position of atom (0-indexed, includes dummies) in Bohr

>>> print H2OH2O.fx(4)
2.55231135823
fxyz(atom)[source]

Returns a Vector3 with x, y, z position of atom (0-indexed) in Bohr (includes dummies)

>>> print H2OH2O.fxyz(4)
[2.5523113582286716, 0.21064588230662976, 0.0]
fy(atom)[source]

y position of atom (0-indexed, includes dummies) in Bohr

>>> print H2OH2O.fy(4)
0.210645882307
fz(atom)[source]

z position of atom (0-indexed, includes dummies) in Bohr

>>> print H2OH2O.fz(4)
0.0
geometry()[source]

Returns the geometry in Bohr as a N X 3 array.

>>> print H2OH2O.geometry()
[[-2.930978460188563, -0.21641143673806384, 0.0], [-3.655219780069251, 1.4409218455037016, 0.0], [-1.1332252981904638, 0.0769345303220403, 0.0], [2.5523113582286716, 0.21064588230662976, 0.0], [3.175492014248769, -0.7062681346308132, -1.4334725450878665], [3.175492014248769, -0.7062681346308132, 1.4334725450878665]]
get_anchor_atom(vstr, line)[source]

Attempts to interpret a string vstr as an atom specifier in a zmatrix. Takes the current line for error message printing. Returns the atom number (adjusted to zero-based counting).

get_coord_value(vstr)[source]

Attempts to interpret a string as a double, if not it assumes it’s a variable.

get_full_point_group()[source]

NYI Return point group name such as C3v or S8. (method name in libmints is full_point_group)

get_variable(vstr)[source]

Checks to see if the variable str is in the list, sets it to val and returns true if it is, and returns false if not.

has_inversion(origin, tol=1e-08)[source]

Does the molecule have an inversion center at origin

has_symmetry_element(op, tol=1e-08)[source]

NYI Whether molecule satisfies the vector symmetry operation op

has_zmatrix()[source]

Gets the presence of any zmatrix entry

>>> print H2OH2O.has_zmatrix()
False
inertia_tensor()[source]

Compute inertia tensor.

>>> print H2OH2O.inertia_tensor()
[[8.704574864178731, -8.828375721817082, 0.0], [-8.828375721817082, 280.82861714077666, 0.0], [0.0, 0.0, 281.249500988553]]
init_with_checkpoint(chkpt)[source]

NYI Pull information from the chkpt object passed (method name in libmints is init_with_chkpt)

init_with_io(psio)[source]

NYI Pull information from a chkpt object created from psio (method name in libmints is init_with_psio)

classmethod init_with_xyz(xyzfilename)[source]

Pull information from an XYZ file. No fragment or chg/mult info detected.

>>> H2O = qcdb.Molecule.init_with_xyz('h2o.xyz')
irrep_labels()[source]

NYI Returns the irrep labels

is_axis(origin, axis, order, tol=1e-08)[source]

Is axis an axis of order order with respect to origin?

is_linear_planar(tol=1e-08)[source]

Is the molecule linear, or planar?

>>> print H2OH2O.is_linear_planar()
(False, False)
is_plane(origin, uperp, tol=1e-08)[source]

Is a plane?

is_variable(vstr)[source]

Checks to see if the variable str is in the list, returns true if it is, and returns false if not.

>>> H2OH2O.is_variable('R')
False
label(atom)[source]

Returns the original label of the atom (0-indexed) as given in the input file (C2, H4).

>>> print H2OH2O.label(4)
H3
static like_world_axis(axis, worldxaxis, worldyaxis, worldzaxis)[source]

Returns which worldaxis axis most overlaps with. Inverts axis when indicated.

mass(atom)[source]

Returns mass of atom (0-indexed)

>>> print H2OH2O.mass(4)
1.00782503207
max_nequivalent()[source]

NYI Returns the maximum number of equivalent atoms.

molecular_charge()[source]

Gets the molecular charge

>>> print H2OH2O.molecular_charge()
-2
move_to_com()[source]

Moves molecule to center of mass

multiplicity()[source]

Get the multiplicity (defined as 2Ms + 1)

>>> print H2OH2O.multiplicity()
multiplicity_specified()[source]

Whether the multiplicity was given by the user

>>> print H2OH2O.multiplicity_specified()
True
nactive_fragments()[source]

The number of active fragments in the molecule.

>>> print H2OH2O.nactive_fragments()
2
nallatom()[source]

Number of all atoms (includes dummies)

>>> print H2OH2O.nallatom()
7
name()[source]

Get molecule name

>>> print H2OH2O.name()
water_dimer
natom()[source]

Number of atoms

>>> print H2OH2O.natom()
6
nequivalent(iuniq)[source]

NYI Returns the number of atoms equivalent to iuniq.

nfragments()[source]

The number of fragments in the molecule.

>>> print H2OH2O.nfragments()
2
nfrozen_core(depth=False)[source]

Number of frozen core for molecule given freezing state.

>>> print H2OH2O.nfrozen_core()
2
nuclear_repulsion_energy()[source]

Computes nuclear repulsion energy.

>>> print H2OH2O.nuclear_repulsion_energy()
36.6628478528
nuclear_repulsion_energy_deriv1()[source]

Computes nuclear repulsion energy derivatives

>>> print H2OH2O.nuclear_repulsion_energy_deriv1()
[[3.9020946901323774, 2.76201566471991, 0.0], [1.3172905807089021, -2.3486366050337293, 0.0], [-1.8107598525022435, -0.32511212499256564, 0.0], [-1.217656141385739, -2.6120090867576717, 0.0], [-1.0954846384766488, 1.2618710760320282, 2.1130743287465603], [-1.0954846384766488, 1.2618710760320282, -2.1130743287465603]]
nuclear_repulsion_energy_deriv2()[source]

NYI Computes nuclear repulsion energy second derivatives

nunique()[source]

NYI Return the number of unique atoms.

orientation_fixed()[source]

Get whether or not orientation is fixed.

>>> H2OH2O.orientation_fixed()
True
point_group()[source]

NYI Returns the point group (object) if set

print_bond_angles()[source]

Print the geometrical parameters (bond_angles) of the molecule.

>>> print H2OH2O.print_bond_angles()
Bond Angles (degrees)
Angle 2-1-3:  104.337
Angle 2-1-4:  109.152
Angle 2-1-5:  117.387
...
print_dihedrals()[source]

Print the geometrical parameters (dihedrals) of the molecule.

>>> print H2OH2O.print_dihedrals()
Dihedral Angles (Degrees)
Dihedral 1-2-3-4:  180.000
Dihedral 1-2-3-5:  133.511
Dihedral 1-2-3-6:  133.511
...
print_distances()[source]

Print the geometrical parameters (distances) of the molecule. suspect libmints version actually prints Bohr.

>>> print H2OH2O.print_distances()
Interatomic Distances (Angstroms)
Distance 1 to 2 0.957
Distance 1 to 3 0.964
Distance 1 to 4 2.910
...
print_full()[source]

Print full atom list. Same as print_out() only displays dummy atoms.

print_in_input_format()[source]

Print the molecule in the same format that the user provided.

print_out()[source]

Print the molecule. (method name in libmints is print)

>>> H2OH2O.print_out()
Geometry (in Angstrom), charge = -2, multiplicity = 3:
   Center              X                  Y                   Z
------------   -----------------  -----------------  -----------------
       O         -1.551007000000    -0.114520000000     0.000000000000
       H         -1.934259000000     0.762503000000     0.000000000000
       H         -0.599677000000     0.040712000000     0.000000000000
       O          1.350625000000     0.111469000000     0.000000000000
       H          1.680398000000    -0.373741000000    -0.758561000000
       H          1.680398000000    -0.373741000000     0.758561000000
print_out_in_angstrom()[source]

Print the molecule in Angstroms. Same as print_out() only always in Angstroms. (method name in libmints is print_in_angstrom)

print_out_in_bohr()[source]

Print the molecule in Bohr. Same as print_out() only in Bohr. (method name in libmints is print_in_bohr)

print_out_of_planes()[source]

Print the geometrical parameters (out_of_planes) of the molecule.

>>> print H2OH2O.print_out_of_planes()
Out-Of-Plane Angles (Degrees)
Out-of-plane 1-2-3-4:    0.000
Out-of-plane 1-2-3-5:   -7.373
Out-of-plane 1-2-3-6:    7.373
...
reinterpret_coordentries()[source]

Reinterpret the fragments for reals/ghosts and build the atom list.

reinterpret_coordentry(rc)[source]

Do we reinterpret coordentries during a call to update_geometry? (method name in libmints is set_reinterpret_coordentry)

release_symmetry_information()[source]

NYI Release symmetry information

reset_point_group(pgname)[source]

NYI Override symmetry from outside the molecule string

rotate(R)[source]

Rotates the molecule using rotation matrix R.

>>> H2OH2O.rotate([[0,-1,0],[-1,0,0],[0,0,1]])
rotate_full(R)[source]

Rotates the full molecule using rotation matrix R.

>>> H2OH2O.rotate_full([[0,-1,0],[-1,0,0],[0,0,1]])
rotational_constants(tol=1e-08)[source]

Compute the rotational constants and return them in wavenumbers

rotor_type(tol=1e-08)[source]

Returns the rotor type.

>>> H2OH2O.rotor_type()
RT_ASYMMETRIC_TOP
save_string_xyz(save_ghosts=True)[source]

Save a string for a XYZ-style file.

>>> H2OH2O.save_string_xyz()
6
_
 O   -1.551007000000   -0.114520000000    0.000000000000
 H   -1.934259000000    0.762503000000    0.000000000000
 H   -0.599677000000    0.040712000000    0.000000000000
 O    1.350625000000    0.111469000000    0.000000000000
 H    1.680398000000   -0.373741000000   -0.758561000000
 H    1.680398000000   -0.373741000000    0.758561000000
save_to_checkpoint(chkpt, prefix='')[source]

NYI Save information to checkpoint file (method name in libmints is save_to_chkpt)

save_xyz(filename, save_ghosts=True)[source]

Save an XYZ file.

>>> H2OH2O.save_xyz('h2o.xyz')
schoenflies_symbol()[source]

NYI Returns the Schoenflies symbol

set_active_fragment(fr)[source]

Tags fragment index fr as composed of real atoms.

set_active_fragments(reals)[source]

Tags the fragments in array reals as composed of real atoms.

set_basis_all_atoms(name, type='BASIS')[source]

NYI Assigns basis name to all atoms.

set_basis_by_label(label, name, type='BASIS')[source]

NYI Assigns basis name to all atoms with label.

set_basis_by_number(number, name, type='BASIS')[source]

NYI Assigns basis name to atom number number (1-indexed, includes dummies).

set_basis_by_symbol(symbol, name, type='BASIS')[source]

NYI Assigns basis name to all symbol atoms.

set_com_fixed(_fix=True)[source]

NYI Fix the center of mass at its current frame. Not used in libmints so not implemented.

set_full_geometry(geom)[source]

Sets the full geometry (dummies included), given a N X 3 array of coordinates geom in Bohr.

>>> H2OH2O.set_full geometry([[1,2,3],[4,5,6],[7,8,9],[0,0,0],[-1,-2,-3],[-4,-5,-6],[-7,-8,-9]])
set_full_point_group(tol=1e-08)[source]

NYI Determine and set FULL point group

set_geometry(geom)[source]

Sets the geometry, given a N X 3 array of coordinates geom in Bohr.

>>> H2OH2O.set_geometry([[1,2,3],[4,5,6],[7,8,9],[-1,-2,-3],[-4,-5,-6],[-7,-8,-9]])
set_ghost_fragment(fr)[source]

Tags fragment index fr as composed of ghost atoms.

set_ghost_fragments(ghosts)[source]

Tags the fragments in array ghosts as composed of ghost atoms.

set_has_zmatrix(tf)[source]

Sets the presence of any zmatrix entry

>>> H2OH2O.set_has_zmatrix(True)
set_molecular_charge(charge)[source]

Sets the molecular charge

>>> H2OH2O.set_molecular_charge(-2)
set_multiplicity(mult)[source]

Sets the multiplicity (defined as 2Ms + 1)

>>> H2OH2O.set_multiplicity(3)
set_name(name)[source]

Set molecule name

>>> H2OH2O.set_name('water_dimer')
set_point_group(pg)[source]

NYI Set the point group to object pg

set_units(units)[source]

Sets the geometry units

>>> H2OH2O.set_units('Angstom')
set_variable(vstr, val)[source]

Assigns the value val to the variable labelled string in the list of geometry variables. Also calls update_geometry()

sym_label()[source]

NYI Returns the symmetry label

symbol(atom)[source]

Returns the cleaned up label of the atom (C2 => C, H4 = H) (0-indexed)

>>> print H2OH2O.symbol(4)
H
symmetrize()[source]

NYI Force the molecule to have the symmetry specified in pg. This is to handle noise coming in from optking.

symmetry_frame(tol=1e-08)[source]

Determine symmetry reference frame. If noreorient is not set, this is the rotation matrix applied to the geometry in update_geometry.

>>> print H2OH2O.symmetry_frame()
[[1.0, -0.0, 0.0], [0.0, 1.0, 0.0], [0.0, -0.0, 1.0]]
symmetry_from_input()[source]

Returns the symmetry specified in the input.

>>> print H2OH2O.symmetry_from_input()
C1
translate(r)[source]

Translates molecule by r.

>>> H2OH2O.translate([1.0, 1.0, 0.0])
unique(iuniq)[source]

NYI Returns the overall number of the iuniq’th unique atom.

units()[source]

Gets the geometry units

>>> print H2OH2O.units()
Angstrom
update_geometry()[source]

Updates the geometry, by (re)interpreting the string used to create the molecule, and the current values of the variables. The atoms list is cleared, and then rebuilt by this routine. This function must be called after first instantiation of Molecule.

>>> H2 = qcdb.Molecule("H\nH 1 0.74\n")
>>> print H2.natom()
0
>>> H2.update_geometry()
>>> print H2.natom()
2
valid_atom_map(tol=0.01)[source]

NYI Check if current geometry fits current point group

x(atom)[source]

x position of atom (0-indexed) in Bohr

>>> print H2OH2O.x(4)
3.17549201425
xyz(atom, posn=None)[source]

Returns a Vector3 with x, y, z position of atom (0-indexed) in Bohr or coordinate at posn

>>> print H2OH2O.xyz(4)
[3.175492014248769, -0.7062681346308132, -1.4334725450878665]
y(atom)[source]

y position of atom (0-indexed) in Bohr

>>> print H2OH2O.y(4)
-0.706268134631
z(atom)[source]

z position of atom (0-indexed) in Bohr

>>> print H2OH2O.z(4)
-1.43347254509

Module (auto-generated from make_dunning.pl script) with commands building BasisFamily objects that encode the Dunning basis set orbital definitions in psi4/lib/basis/NOTES and fitting bases designed for those orbital bases.

load_basfam_dunning()[source]
backtransform(chgeMol, permMol, chgeGrad=None, chgeDip=None)[source]

Here, chgeMol and chgeGrd need to be turned into the native Cfour orientation embodied by permMol. Currently for vpt2.

cfour_gradient_list()[source]

Return an array of Cfour methods with analytical gradients. Appended to procedures[‘gradient’].

cfour_list()[source]

Return an array of Cfour methods with energies. Appended to procedures[‘energy’].

cfour_psivar_list()[source]

Return a dict with keys of most Cfour methods and values of dicts with the PSI Variables returned by those methods. Used by cbs() wrapper to avoid unnecessary computations in compound methods. Result is appended to VARH.

format_fjobarc(energy, map, elem, coordinates, gradient, dipole)[source]

Takes the key results from a gradient computation (energy, element Z list elem, coordinates, gradient, dipole, and atom ordering map) and writes a string fja that exactly mimics the contents of a Cfour FJOBARC file.

harvest(p4Mol, c4out, **largs)[source]

Parses all the pieces of output from Cfour: the stdout in c4out and the contents of various scratch files like GRD stored in their namesake keys in largs. Since all Cfour output uses its own orientation and atom ordering for the given molecule, a qcdb.Molecule p4Mol, if supplied, is used to transform the Cfour output back into consistency with p4Mol.

harvest_DIPOL(dipol)[source]

Parses the contents dipol of the Cfour DIPOL file into a dipol vector.

harvest_FCM(fcm)[source]

Parses the contents fcm of the Cfour FCMFINAL file into a hessian array.

harvest_GRD(grd)[source]

Parses the contents grd of the Cfour GRD file into the gradient array and coordinate information. The coordinate info is converted into a rather dinky Molecule (no charge, multiplicity, or fragment), but this is these coordinates that govern the reading of molecule orientation by Cfour. Return qcdb.Molecule and gradient array.

harvest_outfile_pass(outtext)[source]

Function to read CFOUR output file outtext and parse important quantum chemical information from it in

harvest_output(outtext)[source]

Function to separate portions of a CFOUR output file outtest, divided by xjoda.

harvest_zmat(zmat)[source]

Parses the contents of the Cfour ZMAT file into array and coordinate information. The coordinate info is converted into a rather dinky Molecule (no fragment, but does read charge, mult, unit). Return qcdb.Molecule. Written for findif zmat* where geometry always Cartesian and Bohr.

jajo2mol(jajodic)[source]

Returns a Molecule from entries in dictionary jajodic extracted from JAINDX and JOBARC.

muster_memory(mem)[source]

Transform input mem in MB into psi4-type options for cfour.

muster_modelchem(name, dertype)[source]

Transform calculation method name and derivative level dertype into options for cfour. While deliberately requested pieces, generally CFOUR_DERIV_LEVEL and CFOUR_CALC_LEVEL, are set to complain if contradicted (‘clobber’ set to True), other ‘recommended’ settings, like CFOUR_CC_PROGRAM, can be countermanded by keywords in input file (‘clobber’ set to False). Occasionally, want these pieces to actually overcome keywords in input file (‘superclobber’ set to True).

muster_psi4options(opt)[source]

Translate psi4 keywords opt that have been explicitly set into their Cfour counterparts. Since explicitly set Cfour module keyword values will always be used preferentially to these inferred from psi4, the ‘clobber’ property is set to False.

Module to largely replicate in python the psi4 libmints CoordValue and CoordEntry classes, which were developed by Justin M. Turney, with incremental improvements by other psi4 developers.

class CartesianEntry(entry_number, Z, charge, mass, symbol, label, x, y, z)[source]

Class to hold all information about an atom, including its coordinate specification as three Cartesians.

clone()[source]

Returns new, independent CartesianEntry object

compute()[source]

Computes the values of the coordinates (in whichever units were inputted), returning them in a Vector

everything()[source]
invalidate()[source]

Flags the current coordinates as being outdated.

print_in_input_format()[source]

Prints the updated geometry, in the format provided by the user.

print_in_input_format_cfour()[source]

Prints the updated geometry, in the format provided by the user. This, for Cfour, not different from regular version.

set_coordinates(x, y, z)[source]

Given the current set of coordinates, updates the values of this atom’s coordinates and any variables that may depend on it.

type()[source]

The type of CoordEntry specialization.

class CoordEntry(entry_number, Z, charge, mass, symbol, label='')[source]

Class to

Z()[source]

The nuclear charge of the current atom (0 if ghosted).

static a(a1, a2, a3)[source]

Computes the angle (in rad.) between three sets of coordinates.

charge()[source]

The “atomic charge” of the current atom (for SAD purposes).

static d(a1, a2, a3, a4)[source]

Computes the dihedral (in rad.) between four sets of coordinates.

entry_number()[source]

The order in which this appears in the full atom list.

everything()[source]
is_computed()[source]

Whether the current atom’s coordinates are up-to-date.

is_equivalent_to(other)[source]

Whether this atom has the same mass and ghost status as atom other. Unlike the libmints version, this does not compare basisset assignment.

is_ghosted()[source]

Whether the current atom is ghosted or not.

label()[source]

The atom label.

mass()[source]

The atomic mass of the current atom.

static r(a1, a2)[source]

Computes the distance between two sets of coordinates

set_ghosted(gh)[source]

Flag the atom as either ghost or real.

symbol()[source]

The atomic symbol.

class CoordValue(fixed=False, computed=False)[source]

An abstract class to handle storage of Cartesian coordinate values, which may be defined in terms of other variables through this mechanism, greatly simplifying Z-matrix specification, for example.

everything()[source]
fixed()[source]

Get whether the coordinate value is fixed or not

invalidate()[source]

Flag the current value as outdated

set_fixed(fixed)[source]

Set whether the coordinate value is fixed or not

class NumberValue(value, fixed=False)[source]

Specialization of CoordValue that is simply a number to be stored.

clone()[source]

Returns new, independent NumberValue object

compute()[source]

Computes value of coordinate from member data

everything()[source]
rset(val)[source]

Resets value of coordinate if not fixed

type()[source]

Gets specialization type of CoordValue

variable_to_string(precision)[source]

Takes a CoordValue object, and returns a string for printing.

class VariableValue(name, geometryVariables, negate=False, fixed=False)[source]

Specialization of CoordValue, where the current value depends on the list of geometry values stored by the molecule.

clone()[source]

Returns new, independent VariableValue object

compute()[source]

Computes value of coordinate from member data

everything()[source]
name()[source]

Gets the name of the variable

negated()[source]

Gets whether the coordinate value is actually the negative of the variable value

rset(val)[source]

Resets value of coordinate if not fixed

type()[source]

Gets specialization type of CoordValue

variable_to_string(precision)[source]

Takes a CoordValue object, and returns a string for printing.

class ZMatrixEntry(entry_number, Z, charge, mass, symbol, label, rto=None, rval=0, ato=None, aval=0, dto=None, dval=0)[source]

Class to hold all information about an atom, including its coordinate specification as any position of ZMatrix.

clone()[source]

Returns new, independent ZMatrixEntry object.

compute()[source]

Compute the Cartesian coordinates in Bohr of current atom’s entry.

everything()[source]
invalidate()[source]

Flags the current coordinates as being outdated

print_in_input_format()[source]

Prints the updated geometry, in the format provided by the user

print_in_input_format_cfour()[source]

Prints the updated geometry, in the format provided by the user

set_coordinates(x, y, z)[source]

Given the current set of coordinates, updates the values of this atom’s coordinates, and any variables that may depend on it.

type()[source]

The type of CoordEntry specialization.

class PreservingDict(*args, **kwargs)[source]

Class to store quantum chemical quantities extracted from output files. Extends the dictionary object to (1) store key as all-caps version of itself and (2) validate value for duplicate values for the same key by testing which has more decimal places and whether value the same within a plausing rounding error. Allows consistency checks when parsing output files without loss of precision.

setdefault(key, value=None)[source]
update(*args, **kwargs)[source]

Module to facilitate quantum chemical computations on chemical databases. Contains Molecule class and physical constants from psi4 suite.

class MolproIn(mem, mtd, bas, mol, sys, cast)[source]
format_basis()[source]
format_global_parameters()[source]
format_infile_string()[source]
class Molecule(psi4molstr=None)[source]

Class to store python extensions to the MoleculeLibmints class. Multiple classes allows separation of libmints and extension methods.

BFS()[source]

Perform a breadth-first search (BFS) on the real atoms in molecule, returning an array of atom indices of fragments. Relies upon van der Waals radii and so faulty for close (esp. hydrogen-bonded) fragments. Original code from Michael S. Marshall.

auto_fragments()[source]

Detects fragments in an unfragmented molecule using BFS algorithm. Returns a new Molecule in Cartesian, fixed-geom (no variable values), no dummy-atom format. Any non-default charge and multiplicity assigned to first fragment.

center_of_charge()[source]

Computes center of charge of molecule (does not translate molecule).

>>> H2OH2O.center_of_charge()
[-0.073339893272065401, 0.002959783555632145, 0.0]
format_basis_for_cfour(puream)[source]

Function to print the BASIS=SPECIAL block for Cfour according to the active atoms in Molecule. Special short basis names are used by Psi4 libmints GENBAS-writer in accordance with Cfour constraints.

format_molecule_for_cfour()[source]

Function to print Molecule in a form readable by Cfour.

format_molecule_for_cfour_old()[source]

Function to print Molecule in a form readable by Cfour. This version works as long as zmat is composed entirely of variables, not internal values, while cartesian is all internal values, no variables. Cutting off this line of development because, with getting molecules after passing through libmints Molecule, all zmats with dummies (Cfour’s favorite kind) have already been converted into cartesian. Next step, if this line was pursued would be to shift any zmat internal values to external and any cartesian external values to internal.

format_molecule_for_molpro()[source]
format_molecule_for_nwchem()[source]
format_molecule_for_psi4()[source]

Returns string of molecule definition block.

format_molecule_for_qchem()[source]
grimme_dftd3(func=None, dashlvl=None, dashparam=None, verbosity=1)[source]

Function to call Grimme’s dftd3 program (http://toc.uni-muenster.de/DFTD3/) to compute the -D correction of level dashlvl using parameters for the functional func. The dictionary dashparam can be used to supply a full set of dispersion parameters in the absense of func or to supply individual overrides in the presence of func. The dftd3 executable must be independently compiled and found in :envvar:PATH.

inertia_tensor(masswt=True, zero=1e-14)[source]

Compute inertia tensor.

>>> print H2OH2O.inertia_tensor()
[[8.704574864178731, -8.828375721817082, 0.0], [-8.828375721817082, 280.82861714077666, 0.0], [0.0, 0.0, 281.249500988553]]
inertia_tensor_partial(part, masswt=True, zero=1e-14)[source]

Compute inertia tensor based on atoms in part.

inertial_system(masswt=True, zero=1e-14)[source]

Solve inertial system

inertial_system_partial(part, masswt=True, zero=1e-14)[source]

Solve inertial system based on atoms in part

classmethod init_with_xyz(xyzfilename, no_com=False, no_reorient=False, contentsNotFilename=False)[source]

Pull information from an XYZ file. No fragment info detected. Bohr/Angstrom pulled from first line if available. Charge, multiplicity, tagline pulled from second line if available. Body accepts atom symbol or atom charge in first column. Arguments no_com and no_reorient can be used to turn off shift and rotation. If xyzfilename is a string of the contents of an XYZ file, rather than the name of a file, set contentsNotFilename to True.

>>> H2O = qcdb.Molecule.init_with_xyz('h2o.xyz')
move_to_coc()[source]

Moves molecule to center of charge

print_ring_planes(entity1, entity2, entity3=None, entity4=None)[source]

(reals only, 1-indexed)

rotor_type(tol=1e-08)[source]

Returns the rotor type.

>>> H2OH2O.rotor_type()
RT_ASYMMETRIC_TOP
save_string_xyz(save_ghosts=True)[source]

Save a string for a XYZ-style file.

>>> H2OH2O.save_string_xyz()
6
-2 3 water_dimer
 O   -1.551007000000   -0.114520000000    0.000000000000
 H   -1.934259000000    0.762503000000    0.000000000000
 H   -0.599677000000    0.040712000000    0.000000000000
 O    1.350625000000    0.111469000000    0.000000000000
 H    1.680398000000   -0.373741000000   -0.758561000000
 H    1.680398000000   -0.373741000000    0.758561000000
conv_float2negexp(val)[source]

Returns the least restrictive negative exponent of the power 10 that would achieve the floating point convergence criterium val.

format_option_for_cfour(opt, val)[source]

Function to reformat value val for option opt from python into cfour-speak. Arrays are the primary target.

prepare_options_for_cfour(options)[source]

Function to take the full snapshot of the liboptions object encoded in dictionary options, find the options directable toward Cfour (options[‘CFOUR’][‘CFOUR_**’]) that aren’t default, then write a CFOUR deck with those options.

reconcile_options(full, partial)[source]

Function to take the full snapshot of the liboptions object encoded in dictionary full and reconcile it with proposed options value changes in partial. Overwrites full with partial if option untouched, touches full if full and partial are in agreement, balks if full and partial conflict. Returns full.

class OrientMols(molPermanent, molChangeable)[source]

Class to encode a transformation between two molecular coordinate systems. After initializing with two qcdb.Molecule objects at the same geometry in possible different frames and orderings, class can apply the appropriate transformations to coordinate, gradient, Hessian, etc. arrays.

create_orientation_from_molecules(Pmol, Cmol)[source]

Finds the shift, rotation, axis exchange, axis inversion, and atom remapping necessary to bring the geometry of Cmol into coincidence with the geometry of Pmol. Pmol and Cmol must be qcdb.Molecule and represent the same geometry. Presently catches some errors of orientation that Cfour as Cmol should properly fulfill. These are unnecessary restrictions and can be relaxed later.

transform_coordinates(coord)[source]
transform_coordinates2(coord)[source]
transform_elementlist(elem)[source]

Applies to elem the transformation appropriate to bring a list of atomic numbers in molChangeable orientation into molPermanent orientation. In particular, applies a row exchange to place it in the atom ordering.

transform_gradient(arr)[source]

Applies to arr the transformation appropriate to bring a gradient in molChangeable orientation into molPermanent orientation. In particular, applies a rotation to place it in the inertial frame, a column exchange and phasing to place it in the axis system, a row exchange to place it in the atom ordering, and a rotation to remove it from the inertial frame.

transform_vector(vec)[source]

Applies to vec the transformation appropriate to bring a vector in molChangeable orientation into molPermanent orientation. In particular, applies a rotation to place it in the inertial frame, a column exchange and phasing to place it in the axis system, and a rotation to remove it from the inertial frame.

File for accessory procedures in the chem module. Credit for the libmints vector3 class to Justin M. Turney and incremental improvements by other psi4 developers.

add(v, u)[source]

Compute sum of vectors v and u.

cross(v, u)[source]

Compute cross product of length 3 vectors v and u.

determinant(mat)[source]

Given 3x3 matrix mat, compute the determinat

diagonalize3x3symmat(M)[source]

Given an real symmetric 3x3 matrix M, compute the eigenvalues

distance(v, u)[source]

Compute the distance between points defined by vectors v and u.

dot(v, u)[source]

Compute dot product of vectors v and u.

matadd(matrix1, matrix2, fac1=1.0, fac2=1.0)[source]

Matrix addition

mscale(matrix, d)[source]

Return matrix scaled by scalar d

mult(matrix1, matrix2)[source]

Matrix multiplication

norm(v)[source]

Compute the magnitude of vector v.

normalize(v)[source]

Compute normalized vector v.

perp_unit(u, v)[source]

Compute unit vector perpendicular to length 3 vectors u and v.

rotate(v, theta, axis)[source]

Rotate length 3 vector v about axis by theta radians.

scale(v, d)[source]

Compute by-element scale by d of vector v.

show(matrix)[source]

Print out matrix

sub(v, u)[source]

Compute difference of vectors v - u.

transpose(matrix)[source]

Return matrix transpose

zero(m, n)[source]

Create zero matrix

Parent classes for quantum chemistry program input and output file formats.

class InputFormat(mem, mtd, bas, mol, sys, cast)[source]
corresponding_aux_basis()[source]

For Dunning basis sets, returns strings from which auxiliary basis sets and heavy-aug can be constructed. Note that valence/core-valence/etc. is conserved and X-zeta/(X+d)zeta is not, since this is the usual aux basis pattern. augbasis is round up to the nearest aug-cc-pVXZ rootbasis is round down to the nearest cc-pVXZ auxbasis is round up to the nearest cc-pVXZ or aug-cc-pVXZ

Module with non-generic exceptions classes.

exception FeatureNotImplemented(msg)[source]

Error called for functions defined but not yet implemented. Also for functions defined that will never be implemented.

exception IncompleteAtomError(msg)[source]

Error raised when not all variables in an atom specification have been defined at compute time. May be a temporary situation so message not printed but appears as traceback when error persists.

exception ParsingValidationError(msg)[source]

Error called for problems with syntax from a QC output file. Prints error message msg to standard output stream.

exception QcdbException[source]

Error class for QCDB.

exception ValidationError(msg)[source]

Error called for problems with syntax input file. Prints error message msg to standard output stream.

getrec(reclabelarray, verbose=False)[source]

Reads binary files JOBARC and JAINDX and returns contents of each record in reclabelarray.

Module with commands building BasisFamily objects for Pople and other non-Dunning orbital basis sets. Some plausible fitting basis sets are supplied as defaults.

load_basfam_other()[source]

Elemental masses (most common isotope), symbols, and atomic numbers from psi4.

Stuff stolen from psi. Should import or not as necessary or some better way. Apologies to the coders.

compare_matrices(expected, computed, digits, label)[source]

Function to compare two matrices. Prints util.success() when elements of matrix computed match elements of matrix expected to number of digits. Performs a system exit on failure to match symmetry structure, dimensions, or element values. Used in input files in the test suite.

compare_values(expected, computed, digits, label)[source]

Function to compare two values. Prints util.success() when value computed matches value expected to number of digits. Performs a system exit on failure. Used in input files in the test suite.

query_yes_no(question, default=True)[source]

Ask a yes/no question via raw_input() and return their answer.

question is a string that is presented to the user. default is the presumed answer if the user just hits <Enter>. It must be yes (the default), no or None (meaning an answer is required of the user).

The return value is one of True or False.

search_file(filename, search_path)[source]

Given a search path, find file

Module to define a class BasisFamily that associates fitting basis sets to an orbital basis and to provide functions to query appropriate fitting bases for any orbital basis distributed with Psi4.

class BasisFamily(ornate, orbital=None, jk=None, ri=None, dual=None)[source]

Class to associate with an orbital basis name ornate the gbs file names in which the orbital basis orbital (usually the coded form of ornate) and jkfit, rifit, and dualfit auxiliary bases can be found.

add_dualfit(fit)[source]

Function to add basis fit as associated helper basis member dualfit to a BasisFamily object.

add_jkfit(fit)[source]

Function to add basis fit as associated fitting basis member jkfit to a BasisFamily object.

add_rifit(fit)[source]

Function to add basis fit as associated fitting basis member rifit to a BasisFamily object.

name()[source]

Function to return the ornate name of the orbital basis, e.g., 6-311++G** for 6-311ppgss.

corresponding_dualfit(name)[source]

Function to return an appropriate DUAL helper basis for the orbital basis name in coded or ornate form. None is returned if no fitting basis is defined or if the orbital basis is not found.

corresponding_jkfit(name)[source]

Function to return an appropriate JK fitting basis for the orbital basis name in coded or ornate form. None is returned if no fitting basis is defined or if the orbital basis is not found.

corresponding_orbital(name)[source]

Function to validate if the orbital basis name in coded or ornate form is in Psi4’s standard installed bases list. None is returned if the orbital basis is not found.

corresponding_rifit(name)[source]

Function to return an appropriate RI fitting basis for the orbital basis name in coded or ornate form. None is returned if no fitting basis is defined or if the orbital basis is not found.

load_basis_families()[source]

Function to load into the array basisfamily_list BasisFamily objects for all Psi4’s standard installed bases.

print_basis_families()[source]

Function to print to the output file a formatted summary of all the BasisFamily objects in basisfamily_list, by default all Psi4’s standard installed bases.

sanitize_basisname(name)[source]

Function to return name in coded form, stripped of characters that confuse filenames, characters into lowercase, + into p, * into s, and (, ), & , into _.

p4const

grendel

SystemInfo

alias of CaseInsensativeOpenStruct

class r

A ‘raw’ list, by syntactic analogy to the Python raw string literal.

>>> r[1,2,3]
[1, 2, 3]
>>> r[1, ..., 3]
[1, Ellipsis, 3]
>>> r[...]
[Ellipsis]
>>> r[...,...]
[Ellipsis, Ellipsis]
>>> r[...,...,1:3]
[Ellipsis, Ellipsis, slice(1, 3, None)]
>>> r[...,...,1:3:5]
[Ellipsis, Ellipsis, slice(1, 3, 5)]
>>> r[...,...,1:3:5,'hello']
[Ellipsis, Ellipsis, slice(1, 3, 5), 'hello']
>>> r['hello']
['hello']
full_path(path)
class ProgressBar(max_val, width=80, out=<open file '<stdout>', mode 'w' at 0xf7a36078>, fill_char='=', indent='', arrow=True)
print_bar()
update(new_val=None)
caller()

Get the name of the calling function as a str

Returns :
out : str
The name of the function that called the function whose context caller() is called from. (Hopefully the examples makes this clearer.)
Examples :
>>> def foo():
...     print caller()
...
>>> def bar():
...     foo()
...
>>> bar()
bar
>>> def foobar():
...     bar()
...
>>> foobar()
bar
listify_args(*args, **kwargs)

A simple way to accept arguments that can be an Iterable or a bunch of arguments that should be treated as a single Iterable. (This method is pretty trivial, but I find myself doing it a whole lot.) The reason you can’t just use list() for this purpose is that if an Iterable is given as the only argument, list(args) will return a list of Iterables rather than a single Iterable.

Examples :
>>> def test(*args):
...     return listify_args(*args)
...
>>> test(1,2,3)
[1, 2, 3]
>>> test([1,2,3])
[1, 2, 3]
>>> test([1,2,3], 4)
[[1, 2, 3], 4]
>>> test("1,2,3", 4)
['1,2,3', 4]
>>> test("1,2,3")
['1,2,3']
get_multikwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things. This function also checks to make sure no more than one of the possible names is specified in the keyword dictionary kwarg_dict. If the None of the keywords given are found in kwarg_dict, None is returned.

get_kwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things. This function also checks to make sure no more than one of the possible names is specified in the keyword dictionary kwarg_dict. If the None of the keywords given are found in kwarg_dict, None is returned.

pop_multikwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things and popping that value off of the kwarg dictionary. If the None of the keywords given are found in kwarg_dict, None is returned.

See Also:

get_multikwarg

pop_kwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things and popping that value off of the kwarg dictionary. If the None of the keywords given are found in kwarg_dict, None is returned.

See Also:

get_multikwarg

andjoin(iterable, fxn=<type 'str'>, oxford_comma=True)
camel_to_lower(instr, divider='_')

Converts a CamalCase string to a lower_case_string_with_underscores If the divider argument is given, it is used instead of underscores to join words.

Examples :
classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
indent(*fargs, **fkeywords)

Alias for indented()

indented(instr, nspaces=4)

Aliased as indent()

make_safe_identifier(instr, replace_with='_')
orjoin(iterable, fxn=<type 'str'>, oxford_comma=True)
raises_error(callable_obj, *args, **kwargs)

Returns True if a call of callable with args raises an error, and False if not. Note that the callable will get called, so don’t do anything that takes a long time or changes things in a way you don’t want them to be changed. If the optional keyword argument ‘error’ is given as either an Exception subclass or an Iterable, raises_error returns True if the call of callable raises the error given or one of the errors given in the list. (The keyword argument can also be named ‘errors’). Any other keyword arguments are passed through to callable.

Technical note: As per the Python manual, only exceptions that subclass from Exception (and not BaseException directly) will be recognized. According to the python users manual, you should never implement a user exception that subclasses from BaseException directly.

Examples :
>>> raises_error(int, "5")
False
>>> raises_error(int, "0x5ab7", 0)
False
>>> raises_error(lambda x: int(x), "5")
False
>>> raises_error(int, "abc")
True
>>> raises_error(int, "abc", error = ValueError)
True
>>> raises_error(int, "abc", error = BufferError)
False
>>> raises_error(int, "abc", error = (BufferError, EnvironmentError))
False
>>> raises_error(int, "abc", error = [BufferError, ValueError])
True
>>> raises_error(float, "abc")
True
>>> # Use raises_error to see what errors raises_error raises
... # Raise a type error if the first argument is not a callable (i.e. 17(25) doesn't make sense to Python)
... raises_error(raises_error, 17, 25, error = TypeError)
True
>>> # Raise a TypeError if the error keyword argument is not a subclass of Exception
... raises_error(lambda x: raises_error(int, x, error = "hello world"), 25, error = TypeError)
True
>>> raises_error(lambda x: raises_error(int, x, error = BaseException), 25, error = TypeError)
True
short_str(obj)

Aliased as shortstr()

shortstr(*fargs, **fkeywords)

Alias for short_str()

simple_banner(text, width=100, top='-', left='|', right='|', bottom='-', top_left='+', top_right=None, bottom_left=None, bottom_right=None)
strip_quotes(value, strip_char=None)
subscript(num_or_str)

Returns the unicode string subscript equivalent of num as a unicode string

superscript(num_or_str)

Returns the unicode string superscript equivalent of num as a unicode string

class Unit(name, bases, dct)

Metaclass for a general unit of something.

genre
genre_check(other)
known_units = ['Angstrom', 'Angstroms', YottaAngstrom, ZettaAngstrom, ExaAngstrom, PetaAngstrom, TeraAngstrom, GigaAngstrom, MegaAngstrom, KiloAngstrom, HectoAngstrom, DecaAngstrom, DeciAngstrom, CentiAngstrom, MilliAngstrom, MicroAngstrom, NanoAngstrom, PicoAngstrom, FemtoAngstrom, AttoAngstrom, ZeptoAngstrom, YoctoAngstrom, 'Bohr', 'Bohrs', YottaBohr, ZettaBohr, ExaBohr, PetaBohr, TeraBohr, GigaBohr, MegaBohr, KiloBohr, HectoBohr, DecaBohr, DeciBohr, CentiBohr, MilliBohr, MicroBohr, NanoBohr, PicoBohr, FemtoBohr, AttoBohr, ZeptoBohr, YoctoBohr, 'YottaAtomicUnitOfDistance', YottaAtomicUnitOfDistance, 'ZettaAtomicUnitOfDistance', ZettaAtomicUnitOfDistance, 'ExaAtomicUnitOfDistance', ExaAtomicUnitOfDistance, 'PetaAtomicUnitOfDistance', PetaAtomicUnitOfDistance, 'TeraAtomicUnitOfDistance', TeraAtomicUnitOfDistance, 'GigaAtomicUnitOfDistance', GigaAtomicUnitOfDistance, 'MegaAtomicUnitOfDistance', MegaAtomicUnitOfDistance, 'KiloAtomicUnitOfDistance', KiloAtomicUnitOfDistance, 'HectoAtomicUnitOfDistance', HectoAtomicUnitOfDistance, 'DecaAtomicUnitOfDistance', DecaAtomicUnitOfDistance, 'DeciAtomicUnitOfDistance', DeciAtomicUnitOfDistance, 'CentiAtomicUnitOfDistance', CentiAtomicUnitOfDistance, 'MilliAtomicUnitOfDistance', MilliAtomicUnitOfDistance, 'MicroAtomicUnitOfDistance', MicroAtomicUnitOfDistance, 'NanoAtomicUnitOfDistance', NanoAtomicUnitOfDistance, 'PicoAtomicUnitOfDistance', PicoAtomicUnitOfDistance, 'FemtoAtomicUnitOfDistance', FemtoAtomicUnitOfDistance, 'AttoAtomicUnitOfDistance', AttoAtomicUnitOfDistance, 'ZeptoAtomicUnitOfDistance', ZeptoAtomicUnitOfDistance, 'YoctoAtomicUnitOfDistance', YoctoAtomicUnitOfDistance, 'Meter', 'Meters', YottaMeter, ZettaMeter, ExaMeter, PetaMeter, TeraMeter, GigaMeter, MegaMeter, KiloMeter, HectoMeter, DecaMeter, DeciMeter, CentiMeter, MilliMeter, MicroMeter, NanoMeter, PicoMeter, FemtoMeter, AttoMeter, ZeptoMeter, YoctoMeter, 'Degree', 'Degrees', YottaDegree, ZettaDegree, ExaDegree, PetaDegree, TeraDegree, GigaDegree, MegaDegree, KiloDegree, HectoDegree, DecaDegree, DeciDegree, CentiDegree, MilliDegree, MicroDegree, NanoDegree, PicoDegree, FemtoDegree, AttoDegree, ZeptoDegree, YoctoDegree, 'Radian', 'Radians', YottaRadian, ZettaRadian, ExaRadian, PetaRadian, TeraRadian, GigaRadian, MegaRadian, KiloRadian, HectoRadian, DecaRadian, DeciRadian, CentiRadian, MilliRadian, MicroRadian, NanoRadian, PicoRadian, FemtoRadian, AttoRadian, ZeptoRadian, YoctoRadian, 'Joule', 'Joules', YottaJoule, ZettaJoule, ExaJoule, PetaJoule, TeraJoule, GigaJoule, MegaJoule, KiloJoule, HectoJoule, DecaJoule, DeciJoule, CentiJoule, MilliJoule, MicroJoule, NanoJoule, PicoJoule, FemtoJoule, AttoJoule, ZeptoJoule, YoctoJoule, 'Wavenumber', 'Wavenumbers', YottaWavenumber, ZettaWavenumber, ExaWavenumber, PetaWavenumber, TeraWavenumber, GigaWavenumber, MegaWavenumber, KiloWavenumber, HectoWavenumber, DecaWavenumber, DeciWavenumber, CentiWavenumber, MilliWavenumber, MicroWavenumber, NanoWavenumber, PicoWavenumber, FemtoWavenumber, AttoWavenumber, ZeptoWavenumber, YoctoWavenumber, 'ElectronVolt', 'ElectronVolts', YottaElectronVolt, ZettaElectronVolt, ExaElectronVolt, PetaElectronVolt, TeraElectronVolt, GigaElectronVolt, MegaElectronVolt, KiloElectronVolt, HectoElectronVolt, DecaElectronVolt, DeciElectronVolt, CentiElectronVolt, MilliElectronVolt, MicroElectronVolt, NanoElectronVolt, PicoElectronVolt, FemtoElectronVolt, AttoElectronVolt, ZeptoElectronVolt, YoctoElectronVolt, 'Hertz', 'Hertzs', YottaHertz, ZettaHertz, ExaHertz, PetaHertz, TeraHertz, GigaHertz, MegaHertz, KiloHertz, HectoHertz, DecaHertz, DeciHertz, CentiHertz, MilliHertz, MicroHertz, NanoHertz, PicoHertz, FemtoHertz, AttoHertz, ZeptoHertz, YoctoHertz, 'Hartree', 'Hartrees', YottaHartree, ZettaHartree, ExaHartree, PetaHartree, TeraHartree, GigaHartree, MegaHartree, KiloHartree, HectoHartree, DecaHartree, DeciHartree, CentiHartree, MilliHartree, MicroHartree, NanoHartree, PicoHartree, FemtoHartree, AttoHartree, ZeptoHartree, YoctoHartree, 'YottaAtomicUnitOfEnergy', YottaAtomicUnitOfEnergy, 'ZettaAtomicUnitOfEnergy', ZettaAtomicUnitOfEnergy, 'ExaAtomicUnitOfEnergy', ExaAtomicUnitOfEnergy, 'PetaAtomicUnitOfEnergy', PetaAtomicUnitOfEnergy, 'TeraAtomicUnitOfEnergy', TeraAtomicUnitOfEnergy, 'GigaAtomicUnitOfEnergy', GigaAtomicUnitOfEnergy, 'MegaAtomicUnitOfEnergy', MegaAtomicUnitOfEnergy, 'KiloAtomicUnitOfEnergy', KiloAtomicUnitOfEnergy, 'HectoAtomicUnitOfEnergy', HectoAtomicUnitOfEnergy, 'DecaAtomicUnitOfEnergy', DecaAtomicUnitOfEnergy, 'DeciAtomicUnitOfEnergy', DeciAtomicUnitOfEnergy, 'CentiAtomicUnitOfEnergy', CentiAtomicUnitOfEnergy, 'MilliAtomicUnitOfEnergy', MilliAtomicUnitOfEnergy, 'MicroAtomicUnitOfEnergy', MicroAtomicUnitOfEnergy, 'NanoAtomicUnitOfEnergy', NanoAtomicUnitOfEnergy, 'PicoAtomicUnitOfEnergy', PicoAtomicUnitOfEnergy, 'FemtoAtomicUnitOfEnergy', FemtoAtomicUnitOfEnergy, 'AttoAtomicUnitOfEnergy', AttoAtomicUnitOfEnergy, 'ZeptoAtomicUnitOfEnergy', ZeptoAtomicUnitOfEnergy, 'YoctoAtomicUnitOfEnergy', YoctoAtomicUnitOfEnergy, 'KiloCaloriePerMol', 'KiloCaloriePerMols', 'KiloJoulePerMol', 'KiloJoulesPerMol', 'Second', 'Seconds', YottaSecond, ZettaSecond, ExaSecond, PetaSecond, TeraSecond, GigaSecond, MegaSecond, KiloSecond, HectoSecond, DecaSecond, DeciSecond, CentiSecond, MilliSecond, MicroSecond, NanoSecond, PicoSecond, FemtoSecond, AttoSecond, ZeptoSecond, YoctoSecond, 'AtomicUnitOfTime', 'AtomicUnitsOfTime', YottaAtomicUnitOfTime, ZettaAtomicUnitOfTime, ExaAtomicUnitOfTime, PetaAtomicUnitOfTime, TeraAtomicUnitOfTime, GigaAtomicUnitOfTime, MegaAtomicUnitOfTime, KiloAtomicUnitOfTime, HectoAtomicUnitOfTime, DecaAtomicUnitOfTime, DeciAtomicUnitOfTime, CentiAtomicUnitOfTime, MilliAtomicUnitOfTime, MicroAtomicUnitOfTime, NanoAtomicUnitOfTime, PicoAtomicUnitOfTime, FemtoAtomicUnitOfTime, AttoAtomicUnitOfTime, ZeptoAtomicUnitOfTime, YoctoAtomicUnitOfTime, 'Minute', 'Minutes', YottaMinute, ZettaMinute, ExaMinute, PetaMinute, TeraMinute, GigaMinute, MegaMinute, KiloMinute, HectoMinute, DecaMinute, DeciMinute, CentiMinute, MilliMinute, MicroMinute, NanoMinute, PicoMinute, FemtoMinute, AttoMinute, ZeptoMinute, YoctoMinute, 'Hour', 'Hours', YottaHour, ZettaHour, ExaHour, PetaHour, TeraHour, GigaHour, MegaHour, KiloHour, HectoHour, DecaHour, DeciHour, CentiHour, MilliHour, MicroHour, NanoHour, PicoHour, FemtoHour, AttoHour, ZeptoHour, YoctoHour, 'Day', 'Days', YottaDay, ZettaDay, ExaDay, PetaDay, TeraDay, GigaDay, MegaDay, KiloDay, HectoDay, DecaDay, DeciDay, CentiDay, MilliDay, MicroDay, NanoDay, PicoDay, FemtoDay, AttoDay, ZeptoDay, YoctoDay, 'Week', 'Weeks', YottaWeek, ZettaWeek, ExaWeek, PetaWeek, TeraWeek, GigaWeek, MegaWeek, KiloWeek, HectoWeek, DecaWeek, DeciWeek, CentiWeek, MilliWeek, MicroWeek, NanoWeek, PicoWeek, FemtoWeek, AttoWeek, ZeptoWeek, YoctoWeek, 'Year', 'Years', YottaYear, ZettaYear, ExaYear, PetaYear, TeraYear, GigaYear, MegaYear, KiloYear, HectoYear, DecaYear, DeciYear, CentiYear, MilliYear, MicroYear, NanoYear, PicoYear, FemtoYear, AttoYear, ZeptoYear, YoctoYear, 'Decade', 'Decades', YottaDecade, ZettaDecade, ExaDecade, PetaDecade, TeraDecade, GigaDecade, MegaDecade, KiloDecade, HectoDecade, DecaDecade, DeciDecade, CentiDecade, MilliDecade, MicroDecade, NanoDecade, PicoDecade, FemtoDecade, AttoDecade, ZeptoDecade, YoctoDecade, 'Century', 'Centuries', YottaCentury, ZettaCentury, ExaCentury, PetaCentury, TeraCentury, GigaCentury, MegaCentury, KiloCentury, HectoCentury, DecaCentury, DeciCentury, CentiCentury, MilliCentury, MicroCentury, NanoCentury, PicoCentury, FemtoCentury, AttoCentury, ZeptoCentury, YoctoCentury, 'Millennium', 'Millennia', YottaMillennium, ZettaMillennium, ExaMillennium, PetaMillennium, TeraMillennium, GigaMillennium, MegaMillennium, KiloMillennium, HectoMillennium, DecaMillennium, DeciMillennium, CentiMillennium, MilliMillennium, MicroMillennium, NanoMillennium, PicoMillennium, FemtoMillennium, AttoMillennium, ZeptoMillennium, YoctoMillennium, 'Coulomb', 'Coulombs', YottaCoulomb, ZettaCoulomb, ExaCoulomb, PetaCoulomb, TeraCoulomb, GigaCoulomb, MegaCoulomb, KiloCoulomb, HectoCoulomb, DecaCoulomb, DeciCoulomb, CentiCoulomb, MilliCoulomb, MicroCoulomb, NanoCoulomb, PicoCoulomb, FemtoCoulomb, AttoCoulomb, ZeptoCoulomb, YoctoCoulomb, 'AtomicUnitOfElectricCharge', 'AtomicUnitsOfElectricCharge', YottaAtomicUnitOfElectricCharge, ZettaAtomicUnitOfElectricCharge, ExaAtomicUnitOfElectricCharge, PetaAtomicUnitOfElectricCharge, TeraAtomicUnitOfElectricCharge, GigaAtomicUnitOfElectricCharge, MegaAtomicUnitOfElectricCharge, KiloAtomicUnitOfElectricCharge, HectoAtomicUnitOfElectricCharge, DecaAtomicUnitOfElectricCharge, DeciAtomicUnitOfElectricCharge, CentiAtomicUnitOfElectricCharge, MilliAtomicUnitOfElectricCharge, MicroAtomicUnitOfElectricCharge, NanoAtomicUnitOfElectricCharge, PicoAtomicUnitOfElectricCharge, FemtoAtomicUnitOfElectricCharge, AttoAtomicUnitOfElectricCharge, ZeptoAtomicUnitOfElectricCharge, YoctoAtomicUnitOfElectricCharge, 'YottaAtomicUnitOfCharge', YottaAtomicUnitOfCharge, 'ZettaAtomicUnitOfCharge', ZettaAtomicUnitOfCharge, 'ExaAtomicUnitOfCharge', ExaAtomicUnitOfCharge, 'PetaAtomicUnitOfCharge', PetaAtomicUnitOfCharge, 'TeraAtomicUnitOfCharge', TeraAtomicUnitOfCharge, 'GigaAtomicUnitOfCharge', GigaAtomicUnitOfCharge, 'MegaAtomicUnitOfCharge', MegaAtomicUnitOfCharge, 'KiloAtomicUnitOfCharge', KiloAtomicUnitOfCharge, 'HectoAtomicUnitOfCharge', HectoAtomicUnitOfCharge, 'DecaAtomicUnitOfCharge', DecaAtomicUnitOfCharge, 'DeciAtomicUnitOfCharge', DeciAtomicUnitOfCharge, 'CentiAtomicUnitOfCharge', CentiAtomicUnitOfCharge, 'MilliAtomicUnitOfCharge', MilliAtomicUnitOfCharge, 'MicroAtomicUnitOfCharge', MicroAtomicUnitOfCharge, 'NanoAtomicUnitOfCharge', NanoAtomicUnitOfCharge, 'PicoAtomicUnitOfCharge', PicoAtomicUnitOfCharge, 'FemtoAtomicUnitOfCharge', FemtoAtomicUnitOfCharge, 'AttoAtomicUnitOfCharge', AttoAtomicUnitOfCharge, 'ZeptoAtomicUnitOfCharge', ZeptoAtomicUnitOfCharge, 'YoctoAtomicUnitOfCharge', YoctoAtomicUnitOfCharge, 'Gram', 'Grams', YottaGram, ZettaGram, ExaGram, PetaGram, TeraGram, GigaGram, MegaGram, KiloGram, HectoGram, DecaGram, DeciGram, CentiGram, MilliGram, MicroGram, NanoGram, PicoGram, FemtoGram, AttoGram, ZeptoGram, YoctoGram, 'AtomicMassUnit', 'AtomicMassUnits', YottaAtomicMassUnit, ZettaAtomicMassUnit, ExaAtomicMassUnit, PetaAtomicMassUnit, TeraAtomicMassUnit, GigaAtomicMassUnit, MegaAtomicMassUnit, KiloAtomicMassUnit, HectoAtomicMassUnit, DecaAtomicMassUnit, DeciAtomicMassUnit, CentiAtomicMassUnit, MilliAtomicMassUnit, MicroAtomicMassUnit, NanoAtomicMassUnit, PicoAtomicMassUnit, FemtoAtomicMassUnit, AttoAtomicMassUnit, ZeptoAtomicMassUnit, YoctoAtomicMassUnit, 'YottaAMU', YottaAMU, 'ZettaAMU', ZettaAMU, 'ExaAMU', ExaAMU, 'PetaAMU', PetaAMU, 'TeraAMU', TeraAMU, 'GigaAMU', GigaAMU, 'MegaAMU', MegaAMU, 'KiloAMU', KiloAMU, 'HectoAMU', HectoAMU, 'DecaAMU', DecaAMU, 'DeciAMU', DeciAMU, 'CentiAMU', CentiAMU, 'MilliAMU', MilliAMU, 'MicroAMU', MicroAMU, 'NanoAMU', NanoAMU, 'PicoAMU', PicoAMU, 'FemtoAMU', FemtoAMU, 'AttoAMU', AttoAMU, 'ZeptoAMU', ZeptoAMU, 'YoctoAMU', YoctoAMU, 'AtomicUnitOfMass', 'AtomicUnitsOfMass', YottaAtomicUnitOfMass, ZettaAtomicUnitOfMass, ExaAtomicUnitOfMass, PetaAtomicUnitOfMass, TeraAtomicUnitOfMass, GigaAtomicUnitOfMass, MegaAtomicUnitOfMass, KiloAtomicUnitOfMass, HectoAtomicUnitOfMass, DecaAtomicUnitOfMass, DeciAtomicUnitOfMass, CentiAtomicUnitOfMass, MilliAtomicUnitOfMass, MicroAtomicUnitOfMass, NanoAtomicUnitOfMass, PicoAtomicUnitOfMass, FemtoAtomicUnitOfMass, AttoAtomicUnitOfMass, ZeptoAtomicUnitOfMass, YoctoAtomicUnitOfMass]
name
prefix_factor(other)
prefixes = [<grendel.util.units.unit.Prefix object at 0x1e192330>, <grendel.util.units.unit.Prefix object at 0x1e192350>, <grendel.util.units.unit.Prefix object at 0x1e192370>, <grendel.util.units.unit.Prefix object at 0x1e192390>, <grendel.util.units.unit.Prefix object at 0x1e192410>, <grendel.util.units.unit.Prefix object at 0x1e192430>, <grendel.util.units.unit.Prefix object at 0x1e192470>, <grendel.util.units.unit.Prefix object at 0x1e1924b0>, <grendel.util.units.unit.Prefix object at 0x1e1924d0>, <grendel.util.units.unit.Prefix object at 0x1e1924f0>, <grendel.util.units.unit.Prefix object at 0x1e192510>, <grendel.util.units.unit.Prefix object at 0x1e192550>, <grendel.util.units.unit.Prefix object at 0x1e192590>, <grendel.util.units.unit.Prefix object at 0x1e1925b0>, <grendel.util.units.unit.Prefix object at 0x1e1925d0>, <grendel.util.units.unit.Prefix object at 0x1e1925f0>, <grendel.util.units.unit.Prefix object at 0x1e192610>, <grendel.util.units.unit.Prefix object at 0x1e192630>, <grendel.util.units.unit.Prefix object at 0x1e192650>, <grendel.util.units.unit.Prefix object at 0x1e192670>]
to(other)
isunit(unit)

Aliased as is_unit()

is_unit(*fargs, **fkeywords)

Alias for isunit()

convert(*fargs, **fkeywords)

Alias for convert_units()

convert_units(val, from_unit, to_unit)

Aliased as convert()

compatible_units(unit1, unit2)

Aliased as iscompatible()

iscompatible(*fargs, **fkeywords)

Alias for compatible_units()

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

class AngularUnit

General superclass for all angular units

default

alias of Degree

reference_unit

alias of Degree

class ElectricChargeUnit

General superclass for all units of electric charge

default

alias of Coulomb

reference_unit

alias of Coulomb

class MassUnit

General superclass for all units of mass

default

alias of AtomicMassUnit

reference_unit

alias of Gram

class TimeUnit

General superclass for all time units

default

alias of Second

reference_unit

alias of Second

class Angstrom
classmethod to(other)
Angstroms

alias of Angstrom

class YottaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaangstrom

alias of YottaAngstrom

Yottaangstroms

alias of YottaAngstrom

class ZettaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaangstrom

alias of ZettaAngstrom

Zettaangstroms

alias of ZettaAngstrom

class ExaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaangstrom

alias of ExaAngstrom

Exaangstroms

alias of ExaAngstrom

class PetaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaangstrom

alias of PetaAngstrom

Petaangstroms

alias of PetaAngstrom

class TeraAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraangstrom

alias of TeraAngstrom

Teraangstroms

alias of TeraAngstrom

class GigaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaangstrom

alias of GigaAngstrom

Gigaangstroms

alias of GigaAngstrom

class MegaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaangstrom

alias of MegaAngstrom

Megaangstroms

alias of MegaAngstrom

class KiloAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloangstrom

alias of KiloAngstrom

Kiloangstroms

alias of KiloAngstrom

class HectoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoangstrom

alias of HectoAngstrom

Hectoangstroms

alias of HectoAngstrom

class DecaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaangstrom

alias of DecaAngstrom

Decaangstroms

alias of DecaAngstrom

class DeciAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciangstrom

alias of DeciAngstrom

Deciangstroms

alias of DeciAngstrom

class CentiAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiangstrom

alias of CentiAngstrom

Centiangstroms

alias of CentiAngstrom

class MilliAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliangstrom

alias of MilliAngstrom

Milliangstroms

alias of MilliAngstrom

class MicroAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microangstrom

alias of MicroAngstrom

Microangstroms

alias of MicroAngstrom

class NanoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoangstrom

alias of NanoAngstrom

Nanoangstroms

alias of NanoAngstrom

class PicoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoangstrom

alias of PicoAngstrom

Picoangstroms

alias of PicoAngstrom

class FemtoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoangstrom

alias of FemtoAngstrom

Femtoangstroms

alias of FemtoAngstrom

class AttoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoangstrom

alias of AttoAngstrom

Attoangstroms

alias of AttoAngstrom

class ZeptoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoangstrom

alias of ZeptoAngstrom

Zeptoangstroms

alias of ZeptoAngstrom

class YoctoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoangstrom

alias of YoctoAngstrom

Yoctoangstroms

alias of YoctoAngstrom

class Bohr
Bohrs

alias of Bohr

class YottaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottabohr

alias of YottaBohr

Yottabohrs

alias of YottaBohr

class ZettaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettabohr

alias of ZettaBohr

Zettabohrs

alias of ZettaBohr

class ExaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exabohr

alias of ExaBohr

Exabohrs

alias of ExaBohr

class PetaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petabohr

alias of PetaBohr

Petabohrs

alias of PetaBohr

class TeraBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terabohr

alias of TeraBohr

Terabohrs

alias of TeraBohr

class GigaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigabohr

alias of GigaBohr

Gigabohrs

alias of GigaBohr

class MegaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megabohr

alias of MegaBohr

Megabohrs

alias of MegaBohr

class KiloBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilobohr

alias of KiloBohr

Kilobohrs

alias of KiloBohr

class HectoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectobohr

alias of HectoBohr

Hectobohrs

alias of HectoBohr

class DecaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decabohr

alias of DecaBohr

Decabohrs

alias of DecaBohr

class DeciBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decibohr

alias of DeciBohr

Decibohrs

alias of DeciBohr

class CentiBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centibohr

alias of CentiBohr

Centibohrs

alias of CentiBohr

class MilliBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millibohr

alias of MilliBohr

Millibohrs

alias of MilliBohr

class MicroBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microbohr

alias of MicroBohr

Microbohrs

alias of MicroBohr

class NanoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanobohr

alias of NanoBohr

Nanobohrs

alias of NanoBohr

class PicoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picobohr

alias of PicoBohr

Picobohrs

alias of PicoBohr

class FemtoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtobohr

alias of FemtoBohr

Femtobohrs

alias of FemtoBohr

class AttoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attobohr

alias of AttoBohr

Attobohrs

alias of AttoBohr

class ZeptoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptobohr

alias of ZeptoBohr

Zeptobohrs

alias of ZeptoBohr

class YoctoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctobohr

alias of YoctoBohr

Yoctobohrs

alias of YoctoBohr

AtomicUnitOfDistance

alias of Bohr

AtomicUnitsOfDistance

alias of Bohr

class YottaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAtomicUnitsOfDistance

alias of YottaAtomicUnitOfDistance

class ZettaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAtomicUnitsOfDistance

alias of ZettaAtomicUnitOfDistance

class ExaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAtomicUnitsOfDistance

alias of ExaAtomicUnitOfDistance

class PetaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAtomicUnitsOfDistance

alias of PetaAtomicUnitOfDistance

class TeraAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAtomicUnitsOfDistance

alias of TeraAtomicUnitOfDistance

class GigaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAtomicUnitsOfDistance

alias of GigaAtomicUnitOfDistance

class MegaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAtomicUnitsOfDistance

alias of MegaAtomicUnitOfDistance

class KiloAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAtomicUnitsOfDistance

alias of KiloAtomicUnitOfDistance

class HectoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAtomicUnitsOfDistance

alias of HectoAtomicUnitOfDistance

class DecaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAtomicUnitsOfDistance

alias of DecaAtomicUnitOfDistance

class DeciAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAtomicUnitsOfDistance

alias of DeciAtomicUnitOfDistance

class CentiAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAtomicUnitsOfDistance

alias of CentiAtomicUnitOfDistance

class MilliAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAtomicUnitsOfDistance

alias of MilliAtomicUnitOfDistance

class MicroAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAtomicUnitsOfDistance

alias of MicroAtomicUnitOfDistance

class NanoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAtomicUnitsOfDistance

alias of NanoAtomicUnitOfDistance

class PicoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAtomicUnitsOfDistance

alias of PicoAtomicUnitOfDistance

class FemtoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAtomicUnitsOfDistance

alias of FemtoAtomicUnitOfDistance

class AttoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAtomicUnitsOfDistance

alias of AttoAtomicUnitOfDistance

class ZeptoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAtomicUnitsOfDistance

alias of ZeptoAtomicUnitOfDistance

class YoctoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAtomicUnitsOfDistance

alias of YoctoAtomicUnitOfDistance

class Meter
Meters

alias of Meter

class YottaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottameter

alias of YottaMeter

Yottameters

alias of YottaMeter

class ZettaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettameter

alias of ZettaMeter

Zettameters

alias of ZettaMeter

class ExaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exameter

alias of ExaMeter

Exameters

alias of ExaMeter

class PetaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petameter

alias of PetaMeter

Petameters

alias of PetaMeter

class TeraMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terameter

alias of TeraMeter

Terameters

alias of TeraMeter

class GigaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigameter

alias of GigaMeter

Gigameters

alias of GigaMeter

class MegaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megameter

alias of MegaMeter

Megameters

alias of MegaMeter

class KiloMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilometer

alias of KiloMeter

Kilometers

alias of KiloMeter

class HectoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectometer

alias of HectoMeter

Hectometers

alias of HectoMeter

class DecaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decameter

alias of DecaMeter

Decameters

alias of DecaMeter

class DeciMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decimeter

alias of DeciMeter

Decimeters

alias of DeciMeter

class CentiMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centimeter

alias of CentiMeter

Centimeters

alias of CentiMeter

class MilliMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millimeter

alias of MilliMeter

Millimeters

alias of MilliMeter

class MicroMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Micrometer

alias of MicroMeter

Micrometers

alias of MicroMeter

class NanoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanometer

alias of NanoMeter

Nanometers

alias of NanoMeter

class PicoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picometer

alias of PicoMeter

Picometers

alias of PicoMeter

class FemtoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtometer

alias of FemtoMeter

Femtometers

alias of FemtoMeter

class AttoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attometer

alias of AttoMeter

Attometers

alias of AttoMeter

class ZeptoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptometer

alias of ZeptoMeter

Zeptometers

alias of ZeptoMeter

class YoctoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctometer

alias of YoctoMeter

Yoctometers

alias of YoctoMeter

class Degree
classmethod to(other)
Degrees

alias of Degree

class YottaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottadegree

alias of YottaDegree

Yottadegrees

alias of YottaDegree

class ZettaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettadegree

alias of ZettaDegree

Zettadegrees

alias of ZettaDegree

class ExaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exadegree

alias of ExaDegree

Exadegrees

alias of ExaDegree

class PetaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petadegree

alias of PetaDegree

Petadegrees

alias of PetaDegree

class TeraDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teradegree

alias of TeraDegree

Teradegrees

alias of TeraDegree

class GigaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigadegree

alias of GigaDegree

Gigadegrees

alias of GigaDegree

class MegaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megadegree

alias of MegaDegree

Megadegrees

alias of MegaDegree

class KiloDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilodegree

alias of KiloDegree

Kilodegrees

alias of KiloDegree

class HectoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectodegree

alias of HectoDegree

Hectodegrees

alias of HectoDegree

class DecaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decadegree

alias of DecaDegree

Decadegrees

alias of DecaDegree

class DeciDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decidegree

alias of DeciDegree

Decidegrees

alias of DeciDegree

class CentiDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centidegree

alias of CentiDegree

Centidegrees

alias of CentiDegree

class MilliDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millidegree

alias of MilliDegree

Millidegrees

alias of MilliDegree

class MicroDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microdegree

alias of MicroDegree

Microdegrees

alias of MicroDegree

class NanoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanodegree

alias of NanoDegree

Nanodegrees

alias of NanoDegree

class PicoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picodegree

alias of PicoDegree

Picodegrees

alias of PicoDegree

class FemtoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtodegree

alias of FemtoDegree

Femtodegrees

alias of FemtoDegree

class AttoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attodegree

alias of AttoDegree

Attodegrees

alias of AttoDegree

class ZeptoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptodegree

alias of ZeptoDegree

Zeptodegrees

alias of ZeptoDegree

class YoctoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctodegree

alias of YoctoDegree

Yoctodegrees

alias of YoctoDegree

class Radian
Radians

alias of Radian

class YottaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaradian

alias of YottaRadian

Yottaradians

alias of YottaRadian

class ZettaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaradian

alias of ZettaRadian

Zettaradians

alias of ZettaRadian

class ExaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaradian

alias of ExaRadian

Exaradians

alias of ExaRadian

class PetaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaradian

alias of PetaRadian

Petaradians

alias of PetaRadian

class TeraRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraradian

alias of TeraRadian

Teraradians

alias of TeraRadian

class GigaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaradian

alias of GigaRadian

Gigaradians

alias of GigaRadian

class MegaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaradian

alias of MegaRadian

Megaradians

alias of MegaRadian

class KiloRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloradian

alias of KiloRadian

Kiloradians

alias of KiloRadian

class HectoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoradian

alias of HectoRadian

Hectoradians

alias of HectoRadian

class DecaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaradian

alias of DecaRadian

Decaradians

alias of DecaRadian

class DeciRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciradian

alias of DeciRadian

Deciradians

alias of DeciRadian

class CentiRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiradian

alias of CentiRadian

Centiradians

alias of CentiRadian

class MilliRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliradian

alias of MilliRadian

Milliradians

alias of MilliRadian

class MicroRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microradian

alias of MicroRadian

Microradians

alias of MicroRadian

class NanoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoradian

alias of NanoRadian

Nanoradians

alias of NanoRadian

class PicoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoradian

alias of PicoRadian

Picoradians

alias of PicoRadian

class FemtoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoradian

alias of FemtoRadian

Femtoradians

alias of FemtoRadian

class AttoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoradian

alias of AttoRadian

Attoradians

alias of AttoRadian

class ZeptoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoradian

alias of ZeptoRadian

Zeptoradians

alias of ZeptoRadian

class YoctoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoradian

alias of YoctoRadian

Yoctoradians

alias of YoctoRadian

class Joule
classmethod to(other)
Joules

alias of Joule

class YottaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottajoule

alias of YottaJoule

Yottajoules

alias of YottaJoule

class ZettaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettajoule

alias of ZettaJoule

Zettajoules

alias of ZettaJoule

class ExaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exajoule

alias of ExaJoule

Exajoules

alias of ExaJoule

class PetaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petajoule

alias of PetaJoule

Petajoules

alias of PetaJoule

class TeraJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terajoule

alias of TeraJoule

Terajoules

alias of TeraJoule

class GigaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigajoule

alias of GigaJoule

Gigajoules

alias of GigaJoule

class MegaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megajoule

alias of MegaJoule

Megajoules

alias of MegaJoule

class KiloJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilojoule

alias of KiloJoule

Kilojoules

alias of KiloJoule

class HectoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectojoule

alias of HectoJoule

Hectojoules

alias of HectoJoule

class DecaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decajoule

alias of DecaJoule

Decajoules

alias of DecaJoule

class DeciJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decijoule

alias of DeciJoule

Decijoules

alias of DeciJoule

class CentiJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centijoule

alias of CentiJoule

Centijoules

alias of CentiJoule

class MilliJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millijoule

alias of MilliJoule

Millijoules

alias of MilliJoule

class MicroJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microjoule

alias of MicroJoule

Microjoules

alias of MicroJoule

class NanoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanojoule

alias of NanoJoule

Nanojoules

alias of NanoJoule

class PicoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picojoule

alias of PicoJoule

Picojoules

alias of PicoJoule

class FemtoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtojoule

alias of FemtoJoule

Femtojoules

alias of FemtoJoule

class AttoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attojoule

alias of AttoJoule

Attojoules

alias of AttoJoule

class ZeptoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptojoule

alias of ZeptoJoule

Zeptojoules

alias of ZeptoJoule

class YoctoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctojoule

alias of YoctoJoule

Yoctojoules

alias of YoctoJoule

class Wavenumber
Wavenumbers

alias of Wavenumber

class YottaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottawavenumber

alias of YottaWavenumber

Yottawavenumbers

alias of YottaWavenumber

class ZettaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettawavenumber

alias of ZettaWavenumber

Zettawavenumbers

alias of ZettaWavenumber

class ExaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exawavenumber

alias of ExaWavenumber

Exawavenumbers

alias of ExaWavenumber

class PetaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petawavenumber

alias of PetaWavenumber

Petawavenumbers

alias of PetaWavenumber

class TeraWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terawavenumber

alias of TeraWavenumber

Terawavenumbers

alias of TeraWavenumber

class GigaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigawavenumber

alias of GigaWavenumber

Gigawavenumbers

alias of GigaWavenumber

class MegaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megawavenumber

alias of MegaWavenumber

Megawavenumbers

alias of MegaWavenumber

class KiloWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilowavenumber

alias of KiloWavenumber

Kilowavenumbers

alias of KiloWavenumber

class HectoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectowavenumber

alias of HectoWavenumber

Hectowavenumbers

alias of HectoWavenumber

class DecaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decawavenumber

alias of DecaWavenumber

Decawavenumbers

alias of DecaWavenumber

class DeciWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciwavenumber

alias of DeciWavenumber

Deciwavenumbers

alias of DeciWavenumber

class CentiWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiwavenumber

alias of CentiWavenumber

Centiwavenumbers

alias of CentiWavenumber

class MilliWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliwavenumber

alias of MilliWavenumber

Milliwavenumbers

alias of MilliWavenumber

class MicroWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microwavenumber

alias of MicroWavenumber

Microwavenumbers

alias of MicroWavenumber

class NanoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanowavenumber

alias of NanoWavenumber

Nanowavenumbers

alias of NanoWavenumber

class PicoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picowavenumber

alias of PicoWavenumber

Picowavenumbers

alias of PicoWavenumber

class FemtoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtowavenumber

alias of FemtoWavenumber

Femtowavenumbers

alias of FemtoWavenumber

class AttoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attowavenumber

alias of AttoWavenumber

Attowavenumbers

alias of AttoWavenumber

class ZeptoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptowavenumber

alias of ZeptoWavenumber

Zeptowavenumbers

alias of ZeptoWavenumber

class YoctoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctowavenumber

alias of YoctoWavenumber

Yoctowavenumbers

alias of YoctoWavenumber

class ElectronVolt
ElectronVolts

alias of ElectronVolt

class YottaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class ElectronVolt
class Hertz
Hertzs

alias of Hertz

class YottaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottahertz

alias of YottaHertz

Yottahertzs

alias of YottaHertz

class ZettaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettahertz

alias of ZettaHertz

Zettahertzs

alias of ZettaHertz

class ExaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exahertz

alias of ExaHertz

Exahertzs

alias of ExaHertz

class PetaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petahertz

alias of PetaHertz

Petahertzs

alias of PetaHertz

class TeraHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terahertz

alias of TeraHertz

Terahertzs

alias of TeraHertz

class GigaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigahertz

alias of GigaHertz

Gigahertzs

alias of GigaHertz

class MegaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megahertz

alias of MegaHertz

Megahertzs

alias of MegaHertz

class KiloHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilohertz

alias of KiloHertz

Kilohertzs

alias of KiloHertz

class HectoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectohertz

alias of HectoHertz

Hectohertzs

alias of HectoHertz

class DecaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decahertz

alias of DecaHertz

Decahertzs

alias of DecaHertz

class DeciHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decihertz

alias of DeciHertz

Decihertzs

alias of DeciHertz

class CentiHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centihertz

alias of CentiHertz

Centihertzs

alias of CentiHertz

class MilliHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millihertz

alias of MilliHertz

Millihertzs

alias of MilliHertz

class MicroHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microhertz

alias of MicroHertz

Microhertzs

alias of MicroHertz

class NanoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanohertz

alias of NanoHertz

Nanohertzs

alias of NanoHertz

class PicoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picohertz

alias of PicoHertz

Picohertzs

alias of PicoHertz

class FemtoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtohertz

alias of FemtoHertz

Femtohertzs

alias of FemtoHertz

class AttoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attohertz

alias of AttoHertz

Attohertzs

alias of AttoHertz

class ZeptoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptohertz

alias of ZeptoHertz

Zeptohertzs

alias of ZeptoHertz

class YoctoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctohertz

alias of YoctoHertz

Yoctohertzs

alias of YoctoHertz

class Hertz
class Hartree
Hartrees

alias of Hartree

class YottaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottahartree

alias of YottaHartree

Yottahartrees

alias of YottaHartree

class ZettaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettahartree

alias of ZettaHartree

Zettahartrees

alias of ZettaHartree

class ExaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exahartree

alias of ExaHartree

Exahartrees

alias of ExaHartree

class PetaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petahartree

alias of PetaHartree

Petahartrees

alias of PetaHartree

class TeraHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terahartree

alias of TeraHartree

Terahartrees

alias of TeraHartree

class GigaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigahartree

alias of GigaHartree

Gigahartrees

alias of GigaHartree

class MegaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megahartree

alias of MegaHartree

Megahartrees

alias of MegaHartree

class KiloHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilohartree

alias of KiloHartree

Kilohartrees

alias of KiloHartree

class HectoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectohartree

alias of HectoHartree

Hectohartrees

alias of HectoHartree

class DecaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decahartree

alias of DecaHartree

Decahartrees

alias of DecaHartree

class DeciHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decihartree

alias of DeciHartree

Decihartrees

alias of DeciHartree

class CentiHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centihartree

alias of CentiHartree

Centihartrees

alias of CentiHartree

class MilliHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millihartree

alias of MilliHartree

Millihartrees

alias of MilliHartree

class MicroHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microhartree

alias of MicroHartree

Microhartrees

alias of MicroHartree

class NanoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanohartree

alias of NanoHartree

Nanohartrees

alias of NanoHartree

class PicoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picohartree

alias of PicoHartree

Picohartrees

alias of PicoHartree

class FemtoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtohartree

alias of FemtoHartree

Femtohartrees

alias of FemtoHartree

class AttoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attohartree

alias of AttoHartree

Attohartrees

alias of AttoHartree

class ZeptoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptohartree

alias of ZeptoHartree

Zeptohartrees

alias of ZeptoHartree

class YoctoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctohartree

alias of YoctoHartree

Yoctohartrees

alias of YoctoHartree

class Hartree
AtomicUnitOfEnergy

alias of Hartree

AtomicUnitsOfEnergy

alias of Hartree

class YottaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAtomicUnitsOfEnergy

alias of YottaAtomicUnitOfEnergy

class ZettaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAtomicUnitsOfEnergy

alias of ZettaAtomicUnitOfEnergy

class ExaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAtomicUnitsOfEnergy

alias of ExaAtomicUnitOfEnergy

class PetaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAtomicUnitsOfEnergy

alias of PetaAtomicUnitOfEnergy

class TeraAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAtomicUnitsOfEnergy

alias of TeraAtomicUnitOfEnergy

class GigaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAtomicUnitsOfEnergy

alias of GigaAtomicUnitOfEnergy

class MegaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAtomicUnitsOfEnergy

alias of MegaAtomicUnitOfEnergy

class KiloAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAtomicUnitsOfEnergy

alias of KiloAtomicUnitOfEnergy

class HectoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAtomicUnitsOfEnergy

alias of HectoAtomicUnitOfEnergy

class DecaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAtomicUnitsOfEnergy

alias of DecaAtomicUnitOfEnergy

class DeciAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAtomicUnitsOfEnergy

alias of DeciAtomicUnitOfEnergy

class CentiAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAtomicUnitsOfEnergy

alias of CentiAtomicUnitOfEnergy

class MilliAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAtomicUnitsOfEnergy

alias of MilliAtomicUnitOfEnergy

class MicroAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAtomicUnitsOfEnergy

alias of MicroAtomicUnitOfEnergy

class NanoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAtomicUnitsOfEnergy

alias of NanoAtomicUnitOfEnergy

class PicoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAtomicUnitsOfEnergy

alias of PicoAtomicUnitOfEnergy

class FemtoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAtomicUnitsOfEnergy

alias of FemtoAtomicUnitOfEnergy

class AttoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAtomicUnitsOfEnergy

alias of AttoAtomicUnitOfEnergy

class ZeptoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAtomicUnitsOfEnergy

alias of ZeptoAtomicUnitOfEnergy

class YoctoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAtomicUnitsOfEnergy

alias of YoctoAtomicUnitOfEnergy

class KiloCaloriePerMol
KiloCaloriePerMols

alias of KiloCaloriePerMol

class KiloCaloriePerMol
KiloCaloriePerMole

alias of KiloCaloriePerMol

KiloCaloriesPerMol

alias of KiloCaloriePerMol

KCalPerMol

alias of KiloCaloriePerMol

KCalsPerMol

alias of KiloCaloriePerMol

KcalPerMol

alias of KiloCaloriePerMol

KcalsPerMol

alias of KiloCaloriePerMol

class KiloJoulePerMol
KiloJoulesPerMol

alias of KiloJoulePerMol

class KiloJoulePerMol
KJPerMol

alias of KiloJoulePerMol

KilojoulesPerMole

alias of KiloJoulePerMol

KilojoulesPerMoles

alias of KiloJoulePerMol

class Second
classmethod to(other)
Seconds

alias of Second

class YottaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottasecond

alias of YottaSecond

Yottaseconds

alias of YottaSecond

class ZettaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettasecond

alias of ZettaSecond

Zettaseconds

alias of ZettaSecond

class ExaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exasecond

alias of ExaSecond

Exaseconds

alias of ExaSecond

class PetaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petasecond

alias of PetaSecond

Petaseconds

alias of PetaSecond

class TeraSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terasecond

alias of TeraSecond

Teraseconds

alias of TeraSecond

class GigaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigasecond

alias of GigaSecond

Gigaseconds

alias of GigaSecond

class MegaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megasecond

alias of MegaSecond

Megaseconds

alias of MegaSecond

class KiloSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilosecond

alias of KiloSecond

Kiloseconds

alias of KiloSecond

class HectoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectosecond

alias of HectoSecond

Hectoseconds

alias of HectoSecond

class DecaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decasecond

alias of DecaSecond

Decaseconds

alias of DecaSecond

class DeciSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decisecond

alias of DeciSecond

Deciseconds

alias of DeciSecond

class CentiSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centisecond

alias of CentiSecond

Centiseconds

alias of CentiSecond

class MilliSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millisecond

alias of MilliSecond

Milliseconds

alias of MilliSecond

class MicroSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microsecond

alias of MicroSecond

Microseconds

alias of MicroSecond

class NanoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanosecond

alias of NanoSecond

Nanoseconds

alias of NanoSecond

class PicoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picosecond

alias of PicoSecond

Picoseconds

alias of PicoSecond

class FemtoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtosecond

alias of FemtoSecond

Femtoseconds

alias of FemtoSecond

class AttoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attosecond

alias of AttoSecond

Attoseconds

alias of AttoSecond

class ZeptoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptosecond

alias of ZeptoSecond

Zeptoseconds

alias of ZeptoSecond

class YoctoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctosecond

alias of YoctoSecond

Yoctoseconds

alias of YoctoSecond

class AtomicUnitOfTime
AtomicUnitsOfTime

alias of AtomicUnitOfTime

class YottaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class AtomicUnitOfTime
class Minute
Minutes

alias of Minute

class YottaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaminute

alias of YottaMinute

Yottaminutes

alias of YottaMinute

class ZettaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaminute

alias of ZettaMinute

Zettaminutes

alias of ZettaMinute

class ExaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Examinute

alias of ExaMinute

Examinutes

alias of ExaMinute

class PetaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaminute

alias of PetaMinute

Petaminutes

alias of PetaMinute

class TeraMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraminute

alias of TeraMinute

Teraminutes

alias of TeraMinute

class GigaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaminute

alias of GigaMinute

Gigaminutes

alias of GigaMinute

class MegaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaminute

alias of MegaMinute

Megaminutes

alias of MegaMinute

class KiloMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilominute

alias of KiloMinute

Kilominutes

alias of KiloMinute

class HectoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectominute

alias of HectoMinute

Hectominutes

alias of HectoMinute

class DecaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaminute

alias of DecaMinute

Decaminutes

alias of DecaMinute

class DeciMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciminute

alias of DeciMinute

Deciminutes

alias of DeciMinute

class CentiMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiminute

alias of CentiMinute

Centiminutes

alias of CentiMinute

class MilliMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliminute

alias of MilliMinute

Milliminutes

alias of MilliMinute

class MicroMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microminute

alias of MicroMinute

Microminutes

alias of MicroMinute

class NanoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanominute

alias of NanoMinute

Nanominutes

alias of NanoMinute

class PicoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picominute

alias of PicoMinute

Picominutes

alias of PicoMinute

class FemtoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtominute

alias of FemtoMinute

Femtominutes

alias of FemtoMinute

class AttoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attominute

alias of AttoMinute

Attominutes

alias of AttoMinute

class ZeptoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptominute

alias of ZeptoMinute

Zeptominutes

alias of ZeptoMinute

class YoctoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctominute

alias of YoctoMinute

Yoctominutes

alias of YoctoMinute

class Minute
class Hour
Hours

alias of Hour

class YottaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottahour

alias of YottaHour

Yottahours

alias of YottaHour

class ZettaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettahour

alias of ZettaHour

Zettahours

alias of ZettaHour

class ExaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exahour

alias of ExaHour

Exahours

alias of ExaHour

class PetaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petahour

alias of PetaHour

Petahours

alias of PetaHour

class TeraHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terahour

alias of TeraHour

Terahours

alias of TeraHour

class GigaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigahour

alias of GigaHour

Gigahours

alias of GigaHour

class MegaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megahour

alias of MegaHour

Megahours

alias of MegaHour

class KiloHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilohour

alias of KiloHour

Kilohours

alias of KiloHour

class HectoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectohour

alias of HectoHour

Hectohours

alias of HectoHour

class DecaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decahour

alias of DecaHour

Decahours

alias of DecaHour

class DeciHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decihour

alias of DeciHour

Decihours

alias of DeciHour

class CentiHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centihour

alias of CentiHour

Centihours

alias of CentiHour

class MilliHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millihour

alias of MilliHour

Millihours

alias of MilliHour

class MicroHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microhour

alias of MicroHour

Microhours

alias of MicroHour

class NanoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanohour

alias of NanoHour

Nanohours

alias of NanoHour

class PicoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picohour

alias of PicoHour

Picohours

alias of PicoHour

class FemtoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtohour

alias of FemtoHour

Femtohours

alias of FemtoHour

class AttoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attohour

alias of AttoHour

Attohours

alias of AttoHour

class ZeptoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptohour

alias of ZeptoHour

Zeptohours

alias of ZeptoHour

class YoctoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctohour

alias of YoctoHour

Yoctohours

alias of YoctoHour

class Hour
class Day
Days

alias of Day

class YottaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaday

alias of YottaDay

Yottadays

alias of YottaDay

class ZettaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaday

alias of ZettaDay

Zettadays

alias of ZettaDay

class ExaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaday

alias of ExaDay

Exadays

alias of ExaDay

class PetaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaday

alias of PetaDay

Petadays

alias of PetaDay

class TeraDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraday

alias of TeraDay

Teradays

alias of TeraDay

class GigaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaday

alias of GigaDay

Gigadays

alias of GigaDay

class MegaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaday

alias of MegaDay

Megadays

alias of MegaDay

class KiloDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloday

alias of KiloDay

Kilodays

alias of KiloDay

class HectoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoday

alias of HectoDay

Hectodays

alias of HectoDay

class DecaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaday

alias of DecaDay

Decadays

alias of DecaDay

class DeciDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciday

alias of DeciDay

Decidays

alias of DeciDay

class CentiDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiday

alias of CentiDay

Centidays

alias of CentiDay

class MilliDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliday

alias of MilliDay

Millidays

alias of MilliDay

class MicroDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microday

alias of MicroDay

Microdays

alias of MicroDay

class NanoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoday

alias of NanoDay

Nanodays

alias of NanoDay

class PicoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoday

alias of PicoDay

Picodays

alias of PicoDay

class FemtoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoday

alias of FemtoDay

Femtodays

alias of FemtoDay

class AttoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoday

alias of AttoDay

Attodays

alias of AttoDay

class ZeptoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoday

alias of ZeptoDay

Zeptodays

alias of ZeptoDay

class YoctoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoday

alias of YoctoDay

Yoctodays

alias of YoctoDay

class Day
class Week
Weeks

alias of Week

class YottaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaweek

alias of YottaWeek

Yottaweeks

alias of YottaWeek

class ZettaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaweek

alias of ZettaWeek

Zettaweeks

alias of ZettaWeek

class ExaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaweek

alias of ExaWeek

Exaweeks

alias of ExaWeek

class PetaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaweek

alias of PetaWeek

Petaweeks

alias of PetaWeek

class TeraWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraweek

alias of TeraWeek

Teraweeks

alias of TeraWeek

class GigaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaweek

alias of GigaWeek

Gigaweeks

alias of GigaWeek

class MegaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaweek

alias of MegaWeek

Megaweeks

alias of MegaWeek

class KiloWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloweek

alias of KiloWeek

Kiloweeks

alias of KiloWeek

class HectoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoweek

alias of HectoWeek

Hectoweeks

alias of HectoWeek

class DecaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaweek

alias of DecaWeek

Decaweeks

alias of DecaWeek

class DeciWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciweek

alias of DeciWeek

Deciweeks

alias of DeciWeek

class CentiWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiweek

alias of CentiWeek

Centiweeks

alias of CentiWeek

class MilliWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliweek

alias of MilliWeek

Milliweeks

alias of MilliWeek

class MicroWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microweek

alias of MicroWeek

Microweeks

alias of MicroWeek

class NanoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoweek

alias of NanoWeek

Nanoweeks

alias of NanoWeek

class PicoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoweek

alias of PicoWeek

Picoweeks

alias of PicoWeek

class FemtoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoweek

alias of FemtoWeek

Femtoweeks

alias of FemtoWeek

class AttoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoweek

alias of AttoWeek

Attoweeks

alias of AttoWeek

class ZeptoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoweek

alias of ZeptoWeek

Zeptoweeks

alias of ZeptoWeek

class YoctoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoweek

alias of YoctoWeek

Yoctoweeks

alias of YoctoWeek

class Week
class Year
Years

alias of Year

class YottaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottayear

alias of YottaYear

Yottayears

alias of YottaYear

class ZettaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettayear

alias of ZettaYear

Zettayears

alias of ZettaYear

class ExaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exayear

alias of ExaYear

Exayears

alias of ExaYear

class PetaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petayear

alias of PetaYear

Petayears

alias of PetaYear

class TeraYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terayear

alias of TeraYear

Terayears

alias of TeraYear

class GigaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigayear

alias of GigaYear

Gigayears

alias of GigaYear

class MegaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megayear

alias of MegaYear

Megayears

alias of MegaYear

class KiloYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloyear

alias of KiloYear

Kiloyears

alias of KiloYear

class HectoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoyear

alias of HectoYear

Hectoyears

alias of HectoYear

class DecaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decayear

alias of DecaYear

Decayears

alias of DecaYear

class DeciYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciyear

alias of DeciYear

Deciyears

alias of DeciYear

class CentiYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiyear

alias of CentiYear

Centiyears

alias of CentiYear

class MilliYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliyear

alias of MilliYear

Milliyears

alias of MilliYear

class MicroYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microyear

alias of MicroYear

Microyears

alias of MicroYear

class NanoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoyear

alias of NanoYear

Nanoyears

alias of NanoYear

class PicoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoyear

alias of PicoYear

Picoyears

alias of PicoYear

class FemtoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoyear

alias of FemtoYear

Femtoyears

alias of FemtoYear

class AttoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoyear

alias of AttoYear

Attoyears

alias of AttoYear

class ZeptoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoyear

alias of ZeptoYear

Zeptoyears

alias of ZeptoYear

class YoctoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoyear

alias of YoctoYear

Yoctoyears

alias of YoctoYear

class Year
class Decade
Decades

alias of Decade

class YottaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottadecade

alias of YottaDecade

Yottadecades

alias of YottaDecade

class ZettaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettadecade

alias of ZettaDecade

Zettadecades

alias of ZettaDecade

class ExaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exadecade

alias of ExaDecade

Exadecades

alias of ExaDecade

class PetaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petadecade

alias of PetaDecade

Petadecades

alias of PetaDecade

class TeraDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teradecade

alias of TeraDecade

Teradecades

alias of TeraDecade

class GigaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigadecade

alias of GigaDecade

Gigadecades

alias of GigaDecade

class MegaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megadecade

alias of MegaDecade

Megadecades

alias of MegaDecade

class KiloDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilodecade

alias of KiloDecade

Kilodecades

alias of KiloDecade

class HectoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectodecade

alias of HectoDecade

Hectodecades

alias of HectoDecade

class DecaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decadecade

alias of DecaDecade

Decadecades

alias of DecaDecade

class DeciDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decidecade

alias of DeciDecade

Decidecades

alias of DeciDecade

class CentiDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centidecade

alias of CentiDecade

Centidecades

alias of CentiDecade

class MilliDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millidecade

alias of MilliDecade

Millidecades

alias of MilliDecade

class MicroDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microdecade

alias of MicroDecade

Microdecades

alias of MicroDecade

class NanoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanodecade

alias of NanoDecade

Nanodecades

alias of NanoDecade

class PicoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picodecade

alias of PicoDecade

Picodecades

alias of PicoDecade

class FemtoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtodecade

alias of FemtoDecade

Femtodecades

alias of FemtoDecade

class AttoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attodecade

alias of AttoDecade

Attodecades

alias of AttoDecade

class ZeptoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptodecade

alias of ZeptoDecade

Zeptodecades

alias of ZeptoDecade

class YoctoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctodecade

alias of YoctoDecade

Yoctodecades

alias of YoctoDecade

class Decade
class Century
Centuries

alias of Century

class YottaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottacentury

alias of YottaCentury

Yottacenturies

alias of YottaCentury

class ZettaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettacentury

alias of ZettaCentury

Zettacenturies

alias of ZettaCentury

class ExaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exacentury

alias of ExaCentury

Exacenturies

alias of ExaCentury

class PetaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petacentury

alias of PetaCentury

Petacenturies

alias of PetaCentury

class TeraCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teracentury

alias of TeraCentury

Teracenturies

alias of TeraCentury

class GigaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigacentury

alias of GigaCentury

Gigacenturies

alias of GigaCentury

class MegaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megacentury

alias of MegaCentury

Megacenturies

alias of MegaCentury

class KiloCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilocentury

alias of KiloCentury

Kilocenturies

alias of KiloCentury

class HectoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectocentury

alias of HectoCentury

Hectocenturies

alias of HectoCentury

class DecaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decacentury

alias of DecaCentury

Decacenturies

alias of DecaCentury

class DeciCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decicentury

alias of DeciCentury

Decicenturies

alias of DeciCentury

class CentiCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centicentury

alias of CentiCentury

Centicenturies

alias of CentiCentury

class MilliCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millicentury

alias of MilliCentury

Millicenturies

alias of MilliCentury

class MicroCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microcentury

alias of MicroCentury

Microcenturies

alias of MicroCentury

class NanoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanocentury

alias of NanoCentury

Nanocenturies

alias of NanoCentury

class PicoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picocentury

alias of PicoCentury

Picocenturies

alias of PicoCentury

class FemtoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtocentury

alias of FemtoCentury

Femtocenturies

alias of FemtoCentury

class AttoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attocentury

alias of AttoCentury

Attocenturies

alias of AttoCentury

class ZeptoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptocentury

alias of ZeptoCentury

Zeptocenturies

alias of ZeptoCentury

class YoctoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctocentury

alias of YoctoCentury

Yoctocenturies

alias of YoctoCentury

class Century
class Millennium
Millennia

alias of Millennium

class YottaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottamillennium

alias of YottaMillennium

Yottamillennia

alias of YottaMillennium

class ZettaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettamillennium

alias of ZettaMillennium

Zettamillennia

alias of ZettaMillennium

class ExaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Examillennium

alias of ExaMillennium

Examillennia

alias of ExaMillennium

class PetaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petamillennium

alias of PetaMillennium

Petamillennia

alias of PetaMillennium

class TeraMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teramillennium

alias of TeraMillennium

Teramillennia

alias of TeraMillennium

class GigaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigamillennium

alias of GigaMillennium

Gigamillennia

alias of GigaMillennium

class MegaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megamillennium

alias of MegaMillennium

Megamillennia

alias of MegaMillennium

class KiloMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilomillennium

alias of KiloMillennium

Kilomillennia

alias of KiloMillennium

class HectoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectomillennium

alias of HectoMillennium

Hectomillennia

alias of HectoMillennium

class DecaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decamillennium

alias of DecaMillennium

Decamillennia

alias of DecaMillennium

class DeciMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decimillennium

alias of DeciMillennium

Decimillennia

alias of DeciMillennium

class CentiMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centimillennium

alias of CentiMillennium

Centimillennia

alias of CentiMillennium

class MilliMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millimillennium

alias of MilliMillennium

Millimillennia

alias of MilliMillennium

class MicroMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Micromillennium

alias of MicroMillennium

Micromillennia

alias of MicroMillennium

class NanoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanomillennium

alias of NanoMillennium

Nanomillennia

alias of NanoMillennium

class PicoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picomillennium

alias of PicoMillennium

Picomillennia

alias of PicoMillennium

class FemtoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtomillennium

alias of FemtoMillennium

Femtomillennia

alias of FemtoMillennium

class AttoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attomillennium

alias of AttoMillennium

Attomillennia

alias of AttoMillennium

class ZeptoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptomillennium

alias of ZeptoMillennium

Zeptomillennia

alias of ZeptoMillennium

class YoctoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctomillennium

alias of YoctoMillennium

Yoctomillennia

alias of YoctoMillennium

class Millennium
class Coulomb
classmethod to(other)
Coulombs

alias of Coulomb

class YottaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottacoulomb

alias of YottaCoulomb

Yottacoulombs

alias of YottaCoulomb

class ZettaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettacoulomb

alias of ZettaCoulomb

Zettacoulombs

alias of ZettaCoulomb

class ExaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exacoulomb

alias of ExaCoulomb

Exacoulombs

alias of ExaCoulomb

class PetaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petacoulomb

alias of PetaCoulomb

Petacoulombs

alias of PetaCoulomb

class TeraCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teracoulomb

alias of TeraCoulomb

Teracoulombs

alias of TeraCoulomb

class GigaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigacoulomb

alias of GigaCoulomb

Gigacoulombs

alias of GigaCoulomb

class MegaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megacoulomb

alias of MegaCoulomb

Megacoulombs

alias of MegaCoulomb

class KiloCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilocoulomb

alias of KiloCoulomb

Kilocoulombs

alias of KiloCoulomb

class HectoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectocoulomb

alias of HectoCoulomb

Hectocoulombs

alias of HectoCoulomb

class DecaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decacoulomb

alias of DecaCoulomb

Decacoulombs

alias of DecaCoulomb

class DeciCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decicoulomb

alias of DeciCoulomb

Decicoulombs

alias of DeciCoulomb

class CentiCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centicoulomb

alias of CentiCoulomb

Centicoulombs

alias of CentiCoulomb

class MilliCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millicoulomb

alias of MilliCoulomb

Millicoulombs

alias of MilliCoulomb

class MicroCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microcoulomb

alias of MicroCoulomb

Microcoulombs

alias of MicroCoulomb

class NanoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanocoulomb

alias of NanoCoulomb

Nanocoulombs

alias of NanoCoulomb

class PicoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picocoulomb

alias of PicoCoulomb

Picocoulombs

alias of PicoCoulomb

class FemtoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtocoulomb

alias of FemtoCoulomb

Femtocoulombs

alias of FemtoCoulomb

class AttoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attocoulomb

alias of AttoCoulomb

Attocoulombs

alias of AttoCoulomb

class ZeptoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptocoulomb

alias of ZeptoCoulomb

Zeptocoulombs

alias of ZeptoCoulomb

class YoctoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctocoulomb

alias of YoctoCoulomb

Yoctocoulombs

alias of YoctoCoulomb

class AtomicUnitOfElectricCharge
AtomicUnitsOfElectricCharge

alias of AtomicUnitOfElectricCharge

class YottaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class AtomicUnitOfElectricCharge
AtomicUnitOfCharge

alias of AtomicUnitOfElectricCharge

AtomicUnitsOfCharge

alias of AtomicUnitOfElectricCharge

class YottaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAtomicUnitsOfCharge

alias of YottaAtomicUnitOfCharge

class ZettaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAtomicUnitsOfCharge

alias of ZettaAtomicUnitOfCharge

class ExaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAtomicUnitsOfCharge

alias of ExaAtomicUnitOfCharge

class PetaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAtomicUnitsOfCharge

alias of PetaAtomicUnitOfCharge

class TeraAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAtomicUnitsOfCharge

alias of TeraAtomicUnitOfCharge

class GigaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAtomicUnitsOfCharge

alias of GigaAtomicUnitOfCharge

class MegaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAtomicUnitsOfCharge

alias of MegaAtomicUnitOfCharge

class KiloAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAtomicUnitsOfCharge

alias of KiloAtomicUnitOfCharge

class HectoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAtomicUnitsOfCharge

alias of HectoAtomicUnitOfCharge

class DecaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAtomicUnitsOfCharge

alias of DecaAtomicUnitOfCharge

class DeciAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAtomicUnitsOfCharge

alias of DeciAtomicUnitOfCharge

class CentiAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAtomicUnitsOfCharge

alias of CentiAtomicUnitOfCharge

class MilliAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAtomicUnitsOfCharge

alias of MilliAtomicUnitOfCharge

class MicroAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAtomicUnitsOfCharge

alias of MicroAtomicUnitOfCharge

class NanoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAtomicUnitsOfCharge

alias of NanoAtomicUnitOfCharge

class PicoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAtomicUnitsOfCharge

alias of PicoAtomicUnitOfCharge

class FemtoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAtomicUnitsOfCharge

alias of FemtoAtomicUnitOfCharge

class AttoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAtomicUnitsOfCharge

alias of AttoAtomicUnitOfCharge

class ZeptoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAtomicUnitsOfCharge

alias of ZeptoAtomicUnitOfCharge

class YoctoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAtomicUnitsOfCharge

alias of YoctoAtomicUnitOfCharge

class Gram
classmethod to(other)
Grams

alias of Gram

class YottaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottagram

alias of YottaGram

Yottagrams

alias of YottaGram

class ZettaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettagram

alias of ZettaGram

Zettagrams

alias of ZettaGram

class ExaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exagram

alias of ExaGram

Exagrams

alias of ExaGram

class PetaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petagram

alias of PetaGram

Petagrams

alias of PetaGram

class TeraGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teragram

alias of TeraGram

Teragrams

alias of TeraGram

class GigaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigagram

alias of GigaGram

Gigagrams

alias of GigaGram

class MegaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megagram

alias of MegaGram

Megagrams

alias of MegaGram

class KiloGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilogram

alias of KiloGram

Kilograms

alias of KiloGram

class HectoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectogram

alias of HectoGram

Hectograms

alias of HectoGram

class DecaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decagram

alias of DecaGram

Decagrams

alias of DecaGram

class DeciGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decigram

alias of DeciGram

Decigrams

alias of DeciGram

class CentiGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centigram

alias of CentiGram

Centigrams

alias of CentiGram

class MilliGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milligram

alias of MilliGram

Milligrams

alias of MilliGram

class MicroGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microgram

alias of MicroGram

Micrograms

alias of MicroGram

class NanoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanogram

alias of NanoGram

Nanograms

alias of NanoGram

class PicoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picogram

alias of PicoGram

Picograms

alias of PicoGram

class FemtoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtogram

alias of FemtoGram

Femtograms

alias of FemtoGram

class AttoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attogram

alias of AttoGram

Attograms

alias of AttoGram

class ZeptoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptogram

alias of ZeptoGram

Zeptograms

alias of ZeptoGram

class YoctoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctogram

alias of YoctoGram

Yoctograms

alias of YoctoGram

class AtomicMassUnit
AtomicMassUnits

alias of AtomicMassUnit

class YottaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
AMU

alias of AtomicMassUnit

AMUs

alias of AtomicMassUnit

class YottaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAMUs

alias of YottaAMU

class ZettaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAMUs

alias of ZettaAMU

class ExaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAMUs

alias of ExaAMU

class PetaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAMUs

alias of PetaAMU

class TeraAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAMUs

alias of TeraAMU

class GigaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAMUs

alias of GigaAMU

class MegaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAMUs

alias of MegaAMU

class KiloAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAMUs

alias of KiloAMU

class HectoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAMUs

alias of HectoAMU

class DecaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAMUs

alias of DecaAMU

class DeciAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAMUs

alias of DeciAMU

class CentiAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAMUs

alias of CentiAMU

class MilliAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAMUs

alias of MilliAMU

class MicroAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAMUs

alias of MicroAMU

class NanoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAMUs

alias of NanoAMU

class PicoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAMUs

alias of PicoAMU

class FemtoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAMUs

alias of FemtoAMU

class AttoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAMUs

alias of AttoAMU

class ZeptoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAMUs

alias of ZeptoAMU

class YoctoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAMUs

alias of YoctoAMU

class AtomicUnitOfMass
AtomicUnitsOfMass

alias of AtomicUnitOfMass

class YottaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class CompositeUnit(numer_units_or_composed, denom_units=None, coeff=1.0)

A class for composite units, e.g. Joules/Angstrom^2

coefficient = 1.0
composed = None
genre

Analog of Unit.genre. Always returns CompositeUnit

name

The name of the composite unit, as a product of base units

reduced(using_units=None)

Reduce the composite unit into the fewest base units possible.

Examples :
>>> from grendel.util.units import *
>>> (Angstroms**2/Bohr).reduced()
(1.88972612457 Angstrom)
>>> (Degree / (Bohr**2)).reduced()
Degree / Bohr**2
>>> (Degree / (Bohr*Meter)).reduced()
(5.2917721092e-11 Degree / Bohr**2)
to()
exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

exception UnknownUnitError(unit1)

Exception for attempted conversion of something that is not a subclass of Unit

exception UnitizedObjectError

For errors encountered in handling unitized objects

hasunits(*fargs, **fkeywords)

Alias for has_units()

has_units(obj)

Aliased as hasunits()

strip_units
Strips the units off of a unitized object
(or, if the object is not Unitized, just return it). If convert_to is given, convert to these units if obj is Unitized. If assume_units is given, obj is assumed to have the units given by this argument if (and only if) it is not an instance of Unitized.

Aliased as stripunits()

stripunits(*fargs, **fkeywords)

Alias for strip_units()

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception MoleculeNotFoundError(identifier, value, url)

Raised when a function within the web_getter module cannot find a molecule with the given identifier.

I_ll(nballs, nboxes, labels)
I_llbar(nballs, nboxes, labels)
I_lu(nballs, nboxes, labels)
I_lubar(nballs, nboxes, labels)
I_ul(nballs, nboxes, labels)
I_ulbar(nballs, nboxes, labels)
I_uu(nballs, nboxes, labels)
I_uubar(nballs, nboxes, labels)
class Iterable
class Iterator
next()

Return the next item from the iterator. When exhausted, raise StopIteration

all_partitions_iter(sequence, length, allow_zero=True)

Iterate over all possible partitions of a sequence

Examples :
brace_notation_iter(sequence_of_sequences)

This iterates over the brace notation combinations from Allen, et al. Mol. Phys. 89 (1996), 1213-1221 See the explanation of its funtion therein. This is needed for the arbitrary order B tensor formulae.

Examples :
>>> [tuple(''.join(part) for part in parts) for parts in brace_notation_iter(['AB', 'C', 'D'])]
[('AB', 'C', 'D'), ('AC', 'B', 'D'), ('AD', 'B', 'C'), ('BC', 'A', 'D'), ('BD', 'A', 'C'), ('CD', 'A', 'B')]
class chain

chain(*iterables) –> chain object

Return a chain object whose .next() method returns elements from the first iterable until it is exhausted, then elements from the next iterable, until all of the iterables are exhausted.

static from_iterable()

chain.from_iterable(iterable) –> chain object

Alternate chain() contructor taking a single iterable argument that evaluates lazily.

next

x.next() -> the next value, or raise StopIteration

class combinations_with_replacement

combinations_with_replacement(iterable, r) –> combinations_with_replacement object

Return successive r-length combinations of elements in the iterable allowing individual elements to have successive repeats. combinations_with_replacement(‘ABC’, 2) –> AA AB AC BB BC CC

next

x.next() -> the next value, or raise StopIteration

cummulative_sum(iterable, initial_value=0, op=<built-in function add>)

Iterate over the progressive cumulative sum of the items in the iterable.

Examples :
>>> [i for i in cummulative_sum(xrange(6))]
[0, 1, 3, 6, 10, 15]
>>> [a for a in cummulative_sum('ABCD', '')]
['A', 'AB', 'ABC', 'ABCD']
>>> [a for a in cummulative_sum(cummulative_sum('ABCD', ''), '')]
['A', 'AAB', 'AABABC', 'AABABCABCD']
>>> [i for i in cummulative_sum(xrange(1,6), 1, op=operator.mul)]
[1, 2, 6, 24, 120]
class cycle

cycle(iterable) –> cycle object

Return elements from the iterable until it is exhausted. Then repeat the sequence indefinitely.

next

x.next() -> the next value, or raise StopIteration

first(iterable, predicate=<function <lambda> at 0x1e181870>, default_value=ArgumentNotGiven)
flattened(iterable, keep_types=None, debug=False)

Flatten across all levels of iteration.

Examples :
>>> [f for f in flattened([1,2,3,[4,5,[6]]])]
[1, 2, 3, 4, 5, 6]
>>> [f for f in flattened([1,2,3,[4,5,[6],[[xrange(1,17)]]]])]
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> [f for f in flattened([range(1,4),1,2,3,[4,5,[6],[[xrange(1,17)]]]])]
[1, 2, 3, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> [f for f in flattened([1, [3, 4], [["hello", ["world"]]], {"yes": True}])]
[1, 3, 4, 'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', 'y', 'e', 's']
>>> [f for f in flattened([1, [3, 4], [["hello", ["world"]]], {"yes": True}], keep_types=str)]
[1, 3, 4, 'hello', 'world', 'yes']
>>> [f for f in flattened([1, [3, 4], [["hello", ["world"]]], {"yes": True}], keep_types=(str, dict))]
[1, 3, 4, 'hello', 'world', {'yes': True}]
>>> [f for f in flattened([1, [3, 4], [["hello", ["world"]]], {"yes": True}], keep_types=(str, dict, list))]
[[1, [3, 4], [['hello', ['world']]], {'yes': True}]]
grouper(n, iterable, fillvalue=None)

group(3, ‘ABCDEFG’, ‘x’) –> ABC DEF Gxx

class islice

islice(iterable, [start,] stop [, step]) –> islice object

Return an iterator whose next() method returns selected values from an iterable. If start is specified, will skip all preceding elements; otherwise, start defaults to zero. Step defaults to one. If specified as another value, step determines how many values are skipped between successive calls. Works like a slice() on a list but returns an iterator.

next

x.next() -> the next value, or raise StopIteration

class izip_longest

izip_longest(iter1 [,iter2 [...]], [fillvalue=None]) –> izip_longest object

Return an izip_longest object whose .next() method returns a tuple where the i-th element comes from the i-th iterable argument. The .next() method continues until the longest iterable in the argument sequence is exhausted and then it raises StopIteration. When the shorter iterables are exhausted, the fillvalue is substituted in their place. The fillvalue defaults to None or can be specified by a keyword argument.

next

x.next() -> the next value, or raise StopIteration

labeled_balls_in_labeled_boxes(balls, box_sizes)

OVERVIEW

This function returns a generator that produces all distinct distributions of distinguishable balls among distinguishable boxes, with specified box sizes (capacities). This is a generalization of the most common formulation of the problem, where each box is sufficiently large to accommodate all of the balls.

CONSTRUCTOR INPUTS

n: the number of balls

box_sizes: This argument is a list of length 1 or greater. The length of the list corresponds to the number of boxes. box_sizes[i] is a positive integer that specifies the maximum capacity of the ith box. If box_sizes[i] equals n (or greater), then the ith box can accommodate all n balls and thus effectively has unlimited capacity.

EXAMPLE

Issue the following statement issued at the IPython prompt:

list(labeled_balls_in_labeled_boxes(3,[2,2]))

The output is as follows:

[((0, 1), (2,)),
((0, 2), (1,)), ((1, 2), (0,)), ((0,), (1, 2)), ((1,), (0, 2)), ((2,), (0, 1))]
labeled_balls_in_unlabeled_boxes(balls, box_sizes)

OVERVIEW

This function returns a generator that produces all distinct distributions of distinguishable balls among indistinguishable boxes, with specified box sizes (capacities). This is a generalization of the most common formulation of the problem, where each box is sufficiently large to accommodate all of the balls. It might be asked, ‘In what sense are the boxes indistinguishable if they have different capacities?’ The answer is that the box capacities must be considered when distributing the balls, but once the balls have been distributed, the identities of the boxes no longer matter.

CONSTRUCTOR INPUTS

n: the number of balls

box_sizes: This argument is a list of length 1 or greater. The length of the list corresponds to the number of boxes. box_sizes[i] is a positive integer that specifies the maximum capacity of the ith box. If box_sizes[i] equals n (or greater), then the ith box can accommodate all n balls and thus effectively has unlimited capacity.

NOTE

For labeled_balls_in_unlabeled_boxes, the order of the elements of the box_sizes list is unimportant because the code will sort it into non- increasing order before any other processing is done.

last(iterable, predicate=<function <lambda> at 0x1e1818f0>, default_value=ArgumentNotGiven)
ordered_partitions(sequence, length)

see ordered_partitions_iter

ordered_partitions_iter(sequence, length)

This iterates over the P^k,m operator from Allen, et al. Mol. Phys. 89 (1996), 1213-1221 See the explanation of its funtion therein. This is needed for the arbitrary order B tensor formulae.

Examples :
>>> [tuple(''.join(part) for part in parts) for parts in ordered_partitions_iter('ABCD', 2)]
[('A', 'BCD'), ('AB', 'CD')]
>>> [tuple(''.join(part) for part in parts) for parts in ordered_partitions_iter('ABCDEF', 3)]
[('A', 'B', 'CDEF'), ('A', 'BC', 'DEF'), ('AB', 'CD', 'EF')]
partitioned(iterable, partitions)

Iterate over iterable in chunks of sizes given in partitions. If partitions runs out before iterable does, partitions will be cycled (i.e. the next partition size will be the first element of partitions, the following size will be the second, and so on). If there are not enough elements remaining to fill the last partition, the last item yielded will be shorter (just as if a slice running over the end of the list were taken).

Examples :
>>> [''.join(a) for a in partitioned('ABCDEFG', (1, 3, 2, 1))]
['A', 'BCD', 'EF', 'G']
>>> [''.join(a) for a in partitioned('ABCDEFGHIJ', (1, 3, 2, 1))]
['A', 'BCD', 'EF', 'G', 'H', 'IJ']
>>> [''.join(a) for a in partitioned('ABCDEFGHIJK', (2,))]
['AB', 'CD', 'EF', 'GH', 'IJ', 'K']
>>> [''.join(a) for a in partitioned('ABC', (1, 3, 2, 1))]
['A', 'BC']
>>> [i for i in partitioned('abcdef', (0,3))]
[(), ('a', 'b', 'c'), (), ('d', 'e', 'f'), ()]
>>> [i for i in partitioned('abcdef', (3,1,0,3))]
[('a', 'b', 'c'), ('d',), (), ('e', 'f')]
>>> [i for i in partitioned('abcdef', (3,1,0))]
[('a', 'b', 'c'), ('d',), (), ('e', 'f')]
perm_unique_helper(listunique, result_list, d)
stutter(iterable, ntimes)

repeat each element n times before moving on.

Examples :
>>> [s for s in stutter([1, 2, 3, 4], 3)]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
>>> ''.join(a for a in stutter('hello', 2))
'hheelllloo'
tee()

tee(iterable, n=2) –> tuple of n independent iterators.

class unique_element(value, occurrences)
unique_permutations(elements)
unlabeled_balls_in_labeled_boxes(balls, box_sizes)

OVERVIEW

This function returns a generator that produces all distinct distributions of indistinguishable balls among labeled boxes with specified box sizes (capacities). This is a generalization of the most common formulation of the problem, where each box is sufficiently large to accommodate all of the balls, and is an important example of a class of combinatorics problems called ‘weak composition’ problems.

CONSTRUCTOR INPUTS

n: the number of balls

box_sizes: This argument is a list of length 1 or greater. The length of the list corresponds to the number of boxes. box_sizes[i] is a positive integer that specifies the maximum capacity of the ith box. If box_sizes[i] equals n (or greater), then the ith box can accommodate all n balls and thus effectively has unlimited capacity.

ACKNOWLEDGMENT

I’d like to thank Chris Rebert for helping me to convert my prototype class-based code into a generator function.

unlabeled_balls_in_unlabeled_boxes(balls, box_sizes)

OVERVIEW

This function returns a generator that produces all distinct distributions of indistinguishable balls among indistinguishable boxes, with specified box sizes (capacities). This is a generalization of the most common formulation of the problem, where each box is sufficiently large to accommodate all of the balls. It might be asked, ‘In what sense are the boxes indistinguishable if they have different capacities?’ The answer is that the box capacities must be considered when distributing the balls, but once the balls have been distributed, the identities of the boxes no longer matter.

CONSTRUCTOR INPUTS

n: the number of balls

box_sizes: This argument is a list of length 1 or greater. The length of the list corresponds to the number of boxes. box_sizes[i] is a positive integer that specifies the maximum capacity of the ith box. If box_sizes[i] equals n (or greater), then the ith box can accommodate all n balls and thus effectively has unlimited capacity.

NOTE

For unlabeled_balls_in_unlabeled_boxes, the order of the elements of the box_sizes list is unimportant because the code will sort it into non- increasing order before any other processing is done.

class RegexSequence(main, main_flags=0, start=None, start_flags=0, stop=None, stop_flags=0, last_only=False, require_stop=False, match_function=<function search at 0xf79680f0>)

A sequence of regular expressions for parsing a piece of data from a file. The sequence can have optional activation (“start”) and deactivation (“stop”) sequences, and matches are collected from every match of the main regex (or main list of regexes) given. The Ellipsis object may be given in the main sequence (or the start/stop sequences) to indicate that any number of lines may come in between the preceeding and succeding regexes. A RegexSequence.RepeatedRegex object can be used to indicate that a regex can be repeated without invalidating the sequence.

The RegexSequence object is used by passing a file in line by line to the parse_line() method.

If the last_only keyword argument is given to the initialization, only the last match (or sequence of matches,
if a list of regexes is given for the main sequence) is kept
class Duplicated(duplicated, prelude=None, postlude=None, interludes=None, min_dups=None, max_dups=None, flags=None)

A mechanism for allowing a certain part of a pattern to be duplicated an arbitrary number of times in a line.

class Interlude(regex, frequency, max_repeats=None, offset=None)

A super-lightweight class to hold an interlude

frequency = None
max_repeats = None
offset = None
regex = None
reset()
RegexSequence.Duplicated.duplicated = None
RegexSequence.Duplicated.flags = None
RegexSequence.Duplicated.interludes = None
RegexSequence.Duplicated.match(string)
RegexSequence.Duplicated.max_dups = None
RegexSequence.Duplicated.min_dups = None
RegexSequence.Duplicated.pattern

Returns the main regex, in order to conform with the Regex class protocol

RegexSequence.Duplicated.postlude = None
RegexSequence.Duplicated.prelude = None
RegexSequence.Duplicated.search(string)
class RegexSequence.RepeatedRegex(regexes, repeats=None, min_repeats=1, flags=0, exactly=False, greedy=True)

A regex that may be repeated on multiple consecutive lines without invalidating the sequence. The RepeatedRegex may be repeated an arbitrary (repeats = None, the default) or specified number of times. Currently, the behavior of repeated regexes with exact=False is not stable when multiple (different) RepeatedRegex objects are given consecutively and the number of intervening lines to be matched is fewer than the number of consecutive RepeatedRegex objects minus 1. This is a fairly extreme edge case that is demonstrated in the test suite in test_expected_failures() in the file “test_parsing.py”.

exactly = None
greedy = None
in_reset_state()

True if reset() would change nothing

match(string)
min_repeats = None
okay_to_finish()
regexes = None
repeats = None
reset()
search(string)
RegexSequence.groups(flat=True)

Returns a tuple containing all the match groups from all the matches. If the flat argument is True, (default) the groups are flattened across all matches. If flat is False, the groups are only flattened within a given series (this makes no difference for cases where the main regex is a single expression rather than a list of regexes; in this case a flat list of groups is always returned).

The name “groups” is meant to correspond roughly with the naming convention in Python’s re module.

RegexSequence.last_only = None
RegexSequence.main = None
RegexSequence.match_function = None
RegexSequence.matches

A (possibly nested) list of the matches collected thus far.

RegexSequence.parse_line(line)

Parse a line from a file.

RegexSequence.require_stop = None
RegexSequence.reset()

Reset the regex sequence. Do this, for instance, when you’ve finished parsing one file and need to start parsing another. This gets called by the constructor. Most internal uses of this class should already do this when it is supposed to be done.

RegexSequence.start = None
RegexSequence.stop = None
class Regex

Abstract base class for regular expressions. For now, anything that responds to ‘match’, ‘search’, and has the attributes ‘flags’ and ‘pattern’ is considered a Regex object. You can’t instantiate a Regex object; the __new__() just returns re.compile() with the same arguments.

Examples :
>>> import re
>>> isinstance(re.compile(r'test123'), Regex)
True
>>> isinstance(r'test123', Regex)
False
class Duplicated(duplicated, prelude=None, postlude=None, interludes=None, min_dups=None, max_dups=None, flags=None)

A mechanism for allowing a certain part of a pattern to be duplicated an arbitrary number of times in a line.

class Interlude(regex, frequency, max_repeats=None, offset=None)

A super-lightweight class to hold an interlude

frequency = None
max_repeats = None
offset = None
regex = None
reset()
Duplicated.duplicated = None
Duplicated.flags = None
Duplicated.interludes = None
Duplicated.match(string)
Duplicated.max_dups = None
Duplicated.min_dups = None
Duplicated.pattern

Returns the main regex, in order to conform with the Regex class protocol

Duplicated.postlude = None
Duplicated.prelude = None
Duplicated.search(string)
Repeated

alias of RepeatedRegex

class RepeatedRegex(regexes, repeats=None, min_repeats=1, flags=0, exactly=False, greedy=True)

A regex that may be repeated on multiple consecutive lines without invalidating the sequence. The RepeatedRegex may be repeated an arbitrary (repeats = None, the default) or specified number of times. Currently, the behavior of repeated regexes with exact=False is not stable when multiple (different) RepeatedRegex objects are given consecutively and the number of intervening lines to be matched is fewer than the number of consecutive RepeatedRegex objects minus 1. This is a fairly extreme edge case that is demonstrated in the test suite in test_expected_failures() in the file “test_parsing.py”.

exactly = None
greedy = None
in_reset_state()

True if reset() would change nothing

match(string)
min_repeats = None
okay_to_finish()
regexes = None
repeats = None
reset()
search(string)
class working_directory(dir, permissions=0, create=False)

Change to a certain working directory for the execution of a block of code, then change back upon (any kind of) exit.

divisors(n)

Generate the factors of an integer.

Examples :
>>> for i in divisors(12): print i
...
1
2
3
4
6
12
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
chop(tens, thresh=1e-14)

Round off near-integer values (within thresh) to integers for each value in the Tensor.

chopped(tens, thresh=1e-14)

Same as chop, but does not modify the original and instead returns a copy.

class ComputableTensor

A tensor with elements that can be computed as needed.

Warning

Using this class is a very bad idea. It makes development a nightmare. Don’t do it.

compute_function = None
fill()
hasitem(item)

Returns True if and only if the tensor has the item without having to compute it. Same as item in self.

is_sentinal_value(test_val)
sentinal_value = None
class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
cross(v1, v2, *args, **kwargs)

Wrapper to numpy.cross which viewcasts the result as a Vector if the first two arguments are Vector objects

Examples :
>>> cross( Vector(1, 2, 3), Vector(4, 5, 6) )
Vector([-3.,  6., -3.])
>>> # Can also be called as a method of Vector
>>> Vector(1, 2, 3).cross( Vector(4, 5, 6) )
Vector([-3.,  6., -3.])
magnitude(v)

Wrapper for Vector.magnitude()

Examples :
>>> magnitude(Vector(3.0, 4.0))
5.0
norm(v)

Wrapper for Vector.magnitude()

Examples :
>>> magnitude(Vector(3.0, 4.0))
5.0
class Matrix

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

I
back_transformed(other)
col_iter
cols
columns
classmethod diagonal(iterable)
eigensystem(sort=False)

Wrapper to numpy.eigh and numpy.eig for symmetric and non-symmetric matrices, respectively. Note that the eigenvectors are column vectors in the returned matrix.

classmethod identity(n)
inverse_sqrt_matrix()
is_hermitian()
is_square()
is_symmetric()
ncols

Number of columns that self has

nrows

Number of rows that self has

row_iter
rows
sqrt_matrix()
symmetrized()
transformed(other)
rotate_point_about_axis(point, axis, angle)

Returns the Cartesian vector point rotated about axis by angle

Source: http://en.wikipedia.org/wiki/Rotation_matrix

angle_between_vectors(a, b)

Returns the angle between the two vectors, in radians

class IndexRange(*args, **kwargs)

Allows for the definition of special indices that cover specific ranges and subranges of Tensor axes in einstein summations.

Examples :
>>> IndexRange.clear_known_ranges()  # Don't do this in your program; this is just for the doctest
>>> p = IndexRange('p,q,r,s', 5).with_subranges(
...   IndexRange('i,j,k,l', 0, 2),
...   IndexRange('a,b,c,d', 2, 5)
... )
>>> p
<IndexRange object covering slice 0:5 represented by indices ['p', 'q', 'r', 's']>
>>> p.subranges[0]
<IndexRange object covering slice 0:2 represented by indices ['i', 'j', 'k', 'l']>
>>> p.subranges[1]
<IndexRange object covering slice 2:5 represented by indices ['a', 'b', 'c', 'd']>
>>> prime = IndexRange["m, m',m''", 10, "m range"].with_subranges(
...            IndexRange["n,n',n''", ..., 6, "n range"],
...            IndexRange["o,o',o''", 6, ...]
... )
>>> prime
<IndexRange named 'm range' represented by indices ['m', 'm'', 'm''']>
>>> prime.subranges[0]
<IndexRange named 'n range' represented by indices ['n', 'n'', 'n''']>
>>> prime.subranges[1]
<IndexRange object covering slice 6:10 represented by indices ['o', 'o'', 'o''']>
add_subrange(subrange)

Add a subrange to the list of subranges for self. Note that this returns subrange (with subrange.parent modified) to allow for a ‘pass-through’ like usage (see examples below)

Examples :
>>> IndexRange.reset_ranges()
>>> p = IndexRange('p,q,r,s', 4, name="orbital space")
>>> # Convenient "pass-through" usage for saving subranges:
>>> i = p.add_subrange(IndexRange('i,j,k,l', 0, 2, name="occupied space"))
>>> a = p.add_subrange(IndexRange('a,b,c,d',2,4))
>>> a
<IndexRange object covering slice 2:4 represented by indices ['a', 'b', 'c', 'd']>
>>> p.subranges[0]
<IndexRange named 'occupied space' represented by indices ['i', 'j', 'k', 'l']>
>>> p.subranges[1]
<IndexRange object covering slice 2:4 represented by indices ['a', 'b', 'c', 'd']>
>>> a.parent
<IndexRange named 'orbital space' represented by indices ['p', 'q', 'r', 's']>
begin_index
classmethod begin_indexing_context(new_global_set)
classmethod clear_known_ranges()

Clears the known ranges. Use with care and only if you’re sure you know what you’re doing!

end_index
classmethod end_indexing_context(context_to_end=None)
global_index_range_set = <grendel.gmath.einsum_indices.IndexRangeSet object at 0x1d9934b0>
index_range_set = None
indices = None
name = None
parent
classmethod reset_ranges()

Clears the known ranges. Use with care and only if you’re sure you know what you’re doing!

classmethod set_global_index_range_set(new_global_set)
classmethod set_indexing_context(new_global_set)
size
slice
slice_in(parent_range)

Gets the slice of parent_range represented by self (parent_range need not be a direct parent of self, but it should be a parent. See is_subrange())

Examples :
>>> IndexRange.reset_ranges()
>>> p = IndexRange('p,q,r,s',4)
>>> i = p.add_subrange(IndexRange('i,j,k,l',0,2))
>>> a = p.add_subrange(IndexRange('a,b,c,d',2,4))
>>> a.slice_in(p)
slice(2, 4, None)
subranges = None
classmethod unset_global_index_range_set(context_to_end=None)
with_subranges(*subranges)

Basically the same thing as calling add_subrange() multiple times, except returns self instead of the subrange, allowing for a different syntax (see below)

Examples :
>>> IndexRange.reset_ranges()
>>> orb = DeclareIndexRange('p,q,r,s', 10, name="Orbital space").with_subranges(
...           DeclareIndexRange('i,j,k,l', 0, 3, name="Occupied space").with_subranges(
...               DeclareIndexRange("i*,j*,k*,l*", 0, 1, name="Core"),
...               DeclareIndexRange("i',j',k',l'", 1, 3)
...           ),
...           DeclareIndexRange('a,b,c,d', 3, 10, name="Virtual space")
...       )
>>> orb
<IndexRange named 'Orbital space' represented by indices ['p', 'q', 'r', 's']>
>>> len(orb.subranges)
2
>>> len(orb.subranges[0].subranges)
2
DeclareIndexRange(indices, begin_index_or_size, end_index=None, name=None, **kwargs)

Alias for IndexRange constructor that more accurately describes what is actually going on.

class IndexRangeSet
known_ranges = None
IndexingContext

alias of IndexRangeSet

issubrange(child_range, parent_range)

Returns True if child_range is parent_range or child_range is a child of parent_range (analogous to isinstance from the python standard library)

is_subrange(child_range, parent_range)

Returns True if child_range is parent_range or child_range is a child of parent_range (analogous to isinstance from the python standard library)

class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class FiniteDifferenceDerivative(*args, **kwargs)

An arbitrary finite difference derivative with respect to k FiniteDifferenceVariable instances (not necessarily distinct) of a FiniteDifferenceFunction of an arbitrary number of FiniteDifferenceVariable instances whose output is a Differentiable instance. Ideally, the derivative can be calculated to an arbitrary order of robustness in the displacement, though in practice not all orders may be implemented yet.

compute()
formula = None
formulas = []
function = None
generated_single_variable_formulas = {}
needed_increments
orders = None
classmethod precompute_single_variable(max_derivative, max_order, forward=False)

Save a little bit of time by prepopulating the single variable displacement formulas dictionary up to max_derivative and max_order. If forward is True, the forward formulas are precomputed instead of the central ones.

target_robustness = None
value
variables = None
class FiniteDifferenceFormula(orders, robustness, pairs, forward=False)

A formula for a given finite difference derivative.

CENTRAL = 0
FORWARD = 1
coefficients = None
direction = None
is_central()
is_forward()
needed_displacements
order
orders = None
robustness = None
class FiniteDifferenceFunction
deltas_for_variables(vars)

The displacement amounts for each of the variables.

value_for_displacements(pairs)

Get a value for the displacement corresponding to the (variable, number of deltas) pairs given in the argument pairs

variables

The list of FiniteDifferenceVariable instances on which the function depends.

class FiniteDifferenceVariable
class FloatShell
class Fraction

This class implements rational numbers.

In the two-argument form of the constructor, Fraction(8, 6) will produce a rational number equivalent to 4/3. Both arguments must be Rational. The numerator defaults to 0 and the denominator defaults to 1 so that Fraction(3) == 3 and Fraction() == 0.

Fractions can also be constructed from:

  • numeric strings similar to those accepted by the float constructor (for example, ‘-2.3’ or ‘1e10’)
  • strings of the form ‘123/456’
  • float and Decimal instances
  • other Rational instances (including integers)
denominator
classmethod from_decimal(dec)

Converts a finite Decimal instance to a rational number, exactly.

classmethod from_float(f)

Converts a finite float to a rational number, exactly.

Beware that Fraction.from_float(0.3) != Fraction(3, 10).

limit_denominator(max_denominator=1000000)

Closest Fraction to self with denominator at most max_denominator.

>>> Fraction('3.141592653589793').limit_denominator(10)
Fraction(22, 7)
>>> Fraction('3.141592653589793').limit_denominator(100)
Fraction(311, 99)
>>> Fraction(4321, 8765).limit_denominator(10000)
Fraction(4321, 8765)
numerator
class IterableOf(types)
arg_type_okay(arg)
collection_type

alias of Iterable

types = None
ReadOnlyAttribute

A read-only attribute. See SpecialAttribute for initialization variables standard to all SpecialAttribute subclasses.

Attributes :
error_text : str
The text for the error raised when setting of the attribute is attempted. Defaults to “cannot set read-only attribute”
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
abstractproperty

A decorator indicating abstract properties.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractproperty def my_abstract_property(self):

...

This defines a read-only property; you can also define a read-write abstract property using the ‘long’ form of property declaration:

class C:
__metaclass__ = ABCMeta def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx)
add()

add(a, b) – Same as a + b.

class attrgetter

attrgetter(attr, ...) –> attrgetter object

Return a callable object that fetches the given attribute(s) from its operand. After f = attrgetter(‘name’), the call f(r) returns r.name. After g = attrgetter(‘name’, ‘date’), the call g(r) returns (r.name, r.date). After h = attrgetter(‘name.first’, ‘name.last’), the call h(r) returns (r.name.first, r.name.last).

fornberg_coefficient_generator(M, N, x0, *alpha)

From Fornberg, Bengt. Mathematics of Computation 51 (1988), p. 699-706 M: “the order of the highest derivative we wish to approximate” N: given “a set of N + 1 grid points” x0: the point at which we wish to take the derivative alpha: alpha_i is the ith grid point

generate_single_variable_formulas(max_derivative, max_order, forward=False)
class groupby

groupby(iterable[, keyfunc]) -> create an iterator which returns (key, sub-iterator) grouped by each value of key(value).

next

x.next() -> the next value, or raise StopIteration

indented(instr, nspaces=4)

Aliased as indent()

listify_args(*args, **kwargs)

A simple way to accept arguments that can be an Iterable or a bunch of arguments that should be treated as a single Iterable. (This method is pretty trivial, but I find myself doing it a whole lot.) The reason you can’t just use list() for this purpose is that if an Iterable is given as the only argument, list(args) will return a list of Iterables rather than a single Iterable.

Examples :
>>> def test(*args):
...     return listify_args(*args)
...
>>> test(1,2,3)
[1, 2, 3]
>>> test([1,2,3])
[1, 2, 3]
>>> test([1,2,3], 4)
[[1, 2, 3], 4]
>>> test("1,2,3", 4)
['1,2,3', 4]
>>> test("1,2,3")
['1,2,3']
load_formulas()
mul()

mul(a, b) – Same as a * b.

typechecked

Type checking for functions and methods.

with_flexible_arguments(required=None, optional=None, what_to_call_it=None)

Allows the creation of functions with case insensative, alternately named keyword arguments.

Examples :
>>> @with_flexible_arguments(
...     required=[
...         ('name', 'greet', 'name_to_greet'),
...         ('from_where', 'source')
...     ],
...     optional=[
...         ('greeting', 'hello_phrase', 'salutation'),
...         ('message',)
...     ]
... )
... def say_hello(name, from_where, greeting='Hello', message=''):
...     print(greeting + ', ' + name + ', from ' + from_where + '!' + message)
...
>>> say_hello('moon', 'Earth')
Hello, moon, from Earth!
>>> say_hello('world', source='the moon')
Hello, world, from the moon!
>>> say_hello(source='France', name_to_greet='visitor', salutation='Bonjour')
Bonjour, visitor, from France!
>>> say_hello('earthlings', 'outer space', 'Greetings', message='  We come in peace!')
Greetings, earthlings, from outer space!  We come in peace!
CachedProperty

Decorator for properties with cached return values. The decorator creates a property that stores the return value of the method call in a variable named _[func_name] (where [func_name] is the name of the function).

Examples :
>>> class Factorializer(object):
...
...    n = None
...
...    def __init__(self, n):
...        self.n = n
...
...    @CachedProperty
...    def thirty_plus_n_fact(self):
...        ret_val = 1
...        for i in xrange(2, self.n + 31):
...            ret_val *= i
...        return ret_val
...
>>> f = Factorializer(3000)
>>> # Takes some time...
>>> var = f.thirty_plus_n_fact
>>> # Should take no time...
>>> for i in xrange(100):
...     var = f.thirty_plus_n_fact
...
>>> # Be careful... Remember to invalidate the cache when the appropriate variables are updated...
>>> f.n = 2500
>>> # Takes no time but gives the wrong answer:
>>> var = f.thirty_plus_n_fact
>>> # Invalidate the cache:
>>> f._thirty_plus_n_fact = None
>>> # This should take some time again, but now it will get the right answer
>>> var = f.thirty_plus_n_fact
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[1]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class Derivative(coords)

Encapsulates the concept of an (energy) derivative with respect to a coordinate. This may later be expanded (in a backwards compatible manner) to include other types of derivatives, e.g. dipole moment derivatives

Attributes :
of : subclass of Differentiable
The entity that the derivative is being taken of (usually the energy of the molecule, but can be anything that is a subclass of the abstract base class Differentiable
value : float
The value of the derivative, in the units given by units
units : CompositeUnit or some class with a Unit metaclass
The units of the derivative
coords : list of Coordinate
The coordinate(s) that the derivative is taken with respect to (multiple if the derivative is higher than first order)
coords = None
molecule

The Molecule object to which the coordinate

of = None
order

The order of the derivative. ‘1’ indicates first derivative, ‘2’ indicates second derivative, etc.

units = None
value = None
class ComputableTensor

A tensor with elements that can be computed as needed.

Warning

Using this class is a very bad idea. It makes development a nightmare. Don’t do it.

compute_function = None
fill()
hasitem(item)

Returns True if and only if the tensor has the item without having to compute it. Same as item in self.

is_sentinal_value(test_val)
sentinal_value = None
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[2]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class DerivativeCollection

A collection of derivatives with indices that are coordinates in a given representation.

coordinate = None
coordinates
coords
einsum_index = None
first_dimension_different = None
for_order()

Return the Tensor object corresponding to the `order`th order derivative.

has_order(order)
representation = None
secondary_representation = None
tensor_kwargs = None
tensors = None
uncomputed = None
class DerivativeTensor
collection = None
compute_function = None
class MatrixFormatter(**kwargs)
col_label_format
col_label_format_leader = None
col_label_width = None
float_digits = 4
float_format
float_format_leader = ' '
float_type_string = 'g'
float_width = 10
format(matrix, labels=None)
label_format_leader = '^'
label_overflow_character = 'X'
label_width = 10
line_width = 120
name = None
one_based = True
classmethod quick_format(matrix, labels=None, **kwargs)
row_label_format
row_label_format_leader = None
row_label_width = None
width_overflow_character = '*'
class NonstringIterable

An Iterable that is not an instance of basestring

class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class TensorFormatter(**kwargs)
format(tensor, labels=None)
symmetric = False
copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

hasunits(*fargs, **fkeywords)

Alias for has_units()

indent(*fargs, **fkeywords)

Alias for indented()

class permutations

permutations(iterable[, r]) –> permutations object

Return successive r-length permutations of elements in the iterable.

permutations(range(3), 2) –> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)

next

x.next() -> the next value, or raise StopIteration

shortstr(*fargs, **fkeywords)

Alias for short_str()

typechecked

Type checking for functions and methods.

class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[3]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class Displacement

Encapsulates a displacement from a base molecule.

Attributes :
base_molecule : Molecule
The Molecule object that the displacement is relative to.
representation : Representation
The Representation object that the displacements are values in.
disp_vect : Vector
The displacement amounts in the given representation. (e.g. disp_vect[i] corresponds to the amount of displacement of the i`th `Coordinate in representation)
base_molecule = None
desired_values = None
disp_vect = None
displaced_molecule

The displaced molecule object resulting from applying self to Molecule

displaced_representation

The displaced molecule object resulting from applying self to Molecule

classmethod from_increments(increments, rep, deltas=None)
classmethod get_default_deltas(rep)
increments(deltas=None)
max_iterations = 35
representation = None
tolerance = 1e-12
class DisplacementManager

A function (in the finite_difference.FiniteDifferenceFunction sense) that can get values for displacements of some base molecule.

base_molecule
deltas = None
deltas_for_variables(vars)
details = None
differentiable = None
displaced_molecules
displacement_for(increments)
displacements = None
output_type = None
representation = None
value_for_displacements(pairs)
variables = None
class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class FiniteDifferenceFunction
deltas_for_variables(vars)

The displacement amounts for each of the variables.

value_for_displacements(pairs)

Get a value for the displacement corresponding to the (variable, number of deltas) pairs given in the argument pairs

variables

The list of FiniteDifferenceVariable instances on which the function depends.

class FiniteDifferenceVariable
exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class Iterable
class LegacyXMLResultGetter(comparison_representation, *files)
can_get_property_for_molecule(molecule, property, details=None)
files = None
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=True)
properties = None
properties_for_molecules = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
ReadOnlyAttribute

A read-only attribute. See SpecialAttribute for initialization variables standard to all SpecialAttribute subclasses.

Attributes :
error_text : str
The text for the error raised when setting of the attribute is attempted. Defaults to “cannot set read-only attribute”
class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class RepresentationDependentProperty(molecule, units=None, details=None)

A property whose value is dependent on a given representation of the molecule.

get_value(*args, **kwargs)
molecule
representation
representation_getter = None
class SequenceOf(types)
collection_type

alias of Sequence

compatible_units(unit1, unit2)

Aliased as iscompatible()

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

hasunits(*fargs, **fkeywords)

Alias for has_units()

indented(instr, nspaces=4)

Aliased as indent()

typechecked

Type checking for functions and methods.

class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class DerivativeCollection

A collection of derivatives with indices that are coordinates in a given representation.

coordinate = None
coordinates
coords
einsum_index = None
first_dimension_different = None
for_order()

Return the Tensor object corresponding to the `order`th order derivative.

has_order(order)
representation = None
secondary_representation = None
tensor_kwargs = None
tensors = None
uncomputed = None
class DerivativeTensor
collection = None
compute_function = None
class DisplacementManager

A function (in the finite_difference.FiniteDifferenceFunction sense) that can get values for displacements of some base molecule.

base_molecule
deltas = None
deltas_for_variables(vars)
details = None
differentiable = None
displaced_molecules
displacement_for(increments)
displacements = None
output_type = None
representation = None
value_for_displacements(pairs)
variables = None
class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

class FiniteDifferenceDerivative(*args, **kwargs)

An arbitrary finite difference derivative with respect to k FiniteDifferenceVariable instances (not necessarily distinct) of a FiniteDifferenceFunction of an arbitrary number of FiniteDifferenceVariable instances whose output is a Differentiable instance. Ideally, the derivative can be calculated to an arbitrary order of robustness in the displacement, though in practice not all orders may be implemented yet.

compute()
formula = None
formulas = []
function = None
generated_single_variable_formulas = {}
needed_increments
orders = None
classmethod precompute_single_variable(max_derivative, max_order, forward=False)

Save a little bit of time by prepopulating the single variable displacement formulas dictionary up to max_derivative and max_order. If forward is True, the forward formulas are precomputed instead of the central ones.

target_robustness = None
value
variables = None
class FiniteDifferenceForceField(max_analytic_order=0, property=<class 'grendel.chemistry.molecular_properties.Energy'>, deltas=None, details=None, run_now=False, queue=None, robustness=2, **kwargs)
all_computations
computation_queue = None
computed_property = None
displacement_manager = None
fill()
fill_order(order)
filled_for_order = None
for_order()
max_analytic_order = None
needed_computations
robustness = None
class ForceField(representation, max_order, property=<class 'grendel.chemistry.molecular_properties.Energy'>, property_units=None)
base_molecule
for_order()
in_representation(representation)
max_order = None
molecular_property = None
property_units = None
class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
PropertyDerivative(*fargs, **fkeywords)

Alias for MolecularPropertyDerivative()

class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class permutations

permutations(iterable[, r]) –> permutations object

Return successive r-length permutations of elements in the iterable.

permutations(range(3), 2) –> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)

next

x.next() -> the next value, or raise StopIteration

symmetric_product

alias of combinations_with_replacement

typechecked

Type checking for functions and methods.

class AngularUnit

General superclass for all angular units

default

alias of Degree

reference_unit

alias of Degree

CachedProperty

Decorator for properties with cached return values. The decorator creates a property that stores the return value of the method call in a variable named _[func_name] (where [func_name] is the name of the function).

Examples :
>>> class Factorializer(object):
...
...    n = None
...
...    def __init__(self, n):
...        self.n = n
...
...    @CachedProperty
...    def thirty_plus_n_fact(self):
...        ret_val = 1
...        for i in xrange(2, self.n + 31):
...            ret_val *= i
...        return ret_val
...
>>> f = Factorializer(3000)
>>> # Takes some time...
>>> var = f.thirty_plus_n_fact
>>> # Should take no time...
>>> for i in xrange(100):
...     var = f.thirty_plus_n_fact
...
>>> # Be careful... Remember to invalidate the cache when the appropriate variables are updated...
>>> f.n = 2500
>>> # Takes no time but gives the wrong answer:
>>> var = f.thirty_plus_n_fact
>>> # Invalidate the cache:
>>> f._thirty_plus_n_fact = None
>>> # This should take some time again, but now it will get the right answer
>>> var = f.thirty_plus_n_fact
class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[4]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class Displacement

Encapsulates a displacement from a base molecule.

Attributes :
base_molecule : Molecule
The Molecule object that the displacement is relative to.
representation : Representation
The Representation object that the displacements are values in.
disp_vect : Vector
The displacement amounts in the given representation. (e.g. disp_vect[i] corresponds to the amount of displacement of the i`th `Coordinate in representation)
base_molecule = None
desired_values = None
disp_vect = None
displaced_molecule

The displaced molecule object resulting from applying self to Molecule

displaced_representation

The displaced molecule object resulting from applying self to Molecule

classmethod from_increments(increments, rep, deltas=None)
classmethod get_default_deltas(rep)
increments(deltas=None)
max_iterations = 35
representation = None
tolerance = 1e-12
class DisplacementGenerator(*args, **kwargs)
Backward = <object object at 0x11178f00>
Both = <object object at 0x11178f70>
Forward = <object object at 0x11178df8>
coordinates = None
direction = None
displaced_molecules = None
displacements = None
npoints_for_coord = None
ranges = None
representation = None
verbose = False
class FiniteDifferenceVariable
exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class Iterable
class IterableOf(types)
arg_type_okay(arg)
collection_type

alias of Iterable

types = None
exception MaximumGeometryIterationsExceededError
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

Radians

alias of Radian

ReadOnlyAttribute

A read-only attribute. See SpecialAttribute for initialization variables standard to all SpecialAttribute subclasses.

Attributes :
error_text : str
The text for the error raised when setting of the attribute is attempted. Defaults to “cannot set read-only attribute”
class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
compatible_units(unit1, unit2)

Aliased as iscompatible()

hasunits(*fargs, **fkeywords)

Alias for has_units()

class product

product(*iterables) –> product object

Cartesian product of input iterables. Equivalent to nested for-loops.

For example, product(A, B) returns the same as: ((x,y) for x in A for y in B). The leftmost iterators are in the outermost for-loop, so the output tuples cycle in a manner similar to an odometer (with the rightmost element changing on every iteration).

To compute the product of an iterable with itself, specify the number of repetitions with the optional repeat keyword argument. For example, product(A, repeat=4) means the same as product(A, A, A, A).

product(‘ab’, range(3)) –> (‘a’,0) (‘a’,1) (‘a’,2) (‘b’,0) (‘b’,1) (‘b’,2) product((0,1), (0,1), (0,1)) –> (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ...

next

x.next() -> the next value, or raise StopIteration

strip_units
Strips the units off of a unitized object
(or, if the object is not Unitized, just return it). If convert_to is given, convert to these units if obj is Unitized. If assume_units is given, obj is assumed to have the units given by this argument if (and only if) it is not an instance of Unitized.

Aliased as stripunits()

typechecked

Type checking for functions and methods.

with_flexible_arguments(required=None, optional=None, what_to_call_it=None)

Allows the creation of functions with case insensative, alternately named keyword arguments.

Examples :
>>> @with_flexible_arguments(
...     required=[
...         ('name', 'greet', 'name_to_greet'),
...         ('from_where', 'source')
...     ],
...     optional=[
...         ('greeting', 'hello_phrase', 'salutation'),
...         ('message',)
...     ]
... )
... def say_hello(name, from_where, greeting='Hello', message=''):
...     print(greeting + ', ' + name + ', from ' + from_where + '!' + message)
...
>>> say_hello('moon', 'Earth')
Hello, moon, from Earth!
>>> say_hello('world', source='the moon')
Hello, world, from the moon!
>>> say_hello(source='France', name_to_greet='visitor', salutation='Bonjour')
Bonjour, visitor, from France!
>>> say_hello('earthlings', 'outer space', 'Greetings', message='  We come in peace!')
Greetings, earthlings, from outer space!  We come in peace!
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[5]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class CartesianCoordinate

A cartesian coordinate compatible with the Coordinate class. CartesianCoordinate objects are immutable. If you need a different cartesian coordinate, create a new CartesianCoordinate objects.

Attributes :
atom : Atom
The atom to which the cartesian coordinate refers
direction : int
The direction (x, y, or z) that the coordinate describes. (0 for x, 1 for y, 2 for z, which are also class constants)
atom

The atom to which the cartesian coordinate refers.

atoms
copy_for_representation(rep, **kwargs)
default_delta = 0.01 Angstrom
direction

The direction (x, y, or z) that the coordinate describes. (0 for X, 1 for Y, 2 for Z, which are also class constants)

generate_name(one_based=True)
index

The index in the parent representation. This allows for the retrieval of the value for the coordinate on a different molecule, for instance.

iter_molecule_indices()
value_for_molecule_matrix(mat)
value_for_positions(*pos)
class InternalCoordinate

General superclass for all types internal coordinates. Internal coordinates may only refer to one representation.

analytic_b_orders = [1]
analytic_b_tensor_for_order(order)

Compute the analytic B tensor of a given order and return a tensor indexed by the coordinate’s own indexing scheme.

atoms
b_tensor_cache = <grendel.util.containers.LRUDict instance at 0x1e36f878>
b_tensor_element(*cart_coords_or_indices)

Retrieve an element of the Coordinate’s B tensor using CartesianCoordinate instances and/or integer indices in the molecule’s indexing scheme.

b_tensor_finite_difference_delta = 0.001 Angstrom
b_tensor_finite_difference_rigor = 10
b_vector
b_vector_for_positions(*pos)
bvector
cart_coords
cart_indices
copy_with_atoms(atoms)
deltas_for_variables(vars)
fill_b_tensor_analytically()

Fill the coordinate’s own _btensor attribute for a given order. (The _btensor attribute should be retrieved using the get_b_tensor() method, which calls this if the _btensor has not already been computed.) If the b tensor cannot be computed analytically at the given order, this method returns NotImplemented. Otherwise, it computes the B tensor to the given order and returns None. If the optional B argument is given, this Coordinate’s part of the Representation-based TensorCollection that B refers to is filled as well.

finite_difference_b_tensor()

Computes the B tensor for order order by finite difference of B tensors of order order-1, taking into account permutational symmetry. If use_parent_indices is False, a Tensor is returned that is indexed by the coordinate’s internal indices rather than the parent molecule’s atom indices. Otherwise, a DerivativeTensor is returned with its representation attribute set to the coordinate’s parent molecule’s cartesian_representation attribute.

finite_difference_b_tensor_element(*cart_coords, **kwargs)
generate_name(one_based=True)
get_b_tensor(max_order)

Get the coordinate’s b tensor as a Coordinate-based DerivativeCollection. If it has not already done so, the coordinate will fill in the b tensor up to max_order. The returned value uses the Coordinate‘s internal indexing scheme.

internal_indices_for_coordinates(*cart_coords)
iter_cart_coords(with_index=False)
max_b_tensor_cache_entries = 10000000
value_for_displacements(pairs)
variables
class SimpleInternalCoordinate

Superclass for all types of simple (non-symmetry, non-normal) internal coordinates.

Attributes :
atoms : list of Atom
list of Atom objects that the coordinate refers to
analytic_b_orders = [1]
atom_num(i)

Returns the number of the atom (as an index in self.molecule) that the i’th atom composing the coordinate self refers to.

static b_tensor_element_reindexed(current_coord, *coords)
classmethod b_vector_for_positions(*args)

Returns the b vector corresponding to a coordinate with atoms in the positions given as arguments (assumed to be Vector or at least LightVector instances). Note that the returned value uses the indexing scheme corresponding to the order of the argument’s passed in, not the indexing scheme corresponding to a Molecule instance somewhere.

copy_for_representation(rep, **kwargs)
copy_with_atoms(atoms, **kwargs)
created_coord_maps = {}
created_coords = {}
get_coord(ctype, *atoms)
value
value_for_molecule_matrix(mat)
classmethod value_for_positions(*posvects)

Get the value of the coordinate position vectors xyz.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

classmethod value_for_xyz(xyz)

Value for the xyz matrix constructed from the coordinates of the atoms for the coordinate. For instance, for a

xyz
xyz_delta = 0.001
class NormalCoordinate
atoms = None
b_vector = None
coordinate_symbol = 'q'
copy_for_representation(rep, **kwargs)
default_delta = 0.001 Angstrom / AtomicMassUnit**(1/2)
frequency = None
index = None
value_for_molecule_matrix(mat)
classmethod value_for_positions(*pos)
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[6]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class FunctionCoordinate(function, subcoordinates, index=None, default_delta=None, **kwargs)

A coordinate that is a function of one or more other Coordinate instances

atoms = None
copy_for_representation(rep, **kwargs)
default_delta = None
function = None
index = None
subcoordinates = None
value_for_molecule_matrix(mat)
value_for_positions(*pos)
class InternalCoordinate

General superclass for all types internal coordinates. Internal coordinates may only refer to one representation.

analytic_b_orders = [1]
analytic_b_tensor_for_order(order)

Compute the analytic B tensor of a given order and return a tensor indexed by the coordinate’s own indexing scheme.

atoms
b_tensor_cache = <grendel.util.containers.LRUDict instance at 0x1e36f878>
b_tensor_element(*cart_coords_or_indices)

Retrieve an element of the Coordinate’s B tensor using CartesianCoordinate instances and/or integer indices in the molecule’s indexing scheme.

b_tensor_finite_difference_delta = 0.001 Angstrom
b_tensor_finite_difference_rigor = 10
b_vector
b_vector_for_positions(*pos)
bvector
cart_coords
cart_indices
copy_with_atoms(atoms)
deltas_for_variables(vars)
fill_b_tensor_analytically()

Fill the coordinate’s own _btensor attribute for a given order. (The _btensor attribute should be retrieved using the get_b_tensor() method, which calls this if the _btensor has not already been computed.) If the b tensor cannot be computed analytically at the given order, this method returns NotImplemented. Otherwise, it computes the B tensor to the given order and returns None. If the optional B argument is given, this Coordinate’s part of the Representation-based TensorCollection that B refers to is filled as well.

finite_difference_b_tensor()

Computes the B tensor for order order by finite difference of B tensors of order order-1, taking into account permutational symmetry. If use_parent_indices is False, a Tensor is returned that is indexed by the coordinate’s internal indices rather than the parent molecule’s atom indices. Otherwise, a DerivativeTensor is returned with its representation attribute set to the coordinate’s parent molecule’s cartesian_representation attribute.

finite_difference_b_tensor_element(*cart_coords, **kwargs)
generate_name(one_based=True)
get_b_tensor(max_order)

Get the coordinate’s b tensor as a Coordinate-based DerivativeCollection. If it has not already done so, the coordinate will fill in the b tensor up to max_order. The returned value uses the Coordinate‘s internal indexing scheme.

internal_indices_for_coordinates(*cart_coords)
iter_cart_coords(with_index=False)
max_b_tensor_cache_entries = 10000000
value_for_displacements(pairs)
variables
class InternalFunctionCoordinate(b_vector_same_function=True, b_vector_function=None, b_vector_takes_coords=False, b_tensor_same_function=True, b_tensor_function=None, b_tensor_takes_coords=False, value_takes_coords=False, **kwargs)
analytic_b_tensor_for_order(order)
b_tensor_function = None
b_tensor_same_function = None
b_tensor_takes_coords = None
b_vector_for_positions(*pos)
b_vector_function = None
b_vector_same_function = None
b_vector_takes_coords = None
copy_with_atoms(atoms, **kwargs)
value_takes_coords = None
class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class Iterable
Radians

alias of Radian

class SimpleInternalCoordinate

Superclass for all types of simple (non-symmetry, non-normal) internal coordinates.

Attributes :
atoms : list of Atom
list of Atom objects that the coordinate refers to
analytic_b_orders = [1]
atom_num(i)

Returns the number of the atom (as an index in self.molecule) that the i’th atom composing the coordinate self refers to.

static b_tensor_element_reindexed(current_coord, *coords)
classmethod b_vector_for_positions(*args)

Returns the b vector corresponding to a coordinate with atoms in the positions given as arguments (assumed to be Vector or at least LightVector instances). Note that the returned value uses the indexing scheme corresponding to the order of the argument’s passed in, not the indexing scheme corresponding to a Molecule instance somewhere.

copy_for_representation(rep, **kwargs)
copy_with_atoms(atoms, **kwargs)
created_coord_maps = {}
created_coords = {}
get_coord(ctype, *atoms)
value
value_for_molecule_matrix(mat)
classmethod value_for_positions(*posvects)

Get the value of the coordinate position vectors xyz.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

classmethod value_for_xyz(xyz)

Value for the xyz matrix constructed from the coordinates of the atoms for the coordinate. For instance, for a

xyz
xyz_delta = 0.001
class SumOfInternalCoordinates(subcoordinates, coefficients=None, **kwargs)
coefficients = []
compute_sum(*items)
generate_name(one_based=True)
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
grouper(n, iterable, fillvalue=None)

group(3, ‘ABCDEFG’, ‘x’) –> ABC DEF Gxx

ismethod(object)

Return true if the object is an instance method.

Instance method objects provide these attributes:
__doc__ documentation string __name__ name with which this method was defined im_class class object in which this method belongs im_func function object containing implementation of method im_self instance to which this method is bound, or None
isunit(unit)

Aliased as is_unit()

class partial

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

class product

product(*iterables) –> product object

Cartesian product of input iterables. Equivalent to nested for-loops.

For example, product(A, B) returns the same as: ((x,y) for x in A for y in B). The leftmost iterators are in the outermost for-loop, so the output tuples cycle in a manner similar to an odometer (with the rightmost element changing on every iteration).

To compute the product of an iterable with itself, specify the number of repetitions with the optional repeat keyword argument. For example, product(A, repeat=4) means the same as product(A, A, A, A).

product(‘ab’, range(3)) –> (‘a’,0) (‘a’,1) (‘a’,2) (‘b’,0) (‘b’,1) (‘b’,2) product((0,1), (0,1), (0,1)) –> (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ...

next

x.next() -> the next value, or raise StopIteration

strip_units
Strips the units off of a unitized object
(or, if the object is not Unitized, just return it). If convert_to is given, convert to these units if obj is Unitized. If assume_units is given, obj is assumed to have the units given by this argument if (and only if) it is not an instance of Unitized.

Aliased as stripunits()

Angstroms

alias of Angstrom

class Atom

Encapsulates an atom. Molecules are made up of Atoms.

Attributes :
position : Vector
The atom’s Cartesian coordinates [x y z] as a Vector object.
parent_molecule : Molecule
Reference back to the parent molecule of the atom. (Not set in initializer, but set when the atom gets included in a Molecule). Note that for purposes of pickling and copying this may become a weakref in the future. Do not implement behavior that depends on it being a strong reference.
zmat_label : str
Used in the construction of a z-matrix to differentiate atoms of the same Element. Currently not used anywhere else, and not set when any other Atom construction method is used.
base_atom = None
cart_coords
cart_indices
cartesian_units = None
convert_units(new_units)
displace()
displaced(disp_vect)

Creates an orphaned copy of atom and displaces it by disp_vect

element

The Element object corresponding to self. Updated transparently using the symbol property

full_symbol = None
in_units(new_units)
index = None
is_bonded_to(other_atom, n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)
is_ghost()
is_orphaned()
isotope

The isotope of the element that self is composed of. Defaults to element.principal_isotope

iter_cart_coords(with_index=False)
mass

The atom’s mass as a float (in AMU). Automatically retrieved from the element and isotope attributes.

parent

Alias for the parent_molecule attribute.

parent_molecule = None
pos

Alias for self.position. pos is also an alias for self.position

position = None
same_coordinate_tolerance = 1e-06
symbol

The atomic symbol from the periodic table (as a str object) , with correct capitalization. Updating this property transparently updates the Element object associated with self.

x
xyz

Alias for self.position. pos is also an alias for self.position

y
z
zmat_label = None
class BondAngle
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'phi'
default_delta = 0.02 Radian
terminal_atoms
classmethod value_for_xyz(xyz)
class BondLength
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'R'
default_delta = 0.01 Angstrom
classmethod value_for_xyz(xyz)
class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class InternalCartesian
default_delta = 0.01 Angstrom
class InternalCartesianX
analytic_b_orders = [1]
classmethod b_vector_for_positions(*args)
classmethod value_for_xyz(xyz)
class InternalCartesianY
analytic_b_orders = []
classmethod b_vector_for_positions(*args)
classmethod value_for_xyz(xyz)
class InternalCartesianZ
analytic_b_orders = [1]
classmethod b_vector_for_positions(*args)
classmethod value_for_xyz(xyz)
class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class IterableOf(types)
arg_type_okay(arg)
collection_type

alias of Iterable

types = None
class LightVector
is_cartesian()

Returns True if the vector is Cartesian (i.e. if the vector is two or three dimensional).

is_zero_vector(cutoff=None)

Alias for Tensor.is_zero()

static l_add(a, b)
l_cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

l_normalized()

Same as l_normalize(), but does not modify self

Aliased as normalized()

static l_sub(a, b)
magnitude()

The magnitude of the vector.

Aliased as norm()

norm(*fargs, **fkeywords)

Alias for magnitude()

normalize()

Performs an in-place normalization of self.

Examples :
>>> Vector(2.0, 0.0, 0.0).normalize()
Vector([ 1.,  0.,  0.])
>>> Vector(0.5, 0.5, 0.5).normalize()
Vector([ 0.57735027,  0.57735027,  0.57735027])
>>> v = Vector(-0.5, 0.5, -0.5).normalize()
>>> v
Vector([-0.57735027,  0.57735027, -0.57735027])
>>> v.magnitude()
1.0
normalized(*fargs, **fkeywords)

Alias for l_normalized()

size()

The number of entries in the vector

class Matrix

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

I
back_transformed(other)
col_iter
cols
columns
classmethod diagonal(iterable)
eigensystem(sort=False)

Wrapper to numpy.eigh and numpy.eig for symmetric and non-symmetric matrices, respectively. Note that the eigenvectors are column vectors in the returned matrix.

classmethod identity(n)
inverse_sqrt_matrix()
is_hermitian()
is_square()
is_symmetric()
ncols

Number of columns that self has

nrows

Number of rows that self has

row_iter
rows
sqrt_matrix()
symmetrized()
transformed(other)
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class SimpleInternalCoordinate

Superclass for all types of simple (non-symmetry, non-normal) internal coordinates.

Attributes :
atoms : list of Atom
list of Atom objects that the coordinate refers to
analytic_b_orders = [1]
atom_num(i)

Returns the number of the atom (as an index in self.molecule) that the i’th atom composing the coordinate self refers to.

static b_tensor_element_reindexed(current_coord, *coords)
classmethod b_vector_for_positions(*args)

Returns the b vector corresponding to a coordinate with atoms in the positions given as arguments (assumed to be Vector or at least LightVector instances). Note that the returned value uses the indexing scheme corresponding to the order of the argument’s passed in, not the indexing scheme corresponding to a Molecule instance somewhere.

copy_for_representation(rep, **kwargs)
copy_with_atoms(atoms, **kwargs)
created_coord_maps = {}
created_coords = {}
get_coord(ctype, *atoms)
value
value_for_molecule_matrix(mat)
classmethod value_for_positions(*posvects)

Get the value of the coordinate position vectors xyz.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

classmethod value_for_xyz(xyz)

Value for the xyz matrix constructed from the coordinates of the atoms for the coordinate. For instance, for a

xyz
xyz_delta = 0.001
class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

generate_fixed_fragment_coords(a, b, c, *others)

TODO Document this

isunit(unit)

Aliased as is_unit()

overloaded

Overload a function the Pythonic (at least, Python 2) way.

Types can be specified using the overloaded instance decorator method overload_with (which is aliased as overload, submethod, and subfunction).

Examples :
>>> @overloaded
... def test():
...     raise TypeError
...
>>> @test.overload_with(int, int)
... def test(a, b=5):
...     return a+b
...
>>> @test.overload_with(str)
... def test(string, *args, **kwargs):
...     return string + (' ' if len(args) else '') + ', '.join(list(args) + kwargs.keys())
...
>>> @test.overload_with(list, func=callable)
... def test(lst, func, *args):
...     for item in lst:
...         if func(item, *args):
...             return item
...
>>> test(1, 3)
4
>>> test(17)
22
>>> test("Hello")
'Hello'
>>> test("Hello", "World")
'Hello World'
>>> test("Hello", "Earth", "Mars", "Jupiter")
'Hello Earth, Mars, Jupiter'
>>> test([1, 2, 3], lambda x: x**2 % 2 == 0)
2
>>> test([1, 2, 3], lambda x, y: x**2 % y == 0, 1)
1
>>> test(3.14159, 3.234)
Traceback (most recent call last):
    ...
TypeError: invalid function signature test(float, float).
  Available signatures are:
    test(a: int, b: int=5)
        Not valid signature because: argument 'a' is not of the correct type
    test(string: str, *args, **kwargs)
        Not valid signature because: argument 'string' is not of the correct type
    test(lst: list, func: <something for which callable(func) returns True>, *args)
        Not valid signature because: argument 'lst' is not of the correct type
>>> # giving multiple values for a keyword argument means there is no match.  For instance:
>>> test('Hello', 'World', string='this is wrong')
Traceback (most recent call last):
    ...
TypeError: invalid function signature test(str, str, string=str).
  Available signatures are:
    test(a: int, b: int=5)
        Not valid signature because: argument 'a' is not of the correct type
    test(string: str, *args, **kwargs)
        Not valid signature because: got multiple values for keyword argument 'string'
    test(lst: list, func: <something for which callable(func) returns True>, *args)
        Not valid signature because: argument 'lst' is not of the correct type
>>> # Methods in classes
>>> class Foo(object):
...     @overloaded
...     def bar(self, *args, **kwargs): pass
...
...     @bar.overload_with(a=int, b=int)
...     def bar(self, a, b):
...         if not hasattr(self, 'total'):
...             self.total = 0
...         self.total += a + b
...         return a + b
...
>>> foo = Foo()
>>> foo.bar(1,2)
3
>>> foo.bar(4,5)
9
>>> foo.total
12
>>> Foo.bar(foo, 7, 8)
15
>>> foo.total
27
class BondAngle
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'phi'
default_delta = 0.02 Radian
terminal_atoms
classmethod value_for_xyz(xyz)
class BondLength
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'R'
default_delta = 0.01 Angstrom
classmethod value_for_xyz(xyz)
class Torsion
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'tau'
default_delta = 0.02 Radian
classmethod noncanonical_value_for_xyz(xyz)
preferred_range = [-3.141592653589793, 3.141592653589793]
terminal_atoms
class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
AMU

alias of AtomicMassUnit

Angstroms

alias of Angstrom

Attojoules

alias of AttoJoule

class Bohr
Centimeters

alias of CentiMeter

class DerivativeTensor
collection = None
compute_function = None
class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class ForceField(representation, max_order, property=<class 'grendel.chemistry.molecular_properties.Energy'>, property_units=None)
base_molecule
for_order()
in_representation(representation)
max_order = None
molecular_property = None
property_units = None
Hartrees

alias of Hartree

class Hertz
class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
Joules

alias of Joule

Kilogram

alias of KiloGram

class Matrix

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

I
back_transformed(other)
col_iter
cols
columns
classmethod diagonal(iterable)
eigensystem(sort=False)

Wrapper to numpy.eigh and numpy.eig for symmetric and non-symmetric matrices, respectively. Note that the eigenvectors are column vectors in the returned matrix.

classmethod identity(n)
inverse_sqrt_matrix()
is_hermitian()
is_square()
is_symmetric()
ncols

Number of columns that self has

nrows

Number of rows that self has

row_iter
rows
sqrt_matrix()
symmetrized()
transformed(other)
class Meter
class NormalCoordinate
atoms = None
b_vector = None
coordinate_symbol = 'q'
copy_for_representation(rep, **kwargs)
default_delta = 0.001 Angstrom / AtomicMassUnit**(1/2)
frequency = None
index = None
value_for_molecule_matrix(mat)
classmethod value_for_positions(*pos)
class NormalRepresentation
add_coordinate_copy(coordinate)
b_matrix
static convert_to_wavenumbers(tensor, energy_units)
copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class Second
classmethod to(other)
class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
Wavenumbers

alias of Wavenumber

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

deepcopy(x, memo=None, _nil=[])

Deep copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

prod(seq)

Because NumPy’s prod function uses 32-bit integer arithmetic with silent handling of overflows, results are wrong if the correct answer would exceed the limits of a signed 32-bit integer. When operating on a sequence of integers, the prod function that we define here uses large integer arithmetic and thus always gives correct results.

class product

product(*iterables) –> product object

Cartesian product of input iterables. Equivalent to nested for-loops.

For example, product(A, B) returns the same as: ((x,y) for x in A for y in B). The leftmost iterators are in the outermost for-loop, so the output tuples cycle in a manner similar to an odometer (with the rightmost element changing on every iteration).

To compute the product of an iterable with itself, specify the number of repetitions with the optional repeat keyword argument. For example, product(A, repeat=4) means the same as product(A, A, A, A).

product(‘ab’, range(3)) –> (‘a’,0) (‘a’,1) (‘a’,2) (‘b’,0) (‘b’,1) (‘b’,2) product((0,1), (0,1), (0,1)) –> (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ...

next

x.next() -> the next value, or raise StopIteration

typechecked

Type checking for functions and methods.

class AtomicMassUnit
class ElectronVolt
class Element(symbol, atomic_number, isotopes, atomic_weight, atomic_weight_uncertainty=None, is_synthetic=False, **kwargs)

Encapsulates an element. Contains attributes that are constant for a given element.

add_isotope(iso)
atomic_number = None
atomic_weight = None
atomic_weight_uncertainty = None
electron_affinity = None
electronegativity = None
ionization_energies = None
is_synthetic = None
isotopes = None
principal_isotope

The most abundant isotope. This contains the default mass for the element.

symbol = None
vdw_radius = None
class Isotope(mass, mass_uncertainty, abundance, abundance_uncertainty, mass_number, special_symbol=None)

Struct for containing the information about an isotope. For abundance, None means trace abundance

abundance = None
element = None
is_principal()
mass = None
spin = None
symbol
KilojoulesPerMole

alias of KiloJoulePerMol

MASS_UNIT

alias of AtomicMassUnit

Picometers

alias of PicoMeter

class Atom

Encapsulates an atom. Molecules are made up of Atoms.

Attributes :
position : Vector
The atom’s Cartesian coordinates [x y z] as a Vector object.
parent_molecule : Molecule
Reference back to the parent molecule of the atom. (Not set in initializer, but set when the atom gets included in a Molecule). Note that for purposes of pickling and copying this may become a weakref in the future. Do not implement behavior that depends on it being a strong reference.
zmat_label : str
Used in the construction of a z-matrix to differentiate atoms of the same Element. Currently not used anywhere else, and not set when any other Atom construction method is used.
base_atom = None
cart_coords
cart_indices
cartesian_units = None
convert_units(new_units)
displace()
displaced(disp_vect)

Creates an orphaned copy of atom and displaces it by disp_vect

element

The Element object corresponding to self. Updated transparently using the symbol property

full_symbol = None
in_units(new_units)
index = None
is_bonded_to(other_atom, n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)
is_ghost()
is_orphaned()
isotope

The isotope of the element that self is composed of. Defaults to element.principal_isotope

iter_cart_coords(with_index=False)
mass

The atom’s mass as a float (in AMU). Automatically retrieved from the element and isotope attributes.

parent

Alias for the parent_molecule attribute.

parent_molecule = None
pos

Alias for self.position. pos is also an alias for self.position

position = None
same_coordinate_tolerance = 1e-06
symbol

The atomic symbol from the periodic table (as a str object) , with correct capitalization. Updating this property transparently updates the Element object associated with self.

x
xyz

Alias for self.position. pos is also an alias for self.position

y
z
zmat_label = None
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
exception InvalidZMatrixException(line)

Raised if a line of a z-matrix has the wrong number of entries.

exception InvalidXYZFormatError

Raised if an invalid string in the XYZ format is passed into the Molecule class constructor

class Element(symbol, atomic_number, isotopes, atomic_weight, atomic_weight_uncertainty=None, is_synthetic=False, **kwargs)

Encapsulates an element. Contains attributes that are constant for a given element.

add_isotope(iso)
atomic_number = None
atomic_weight = None
atomic_weight_uncertainty = None
electron_affinity = None
electronegativity = None
ionization_energies = None
is_synthetic = None
isotopes = None
principal_isotope

The most abundant isotope. This contains the default mass for the element.

symbol = None
vdw_radius = None
class Isotope(mass, mass_uncertainty, abundance, abundance_uncertainty, mass_number, special_symbol=None)

Struct for containing the information about an isotope. For abundance, None means trace abundance

abundance = None
element = None
is_principal()
mass = None
spin = None
symbol
class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class MatrixProperty(molecule, units=None, details=None)

A property whose value is a matrix.

from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in MatrixProperty.from_sequence

from_sequence(seq, units)

Default implementation for matrix properties; only works if seq is a MatrixRegexSequence

class MatrixRegexSequence(*args, **kwargs)

Special subclass of RegexSequence that make parsing matrices easier.

get_matrix()
transpose = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

class OrbitalEnergies(molecule, units=None, details=None)
default_units

alias of Wavenumber

class PartiallyConstructed(cls_to_construct, *args, **kwargs)
Allow classes to be “partially constructed” by wrapping the class’s __init__
and __new__ with a method that sets given attributes or appends certain keyword arguments to the initialzation call.
counter = 2
with_args(*args)
with_attributes(**kwargs)

Append some attributes to be set after the initialization is performed. Note that these override anything done in the class’s __init__, so don’t do anything stupid.

with_kwargs(**kwargs)
class ScalarProperty(molecule, units=None, details=None)

A property whose value is a scalar

from_groups(groups, units)

By default, just get the last group matched.

class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class TensorProperty(molecule, units=None, details=None)

A property whose value is an n-dimensional tensor

class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception ValueNotAvailableError

Raised when a MolecularProperty is requested but not available for whatever reason.

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class VectorProperty(molecule, units=None, details=None)

A property whose value is a vector.

abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

hasunits(*fargs, **fkeywords)

Alias for has_units()

isunit(unit)

Aliased as is_unit()

class partial

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

typechecked

Type checking for functions and methods.

with_attributes(**kwargs)

Decorator allowing the assignment of attributes to a function.

exception ArgTypeError

Convenience error to raise when an argument is not of the right types.

class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class DerivativeProperty(*args, **kwargs)
from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in from_sequence

from_sequence(seq, units)

Expects a MatrixRegexSequence which returns a Nx3 matrix

known_subclasses = {'_EnergyDerivative2': <class 'abc._EnergyDerivative2'>, '_EnergyDerivative1': <class 'abc._EnergyDerivative1'>}
order = None
classmethod with_respect_to(rep)
class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

EnergyGradient

alias of _PartiallyConstructed___EnergyDerivative1_0

EnergyHessian

alias of _PartiallyConstructed___EnergyDerivative2_1

Forces

alias of _PartiallyConstructed___EnergyDerivative1_0

Gradient

alias of _PartiallyConstructed___EnergyDerivative1_0

Hessian

alias of _PartiallyConstructed___EnergyDerivative2_1

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class MatrixRegexSequence(*args, **kwargs)

Special subclass of RegexSequence that make parsing matrices easier.

get_matrix()
transpose = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
MolecularPropertyDerivative(prop, representation=<class 'grendel.representations.cartesian_representation.CartesianRepresentation'>, order=1)

Factory for creating MolecularProperty subclasses that represent the nth derivative of a MolecularProperty with respect to some set of coordinates.

Several possibilities for representation: If it’s a Representation subclass, then we want that representation of the molecule in question (used when requesting the derivative). If it’s a representation instance, then we want the Derivative with respect to that specific representation (raises an error if it is not compatible). If it’s an arbitrary callable, then the callable is called with the contents of the file and should return a representation, which the (typically parsed-from-a-file) derivative is considered to be with respect to. The default is CartesianRepresentation.

Derivative properties can be automatically or manually transformed to other representations.

Aliased as PropertyDerivative()

class PartiallyConstructed(cls_to_construct, *args, **kwargs)
Allow classes to be “partially constructed” by wrapping the class’s __init__
and __new__ with a method that sets given attributes or appends certain keyword arguments to the initialzation call.
counter = 2
with_args(*args)
with_attributes(**kwargs)

Append some attributes to be set after the initialization is performed. Note that these override anything done in the class’s __init__, so don’t do anything stupid.

with_kwargs(**kwargs)
PropertyDerivative(*fargs, **fkeywords)

Alias for MolecularPropertyDerivative()

class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class RepresentationDependentProperty(molecule, units=None, details=None)

A property whose value is dependent on a given representation of the molecule.

get_value(*args, **kwargs)
molecule
representation
representation_getter = None
class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class TensorProperty(molecule, units=None, details=None)

A property whose value is an n-dimensional tensor

function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
raises_error(callable_obj, *args, **kwargs)

Returns True if a call of callable with args raises an error, and False if not. Note that the callable will get called, so don’t do anything that takes a long time or changes things in a way you don’t want them to be changed. If the optional keyword argument ‘error’ is given as either an Exception subclass or an Iterable, raises_error returns True if the call of callable raises the error given or one of the errors given in the list. (The keyword argument can also be named ‘errors’). Any other keyword arguments are passed through to callable.

Technical note: As per the Python manual, only exceptions that subclass from Exception (and not BaseException directly) will be recognized. According to the python users manual, you should never implement a user exception that subclasses from BaseException directly.

Examples :
>>> raises_error(int, "5")
False
>>> raises_error(int, "0x5ab7", 0)
False
>>> raises_error(lambda x: int(x), "5")
False
>>> raises_error(int, "abc")
True
>>> raises_error(int, "abc", error = ValueError)
True
>>> raises_error(int, "abc", error = BufferError)
False
>>> raises_error(int, "abc", error = (BufferError, EnvironmentError))
False
>>> raises_error(int, "abc", error = [BufferError, ValueError])
True
>>> raises_error(float, "abc")
True
>>> # Use raises_error to see what errors raises_error raises
... # Raise a type error if the first argument is not a callable (i.e. 17(25) doesn't make sense to Python)
... raises_error(raises_error, 17, 25, error = TypeError)
True
>>> # Raise a TypeError if the error keyword argument is not a subclass of Exception
... raises_error(lambda x: raises_error(int, x, error = "hello world"), 25, error = TypeError)
True
>>> raises_error(lambda x: raises_error(int, x, error = BaseException), 25, error = TypeError)
True
exception GroupTheoryError

Raised when something that’s not allowed in group theory is done.

class PointGroup(molecule, ops)

Encapsulates a point group.

classes = []
element_for(op)

Returns the element that is the same as op in the group self. This allows us to avoid duplication. When self._generate_elements is True, this adds op to self.operations if no operation is found that is the same as op (this should pretty much only be used by the internal PointGroup._close_group() private method. If you come up with another use for it, use it with care!) Otherwise, if an equivalent of op is not found, a GroupTheoryError is raised.

element_with_matrix(mat)

Returns the element that has the matrix mat in the group self. Raises a GroupTheoryError indicating the group is not closed if no such element is found.

identity_element = None
improper_rotations = None
inversion = None
molecule = None
name = None
num_C_n_axes(n)

Returns the number of (unique) axes of order n in the point group

operations = []
reflections = None
ring_angle_tolerance = 0.03490658503988659
rotations = None
symmetry_tolerance = 0.0001
class ConjugacyClass(*initial_elements)
add_element(el)

Adds an element to the conjugacy class (if it has not already been added)

elements = []
first_element = None
order
class SymmetryOperation

The abstract superclass for elements of point groups.

Attributes :
name : str
An attempt at creating a human-readable name for the operation.
conjugacy_class = None
inverse = None
classmethod is_perpendicular(v1, v2)
classmethod is_same_axis(a1, a2, parallel_only=False)

True if the axes a1 and a2 are parallel or antiparallel. Note that normalized versions of a1 and a2 are used, so normalizing before passing in will just slow things down. If parallel_only is True (it is False by default), this method only returns True if the two axes are parallel, not anti_parallel.

classmethod is_same_matrix(m1, m2)

True if (a1-a2).norm() < SymmetryOperation.same_operation_tolerance (See ~pyobj:grendel.gmath.tensor.Tensor.norm for description of what is meant by norm here)

matrix

The Matrix that transforms the molecule according to the symmetry operation self

molecule

The Molecule that the operation acts on

name = None
perpendicular_tolerance = 0.017453292519943295
point_group = None
same_axis_tolerance = 0.0001
same_operation_tolerance = 0.0001
zero_vector_cutoff = 1e-05
class IdentityOperation(point_group=None)

The identity (E) element of a point group.

matrix
class Rotation(n, axis, exponent=1, point_group=None)

A rotation (C_n^m) element of a point group.

Attributes :
n : int
The order of the rotation (e.g. for a C_3 operation, n=3)
axis : Vector
The axis about which the operation occurs
exponent : int
The number of times the operation is applied. (e.g. for C_3, exponent = 1, for C_3^2, exponent = 2, etc.)
classmethod about_axis(molecule, axis, max_order)
axis = None
exponent = None
classmethod from_matrix(matrix)
matrix
n = None
theta

The angle of rotation, in Radians

class Reflection(axis, point_group=None)

A reflection (sigma) element of a point group.

axis = None
is_dihedral()

Whether or not the reflection is a sigma_d

is_principal_reflection()
matrix
principal_reflection = False
classmethod with_normal(molecule, axis)
class Inversion(point_group=None)

An inversion (i) element of a point group.

classmethod exists_for_molecule(molecule)
matrix
class ImproperRotation(n, axis, exponent=1, point_group=None)

An improper rotation (S_n^m) element of a point group.

Attributes :
n : int
The order of the rotation (e.g. for a S_3 operation, n=3)
axis : Vector
The axis about which the operation occurs
exponent : int
The number of times the operation is applied. (e.g. for S_5, exponent = 1, for S_5^4, exponent = 4, etc.)
classmethod about_axis(molecule, axis, max_ring)
axis = None
exponent = None
matrix
n = None
class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

exception ArgTypeError

Convenience error to raise when an argument is not of the right types.

class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class Computation

Base class for all classes encapsulating runs of external programs

additional_safe_directory_characters = '+'
already_run()

Checks to see if an identical input file with an identical name has already been run in the computation’s directory to produce an output file of some sort (if that output file has errors, you probably don’t want to rerun the exact same input file, so this doesn’t do that by default. If you need to do that, call Computation.run() with the force_rerun argument set to True).

always_create_missing = False
attribute_aliases = {'Theory': ['Method', 'LevelOfTheory']}
completed

True if and only if the calculation has finished running. (regardless of success or failure). Setting completed to True triggers the output parser.

details = None
directory = None
directory_template = None
get_energy(details=None)
get_property(prop_class, details=None)
get_results()
has_energy(details=None)
has_property(prop_class, details=None)
input_generator = None
molecule = None
needed_properties

The types of the properties in the self.properties list.

needs_property(prop)
output_parser = None
properties = []
queued = False
run(force_rerun=False, lock=None)
runner = None
classmethod standardize_attribute(attr)

Convert strings to standard form for attributes. Strings with spaces, underscore_joined_strings, Uppercase_Underscore_Strings, and lowerCamelCase strings are all converted to UpperCamelCase.

Examples :
>>> Computation.standardize_attribute("basis_set")
'BasisSet'
>>> Computation.standardize_attribute("basis set")
'BasisSet'
>>> Computation.standardize_attribute("basis!Set")
'BasisSet'
>>> # Only _ and space serve as CamelCase separators:
>>> Computation.standardize_attribute("basis!set")
'Basisset'
>>> Computation.standardize_attribute("Level___of!*theory")
'LevelOftheory'
>>> # "Accidental" caps are not fixed...
>>> Computation.standardize_attribute("Level___of!*tHEory")
'LevelOftHEory'
>>> #All caps gets translated into title case
>>> Computation.standardize_attribute("Level&$#of__THEORY")
'LevelofTheory'
start()
started = False
task_description()
class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
exception ComputationFailureError

Thrown when a computation fails for one reason or another

class ComputationResultGetter
add_computation(comp)
can_get_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

can_get_property_for_molecule(molecule, property, details=None)

Aliased as has_property(), can_get_property()

computation_kwargs = None
computations = None
directory_series = {}
get_computation_for_property(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

has_property_for_molecule(molecule, property, details=None, verbose=False)
known_result_getters = {}
use_directory_series = None
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class DerivativeProperty(*args, **kwargs)
from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in from_sequence

from_sequence(seq, units)

Expects a MatrixRegexSequence which returns a Nx3 matrix

known_subclasses = {'_EnergyDerivative2': <class 'abc._EnergyDerivative2'>, '_EnergyDerivative1': <class 'abc._EnergyDerivative1'>}
order = None
classmethod with_respect_to(rep)
class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

EnergyGradient

alias of _PartiallyConstructed___EnergyDerivative1_0

EnergyHessian

alias of _PartiallyConstructed___EnergyDerivative2_1

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

Forces

alias of _PartiallyConstructed___EnergyDerivative1_0

Gradient

alias of _PartiallyConstructed___EnergyDerivative1_0

Hessian

alias of _PartiallyConstructed___EnergyDerivative2_1

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class InputGenerator(computation)

Abstract base class for classes that generate input files.

computation = None
generate(filename)
generated = None
needed_properties
validate()

Determine if we will be able to generate an input.

class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class Iterable
class MatrixProperty(molecule, units=None, details=None)

A property whose value is a matrix.

from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in MatrixProperty.from_sequence

from_sequence(seq, units)

Default implementation for matrix properties; only works if seq is a MatrixRegexSequence

class MatrixRegexSequence(*args, **kwargs)

Special subclass of RegexSequence that make parsing matrices easier.

get_matrix()
transpose = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
MolecularPropertyDerivative(prop, representation=<class 'grendel.representations.cartesian_representation.CartesianRepresentation'>, order=1)

Factory for creating MolecularProperty subclasses that represent the nth derivative of a MolecularProperty with respect to some set of coordinates.

Several possibilities for representation: If it’s a Representation subclass, then we want that representation of the molecule in question (used when requesting the derivative). If it’s a representation instance, then we want the Derivative with respect to that specific representation (raises an error if it is not compatible). If it’s an arbitrary callable, then the callable is called with the contents of the file and should return a representation, which the (typically parsed-from-a-file) derivative is considered to be with respect to. The default is CartesianRepresentation.

Derivative properties can be automatically or manually transformed to other representations.

Aliased as PropertyDerivative()

class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

class OrbitalEnergies(molecule, units=None, details=None)
default_units

alias of Wavenumber

class OutputParser(computation, property_parsers=None)

Abstract base class for classes that parse the output file for a computation.

computation = None
molecule
needed_indices
needed_properties
parse_file(file)
property_parsers = None
reset()
valid_parsers = None
validate()
class PackageInterface(input_generator, runner, output_parser)

Container for the various custom classes needed to run a calculation in a given software package.

computation_class

alias of Computation

details_class

alias of ComputationDetails

input_generator = None
classmethod load_package(name, input_generator=None, output_parser=None, runner=None, details_class=None, computation_class=None)

Load a package with the given name to be used for computations. Optionally, specify specific subclasses to use for certain things.

output_parser = None
runner = None
class PartiallyConstructed(cls_to_construct, *args, **kwargs)
Allow classes to be “partially constructed” by wrapping the class’s __init__
and __new__ with a method that sets given attributes or appends certain keyword arguments to the initialzation call.
counter = 2
with_args(*args)
with_attributes(**kwargs)

Append some attributes to be set after the initialization is performed. Note that these override anything done in the class’s __init__, so don’t do anything stupid.

with_kwargs(**kwargs)
PropertyDerivative(*fargs, **fkeywords)

Alias for MolecularPropertyDerivative()

class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class RepresentationDependentProperty(molecule, units=None, details=None)

A property whose value is dependent on a given representation of the molecule.

get_value(*args, **kwargs)
molecule
representation
representation_getter = None
class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class Runner(input_file=None, output_file=None, **kwargs)

Abstract base class for classes that run a computation (or an equivalent task, such as submit a job to a PBS queue). Not all Computation objects need a runner; for instance XML-parsed computations are constructed in an already-run state.

command_sequence = None
default_input_filename = 'input.dat'
default_output_filename = 'output.dat'
environment = None
input_file = None
output_file = None
process = None
run()

Run in a blocking manner. Default implementation calls wait() on the process returned by start(). Overload it if this doesn’t make sense.

start()
stderr = None
stdin = None
stdout = None
validate()

Determine if we will be able to run. Raise a ComputationUnavailableError if running will cause a crash

working_directory = None
class ScalarProperty(molecule, units=None, details=None)

A property whose value is a scalar

from_groups(groups, units)

By default, just get the last group matched.

TemporaryFile(mode='w+b', bufsize=-1, suffix='', prefix='tmp', dir=None)

Create and return a temporary file. Arguments: ‘prefix’, ‘suffix’, ‘dir’ – as for mkstemp. ‘mode’ – the mode argument to os.fdopen (default “w+b”). ‘bufsize’ – the buffer size argument to os.fdopen (default -1). The file is created as mkstemp() would do it.

Returns an object with a file-like interface. The file has no name, and will cease to exist when it is closed.

class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class TensorProperty(molecule, units=None, details=None)

A property whose value is an n-dimensional tensor

class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception ValueNotAvailableError

Raised when a MolecularProperty is requested but not available for whatever reason.

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class VectorProperty(molecule, units=None, details=None)

A property whose value is a vector.

abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
class acquired_lock(lock)

Execute code with a lock acquired before the block of code and released afterwards

classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

full_path(path)
function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
grouper(n, iterable, fillvalue=None)

group(3, ‘ABCDEFG’, ‘x’) –> ABC DEF Gxx

hasunits(*fargs, **fkeywords)

Alias for has_units()

indent(*fargs, **fkeywords)

Alias for indented()

class islice

islice(iterable, [start,] stop [, step]) –> islice object

Return an iterator whose next() method returns selected values from an iterable. If start is specified, will skip all preceding elements; otherwise, start defaults to zero. Step defaults to one. If specified as another value, step determines how many values are skipped between successive calls. Works like a slice() on a list but returns an iterator.

next

x.next() -> the next value, or raise StopIteration

isunit(unit)

Aliased as is_unit()

make_safe_identifier(instr, replace_with='_')
class partial

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

pop_kwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things and popping that value off of the kwarg dictionary. If the None of the keywords given are found in kwarg_dict, None is returned.

See Also:

get_multikwarg

raises_error(callable_obj, *args, **kwargs)

Returns True if a call of callable with args raises an error, and False if not. Note that the callable will get called, so don’t do anything that takes a long time or changes things in a way you don’t want them to be changed. If the optional keyword argument ‘error’ is given as either an Exception subclass or an Iterable, raises_error returns True if the call of callable raises the error given or one of the errors given in the list. (The keyword argument can also be named ‘errors’). Any other keyword arguments are passed through to callable.

Technical note: As per the Python manual, only exceptions that subclass from Exception (and not BaseException directly) will be recognized. According to the python users manual, you should never implement a user exception that subclasses from BaseException directly.

Examples :
>>> raises_error(int, "5")
False
>>> raises_error(int, "0x5ab7", 0)
False
>>> raises_error(lambda x: int(x), "5")
False
>>> raises_error(int, "abc")
True
>>> raises_error(int, "abc", error = ValueError)
True
>>> raises_error(int, "abc", error = BufferError)
False
>>> raises_error(int, "abc", error = (BufferError, EnvironmentError))
False
>>> raises_error(int, "abc", error = [BufferError, ValueError])
True
>>> raises_error(float, "abc")
True
>>> # Use raises_error to see what errors raises_error raises
... # Raise a type error if the first argument is not a callable (i.e. 17(25) doesn't make sense to Python)
... raises_error(raises_error, 17, 25, error = TypeError)
True
>>> # Raise a TypeError if the error keyword argument is not a subclass of Exception
... raises_error(lambda x: raises_error(int, x, error = "hello world"), 25, error = TypeError)
True
>>> raises_error(lambda x: raises_error(int, x, error = BaseException), 25, error = TypeError)
True
typechecked

Type checking for functions and methods.

warn()

Issue a warning, or maybe ignore it or raise an exception.

with_attributes(**kwargs)

Decorator allowing the assignment of attributes to a function.

with_flexible_arguments(required=None, optional=None, what_to_call_it=None)

Allows the creation of functions with case insensative, alternately named keyword arguments.

Examples :
>>> @with_flexible_arguments(
...     required=[
...         ('name', 'greet', 'name_to_greet'),
...         ('from_where', 'source')
...     ],
...     optional=[
...         ('greeting', 'hello_phrase', 'salutation'),
...         ('message',)
...     ]
... )
... def say_hello(name, from_where, greeting='Hello', message=''):
...     print(greeting + ', ' + name + ', from ' + from_where + '!' + message)
...
>>> say_hello('moon', 'Earth')
Hello, moon, from Earth!
>>> say_hello('world', source='the moon')
Hello, world, from the moon!
>>> say_hello(source='France', name_to_greet='visitor', salutation='Bonjour')
Bonjour, visitor, from France!
>>> say_hello('earthlings', 'outer space', 'Greetings', message='  We come in peace!')
Greetings, earthlings, from outer space!  We come in peace!
class working_directory(dir, permissions=0, create=False)

Change to a certain working directory for the execution of a block of code, then change back upon (any kind of) exit.

class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
Methods

Simple container for keyword-like objects (“sentinal values”). Can also be used as a container for sub-keywords via instance objects. Sub-keywords are case-insensative. Keywords cannot be assigned values using the value attribute (note that this means you can’t create a sub-keyword called ‘value’).

Warning

Since there is exactly one instance of every unique keyword (with two keywords that differ by capitalization not being unique), storing a value can have some unexpected consequences. For instance:

>>> Hello = Keyword('Hello')
>>> foo = Hello.World
>>> foo.value = "good bye"
>>> # ...some time later...
>>> Hello.WORLD.value = "good night"
>>> foo.value
'good night'

Note

Since value, parent, _parent, parents, _name, and any of the double-underscore methods inherited from object are already attributes of Keyword objects, you can’t make sub-keywords with these names. Everything else is fair game.

Examples :
>>> Hello = Keyword('Hello')
>>> Hello.World
Hello.World
>>> # Any future changes in case simply refer back to the original
>>> Hello.WoRlD
Hello.World
>>> # But, of course, not for the first level
>>> hEllO.World
Traceback (most recent call last):
   ...
NameError: name 'hEllO' is not defined
>>> # Multiple levels can be created at once
>>> Hello.there.world
Hello.there.world
>>> Hello.there == Hello.ThErE
True
>>> Hello.there == Hello.ThErE.world
False
>>> Hello.there.WORLD == Hello.ThErE.world
True
>>> Hello.There.World.value = "Hello World"
>>> Hello.THERE.WORLD.value
'Hello World'
Bases

Simple container for keyword-like objects (“sentinal values”). Can also be used as a container for sub-keywords via instance objects. Sub-keywords are case-insensative. Keywords cannot be assigned values using the value attribute (note that this means you can’t create a sub-keyword called ‘value’).

Warning

Since there is exactly one instance of every unique keyword (with two keywords that differ by capitalization not being unique), storing a value can have some unexpected consequences. For instance:

>>> Hello = Keyword('Hello')
>>> foo = Hello.World
>>> foo.value = "good bye"
>>> # ...some time later...
>>> Hello.WORLD.value = "good night"
>>> foo.value
'good night'

Note

Since value, parent, _parent, parents, _name, and any of the double-underscore methods inherited from object are already attributes of Keyword objects, you can’t make sub-keywords with these names. Everything else is fair game.

Examples :
>>> Hello = Keyword('Hello')
>>> Hello.World
Hello.World
>>> # Any future changes in case simply refer back to the original
>>> Hello.WoRlD
Hello.World
>>> # But, of course, not for the first level
>>> hEllO.World
Traceback (most recent call last):
   ...
NameError: name 'hEllO' is not defined
>>> # Multiple levels can be created at once
>>> Hello.there.world
Hello.there.world
>>> Hello.there == Hello.ThErE
True
>>> Hello.there == Hello.ThErE.world
False
>>> Hello.there.WORLD == Hello.ThErE.world
True
>>> Hello.There.World.value = "Hello World"
>>> Hello.THERE.WORLD.value
'Hello World'
Basis

Simple container for keyword-like objects (“sentinal values”). Can also be used as a container for sub-keywords via instance objects. Sub-keywords are case-insensative. Keywords cannot be assigned values using the value attribute (note that this means you can’t create a sub-keyword called ‘value’).

Warning

Since there is exactly one instance of every unique keyword (with two keywords that differ by capitalization not being unique), storing a value can have some unexpected consequences. For instance:

>>> Hello = Keyword('Hello')
>>> foo = Hello.World
>>> foo.value = "good bye"
>>> # ...some time later...
>>> Hello.WORLD.value = "good night"
>>> foo.value
'good night'

Note

Since value, parent, _parent, parents, _name, and any of the double-underscore methods inherited from object are already attributes of Keyword objects, you can’t make sub-keywords with these names. Everything else is fair game.

Examples :
>>> Hello = Keyword('Hello')
>>> Hello.World
Hello.World
>>> # Any future changes in case simply refer back to the original
>>> Hello.WoRlD
Hello.World
>>> # But, of course, not for the first level
>>> hEllO.World
Traceback (most recent call last):
   ...
NameError: name 'hEllO' is not defined
>>> # Multiple levels can be created at once
>>> Hello.there.world
Hello.there.world
>>> Hello.there == Hello.ThErE
True
>>> Hello.there == Hello.ThErE.world
False
>>> Hello.there.WORLD == Hello.ThErE.world
True
>>> Hello.There.World.value = "Hello World"
>>> Hello.THERE.WORLD.value
'Hello World'
class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Computation

Base class for all classes encapsulating runs of external programs

additional_safe_directory_characters = '+'
already_run()

Checks to see if an identical input file with an identical name has already been run in the computation’s directory to produce an output file of some sort (if that output file has errors, you probably don’t want to rerun the exact same input file, so this doesn’t do that by default. If you need to do that, call Computation.run() with the force_rerun argument set to True).

always_create_missing = False
attribute_aliases = {'Theory': ['Method', 'LevelOfTheory']}
completed

True if and only if the calculation has finished running. (regardless of success or failure). Setting completed to True triggers the output parser.

details = None
directory = None
directory_template = None
get_energy(details=None)
get_property(prop_class, details=None)
get_results()
has_energy(details=None)
has_property(prop_class, details=None)
input_generator = None
molecule = None
needed_properties

The types of the properties in the self.properties list.

needs_property(prop)
output_parser = None
properties = []
queued = False
run(force_rerun=False, lock=None)
runner = None
classmethod standardize_attribute(attr)

Convert strings to standard form for attributes. Strings with spaces, underscore_joined_strings, Uppercase_Underscore_Strings, and lowerCamelCase strings are all converted to UpperCamelCase.

Examples :
>>> Computation.standardize_attribute("basis_set")
'BasisSet'
>>> Computation.standardize_attribute("basis set")
'BasisSet'
>>> Computation.standardize_attribute("basis!Set")
'BasisSet'
>>> # Only _ and space serve as CamelCase separators:
>>> Computation.standardize_attribute("basis!set")
'Basisset'
>>> Computation.standardize_attribute("Level___of!*theory")
'LevelOftheory'
>>> # "Accidental" caps are not fixed...
>>> Computation.standardize_attribute("Level___of!*tHEory")
'LevelOftHEory'
>>> #All caps gets translated into title case
>>> Computation.standardize_attribute("Level&$#of__THEORY")
'LevelofTheory'
start()
started = False
task_description()
class ComputationOptimizationResultGetter
can_get_property_for_molecule(molecule, property, details=None)
computations = None
get_optimized_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_optimized_property_for_molecule(molecule, property, details=None, verbose=False)
has_property_for_molecule(molecule, property, details=None, verbose=False)
class ComputationResultGetter
add_computation(comp)
can_get_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

can_get_property_for_molecule(molecule, property, details=None)

Aliased as has_property(), can_get_property()

computation_kwargs = None
computations = None
directory_series = {}
get_computation_for_property(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

has_property_for_molecule(molecule, property, details=None, verbose=False)
known_result_getters = {}
use_directory_series = None
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class OptimizationResultGetter
can_optimize_property_for_molecule(molecule, property, details=None)
get_optimized_property_for_molecule(molecule, property, details=None)
has_optimized_property_for_molecule(molecule, property, details=None, verbose=False)
known_optimizers = {}
class ResultGetter

Abstract base class for all classes that encapsulate a method of retrieving a (set of) properties of a molecule from a computational chemistry package. An instance of a ResultGetter object should know how to turn a request for a given molecular property into a Computation object (which, in turn, houses MolecularProperty objects for one or more Molecule objects). ResultGetter objects generate Computation objects. Any ResultGetter subclass should always check for an available computation on (exactly) the same molecule that already has the result available.

can_get_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=False)
abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class DetailSpecificObject

Superclass for classes that are compatible with specific ComputationDetail objects or any ComputationDetail object more specifically specifice than the details variable.

compatible_with_details(details)
details = None
unsupported_details = None
class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class InputGenerator(computation)

Abstract base class for classes that generate input files.

computation = None
generate(filename)
generated = None
needed_properties
validate()

Determine if we will be able to generate an input.

class InputGeneratorFactory

A collection of convenience methods for generating InputGenerator classes

generated_number = 0
classmethod template_based_class(filename, required_details=None, property=All, class_name=None)
class Iterable
class Keyword(name, parent=None)

Simple container for keyword-like objects (“sentinal values”). Can also be used as a container for sub-keywords via instance objects. Sub-keywords are case-insensative. Keywords cannot be assigned values using the value attribute (note that this means you can’t create a sub-keyword called ‘value’).

Warning

Since there is exactly one instance of every unique keyword (with two keywords that differ by capitalization not being unique), storing a value can have some unexpected consequences. For instance:

>>> Hello = Keyword('Hello')
>>> foo = Hello.World
>>> foo.value = "good bye"
>>> # ...some time later...
>>> Hello.WORLD.value = "good night"
>>> foo.value
'good night'

Note

Since value, parent, _parent, parents, _name, and any of the double-underscore methods inherited from object are already attributes of Keyword objects, you can’t make sub-keywords with these names. Everything else is fair game.

Examples :
>>> Hello = Keyword('Hello')
>>> Hello.World
Hello.World
>>> # Any future changes in case simply refer back to the original
>>> Hello.WoRlD
Hello.World
>>> # But, of course, not for the first level
>>> hEllO.World
Traceback (most recent call last):
   ...
NameError: name 'hEllO' is not defined
>>> # Multiple levels can be created at once
>>> Hello.there.world
Hello.there.world
>>> Hello.there == Hello.ThErE
True
>>> Hello.there == Hello.ThErE.world
False
>>> Hello.there.WORLD == Hello.ThErE.world
True
>>> Hello.There.World.value = "Hello World"
>>> Hello.THERE.WORLD.value
'Hello World'
parent

The keyword immediately preceding self in the heirarchical keyword notation. For instance:

>>> Hello = Keyword('Hello')
>>> Hello.World.parent
Hello
>>> Hello.There.World.parent
Hello.There
parents

list of all parent keywords, ordered from immediate parent to most distant

value = None
class MatrixProperty(molecule, units=None, details=None)

A property whose value is a matrix.

from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in MatrixProperty.from_sequence

from_sequence(seq, units)

Default implementation for matrix properties; only works if seq is a MatrixRegexSequence

class MatrixRegexSequence(*args, **kwargs)

Special subclass of RegexSequence that make parsing matrices easier.

get_matrix()
transpose = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

class OrbitalEnergies(molecule, units=None, details=None)
default_units

alias of Wavenumber

class PartiallyConstructed(cls_to_construct, *args, **kwargs)
Allow classes to be “partially constructed” by wrapping the class’s __init__
and __new__ with a method that sets given attributes or appends certain keyword arguments to the initialzation call.
counter = 2
with_args(*args)
with_attributes(**kwargs)

Append some attributes to be set after the initialization is performed. Note that these override anything done in the class’s __init__, so don’t do anything stupid.

with_kwargs(**kwargs)
class PropertyGenerator(filename, property, details=None, unsupported_details=None)

Contains the filename of a template that generates the input file for the computation of a molecular property, optionally with a set of specific details for which the template is valid. This class is mostly to mirror the OutputParser and PropertyParser from the output side of things.

details = None
filename = None
property = None
class ScalarProperty(molecule, units=None, details=None)

A property whose value is a scalar

from_groups(groups, units)

By default, just get the last group matched.

class TemplateInputGenerator(computation)

The simplest form of a generator. Takes a Mako-style template file, passes in the Computation object in as the argument “computation”, and runs the Mako templete engine.

generate(filename)
property_generators = []
validate()
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class TensorProperty(molecule, units=None, details=None)

A property whose value is an n-dimensional tensor

class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception ValueNotAvailableError

Raised when a MolecularProperty is requested but not available for whatever reason.

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class VectorProperty(molecule, units=None, details=None)

A property whose value is a vector.

abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
camel_to_lower(instr, divider='_')

Converts a CamalCase string to a lower_case_string_with_underscores If the divider argument is given, it is used instead of underscores to join words.

Examples :
classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

hasunits(*fargs, **fkeywords)

Alias for has_units()

isunit(unit)

Aliased as is_unit()

class partial

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

typechecked

Type checking for functions and methods.

warn()

Issue a warning, or maybe ignore it or raise an exception.

with_attributes(**kwargs)

Decorator allowing the assignment of attributes to a function.

class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

CachedProperty

Decorator for properties with cached return values. The decorator creates a property that stores the return value of the method call in a variable named _[func_name] (where [func_name] is the name of the function).

Examples :
>>> class Factorializer(object):
...
...    n = None
...
...    def __init__(self, n):
...        self.n = n
...
...    @CachedProperty
...    def thirty_plus_n_fact(self):
...        ret_val = 1
...        for i in xrange(2, self.n + 31):
...            ret_val *= i
...        return ret_val
...
>>> f = Factorializer(3000)
>>> # Takes some time...
>>> var = f.thirty_plus_n_fact
>>> # Should take no time...
>>> for i in xrange(100):
...     var = f.thirty_plus_n_fact
...
>>> # Be careful... Remember to invalidate the cache when the appropriate variables are updated...
>>> f.n = 2500
>>> # Takes no time but gives the wrong answer:
>>> var = f.thirty_plus_n_fact
>>> # Invalidate the cache:
>>> f._thirty_plus_n_fact = None
>>> # This should take some time again, but now it will get the right answer
>>> var = f.thirty_plus_n_fact
class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class DetailSpecificObject

Superclass for classes that are compatible with specific ComputationDetail objects or any ComputationDetail object more specifically specifice than the details variable.

compatible_with_details(details)
details = None
unsupported_details = None
class Iterable
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class OptimizedGeometryParser(geometry_getter, **kwargs)
get_optimized_geometry(file_contents)
get_value_for_molecule(property, file_contents)
class OutputParser(computation, property_parsers=None)

Abstract base class for classes that parse the output file for a computation.

computation = None
molecule
needed_indices
needed_properties
parse_file(file)
property_parsers = None
reset()
valid_parsers = None
validate()
exception OutputParsingError
class PropertyParser(property, details, units, getter=None, sequence=None, unsupported_details=None, custom_from=None)

Encapsulates a molecular property and the code to parse it from an output file.

custom_from = None
get_value_for_molecule(property, file_contents)
getter = None
parse_line(line)
property = None
reset()
sequence = None
units = None
class RepresentationDependentPropertyParser(representation_getter, **kwargs)
get_value_and_representation(property, file_contents)

..note :: This method ignores property.units

get_value_for_molecule(property, file_contents)
representation_getter = None
class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class ScalarProperty(molecule, units=None, details=None)

A property whose value is a scalar

from_groups(groups, units)

By default, just get the last group matched.

classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

deepcopy(x, memo=None, _nil=[])

Deep copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

isunit(unit)

Aliased as is_unit()

class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Queue

Abstract base class for queues of computations to be run.

computations

A decorator indicating abstract properties.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractproperty def my_abstract_property(self):

...

This defines a read-only property; you can also define a read-write abstract property using the ‘long’ form of property declaration:

class C:
__metaclass__ = ABCMeta def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx)
enqueue(*c)

Add computation(s) to the queue.

is_finished()

True if all the computations on the queue are finished

is_started()

True if the queue has been started (i. e. if any of the computations have been started)

quiet = False
run()

Run the queue. (Abstract method) This runs the whole queue and blocks until the run is complete. See also start

start()

Start the queue in the background and return to execution. Beware that if Python exits, the queue’s processes will be orphaned. This mode of running may not be supported by all queue types.

verbose = False
abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
abstractproperty

A decorator indicating abstract properties.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractproperty def my_abstract_property(self):

...

This defines a read-only property; you can also define a read-write abstract property using the ‘long’ form of property declaration:

class C:
__metaclass__ = ABCMeta def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx)
class LocalParallelQueue(nthreads, *computations)
computations = None
counter = None
enqueue(*computations)
finish()
is_finished()
is_started()
nthreads = None
queue_manager = None
run()
start()

Run the queue in a non-blocking manner. Calling start multiple times has no effect, but also raises no warning

wait()
waiting = None
class LocalSerialQueue(*computations)

The simplest possible queue. Runs one job at a time on the local machine.

class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Computation

Base class for all classes encapsulating runs of external programs

additional_safe_directory_characters = '+'
already_run()

Checks to see if an identical input file with an identical name has already been run in the computation’s directory to produce an output file of some sort (if that output file has errors, you probably don’t want to rerun the exact same input file, so this doesn’t do that by default. If you need to do that, call Computation.run() with the force_rerun argument set to True).

always_create_missing = False
attribute_aliases = {'Theory': ['Method', 'LevelOfTheory']}
completed

True if and only if the calculation has finished running. (regardless of success or failure). Setting completed to True triggers the output parser.

details = None
directory = None
directory_template = None
get_energy(details=None)
get_property(prop_class, details=None)
get_results()
has_energy(details=None)
has_property(prop_class, details=None)
input_generator = None
molecule = None
needed_properties

The types of the properties in the self.properties list.

needs_property(prop)
output_parser = None
properties = []
queued = False
run(force_rerun=False, lock=None)
runner = None
classmethod standardize_attribute(attr)

Convert strings to standard form for attributes. Strings with spaces, underscore_joined_strings, Uppercase_Underscore_Strings, and lowerCamelCase strings are all converted to UpperCamelCase.

Examples :
>>> Computation.standardize_attribute("basis_set")
'BasisSet'
>>> Computation.standardize_attribute("basis set")
'BasisSet'
>>> Computation.standardize_attribute("basis!Set")
'BasisSet'
>>> # Only _ and space serve as CamelCase separators:
>>> Computation.standardize_attribute("basis!set")
'Basisset'
>>> Computation.standardize_attribute("Level___of!*theory")
'LevelOftheory'
>>> # "Accidental" caps are not fixed...
>>> Computation.standardize_attribute("Level___of!*tHEory")
'LevelOftHEory'
>>> #All caps gets translated into title case
>>> Computation.standardize_attribute("Level&$#of__THEORY")
'LevelofTheory'
start()
started = False
task_description()
class ComputationOptimizationResultGetter
can_get_property_for_molecule(molecule, property, details=None)
computations = None
get_optimized_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_optimized_property_for_molecule(molecule, property, details=None, verbose=False)
has_property_for_molecule(molecule, property, details=None, verbose=False)
class ComputationResultGetter
add_computation(comp)
can_get_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

can_get_property_for_molecule(molecule, property, details=None)

Aliased as has_property(), can_get_property()

computation_kwargs = None
computations = None
directory_series = {}
get_computation_for_property(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

has_property_for_molecule(molecule, property, details=None, verbose=False)
known_result_getters = {}
use_directory_series = None
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class OptimizationResultGetter
can_optimize_property_for_molecule(molecule, property, details=None)
get_optimized_property_for_molecule(molecule, property, details=None)
has_optimized_property_for_molecule(molecule, property, details=None, verbose=False)
known_optimizers = {}
class ResultGetter

Abstract base class for all classes that encapsulate a method of retrieving a (set of) properties of a molecule from a computational chemistry package. An instance of a ResultGetter object should know how to turn a request for a given molecular property into a Computation object (which, in turn, houses MolecularProperty objects for one or more Molecule objects). ResultGetter objects generate Computation objects. Any ResultGetter subclass should always check for an available computation on (exactly) the same molecule that already has the result available.

can_get_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=False)
abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
class Runner(input_file=None, output_file=None, **kwargs)

Abstract base class for classes that run a computation (or an equivalent task, such as submit a job to a PBS queue). Not all Computation objects need a runner; for instance XML-parsed computations are constructed in an already-run state.

command_sequence = None
default_input_filename = 'input.dat'
default_output_filename = 'output.dat'
environment = None
input_file = None
output_file = None
process = None
run()

Run in a blocking manner. Default implementation calls wait() on the process returned by start(). Overload it if this doesn’t make sense.

start()
stderr = None
stdin = None
stdout = None
validate()

Determine if we will be able to run. Raise a ComputationUnavailableError if running will cause a crash

working_directory = None
AMU

alias of AtomicMassUnit

AMUs

alias of AtomicMassUnit

class Angstrom
classmethod to(other)
Angstroms

alias of Angstrom

class AngularUnit

General superclass for all angular units

default

alias of Degree

reference_unit

alias of Degree

class AtomicMassUnit
AtomicMassUnits

alias of AtomicMassUnit

AtomicUnitOfCharge

alias of AtomicUnitOfElectricCharge

AtomicUnitOfDistance

alias of Bohr

class AtomicUnitOfElectricCharge
AtomicUnitOfEnergy

alias of Hartree

class AtomicUnitOfMass
class AtomicUnitOfTime
AtomicUnitsOfCharge

alias of AtomicUnitOfElectricCharge

AtomicUnitsOfDistance

alias of Bohr

AtomicUnitsOfElectricCharge

alias of AtomicUnitOfElectricCharge

AtomicUnitsOfEnergy

alias of Hartree

AtomicUnitsOfMass

alias of AtomicUnitOfMass

AtomicUnitsOfTime

alias of AtomicUnitOfTime

class AttoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAMUs

alias of AttoAMU

class AttoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAtomicUnitsOfCharge

alias of AttoAtomicUnitOfCharge

AttoAtomicUnitsOfDistance

alias of AttoAtomicUnitOfDistance

AttoAtomicUnitsOfEnergy

alias of AttoAtomicUnitOfEnergy

class AttoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoangstrom

alias of AttoAngstrom

Attoangstroms

alias of AttoAngstrom

Attobohr

alias of AttoBohr

Attobohrs

alias of AttoBohr

Attocenturies

alias of AttoCentury

Attocentury

alias of AttoCentury

Attocoulomb

alias of AttoCoulomb

Attocoulombs

alias of AttoCoulomb

Attoday

alias of AttoDay

Attodays

alias of AttoDay

Attodecade

alias of AttoDecade

Attodecades

alias of AttoDecade

Attodegree

alias of AttoDegree

Attodegrees

alias of AttoDegree

Attogram

alias of AttoGram

Attograms

alias of AttoGram

Attohartree

alias of AttoHartree

Attohartrees

alias of AttoHartree

Attohertz

alias of AttoHertz

Attohertzs

alias of AttoHertz

Attohour

alias of AttoHour

Attohours

alias of AttoHour

Attojoule

alias of AttoJoule

Attojoules

alias of AttoJoule

Attometer

alias of AttoMeter

Attometers

alias of AttoMeter

Attomillennia

alias of AttoMillennium

Attomillennium

alias of AttoMillennium

Attominute

alias of AttoMinute

Attominutes

alias of AttoMinute

Attoradian

alias of AttoRadian

Attoradians

alias of AttoRadian

Attosecond

alias of AttoSecond

Attoseconds

alias of AttoSecond

Attowavenumber

alias of AttoWavenumber

Attowavenumbers

alias of AttoWavenumber

Attoweek

alias of AttoWeek

Attoweeks

alias of AttoWeek

Attoyear

alias of AttoYear

Attoyears

alias of AttoYear

class Bohr
Bohrs

alias of Bohr

class CentiAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAMUs

alias of CentiAMU

class CentiAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAtomicUnitsOfCharge

alias of CentiAtomicUnitOfCharge

CentiAtomicUnitsOfDistance

alias of CentiAtomicUnitOfDistance

CentiAtomicUnitsOfEnergy

alias of CentiAtomicUnitOfEnergy

class CentiBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiangstrom

alias of CentiAngstrom

Centiangstroms

alias of CentiAngstrom

Centibohr

alias of CentiBohr

Centibohrs

alias of CentiBohr

Centicenturies

alias of CentiCentury

Centicentury

alias of CentiCentury

Centicoulomb

alias of CentiCoulomb

Centicoulombs

alias of CentiCoulomb

Centiday

alias of CentiDay

Centidays

alias of CentiDay

Centidecade

alias of CentiDecade

Centidecades

alias of CentiDecade

Centidegree

alias of CentiDegree

Centidegrees

alias of CentiDegree

Centigram

alias of CentiGram

Centigrams

alias of CentiGram

Centihartree

alias of CentiHartree

Centihartrees

alias of CentiHartree

Centihertz

alias of CentiHertz

Centihertzs

alias of CentiHertz

Centihour

alias of CentiHour

Centihours

alias of CentiHour

Centijoule

alias of CentiJoule

Centijoules

alias of CentiJoule

Centimeter

alias of CentiMeter

Centimeters

alias of CentiMeter

Centimillennia

alias of CentiMillennium

Centimillennium

alias of CentiMillennium

Centiminute

alias of CentiMinute

Centiminutes

alias of CentiMinute

Centiradian

alias of CentiRadian

Centiradians

alias of CentiRadian

Centisecond

alias of CentiSecond

Centiseconds

alias of CentiSecond

Centiwavenumber

alias of CentiWavenumber

Centiwavenumbers

alias of CentiWavenumber

Centiweek

alias of CentiWeek

Centiweeks

alias of CentiWeek

Centiyear

alias of CentiYear

Centiyears

alias of CentiYear

Centuries

alias of Century

class Century
class CompositeUnit(numer_units_or_composed, denom_units=None, coeff=1.0)

A class for composite units, e.g. Joules/Angstrom^2

coefficient = 1.0
composed = None
genre

Analog of Unit.genre. Always returns CompositeUnit

name

The name of the composite unit, as a product of base units

reduced(using_units=None)

Reduce the composite unit into the fewest base units possible.

Examples :
>>> from grendel.util.units import *
>>> (Angstroms**2/Bohr).reduced()
(1.88972612457 Angstrom)
>>> (Degree / (Bohr**2)).reduced()
Degree / Bohr**2
>>> (Degree / (Bohr*Meter)).reduced()
(5.2917721092e-11 Degree / Bohr**2)
to()
class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
class Coulomb
classmethod to(other)
Coulombs

alias of Coulomb

class Day
Days

alias of Day

class DecaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAMUs

alias of DecaAMU

class DecaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAtomicUnitsOfCharge

alias of DecaAtomicUnitOfCharge

DecaAtomicUnitsOfDistance

alias of DecaAtomicUnitOfDistance

DecaAtomicUnitsOfEnergy

alias of DecaAtomicUnitOfEnergy

class DecaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaangstrom

alias of DecaAngstrom

Decaangstroms

alias of DecaAngstrom

Decabohr

alias of DecaBohr

Decabohrs

alias of DecaBohr

Decacenturies

alias of DecaCentury

Decacentury

alias of DecaCentury

Decacoulomb

alias of DecaCoulomb

Decacoulombs

alias of DecaCoulomb

Decaday

alias of DecaDay

Decadays

alias of DecaDay

class Decade
Decadecade

alias of DecaDecade

Decadecades

alias of DecaDecade

Decadegree

alias of DecaDegree

Decadegrees

alias of DecaDegree

Decades

alias of Decade

Decagram

alias of DecaGram

Decagrams

alias of DecaGram

Decahartree

alias of DecaHartree

Decahartrees

alias of DecaHartree

Decahertz

alias of DecaHertz

Decahertzs

alias of DecaHertz

Decahour

alias of DecaHour

Decahours

alias of DecaHour

Decajoule

alias of DecaJoule

Decajoules

alias of DecaJoule

Decameter

alias of DecaMeter

Decameters

alias of DecaMeter

Decamillennia

alias of DecaMillennium

Decamillennium

alias of DecaMillennium

Decaminute

alias of DecaMinute

Decaminutes

alias of DecaMinute

Decaradian

alias of DecaRadian

Decaradians

alias of DecaRadian

Decasecond

alias of DecaSecond

Decaseconds

alias of DecaSecond

Decawavenumber

alias of DecaWavenumber

Decawavenumbers

alias of DecaWavenumber

Decaweek

alias of DecaWeek

Decaweeks

alias of DecaWeek

Decayear

alias of DecaYear

Decayears

alias of DecaYear

class DeciAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAMUs

alias of DeciAMU

class DeciAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAtomicUnitsOfCharge

alias of DeciAtomicUnitOfCharge

DeciAtomicUnitsOfDistance

alias of DeciAtomicUnitOfDistance

DeciAtomicUnitsOfEnergy

alias of DeciAtomicUnitOfEnergy

class DeciBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciangstrom

alias of DeciAngstrom

Deciangstroms

alias of DeciAngstrom

Decibohr

alias of DeciBohr

Decibohrs

alias of DeciBohr

Decicenturies

alias of DeciCentury

Decicentury

alias of DeciCentury

Decicoulomb

alias of DeciCoulomb

Decicoulombs

alias of DeciCoulomb

Deciday

alias of DeciDay

Decidays

alias of DeciDay

Decidecade

alias of DeciDecade

Decidecades

alias of DeciDecade

Decidegree

alias of DeciDegree

Decidegrees

alias of DeciDegree

Decigram

alias of DeciGram

Decigrams

alias of DeciGram

Decihartree

alias of DeciHartree

Decihartrees

alias of DeciHartree

Decihertz

alias of DeciHertz

Decihertzs

alias of DeciHertz

Decihour

alias of DeciHour

Decihours

alias of DeciHour

Decijoule

alias of DeciJoule

Decijoules

alias of DeciJoule

Decimeter

alias of DeciMeter

Decimeters

alias of DeciMeter

Decimillennia

alias of DeciMillennium

Decimillennium

alias of DeciMillennium

Deciminute

alias of DeciMinute

Deciminutes

alias of DeciMinute

Deciradian

alias of DeciRadian

Deciradians

alias of DeciRadian

Decisecond

alias of DeciSecond

Deciseconds

alias of DeciSecond

Deciwavenumber

alias of DeciWavenumber

Deciwavenumbers

alias of DeciWavenumber

Deciweek

alias of DeciWeek

Deciweeks

alias of DeciWeek

Deciyear

alias of DeciYear

Deciyears

alias of DeciYear

class Degree
classmethod to(other)
Degrees

alias of Degree

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class ElectricChargeUnit

General superclass for all units of electric charge

default

alias of Coulomb

reference_unit

alias of Coulomb

class ElectronVolt
ElectronVolts

alias of ElectronVolt

class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

class ExaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAMUs

alias of ExaAMU

class ExaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAtomicUnitsOfCharge

alias of ExaAtomicUnitOfCharge

ExaAtomicUnitsOfDistance

alias of ExaAtomicUnitOfDistance

ExaAtomicUnitsOfEnergy

alias of ExaAtomicUnitOfEnergy

class ExaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaangstrom

alias of ExaAngstrom

Exaangstroms

alias of ExaAngstrom

Exabohr

alias of ExaBohr

Exabohrs

alias of ExaBohr

Exacenturies

alias of ExaCentury

Exacentury

alias of ExaCentury

Exacoulomb

alias of ExaCoulomb

Exacoulombs

alias of ExaCoulomb

Exaday

alias of ExaDay

Exadays

alias of ExaDay

Exadecade

alias of ExaDecade

Exadecades

alias of ExaDecade

Exadegree

alias of ExaDegree

Exadegrees

alias of ExaDegree

Exagram

alias of ExaGram

Exagrams

alias of ExaGram

Exahartree

alias of ExaHartree

Exahartrees

alias of ExaHartree

Exahertz

alias of ExaHertz

Exahertzs

alias of ExaHertz

Exahour

alias of ExaHour

Exahours

alias of ExaHour

Exajoule

alias of ExaJoule

Exajoules

alias of ExaJoule

Exameter

alias of ExaMeter

Exameters

alias of ExaMeter

Examillennia

alias of ExaMillennium

Examillennium

alias of ExaMillennium

Examinute

alias of ExaMinute

Examinutes

alias of ExaMinute

Exaradian

alias of ExaRadian

Exaradians

alias of ExaRadian

Exasecond

alias of ExaSecond

Exaseconds

alias of ExaSecond

Exawavenumber

alias of ExaWavenumber

Exawavenumbers

alias of ExaWavenumber

Exaweek

alias of ExaWeek

Exaweeks

alias of ExaWeek

Exayear

alias of ExaYear

Exayears

alias of ExaYear

class FemtoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAMUs

alias of FemtoAMU

class FemtoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAtomicUnitsOfCharge

alias of FemtoAtomicUnitOfCharge

FemtoAtomicUnitsOfDistance

alias of FemtoAtomicUnitOfDistance

FemtoAtomicUnitsOfEnergy

alias of FemtoAtomicUnitOfEnergy

class FemtoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoangstrom

alias of FemtoAngstrom

Femtoangstroms

alias of FemtoAngstrom

Femtobohr

alias of FemtoBohr

Femtobohrs

alias of FemtoBohr

Femtocenturies

alias of FemtoCentury

Femtocentury

alias of FemtoCentury

Femtocoulomb

alias of FemtoCoulomb

Femtocoulombs

alias of FemtoCoulomb

Femtoday

alias of FemtoDay

Femtodays

alias of FemtoDay

Femtodecade

alias of FemtoDecade

Femtodecades

alias of FemtoDecade

Femtodegree

alias of FemtoDegree

Femtodegrees

alias of FemtoDegree

Femtogram

alias of FemtoGram

Femtograms

alias of FemtoGram

Femtohartree

alias of FemtoHartree

Femtohartrees

alias of FemtoHartree

Femtohertz

alias of FemtoHertz

Femtohertzs

alias of FemtoHertz

Femtohour

alias of FemtoHour

Femtohours

alias of FemtoHour

Femtojoule

alias of FemtoJoule

Femtojoules

alias of FemtoJoule

Femtometer

alias of FemtoMeter

Femtometers

alias of FemtoMeter

Femtomillennia

alias of FemtoMillennium

Femtomillennium

alias of FemtoMillennium

Femtominute

alias of FemtoMinute

Femtominutes

alias of FemtoMinute

Femtoradian

alias of FemtoRadian

Femtoradians

alias of FemtoRadian

Femtosecond

alias of FemtoSecond

Femtoseconds

alias of FemtoSecond

Femtowavenumber

alias of FemtoWavenumber

Femtowavenumbers

alias of FemtoWavenumber

Femtoweek

alias of FemtoWeek

Femtoweeks

alias of FemtoWeek

Femtoyear

alias of FemtoYear

Femtoyears

alias of FemtoYear

class GigaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAMUs

alias of GigaAMU

class GigaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAtomicUnitsOfCharge

alias of GigaAtomicUnitOfCharge

GigaAtomicUnitsOfDistance

alias of GigaAtomicUnitOfDistance

GigaAtomicUnitsOfEnergy

alias of GigaAtomicUnitOfEnergy

class GigaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaangstrom

alias of GigaAngstrom

Gigaangstroms

alias of GigaAngstrom

Gigabohr

alias of GigaBohr

Gigabohrs

alias of GigaBohr

Gigacenturies

alias of GigaCentury

Gigacentury

alias of GigaCentury

Gigacoulomb

alias of GigaCoulomb

Gigacoulombs

alias of GigaCoulomb

Gigaday

alias of GigaDay

Gigadays

alias of GigaDay

Gigadecade

alias of GigaDecade

Gigadecades

alias of GigaDecade

Gigadegree

alias of GigaDegree

Gigadegrees

alias of GigaDegree

Gigagram

alias of GigaGram

Gigagrams

alias of GigaGram

Gigahartree

alias of GigaHartree

Gigahartrees

alias of GigaHartree

Gigahertz

alias of GigaHertz

Gigahertzs

alias of GigaHertz

Gigahour

alias of GigaHour

Gigahours

alias of GigaHour

Gigajoule

alias of GigaJoule

Gigajoules

alias of GigaJoule

Gigameter

alias of GigaMeter

Gigameters

alias of GigaMeter

Gigamillennia

alias of GigaMillennium

Gigamillennium

alias of GigaMillennium

Gigaminute

alias of GigaMinute

Gigaminutes

alias of GigaMinute

Gigaradian

alias of GigaRadian

Gigaradians

alias of GigaRadian

Gigasecond

alias of GigaSecond

Gigaseconds

alias of GigaSecond

Gigawavenumber

alias of GigaWavenumber

Gigawavenumbers

alias of GigaWavenumber

Gigaweek

alias of GigaWeek

Gigaweeks

alias of GigaWeek

Gigayear

alias of GigaYear

Gigayears

alias of GigaYear

class Gram
classmethod to(other)
Grams

alias of Gram

class Hartree
Hartrees

alias of Hartree

class HectoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAMUs

alias of HectoAMU

class HectoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAtomicUnitsOfCharge

alias of HectoAtomicUnitOfCharge

HectoAtomicUnitsOfDistance

alias of HectoAtomicUnitOfDistance

HectoAtomicUnitsOfEnergy

alias of HectoAtomicUnitOfEnergy

class HectoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoangstrom

alias of HectoAngstrom

Hectoangstroms

alias of HectoAngstrom

Hectobohr

alias of HectoBohr

Hectobohrs

alias of HectoBohr

Hectocenturies

alias of HectoCentury

Hectocentury

alias of HectoCentury

Hectocoulomb

alias of HectoCoulomb

Hectocoulombs

alias of HectoCoulomb

Hectoday

alias of HectoDay

Hectodays

alias of HectoDay

Hectodecade

alias of HectoDecade

Hectodecades

alias of HectoDecade

Hectodegree

alias of HectoDegree

Hectodegrees

alias of HectoDegree

Hectogram

alias of HectoGram

Hectograms

alias of HectoGram

Hectohartree

alias of HectoHartree

Hectohartrees

alias of HectoHartree

Hectohertz

alias of HectoHertz

Hectohertzs

alias of HectoHertz

Hectohour

alias of HectoHour

Hectohours

alias of HectoHour

Hectojoule

alias of HectoJoule

Hectojoules

alias of HectoJoule

Hectometer

alias of HectoMeter

Hectometers

alias of HectoMeter

Hectomillennia

alias of HectoMillennium

Hectomillennium

alias of HectoMillennium

Hectominute

alias of HectoMinute

Hectominutes

alias of HectoMinute

Hectoradian

alias of HectoRadian

Hectoradians

alias of HectoRadian

Hectosecond

alias of HectoSecond

Hectoseconds

alias of HectoSecond

Hectowavenumber

alias of HectoWavenumber

Hectowavenumbers

alias of HectoWavenumber

Hectoweek

alias of HectoWeek

Hectoweeks

alias of HectoWeek

Hectoyear

alias of HectoYear

Hectoyears

alias of HectoYear

class Hertz
Hertzs

alias of Hertz

class Hour
Hours

alias of Hour

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

exception InvalidLegacyXMLFileError
class Joule
classmethod to(other)
Joules

alias of Joule

KCalPerMol

alias of KiloCaloriePerMol

KCalsPerMol

alias of KiloCaloriePerMol

KJPerMol

alias of KiloJoulePerMol

KcalPerMol

alias of KiloCaloriePerMol

KcalsPerMol

alias of KiloCaloriePerMol

class KiloAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAMUs

alias of KiloAMU

class KiloAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAtomicUnitsOfCharge

alias of KiloAtomicUnitOfCharge

KiloAtomicUnitsOfDistance

alias of KiloAtomicUnitOfDistance

KiloAtomicUnitsOfEnergy

alias of KiloAtomicUnitOfEnergy

class KiloBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloCaloriePerMol
KiloCaloriePerMole

alias of KiloCaloriePerMol

KiloCaloriePerMols

alias of KiloCaloriePerMol

KiloCaloriesPerMol

alias of KiloCaloriePerMol

class KiloCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloJoulePerMol
KiloJoulesPerMol

alias of KiloJoulePerMol

class KiloMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloangstrom

alias of KiloAngstrom

Kiloangstroms

alias of KiloAngstrom

Kilobohr

alias of KiloBohr

Kilobohrs

alias of KiloBohr

Kilocenturies

alias of KiloCentury

Kilocentury

alias of KiloCentury

Kilocoulomb

alias of KiloCoulomb

Kilocoulombs

alias of KiloCoulomb

Kiloday

alias of KiloDay

Kilodays

alias of KiloDay

Kilodecade

alias of KiloDecade

Kilodecades

alias of KiloDecade

Kilodegree

alias of KiloDegree

Kilodegrees

alias of KiloDegree

Kilogram

alias of KiloGram

Kilograms

alias of KiloGram

Kilohartree

alias of KiloHartree

Kilohartrees

alias of KiloHartree

Kilohertz

alias of KiloHertz

Kilohertzs

alias of KiloHertz

Kilohour

alias of KiloHour

Kilohours

alias of KiloHour

Kilojoule

alias of KiloJoule

Kilojoules

alias of KiloJoule

KilojoulesPerMole

alias of KiloJoulePerMol

KilojoulesPerMoles

alias of KiloJoulePerMol

Kilometer

alias of KiloMeter

Kilometers

alias of KiloMeter

Kilomillennia

alias of KiloMillennium

Kilomillennium

alias of KiloMillennium

Kilominute

alias of KiloMinute

Kilominutes

alias of KiloMinute

Kiloradian

alias of KiloRadian

Kiloradians

alias of KiloRadian

Kilosecond

alias of KiloSecond

Kiloseconds

alias of KiloSecond

Kilowavenumber

alias of KiloWavenumber

Kilowavenumbers

alias of KiloWavenumber

Kiloweek

alias of KiloWeek

Kiloweeks

alias of KiloWeek

Kiloyear

alias of KiloYear

Kiloyears

alias of KiloYear

class LegacyXMLResultGetter(comparison_representation, *files)
can_get_property_for_molecule(molecule, property, details=None)
files = None
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=True)
properties = None
properties_for_molecules = None
class MassUnit

General superclass for all units of mass

default

alias of AtomicMassUnit

reference_unit

alias of Gram

class MegaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAMUs

alias of MegaAMU

class MegaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAtomicUnitsOfCharge

alias of MegaAtomicUnitOfCharge

MegaAtomicUnitsOfDistance

alias of MegaAtomicUnitOfDistance

MegaAtomicUnitsOfEnergy

alias of MegaAtomicUnitOfEnergy

class MegaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaangstrom

alias of MegaAngstrom

Megaangstroms

alias of MegaAngstrom

Megabohr

alias of MegaBohr

Megabohrs

alias of MegaBohr

Megacenturies

alias of MegaCentury

Megacentury

alias of MegaCentury

Megacoulomb

alias of MegaCoulomb

Megacoulombs

alias of MegaCoulomb

Megaday

alias of MegaDay

Megadays

alias of MegaDay

Megadecade

alias of MegaDecade

Megadecades

alias of MegaDecade

Megadegree

alias of MegaDegree

Megadegrees

alias of MegaDegree

Megagram

alias of MegaGram

Megagrams

alias of MegaGram

Megahartree

alias of MegaHartree

Megahartrees

alias of MegaHartree

Megahertz

alias of MegaHertz

Megahertzs

alias of MegaHertz

Megahour

alias of MegaHour

Megahours

alias of MegaHour

Megajoule

alias of MegaJoule

Megajoules

alias of MegaJoule

Megameter

alias of MegaMeter

Megameters

alias of MegaMeter

Megamillennia

alias of MegaMillennium

Megamillennium

alias of MegaMillennium

Megaminute

alias of MegaMinute

Megaminutes

alias of MegaMinute

Megaradian

alias of MegaRadian

Megaradians

alias of MegaRadian

Megasecond

alias of MegaSecond

Megaseconds

alias of MegaSecond

Megawavenumber

alias of MegaWavenumber

Megawavenumbers

alias of MegaWavenumber

Megaweek

alias of MegaWeek

Megaweeks

alias of MegaWeek

Megayear

alias of MegaYear

Megayears

alias of MegaYear

class Meter
Meters

alias of Meter

class MicroAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAMUs

alias of MicroAMU

class MicroAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAtomicUnitsOfCharge

alias of MicroAtomicUnitOfCharge

MicroAtomicUnitsOfDistance

alias of MicroAtomicUnitOfDistance

MicroAtomicUnitsOfEnergy

alias of MicroAtomicUnitOfEnergy

class MicroBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microangstrom

alias of MicroAngstrom

Microangstroms

alias of MicroAngstrom

Microbohr

alias of MicroBohr

Microbohrs

alias of MicroBohr

Microcenturies

alias of MicroCentury

Microcentury

alias of MicroCentury

Microcoulomb

alias of MicroCoulomb

Microcoulombs

alias of MicroCoulomb

Microday

alias of MicroDay

Microdays

alias of MicroDay

Microdecade

alias of MicroDecade

Microdecades

alias of MicroDecade

Microdegree

alias of MicroDegree

Microdegrees

alias of MicroDegree

Microgram

alias of MicroGram

Micrograms

alias of MicroGram

Microhartree

alias of MicroHartree

Microhartrees

alias of MicroHartree

Microhertz

alias of MicroHertz

Microhertzs

alias of MicroHertz

Microhour

alias of MicroHour

Microhours

alias of MicroHour

Microjoule

alias of MicroJoule

Microjoules

alias of MicroJoule

Micrometer

alias of MicroMeter

Micrometers

alias of MicroMeter

Micromillennia

alias of MicroMillennium

Micromillennium

alias of MicroMillennium

Microminute

alias of MicroMinute

Microminutes

alias of MicroMinute

Microradian

alias of MicroRadian

Microradians

alias of MicroRadian

Microsecond

alias of MicroSecond

Microseconds

alias of MicroSecond

Microwavenumber

alias of MicroWavenumber

Microwavenumbers

alias of MicroWavenumber

Microweek

alias of MicroWeek

Microweeks

alias of MicroWeek

Microyear

alias of MicroYear

Microyears

alias of MicroYear

Millennia

alias of Millennium

class Millennium
class MilliAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAMUs

alias of MilliAMU

class MilliAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAtomicUnitsOfCharge

alias of MilliAtomicUnitOfCharge

MilliAtomicUnitsOfDistance

alias of MilliAtomicUnitOfDistance

MilliAtomicUnitsOfEnergy

alias of MilliAtomicUnitOfEnergy

class MilliBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliangstrom

alias of MilliAngstrom

Milliangstroms

alias of MilliAngstrom

Millibohr

alias of MilliBohr

Millibohrs

alias of MilliBohr

Millicenturies

alias of MilliCentury

Millicentury

alias of MilliCentury

Millicoulomb

alias of MilliCoulomb

Millicoulombs

alias of MilliCoulomb

Milliday

alias of MilliDay

Millidays

alias of MilliDay

Millidecade

alias of MilliDecade

Millidecades

alias of MilliDecade

Millidegree

alias of MilliDegree

Millidegrees

alias of MilliDegree

Milligram

alias of MilliGram

Milligrams

alias of MilliGram

Millihartree

alias of MilliHartree

Millihartrees

alias of MilliHartree

Millihertz

alias of MilliHertz

Millihertzs

alias of MilliHertz

Millihour

alias of MilliHour

Millihours

alias of MilliHour

Millijoule

alias of MilliJoule

Millijoules

alias of MilliJoule

Millimeter

alias of MilliMeter

Millimeters

alias of MilliMeter

Millimillennia

alias of MilliMillennium

Millimillennium

alias of MilliMillennium

Milliminute

alias of MilliMinute

Milliminutes

alias of MilliMinute

Milliradian

alias of MilliRadian

Milliradians

alias of MilliRadian

Millisecond

alias of MilliSecond

Milliseconds

alias of MilliSecond

Milliwavenumber

alias of MilliWavenumber

Milliwavenumbers

alias of MilliWavenumber

Milliweek

alias of MilliWeek

Milliweeks

alias of MilliWeek

Milliyear

alias of MilliYear

Milliyears

alias of MilliYear

class Minute
Minutes

alias of Minute

class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class MoleculeDict
default = None
default_factory = None
equality_digits = 7
hash_digits = 6
items()
iteritems()
iterkeys()
itervalues()
key_representation = None
keys()
update(**kwargs)
values()
class MoleculeStub(*args, **kwargs)

The exact same thing as the parent Molecule class (for now, anyway), but used for holding specifications of molecules that can later be replaced by a full molecule class (so things like, for instance, the calculations attribute won’t be filled in, but later if the geometry is found to match, the class using the MoleculeStub in some list can replace the stub with the full Molecule instance upon matching.

charge_specified = None
eq_precision = 7
hash_precision = 5
multiplicity_specified = None
classmethod stub_for(molecule)
units_specified = None
class NanoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAMUs

alias of NanoAMU

class NanoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAtomicUnitsOfCharge

alias of NanoAtomicUnitOfCharge

NanoAtomicUnitsOfDistance

alias of NanoAtomicUnitOfDistance

NanoAtomicUnitsOfEnergy

alias of NanoAtomicUnitOfEnergy

class NanoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoangstrom

alias of NanoAngstrom

Nanoangstroms

alias of NanoAngstrom

Nanobohr

alias of NanoBohr

Nanobohrs

alias of NanoBohr

Nanocenturies

alias of NanoCentury

Nanocentury

alias of NanoCentury

Nanocoulomb

alias of NanoCoulomb

Nanocoulombs

alias of NanoCoulomb

Nanoday

alias of NanoDay

Nanodays

alias of NanoDay

Nanodecade

alias of NanoDecade

Nanodecades

alias of NanoDecade

Nanodegree

alias of NanoDegree

Nanodegrees

alias of NanoDegree

Nanogram

alias of NanoGram

Nanograms

alias of NanoGram

Nanohartree

alias of NanoHartree

Nanohartrees

alias of NanoHartree

Nanohertz

alias of NanoHertz

Nanohertzs

alias of NanoHertz

Nanohour

alias of NanoHour

Nanohours

alias of NanoHour

Nanojoule

alias of NanoJoule

Nanojoules

alias of NanoJoule

Nanometer

alias of NanoMeter

Nanometers

alias of NanoMeter

Nanomillennia

alias of NanoMillennium

Nanomillennium

alias of NanoMillennium

Nanominute

alias of NanoMinute

Nanominutes

alias of NanoMinute

Nanoradian

alias of NanoRadian

Nanoradians

alias of NanoRadian

Nanosecond

alias of NanoSecond

Nanoseconds

alias of NanoSecond

Nanowavenumber

alias of NanoWavenumber

Nanowavenumbers

alias of NanoWavenumber

Nanoweek

alias of NanoWeek

Nanoweeks

alias of NanoWeek

Nanoyear

alias of NanoYear

Nanoyears

alias of NanoYear

class PetaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAMUs

alias of PetaAMU

class PetaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAtomicUnitsOfCharge

alias of PetaAtomicUnitOfCharge

PetaAtomicUnitsOfDistance

alias of PetaAtomicUnitOfDistance

PetaAtomicUnitsOfEnergy

alias of PetaAtomicUnitOfEnergy

class PetaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaangstrom

alias of PetaAngstrom

Petaangstroms

alias of PetaAngstrom

Petabohr

alias of PetaBohr

Petabohrs

alias of PetaBohr

Petacenturies

alias of PetaCentury

Petacentury

alias of PetaCentury

Petacoulomb

alias of PetaCoulomb

Petacoulombs

alias of PetaCoulomb

Petaday

alias of PetaDay

Petadays

alias of PetaDay

Petadecade

alias of PetaDecade

Petadecades

alias of PetaDecade

Petadegree

alias of PetaDegree

Petadegrees

alias of PetaDegree

Petagram

alias of PetaGram

Petagrams

alias of PetaGram

Petahartree

alias of PetaHartree

Petahartrees

alias of PetaHartree

Petahertz

alias of PetaHertz

Petahertzs

alias of PetaHertz

Petahour

alias of PetaHour

Petahours

alias of PetaHour

Petajoule

alias of PetaJoule

Petajoules

alias of PetaJoule

Petameter

alias of PetaMeter

Petameters

alias of PetaMeter

Petamillennia

alias of PetaMillennium

Petamillennium

alias of PetaMillennium

Petaminute

alias of PetaMinute

Petaminutes

alias of PetaMinute

Petaradian

alias of PetaRadian

Petaradians

alias of PetaRadian

Petasecond

alias of PetaSecond

Petaseconds

alias of PetaSecond

Petawavenumber

alias of PetaWavenumber

Petawavenumbers

alias of PetaWavenumber

Petaweek

alias of PetaWeek

Petaweeks

alias of PetaWeek

Petayear

alias of PetaYear

Petayears

alias of PetaYear

class PicoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAMUs

alias of PicoAMU

class PicoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAtomicUnitsOfCharge

alias of PicoAtomicUnitOfCharge

PicoAtomicUnitsOfDistance

alias of PicoAtomicUnitOfDistance

PicoAtomicUnitsOfEnergy

alias of PicoAtomicUnitOfEnergy

class PicoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoangstrom

alias of PicoAngstrom

Picoangstroms

alias of PicoAngstrom

Picobohr

alias of PicoBohr

Picobohrs

alias of PicoBohr

Picocenturies

alias of PicoCentury

Picocentury

alias of PicoCentury

Picocoulomb

alias of PicoCoulomb

Picocoulombs

alias of PicoCoulomb

Picoday

alias of PicoDay

Picodays

alias of PicoDay

Picodecade

alias of PicoDecade

Picodecades

alias of PicoDecade

Picodegree

alias of PicoDegree

Picodegrees

alias of PicoDegree

Picogram

alias of PicoGram

Picograms

alias of PicoGram

Picohartree

alias of PicoHartree

Picohartrees

alias of PicoHartree

Picohertz

alias of PicoHertz

Picohertzs

alias of PicoHertz

Picohour

alias of PicoHour

Picohours

alias of PicoHour

Picojoule

alias of PicoJoule

Picojoules

alias of PicoJoule

Picometer

alias of PicoMeter

Picometers

alias of PicoMeter

Picomillennia

alias of PicoMillennium

Picomillennium

alias of PicoMillennium

Picominute

alias of PicoMinute

Picominutes

alias of PicoMinute

Picoradian

alias of PicoRadian

Picoradians

alias of PicoRadian

Picosecond

alias of PicoSecond

Picoseconds

alias of PicoSecond

Picowavenumber

alias of PicoWavenumber

Picowavenumbers

alias of PicoWavenumber

Picoweek

alias of PicoWeek

Picoweeks

alias of PicoWeek

Picoyear

alias of PicoYear

Picoyears

alias of PicoYear

exception PropertyUnavailableError
class Radian
Radians

alias of Radian

ReadOnlyAttribute

A read-only attribute. See SpecialAttribute for initialization variables standard to all SpecialAttribute subclasses.

Attributes :
error_text : str
The text for the error raised when setting of the attribute is attempted. Defaults to “cannot set read-only attribute”
class ResultGetter

Abstract base class for all classes that encapsulate a method of retrieving a (set of) properties of a molecule from a computational chemistry package. An instance of a ResultGetter object should know how to turn a request for a given molecular property into a Computation object (which, in turn, houses MolecularProperty objects for one or more Molecule objects). ResultGetter objects generate Computation objects. Any ResultGetter subclass should always check for an available computation on (exactly) the same molecule that already has the result available.

can_get_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=False)
class Second
classmethod to(other)
Seconds

alias of Second

class TeraAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAMUs

alias of TeraAMU

class TeraAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAtomicUnitsOfCharge

alias of TeraAtomicUnitOfCharge

TeraAtomicUnitsOfDistance

alias of TeraAtomicUnitOfDistance

TeraAtomicUnitsOfEnergy

alias of TeraAtomicUnitOfEnergy

class TeraBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraangstrom

alias of TeraAngstrom

Teraangstroms

alias of TeraAngstrom

Terabohr

alias of TeraBohr

Terabohrs

alias of TeraBohr

Teracenturies

alias of TeraCentury

Teracentury

alias of TeraCentury

Teracoulomb

alias of TeraCoulomb

Teracoulombs

alias of TeraCoulomb

Teraday

alias of TeraDay

Teradays

alias of TeraDay

Teradecade

alias of TeraDecade

Teradecades

alias of TeraDecade

Teradegree

alias of TeraDegree

Teradegrees

alias of TeraDegree

Teragram

alias of TeraGram

Teragrams

alias of TeraGram

Terahartree

alias of TeraHartree

Terahartrees

alias of TeraHartree

Terahertz

alias of TeraHertz

Terahertzs

alias of TeraHertz

Terahour

alias of TeraHour

Terahours

alias of TeraHour

Terajoule

alias of TeraJoule

Terajoules

alias of TeraJoule

Terameter

alias of TeraMeter

Terameters

alias of TeraMeter

Teramillennia

alias of TeraMillennium

Teramillennium

alias of TeraMillennium

Teraminute

alias of TeraMinute

Teraminutes

alias of TeraMinute

Teraradian

alias of TeraRadian

Teraradians

alias of TeraRadian

Terasecond

alias of TeraSecond

Teraseconds

alias of TeraSecond

Terawavenumber

alias of TeraWavenumber

Terawavenumbers

alias of TeraWavenumber

Teraweek

alias of TeraWeek

Teraweeks

alias of TeraWeek

Terayear

alias of TeraYear

Terayears

alias of TeraYear

class TimeUnit

General superclass for all time units

default

alias of Second

reference_unit

alias of Second

class Unit(name, bases, dct)

Metaclass for a general unit of something.

genre
genre_check(other)
known_units = ['Angstrom', 'Angstroms', YottaAngstrom, ZettaAngstrom, ExaAngstrom, PetaAngstrom, TeraAngstrom, GigaAngstrom, MegaAngstrom, KiloAngstrom, HectoAngstrom, DecaAngstrom, DeciAngstrom, CentiAngstrom, MilliAngstrom, MicroAngstrom, NanoAngstrom, PicoAngstrom, FemtoAngstrom, AttoAngstrom, ZeptoAngstrom, YoctoAngstrom, 'Bohr', 'Bohrs', YottaBohr, ZettaBohr, ExaBohr, PetaBohr, TeraBohr, GigaBohr, MegaBohr, KiloBohr, HectoBohr, DecaBohr, DeciBohr, CentiBohr, MilliBohr, MicroBohr, NanoBohr, PicoBohr, FemtoBohr, AttoBohr, ZeptoBohr, YoctoBohr, 'YottaAtomicUnitOfDistance', YottaAtomicUnitOfDistance, 'ZettaAtomicUnitOfDistance', ZettaAtomicUnitOfDistance, 'ExaAtomicUnitOfDistance', ExaAtomicUnitOfDistance, 'PetaAtomicUnitOfDistance', PetaAtomicUnitOfDistance, 'TeraAtomicUnitOfDistance', TeraAtomicUnitOfDistance, 'GigaAtomicUnitOfDistance', GigaAtomicUnitOfDistance, 'MegaAtomicUnitOfDistance', MegaAtomicUnitOfDistance, 'KiloAtomicUnitOfDistance', KiloAtomicUnitOfDistance, 'HectoAtomicUnitOfDistance', HectoAtomicUnitOfDistance, 'DecaAtomicUnitOfDistance', DecaAtomicUnitOfDistance, 'DeciAtomicUnitOfDistance', DeciAtomicUnitOfDistance, 'CentiAtomicUnitOfDistance', CentiAtomicUnitOfDistance, 'MilliAtomicUnitOfDistance', MilliAtomicUnitOfDistance, 'MicroAtomicUnitOfDistance', MicroAtomicUnitOfDistance, 'NanoAtomicUnitOfDistance', NanoAtomicUnitOfDistance, 'PicoAtomicUnitOfDistance', PicoAtomicUnitOfDistance, 'FemtoAtomicUnitOfDistance', FemtoAtomicUnitOfDistance, 'AttoAtomicUnitOfDistance', AttoAtomicUnitOfDistance, 'ZeptoAtomicUnitOfDistance', ZeptoAtomicUnitOfDistance, 'YoctoAtomicUnitOfDistance', YoctoAtomicUnitOfDistance, 'Meter', 'Meters', YottaMeter, ZettaMeter, ExaMeter, PetaMeter, TeraMeter, GigaMeter, MegaMeter, KiloMeter, HectoMeter, DecaMeter, DeciMeter, CentiMeter, MilliMeter, MicroMeter, NanoMeter, PicoMeter, FemtoMeter, AttoMeter, ZeptoMeter, YoctoMeter, 'Degree', 'Degrees', YottaDegree, ZettaDegree, ExaDegree, PetaDegree, TeraDegree, GigaDegree, MegaDegree, KiloDegree, HectoDegree, DecaDegree, DeciDegree, CentiDegree, MilliDegree, MicroDegree, NanoDegree, PicoDegree, FemtoDegree, AttoDegree, ZeptoDegree, YoctoDegree, 'Radian', 'Radians', YottaRadian, ZettaRadian, ExaRadian, PetaRadian, TeraRadian, GigaRadian, MegaRadian, KiloRadian, HectoRadian, DecaRadian, DeciRadian, CentiRadian, MilliRadian, MicroRadian, NanoRadian, PicoRadian, FemtoRadian, AttoRadian, ZeptoRadian, YoctoRadian, 'Joule', 'Joules', YottaJoule, ZettaJoule, ExaJoule, PetaJoule, TeraJoule, GigaJoule, MegaJoule, KiloJoule, HectoJoule, DecaJoule, DeciJoule, CentiJoule, MilliJoule, MicroJoule, NanoJoule, PicoJoule, FemtoJoule, AttoJoule, ZeptoJoule, YoctoJoule, 'Wavenumber', 'Wavenumbers', YottaWavenumber, ZettaWavenumber, ExaWavenumber, PetaWavenumber, TeraWavenumber, GigaWavenumber, MegaWavenumber, KiloWavenumber, HectoWavenumber, DecaWavenumber, DeciWavenumber, CentiWavenumber, MilliWavenumber, MicroWavenumber, NanoWavenumber, PicoWavenumber, FemtoWavenumber, AttoWavenumber, ZeptoWavenumber, YoctoWavenumber, 'ElectronVolt', 'ElectronVolts', YottaElectronVolt, ZettaElectronVolt, ExaElectronVolt, PetaElectronVolt, TeraElectronVolt, GigaElectronVolt, MegaElectronVolt, KiloElectronVolt, HectoElectronVolt, DecaElectronVolt, DeciElectronVolt, CentiElectronVolt, MilliElectronVolt, MicroElectronVolt, NanoElectronVolt, PicoElectronVolt, FemtoElectronVolt, AttoElectronVolt, ZeptoElectronVolt, YoctoElectronVolt, 'Hertz', 'Hertzs', YottaHertz, ZettaHertz, ExaHertz, PetaHertz, TeraHertz, GigaHertz, MegaHertz, KiloHertz, HectoHertz, DecaHertz, DeciHertz, CentiHertz, MilliHertz, MicroHertz, NanoHertz, PicoHertz, FemtoHertz, AttoHertz, ZeptoHertz, YoctoHertz, 'Hartree', 'Hartrees', YottaHartree, ZettaHartree, ExaHartree, PetaHartree, TeraHartree, GigaHartree, MegaHartree, KiloHartree, HectoHartree, DecaHartree, DeciHartree, CentiHartree, MilliHartree, MicroHartree, NanoHartree, PicoHartree, FemtoHartree, AttoHartree, ZeptoHartree, YoctoHartree, 'YottaAtomicUnitOfEnergy', YottaAtomicUnitOfEnergy, 'ZettaAtomicUnitOfEnergy', ZettaAtomicUnitOfEnergy, 'ExaAtomicUnitOfEnergy', ExaAtomicUnitOfEnergy, 'PetaAtomicUnitOfEnergy', PetaAtomicUnitOfEnergy, 'TeraAtomicUnitOfEnergy', TeraAtomicUnitOfEnergy, 'GigaAtomicUnitOfEnergy', GigaAtomicUnitOfEnergy, 'MegaAtomicUnitOfEnergy', MegaAtomicUnitOfEnergy, 'KiloAtomicUnitOfEnergy', KiloAtomicUnitOfEnergy, 'HectoAtomicUnitOfEnergy', HectoAtomicUnitOfEnergy, 'DecaAtomicUnitOfEnergy', DecaAtomicUnitOfEnergy, 'DeciAtomicUnitOfEnergy', DeciAtomicUnitOfEnergy, 'CentiAtomicUnitOfEnergy', CentiAtomicUnitOfEnergy, 'MilliAtomicUnitOfEnergy', MilliAtomicUnitOfEnergy, 'MicroAtomicUnitOfEnergy', MicroAtomicUnitOfEnergy, 'NanoAtomicUnitOfEnergy', NanoAtomicUnitOfEnergy, 'PicoAtomicUnitOfEnergy', PicoAtomicUnitOfEnergy, 'FemtoAtomicUnitOfEnergy', FemtoAtomicUnitOfEnergy, 'AttoAtomicUnitOfEnergy', AttoAtomicUnitOfEnergy, 'ZeptoAtomicUnitOfEnergy', ZeptoAtomicUnitOfEnergy, 'YoctoAtomicUnitOfEnergy', YoctoAtomicUnitOfEnergy, 'KiloCaloriePerMol', 'KiloCaloriePerMols', 'KiloJoulePerMol', 'KiloJoulesPerMol', 'Second', 'Seconds', YottaSecond, ZettaSecond, ExaSecond, PetaSecond, TeraSecond, GigaSecond, MegaSecond, KiloSecond, HectoSecond, DecaSecond, DeciSecond, CentiSecond, MilliSecond, MicroSecond, NanoSecond, PicoSecond, FemtoSecond, AttoSecond, ZeptoSecond, YoctoSecond, 'AtomicUnitOfTime', 'AtomicUnitsOfTime', YottaAtomicUnitOfTime, ZettaAtomicUnitOfTime, ExaAtomicUnitOfTime, PetaAtomicUnitOfTime, TeraAtomicUnitOfTime, GigaAtomicUnitOfTime, MegaAtomicUnitOfTime, KiloAtomicUnitOfTime, HectoAtomicUnitOfTime, DecaAtomicUnitOfTime, DeciAtomicUnitOfTime, CentiAtomicUnitOfTime, MilliAtomicUnitOfTime, MicroAtomicUnitOfTime, NanoAtomicUnitOfTime, PicoAtomicUnitOfTime, FemtoAtomicUnitOfTime, AttoAtomicUnitOfTime, ZeptoAtomicUnitOfTime, YoctoAtomicUnitOfTime, 'Minute', 'Minutes', YottaMinute, ZettaMinute, ExaMinute, PetaMinute, TeraMinute, GigaMinute, MegaMinute, KiloMinute, HectoMinute, DecaMinute, DeciMinute, CentiMinute, MilliMinute, MicroMinute, NanoMinute, PicoMinute, FemtoMinute, AttoMinute, ZeptoMinute, YoctoMinute, 'Hour', 'Hours', YottaHour, ZettaHour, ExaHour, PetaHour, TeraHour, GigaHour, MegaHour, KiloHour, HectoHour, DecaHour, DeciHour, CentiHour, MilliHour, MicroHour, NanoHour, PicoHour, FemtoHour, AttoHour, ZeptoHour, YoctoHour, 'Day', 'Days', YottaDay, ZettaDay, ExaDay, PetaDay, TeraDay, GigaDay, MegaDay, KiloDay, HectoDay, DecaDay, DeciDay, CentiDay, MilliDay, MicroDay, NanoDay, PicoDay, FemtoDay, AttoDay, ZeptoDay, YoctoDay, 'Week', 'Weeks', YottaWeek, ZettaWeek, ExaWeek, PetaWeek, TeraWeek, GigaWeek, MegaWeek, KiloWeek, HectoWeek, DecaWeek, DeciWeek, CentiWeek, MilliWeek, MicroWeek, NanoWeek, PicoWeek, FemtoWeek, AttoWeek, ZeptoWeek, YoctoWeek, 'Year', 'Years', YottaYear, ZettaYear, ExaYear, PetaYear, TeraYear, GigaYear, MegaYear, KiloYear, HectoYear, DecaYear, DeciYear, CentiYear, MilliYear, MicroYear, NanoYear, PicoYear, FemtoYear, AttoYear, ZeptoYear, YoctoYear, 'Decade', 'Decades', YottaDecade, ZettaDecade, ExaDecade, PetaDecade, TeraDecade, GigaDecade, MegaDecade, KiloDecade, HectoDecade, DecaDecade, DeciDecade, CentiDecade, MilliDecade, MicroDecade, NanoDecade, PicoDecade, FemtoDecade, AttoDecade, ZeptoDecade, YoctoDecade, 'Century', 'Centuries', YottaCentury, ZettaCentury, ExaCentury, PetaCentury, TeraCentury, GigaCentury, MegaCentury, KiloCentury, HectoCentury, DecaCentury, DeciCentury, CentiCentury, MilliCentury, MicroCentury, NanoCentury, PicoCentury, FemtoCentury, AttoCentury, ZeptoCentury, YoctoCentury, 'Millennium', 'Millennia', YottaMillennium, ZettaMillennium, ExaMillennium, PetaMillennium, TeraMillennium, GigaMillennium, MegaMillennium, KiloMillennium, HectoMillennium, DecaMillennium, DeciMillennium, CentiMillennium, MilliMillennium, MicroMillennium, NanoMillennium, PicoMillennium, FemtoMillennium, AttoMillennium, ZeptoMillennium, YoctoMillennium, 'Coulomb', 'Coulombs', YottaCoulomb, ZettaCoulomb, ExaCoulomb, PetaCoulomb, TeraCoulomb, GigaCoulomb, MegaCoulomb, KiloCoulomb, HectoCoulomb, DecaCoulomb, DeciCoulomb, CentiCoulomb, MilliCoulomb, MicroCoulomb, NanoCoulomb, PicoCoulomb, FemtoCoulomb, AttoCoulomb, ZeptoCoulomb, YoctoCoulomb, 'AtomicUnitOfElectricCharge', 'AtomicUnitsOfElectricCharge', YottaAtomicUnitOfElectricCharge, ZettaAtomicUnitOfElectricCharge, ExaAtomicUnitOfElectricCharge, PetaAtomicUnitOfElectricCharge, TeraAtomicUnitOfElectricCharge, GigaAtomicUnitOfElectricCharge, MegaAtomicUnitOfElectricCharge, KiloAtomicUnitOfElectricCharge, HectoAtomicUnitOfElectricCharge, DecaAtomicUnitOfElectricCharge, DeciAtomicUnitOfElectricCharge, CentiAtomicUnitOfElectricCharge, MilliAtomicUnitOfElectricCharge, MicroAtomicUnitOfElectricCharge, NanoAtomicUnitOfElectricCharge, PicoAtomicUnitOfElectricCharge, FemtoAtomicUnitOfElectricCharge, AttoAtomicUnitOfElectricCharge, ZeptoAtomicUnitOfElectricCharge, YoctoAtomicUnitOfElectricCharge, 'YottaAtomicUnitOfCharge', YottaAtomicUnitOfCharge, 'ZettaAtomicUnitOfCharge', ZettaAtomicUnitOfCharge, 'ExaAtomicUnitOfCharge', ExaAtomicUnitOfCharge, 'PetaAtomicUnitOfCharge', PetaAtomicUnitOfCharge, 'TeraAtomicUnitOfCharge', TeraAtomicUnitOfCharge, 'GigaAtomicUnitOfCharge', GigaAtomicUnitOfCharge, 'MegaAtomicUnitOfCharge', MegaAtomicUnitOfCharge, 'KiloAtomicUnitOfCharge', KiloAtomicUnitOfCharge, 'HectoAtomicUnitOfCharge', HectoAtomicUnitOfCharge, 'DecaAtomicUnitOfCharge', DecaAtomicUnitOfCharge, 'DeciAtomicUnitOfCharge', DeciAtomicUnitOfCharge, 'CentiAtomicUnitOfCharge', CentiAtomicUnitOfCharge, 'MilliAtomicUnitOfCharge', MilliAtomicUnitOfCharge, 'MicroAtomicUnitOfCharge', MicroAtomicUnitOfCharge, 'NanoAtomicUnitOfCharge', NanoAtomicUnitOfCharge, 'PicoAtomicUnitOfCharge', PicoAtomicUnitOfCharge, 'FemtoAtomicUnitOfCharge', FemtoAtomicUnitOfCharge, 'AttoAtomicUnitOfCharge', AttoAtomicUnitOfCharge, 'ZeptoAtomicUnitOfCharge', ZeptoAtomicUnitOfCharge, 'YoctoAtomicUnitOfCharge', YoctoAtomicUnitOfCharge, 'Gram', 'Grams', YottaGram, ZettaGram, ExaGram, PetaGram, TeraGram, GigaGram, MegaGram, KiloGram, HectoGram, DecaGram, DeciGram, CentiGram, MilliGram, MicroGram, NanoGram, PicoGram, FemtoGram, AttoGram, ZeptoGram, YoctoGram, 'AtomicMassUnit', 'AtomicMassUnits', YottaAtomicMassUnit, ZettaAtomicMassUnit, ExaAtomicMassUnit, PetaAtomicMassUnit, TeraAtomicMassUnit, GigaAtomicMassUnit, MegaAtomicMassUnit, KiloAtomicMassUnit, HectoAtomicMassUnit, DecaAtomicMassUnit, DeciAtomicMassUnit, CentiAtomicMassUnit, MilliAtomicMassUnit, MicroAtomicMassUnit, NanoAtomicMassUnit, PicoAtomicMassUnit, FemtoAtomicMassUnit, AttoAtomicMassUnit, ZeptoAtomicMassUnit, YoctoAtomicMassUnit, 'YottaAMU', YottaAMU, 'ZettaAMU', ZettaAMU, 'ExaAMU', ExaAMU, 'PetaAMU', PetaAMU, 'TeraAMU', TeraAMU, 'GigaAMU', GigaAMU, 'MegaAMU', MegaAMU, 'KiloAMU', KiloAMU, 'HectoAMU', HectoAMU, 'DecaAMU', DecaAMU, 'DeciAMU', DeciAMU, 'CentiAMU', CentiAMU, 'MilliAMU', MilliAMU, 'MicroAMU', MicroAMU, 'NanoAMU', NanoAMU, 'PicoAMU', PicoAMU, 'FemtoAMU', FemtoAMU, 'AttoAMU', AttoAMU, 'ZeptoAMU', ZeptoAMU, 'YoctoAMU', YoctoAMU, 'AtomicUnitOfMass', 'AtomicUnitsOfMass', YottaAtomicUnitOfMass, ZettaAtomicUnitOfMass, ExaAtomicUnitOfMass, PetaAtomicUnitOfMass, TeraAtomicUnitOfMass, GigaAtomicUnitOfMass, MegaAtomicUnitOfMass, KiloAtomicUnitOfMass, HectoAtomicUnitOfMass, DecaAtomicUnitOfMass, DeciAtomicUnitOfMass, CentiAtomicUnitOfMass, MilliAtomicUnitOfMass, MicroAtomicUnitOfMass, NanoAtomicUnitOfMass, PicoAtomicUnitOfMass, FemtoAtomicUnitOfMass, AttoAtomicUnitOfMass, ZeptoAtomicUnitOfMass, YoctoAtomicUnitOfMass]
name
prefix_factor(other)
prefixes = [<grendel.util.units.unit.Prefix object at 0x1e192330>, <grendel.util.units.unit.Prefix object at 0x1e192350>, <grendel.util.units.unit.Prefix object at 0x1e192370>, <grendel.util.units.unit.Prefix object at 0x1e192390>, <grendel.util.units.unit.Prefix object at 0x1e192410>, <grendel.util.units.unit.Prefix object at 0x1e192430>, <grendel.util.units.unit.Prefix object at 0x1e192470>, <grendel.util.units.unit.Prefix object at 0x1e1924b0>, <grendel.util.units.unit.Prefix object at 0x1e1924d0>, <grendel.util.units.unit.Prefix object at 0x1e1924f0>, <grendel.util.units.unit.Prefix object at 0x1e192510>, <grendel.util.units.unit.Prefix object at 0x1e192550>, <grendel.util.units.unit.Prefix object at 0x1e192590>, <grendel.util.units.unit.Prefix object at 0x1e1925b0>, <grendel.util.units.unit.Prefix object at 0x1e1925d0>, <grendel.util.units.unit.Prefix object at 0x1e1925f0>, <grendel.util.units.unit.Prefix object at 0x1e192610>, <grendel.util.units.unit.Prefix object at 0x1e192630>, <grendel.util.units.unit.Prefix object at 0x1e192650>, <grendel.util.units.unit.Prefix object at 0x1e192670>]
to(other)
class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception UnitizedObjectError

For errors encountered in handling unitized objects

exception UnknownUnitError(unit1)

Exception for attempted conversion of something that is not a subclass of Unit

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class Wavenumber
Wavenumbers

alias of Wavenumber

class Week
Weeks

alias of Week

exception XMLResultGetterError
class Year
Years

alias of Year

class YoctoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAMUs

alias of YoctoAMU

class YoctoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAtomicUnitsOfCharge

alias of YoctoAtomicUnitOfCharge

YoctoAtomicUnitsOfDistance

alias of YoctoAtomicUnitOfDistance

YoctoAtomicUnitsOfEnergy

alias of YoctoAtomicUnitOfEnergy

class YoctoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoangstrom

alias of YoctoAngstrom

Yoctoangstroms

alias of YoctoAngstrom

Yoctobohr

alias of YoctoBohr

Yoctobohrs

alias of YoctoBohr

Yoctocenturies

alias of YoctoCentury

Yoctocentury

alias of YoctoCentury

Yoctocoulomb

alias of YoctoCoulomb

Yoctocoulombs

alias of YoctoCoulomb

Yoctoday

alias of YoctoDay

Yoctodays

alias of YoctoDay

Yoctodecade

alias of YoctoDecade

Yoctodecades

alias of YoctoDecade

Yoctodegree

alias of YoctoDegree

Yoctodegrees

alias of YoctoDegree

Yoctogram

alias of YoctoGram

Yoctograms

alias of YoctoGram

Yoctohartree

alias of YoctoHartree

Yoctohartrees

alias of YoctoHartree

Yoctohertz

alias of YoctoHertz

Yoctohertzs

alias of YoctoHertz

Yoctohour

alias of YoctoHour

Yoctohours

alias of YoctoHour

Yoctojoule

alias of YoctoJoule

Yoctojoules

alias of YoctoJoule

Yoctometer

alias of YoctoMeter

Yoctometers

alias of YoctoMeter

Yoctomillennia

alias of YoctoMillennium

Yoctomillennium

alias of YoctoMillennium

Yoctominute

alias of YoctoMinute

Yoctominutes

alias of YoctoMinute

Yoctoradian

alias of YoctoRadian

Yoctoradians

alias of YoctoRadian

Yoctosecond

alias of YoctoSecond

Yoctoseconds

alias of YoctoSecond

Yoctowavenumber

alias of YoctoWavenumber

Yoctowavenumbers

alias of YoctoWavenumber

Yoctoweek

alias of YoctoWeek

Yoctoweeks

alias of YoctoWeek

Yoctoyear

alias of YoctoYear

Yoctoyears

alias of YoctoYear

class YottaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAMUs

alias of YottaAMU

class YottaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAtomicUnitsOfCharge

alias of YottaAtomicUnitOfCharge

YottaAtomicUnitsOfDistance

alias of YottaAtomicUnitOfDistance

YottaAtomicUnitsOfEnergy

alias of YottaAtomicUnitOfEnergy

class YottaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaangstrom

alias of YottaAngstrom

Yottaangstroms

alias of YottaAngstrom

Yottabohr

alias of YottaBohr

Yottabohrs

alias of YottaBohr

Yottacenturies

alias of YottaCentury

Yottacentury

alias of YottaCentury

Yottacoulomb

alias of YottaCoulomb

Yottacoulombs

alias of YottaCoulomb

Yottaday

alias of YottaDay

Yottadays

alias of YottaDay

Yottadecade

alias of YottaDecade

Yottadecades

alias of YottaDecade

Yottadegree

alias of YottaDegree

Yottadegrees

alias of YottaDegree

Yottagram

alias of YottaGram

Yottagrams

alias of YottaGram

Yottahartree

alias of YottaHartree

Yottahartrees

alias of YottaHartree

Yottahertz

alias of YottaHertz

Yottahertzs

alias of YottaHertz

Yottahour

alias of YottaHour

Yottahours

alias of YottaHour

Yottajoule

alias of YottaJoule

Yottajoules

alias of YottaJoule

Yottameter

alias of YottaMeter

Yottameters

alias of YottaMeter

Yottamillennia

alias of YottaMillennium

Yottamillennium

alias of YottaMillennium

Yottaminute

alias of YottaMinute

Yottaminutes

alias of YottaMinute

Yottaradian

alias of YottaRadian

Yottaradians

alias of YottaRadian

Yottasecond

alias of YottaSecond

Yottaseconds

alias of YottaSecond

Yottawavenumber

alias of YottaWavenumber

Yottawavenumbers

alias of YottaWavenumber

Yottaweek

alias of YottaWeek

Yottaweeks

alias of YottaWeek

Yottayear

alias of YottaYear

Yottayears

alias of YottaYear

class ZeptoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAMUs

alias of ZeptoAMU

class ZeptoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAtomicUnitsOfCharge

alias of ZeptoAtomicUnitOfCharge

ZeptoAtomicUnitsOfDistance

alias of ZeptoAtomicUnitOfDistance

ZeptoAtomicUnitsOfEnergy

alias of ZeptoAtomicUnitOfEnergy

class ZeptoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoangstrom

alias of ZeptoAngstrom

Zeptoangstroms

alias of ZeptoAngstrom

Zeptobohr

alias of ZeptoBohr

Zeptobohrs

alias of ZeptoBohr

Zeptocenturies

alias of ZeptoCentury

Zeptocentury

alias of ZeptoCentury

Zeptocoulomb

alias of ZeptoCoulomb

Zeptocoulombs

alias of ZeptoCoulomb

Zeptoday

alias of ZeptoDay

Zeptodays

alias of ZeptoDay

Zeptodecade

alias of ZeptoDecade

Zeptodecades

alias of ZeptoDecade

Zeptodegree

alias of ZeptoDegree

Zeptodegrees

alias of ZeptoDegree

Zeptogram

alias of ZeptoGram

Zeptograms

alias of ZeptoGram

Zeptohartree

alias of ZeptoHartree

Zeptohartrees

alias of ZeptoHartree

Zeptohertz

alias of ZeptoHertz

Zeptohertzs

alias of ZeptoHertz

Zeptohour

alias of ZeptoHour

Zeptohours

alias of ZeptoHour

Zeptojoule

alias of ZeptoJoule

Zeptojoules

alias of ZeptoJoule

Zeptometer

alias of ZeptoMeter

Zeptometers

alias of ZeptoMeter

Zeptomillennia

alias of ZeptoMillennium

Zeptomillennium

alias of ZeptoMillennium

Zeptominute

alias of ZeptoMinute

Zeptominutes

alias of ZeptoMinute

Zeptoradian

alias of ZeptoRadian

Zeptoradians

alias of ZeptoRadian

Zeptosecond

alias of ZeptoSecond

Zeptoseconds

alias of ZeptoSecond

Zeptowavenumber

alias of ZeptoWavenumber

Zeptowavenumbers

alias of ZeptoWavenumber

Zeptoweek

alias of ZeptoWeek

Zeptoweeks

alias of ZeptoWeek

Zeptoyear

alias of ZeptoYear

Zeptoyears

alias of ZeptoYear

class ZettaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAMUs

alias of ZettaAMU

class ZettaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAtomicUnitsOfCharge

alias of ZettaAtomicUnitOfCharge

ZettaAtomicUnitsOfDistance

alias of ZettaAtomicUnitOfDistance

ZettaAtomicUnitsOfEnergy

alias of ZettaAtomicUnitOfEnergy

class ZettaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaangstrom

alias of ZettaAngstrom

Zettaangstroms

alias of ZettaAngstrom

Zettabohr

alias of ZettaBohr

Zettabohrs

alias of ZettaBohr

Zettacenturies

alias of ZettaCentury

Zettacentury

alias of ZettaCentury

Zettacoulomb

alias of ZettaCoulomb

Zettacoulombs

alias of ZettaCoulomb

Zettaday

alias of ZettaDay

Zettadays

alias of ZettaDay

Zettadecade

alias of ZettaDecade

Zettadecades

alias of ZettaDecade

Zettadegree

alias of ZettaDegree

Zettadegrees

alias of ZettaDegree

Zettagram

alias of ZettaGram

Zettagrams

alias of ZettaGram

Zettahartree

alias of ZettaHartree

Zettahartrees

alias of ZettaHartree

Zettahertz

alias of ZettaHertz

Zettahertzs

alias of ZettaHertz

Zettahour

alias of ZettaHour

Zettahours

alias of ZettaHour

Zettajoule

alias of ZettaJoule

Zettajoules

alias of ZettaJoule

Zettameter

alias of ZettaMeter

Zettameters

alias of ZettaMeter

Zettamillennia

alias of ZettaMillennium

Zettamillennium

alias of ZettaMillennium

Zettaminute

alias of ZettaMinute

Zettaminutes

alias of ZettaMinute

Zettaradian

alias of ZettaRadian

Zettaradians

alias of ZettaRadian

Zettasecond

alias of ZettaSecond

Zettaseconds

alias of ZettaSecond

Zettawavenumber

alias of ZettaWavenumber

Zettawavenumbers

alias of ZettaWavenumber

Zettaweek

alias of ZettaWeek

Zettaweeks

alias of ZettaWeek

Zettayear

alias of ZettaYear

Zettayears

alias of ZettaYear

compatible_units(unit1, unit2)

Aliased as iscompatible()

convert(*fargs, **fkeywords)

Alias for convert_units()

convert_units(val, from_unit, to_unit)

Aliased as convert()

class defaultdict

defaultdict(default_factory) –> dict with default factory

The default factory is called without arguments to produce a new value when a key is not present, in __getitem__ only. A defaultdict compares equal to a dict with the same items.

copy() → a shallow copy of D.
default_factory

Factory for default value called by __missing__().

has_units(obj)

Aliased as hasunits()

hasunits(*fargs, **fkeywords)

Alias for has_units()

indented(instr, nspaces=4)

Aliased as indent()

is_unit(*fargs, **fkeywords)

Alias for isunit()

iscompatible(*fargs, **fkeywords)

Alias for compatible_units()

isunit(unit)

Aliased as is_unit()

listify_args(*args, **kwargs)

A simple way to accept arguments that can be an Iterable or a bunch of arguments that should be treated as a single Iterable. (This method is pretty trivial, but I find myself doing it a whole lot.) The reason you can’t just use list() for this purpose is that if an Iterable is given as the only argument, list(args) will return a list of Iterables rather than a single Iterable.

Examples :
>>> def test(*args):
...     return listify_args(*args)
...
>>> test(1,2,3)
[1, 2, 3]
>>> test([1,2,3])
[1, 2, 3]
>>> test([1,2,3], 4)
[[1, 2, 3], 4]
>>> test("1,2,3", 4)
['1,2,3', 4]
>>> test("1,2,3")
['1,2,3']
strip_units
Strips the units off of a unitized object
(or, if the object is not Unitized, just return it). If convert_to is given, convert to these units if obj is Unitized. If assume_units is given, obj is assumed to have the units given by this argument if (and only if) it is not an instance of Unitized.

Aliased as stripunits()

stripunits(*fargs, **fkeywords)

Alias for strip_units()

SystemInfo

alias of CaseInsensativeOpenStruct

class r

A ‘raw’ list, by syntactic analogy to the Python raw string literal.

>>> r[1,2,3]
[1, 2, 3]
>>> r[1, ..., 3]
[1, Ellipsis, 3]
>>> r[...]
[Ellipsis]
>>> r[...,...]
[Ellipsis, Ellipsis]
>>> r[...,...,1:3]
[Ellipsis, Ellipsis, slice(1, 3, None)]
>>> r[...,...,1:3:5]
[Ellipsis, Ellipsis, slice(1, 3, 5)]
>>> r[...,...,1:3:5,'hello']
[Ellipsis, Ellipsis, slice(1, 3, 5), 'hello']
>>> r['hello']
['hello']
full_path(path)
class ProgressBar(max_val, width=80, out=<open file '<stdout>', mode 'w' at 0xf7a36078>, fill_char='=', indent='', arrow=True)
print_bar()
update(new_val=None)
caller()

Get the name of the calling function as a str

Returns :
out : str
The name of the function that called the function whose context caller() is called from. (Hopefully the examples makes this clearer.)
Examples :
>>> def foo():
...     print caller()
...
>>> def bar():
...     foo()
...
>>> bar()
bar
>>> def foobar():
...     bar()
...
>>> foobar()
bar
listify_args(*args, **kwargs)

A simple way to accept arguments that can be an Iterable or a bunch of arguments that should be treated as a single Iterable. (This method is pretty trivial, but I find myself doing it a whole lot.) The reason you can’t just use list() for this purpose is that if an Iterable is given as the only argument, list(args) will return a list of Iterables rather than a single Iterable.

Examples :
>>> def test(*args):
...     return listify_args(*args)
...
>>> test(1,2,3)
[1, 2, 3]
>>> test([1,2,3])
[1, 2, 3]
>>> test([1,2,3], 4)
[[1, 2, 3], 4]
>>> test("1,2,3", 4)
['1,2,3', 4]
>>> test("1,2,3")
['1,2,3']
get_multikwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things. This function also checks to make sure no more than one of the possible names is specified in the keyword dictionary kwarg_dict. If the None of the keywords given are found in kwarg_dict, None is returned.

get_kwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things. This function also checks to make sure no more than one of the possible names is specified in the keyword dictionary kwarg_dict. If the None of the keywords given are found in kwarg_dict, None is returned.

pop_multikwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things and popping that value off of the kwarg dictionary. If the None of the keywords given are found in kwarg_dict, None is returned.

See Also:

get_multikwarg

pop_kwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things and popping that value off of the kwarg dictionary. If the None of the keywords given are found in kwarg_dict, None is returned.

See Also:

get_multikwarg

andjoin(iterable, fxn=<type 'str'>, oxford_comma=True)
camel_to_lower(instr, divider='_')

Converts a CamalCase string to a lower_case_string_with_underscores If the divider argument is given, it is used instead of underscores to join words.

Examples :
classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
indent(*fargs, **fkeywords)

Alias for indented()

indented(instr, nspaces=4)

Aliased as indent()

make_safe_identifier(instr, replace_with='_')
orjoin(iterable, fxn=<type 'str'>, oxford_comma=True)
raises_error(callable_obj, *args, **kwargs)

Returns True if a call of callable with args raises an error, and False if not. Note that the callable will get called, so don’t do anything that takes a long time or changes things in a way you don’t want them to be changed. If the optional keyword argument ‘error’ is given as either an Exception subclass or an Iterable, raises_error returns True if the call of callable raises the error given or one of the errors given in the list. (The keyword argument can also be named ‘errors’). Any other keyword arguments are passed through to callable.

Technical note: As per the Python manual, only exceptions that subclass from Exception (and not BaseException directly) will be recognized. According to the python users manual, you should never implement a user exception that subclasses from BaseException directly.

Examples :
>>> raises_error(int, "5")
False
>>> raises_error(int, "0x5ab7", 0)
False
>>> raises_error(lambda x: int(x), "5")
False
>>> raises_error(int, "abc")
True
>>> raises_error(int, "abc", error = ValueError)
True
>>> raises_error(int, "abc", error = BufferError)
False
>>> raises_error(int, "abc", error = (BufferError, EnvironmentError))
False
>>> raises_error(int, "abc", error = [BufferError, ValueError])
True
>>> raises_error(float, "abc")
True
>>> # Use raises_error to see what errors raises_error raises
... # Raise a type error if the first argument is not a callable (i.e. 17(25) doesn't make sense to Python)
... raises_error(raises_error, 17, 25, error = TypeError)
True
>>> # Raise a TypeError if the error keyword argument is not a subclass of Exception
... raises_error(lambda x: raises_error(int, x, error = "hello world"), 25, error = TypeError)
True
>>> raises_error(lambda x: raises_error(int, x, error = BaseException), 25, error = TypeError)
True
short_str(obj)

Aliased as shortstr()

shortstr(*fargs, **fkeywords)

Alias for short_str()

simple_banner(text, width=100, top='-', left='|', right='|', bottom='-', top_left='+', top_right=None, bottom_left=None, bottom_right=None)
strip_quotes(value, strip_char=None)
subscript(num_or_str)

Returns the unicode string subscript equivalent of num as a unicode string

superscript(num_or_str)

Returns the unicode string superscript equivalent of num as a unicode string

class Unit(name, bases, dct)

Metaclass for a general unit of something.

genre
genre_check(other)
known_units = ['Angstrom', 'Angstroms', YottaAngstrom, ZettaAngstrom, ExaAngstrom, PetaAngstrom, TeraAngstrom, GigaAngstrom, MegaAngstrom, KiloAngstrom, HectoAngstrom, DecaAngstrom, DeciAngstrom, CentiAngstrom, MilliAngstrom, MicroAngstrom, NanoAngstrom, PicoAngstrom, FemtoAngstrom, AttoAngstrom, ZeptoAngstrom, YoctoAngstrom, 'Bohr', 'Bohrs', YottaBohr, ZettaBohr, ExaBohr, PetaBohr, TeraBohr, GigaBohr, MegaBohr, KiloBohr, HectoBohr, DecaBohr, DeciBohr, CentiBohr, MilliBohr, MicroBohr, NanoBohr, PicoBohr, FemtoBohr, AttoBohr, ZeptoBohr, YoctoBohr, 'YottaAtomicUnitOfDistance', YottaAtomicUnitOfDistance, 'ZettaAtomicUnitOfDistance', ZettaAtomicUnitOfDistance, 'ExaAtomicUnitOfDistance', ExaAtomicUnitOfDistance, 'PetaAtomicUnitOfDistance', PetaAtomicUnitOfDistance, 'TeraAtomicUnitOfDistance', TeraAtomicUnitOfDistance, 'GigaAtomicUnitOfDistance', GigaAtomicUnitOfDistance, 'MegaAtomicUnitOfDistance', MegaAtomicUnitOfDistance, 'KiloAtomicUnitOfDistance', KiloAtomicUnitOfDistance, 'HectoAtomicUnitOfDistance', HectoAtomicUnitOfDistance, 'DecaAtomicUnitOfDistance', DecaAtomicUnitOfDistance, 'DeciAtomicUnitOfDistance', DeciAtomicUnitOfDistance, 'CentiAtomicUnitOfDistance', CentiAtomicUnitOfDistance, 'MilliAtomicUnitOfDistance', MilliAtomicUnitOfDistance, 'MicroAtomicUnitOfDistance', MicroAtomicUnitOfDistance, 'NanoAtomicUnitOfDistance', NanoAtomicUnitOfDistance, 'PicoAtomicUnitOfDistance', PicoAtomicUnitOfDistance, 'FemtoAtomicUnitOfDistance', FemtoAtomicUnitOfDistance, 'AttoAtomicUnitOfDistance', AttoAtomicUnitOfDistance, 'ZeptoAtomicUnitOfDistance', ZeptoAtomicUnitOfDistance, 'YoctoAtomicUnitOfDistance', YoctoAtomicUnitOfDistance, 'Meter', 'Meters', YottaMeter, ZettaMeter, ExaMeter, PetaMeter, TeraMeter, GigaMeter, MegaMeter, KiloMeter, HectoMeter, DecaMeter, DeciMeter, CentiMeter, MilliMeter, MicroMeter, NanoMeter, PicoMeter, FemtoMeter, AttoMeter, ZeptoMeter, YoctoMeter, 'Degree', 'Degrees', YottaDegree, ZettaDegree, ExaDegree, PetaDegree, TeraDegree, GigaDegree, MegaDegree, KiloDegree, HectoDegree, DecaDegree, DeciDegree, CentiDegree, MilliDegree, MicroDegree, NanoDegree, PicoDegree, FemtoDegree, AttoDegree, ZeptoDegree, YoctoDegree, 'Radian', 'Radians', YottaRadian, ZettaRadian, ExaRadian, PetaRadian, TeraRadian, GigaRadian, MegaRadian, KiloRadian, HectoRadian, DecaRadian, DeciRadian, CentiRadian, MilliRadian, MicroRadian, NanoRadian, PicoRadian, FemtoRadian, AttoRadian, ZeptoRadian, YoctoRadian, 'Joule', 'Joules', YottaJoule, ZettaJoule, ExaJoule, PetaJoule, TeraJoule, GigaJoule, MegaJoule, KiloJoule, HectoJoule, DecaJoule, DeciJoule, CentiJoule, MilliJoule, MicroJoule, NanoJoule, PicoJoule, FemtoJoule, AttoJoule, ZeptoJoule, YoctoJoule, 'Wavenumber', 'Wavenumbers', YottaWavenumber, ZettaWavenumber, ExaWavenumber, PetaWavenumber, TeraWavenumber, GigaWavenumber, MegaWavenumber, KiloWavenumber, HectoWavenumber, DecaWavenumber, DeciWavenumber, CentiWavenumber, MilliWavenumber, MicroWavenumber, NanoWavenumber, PicoWavenumber, FemtoWavenumber, AttoWavenumber, ZeptoWavenumber, YoctoWavenumber, 'ElectronVolt', 'ElectronVolts', YottaElectronVolt, ZettaElectronVolt, ExaElectronVolt, PetaElectronVolt, TeraElectronVolt, GigaElectronVolt, MegaElectronVolt, KiloElectronVolt, HectoElectronVolt, DecaElectronVolt, DeciElectronVolt, CentiElectronVolt, MilliElectronVolt, MicroElectronVolt, NanoElectronVolt, PicoElectronVolt, FemtoElectronVolt, AttoElectronVolt, ZeptoElectronVolt, YoctoElectronVolt, 'Hertz', 'Hertzs', YottaHertz, ZettaHertz, ExaHertz, PetaHertz, TeraHertz, GigaHertz, MegaHertz, KiloHertz, HectoHertz, DecaHertz, DeciHertz, CentiHertz, MilliHertz, MicroHertz, NanoHertz, PicoHertz, FemtoHertz, AttoHertz, ZeptoHertz, YoctoHertz, 'Hartree', 'Hartrees', YottaHartree, ZettaHartree, ExaHartree, PetaHartree, TeraHartree, GigaHartree, MegaHartree, KiloHartree, HectoHartree, DecaHartree, DeciHartree, CentiHartree, MilliHartree, MicroHartree, NanoHartree, PicoHartree, FemtoHartree, AttoHartree, ZeptoHartree, YoctoHartree, 'YottaAtomicUnitOfEnergy', YottaAtomicUnitOfEnergy, 'ZettaAtomicUnitOfEnergy', ZettaAtomicUnitOfEnergy, 'ExaAtomicUnitOfEnergy', ExaAtomicUnitOfEnergy, 'PetaAtomicUnitOfEnergy', PetaAtomicUnitOfEnergy, 'TeraAtomicUnitOfEnergy', TeraAtomicUnitOfEnergy, 'GigaAtomicUnitOfEnergy', GigaAtomicUnitOfEnergy, 'MegaAtomicUnitOfEnergy', MegaAtomicUnitOfEnergy, 'KiloAtomicUnitOfEnergy', KiloAtomicUnitOfEnergy, 'HectoAtomicUnitOfEnergy', HectoAtomicUnitOfEnergy, 'DecaAtomicUnitOfEnergy', DecaAtomicUnitOfEnergy, 'DeciAtomicUnitOfEnergy', DeciAtomicUnitOfEnergy, 'CentiAtomicUnitOfEnergy', CentiAtomicUnitOfEnergy, 'MilliAtomicUnitOfEnergy', MilliAtomicUnitOfEnergy, 'MicroAtomicUnitOfEnergy', MicroAtomicUnitOfEnergy, 'NanoAtomicUnitOfEnergy', NanoAtomicUnitOfEnergy, 'PicoAtomicUnitOfEnergy', PicoAtomicUnitOfEnergy, 'FemtoAtomicUnitOfEnergy', FemtoAtomicUnitOfEnergy, 'AttoAtomicUnitOfEnergy', AttoAtomicUnitOfEnergy, 'ZeptoAtomicUnitOfEnergy', ZeptoAtomicUnitOfEnergy, 'YoctoAtomicUnitOfEnergy', YoctoAtomicUnitOfEnergy, 'KiloCaloriePerMol', 'KiloCaloriePerMols', 'KiloJoulePerMol', 'KiloJoulesPerMol', 'Second', 'Seconds', YottaSecond, ZettaSecond, ExaSecond, PetaSecond, TeraSecond, GigaSecond, MegaSecond, KiloSecond, HectoSecond, DecaSecond, DeciSecond, CentiSecond, MilliSecond, MicroSecond, NanoSecond, PicoSecond, FemtoSecond, AttoSecond, ZeptoSecond, YoctoSecond, 'AtomicUnitOfTime', 'AtomicUnitsOfTime', YottaAtomicUnitOfTime, ZettaAtomicUnitOfTime, ExaAtomicUnitOfTime, PetaAtomicUnitOfTime, TeraAtomicUnitOfTime, GigaAtomicUnitOfTime, MegaAtomicUnitOfTime, KiloAtomicUnitOfTime, HectoAtomicUnitOfTime, DecaAtomicUnitOfTime, DeciAtomicUnitOfTime, CentiAtomicUnitOfTime, MilliAtomicUnitOfTime, MicroAtomicUnitOfTime, NanoAtomicUnitOfTime, PicoAtomicUnitOfTime, FemtoAtomicUnitOfTime, AttoAtomicUnitOfTime, ZeptoAtomicUnitOfTime, YoctoAtomicUnitOfTime, 'Minute', 'Minutes', YottaMinute, ZettaMinute, ExaMinute, PetaMinute, TeraMinute, GigaMinute, MegaMinute, KiloMinute, HectoMinute, DecaMinute, DeciMinute, CentiMinute, MilliMinute, MicroMinute, NanoMinute, PicoMinute, FemtoMinute, AttoMinute, ZeptoMinute, YoctoMinute, 'Hour', 'Hours', YottaHour, ZettaHour, ExaHour, PetaHour, TeraHour, GigaHour, MegaHour, KiloHour, HectoHour, DecaHour, DeciHour, CentiHour, MilliHour, MicroHour, NanoHour, PicoHour, FemtoHour, AttoHour, ZeptoHour, YoctoHour, 'Day', 'Days', YottaDay, ZettaDay, ExaDay, PetaDay, TeraDay, GigaDay, MegaDay, KiloDay, HectoDay, DecaDay, DeciDay, CentiDay, MilliDay, MicroDay, NanoDay, PicoDay, FemtoDay, AttoDay, ZeptoDay, YoctoDay, 'Week', 'Weeks', YottaWeek, ZettaWeek, ExaWeek, PetaWeek, TeraWeek, GigaWeek, MegaWeek, KiloWeek, HectoWeek, DecaWeek, DeciWeek, CentiWeek, MilliWeek, MicroWeek, NanoWeek, PicoWeek, FemtoWeek, AttoWeek, ZeptoWeek, YoctoWeek, 'Year', 'Years', YottaYear, ZettaYear, ExaYear, PetaYear, TeraYear, GigaYear, MegaYear, KiloYear, HectoYear, DecaYear, DeciYear, CentiYear, MilliYear, MicroYear, NanoYear, PicoYear, FemtoYear, AttoYear, ZeptoYear, YoctoYear, 'Decade', 'Decades', YottaDecade, ZettaDecade, ExaDecade, PetaDecade, TeraDecade, GigaDecade, MegaDecade, KiloDecade, HectoDecade, DecaDecade, DeciDecade, CentiDecade, MilliDecade, MicroDecade, NanoDecade, PicoDecade, FemtoDecade, AttoDecade, ZeptoDecade, YoctoDecade, 'Century', 'Centuries', YottaCentury, ZettaCentury, ExaCentury, PetaCentury, TeraCentury, GigaCentury, MegaCentury, KiloCentury, HectoCentury, DecaCentury, DeciCentury, CentiCentury, MilliCentury, MicroCentury, NanoCentury, PicoCentury, FemtoCentury, AttoCentury, ZeptoCentury, YoctoCentury, 'Millennium', 'Millennia', YottaMillennium, ZettaMillennium, ExaMillennium, PetaMillennium, TeraMillennium, GigaMillennium, MegaMillennium, KiloMillennium, HectoMillennium, DecaMillennium, DeciMillennium, CentiMillennium, MilliMillennium, MicroMillennium, NanoMillennium, PicoMillennium, FemtoMillennium, AttoMillennium, ZeptoMillennium, YoctoMillennium, 'Coulomb', 'Coulombs', YottaCoulomb, ZettaCoulomb, ExaCoulomb, PetaCoulomb, TeraCoulomb, GigaCoulomb, MegaCoulomb, KiloCoulomb, HectoCoulomb, DecaCoulomb, DeciCoulomb, CentiCoulomb, MilliCoulomb, MicroCoulomb, NanoCoulomb, PicoCoulomb, FemtoCoulomb, AttoCoulomb, ZeptoCoulomb, YoctoCoulomb, 'AtomicUnitOfElectricCharge', 'AtomicUnitsOfElectricCharge', YottaAtomicUnitOfElectricCharge, ZettaAtomicUnitOfElectricCharge, ExaAtomicUnitOfElectricCharge, PetaAtomicUnitOfElectricCharge, TeraAtomicUnitOfElectricCharge, GigaAtomicUnitOfElectricCharge, MegaAtomicUnitOfElectricCharge, KiloAtomicUnitOfElectricCharge, HectoAtomicUnitOfElectricCharge, DecaAtomicUnitOfElectricCharge, DeciAtomicUnitOfElectricCharge, CentiAtomicUnitOfElectricCharge, MilliAtomicUnitOfElectricCharge, MicroAtomicUnitOfElectricCharge, NanoAtomicUnitOfElectricCharge, PicoAtomicUnitOfElectricCharge, FemtoAtomicUnitOfElectricCharge, AttoAtomicUnitOfElectricCharge, ZeptoAtomicUnitOfElectricCharge, YoctoAtomicUnitOfElectricCharge, 'YottaAtomicUnitOfCharge', YottaAtomicUnitOfCharge, 'ZettaAtomicUnitOfCharge', ZettaAtomicUnitOfCharge, 'ExaAtomicUnitOfCharge', ExaAtomicUnitOfCharge, 'PetaAtomicUnitOfCharge', PetaAtomicUnitOfCharge, 'TeraAtomicUnitOfCharge', TeraAtomicUnitOfCharge, 'GigaAtomicUnitOfCharge', GigaAtomicUnitOfCharge, 'MegaAtomicUnitOfCharge', MegaAtomicUnitOfCharge, 'KiloAtomicUnitOfCharge', KiloAtomicUnitOfCharge, 'HectoAtomicUnitOfCharge', HectoAtomicUnitOfCharge, 'DecaAtomicUnitOfCharge', DecaAtomicUnitOfCharge, 'DeciAtomicUnitOfCharge', DeciAtomicUnitOfCharge, 'CentiAtomicUnitOfCharge', CentiAtomicUnitOfCharge, 'MilliAtomicUnitOfCharge', MilliAtomicUnitOfCharge, 'MicroAtomicUnitOfCharge', MicroAtomicUnitOfCharge, 'NanoAtomicUnitOfCharge', NanoAtomicUnitOfCharge, 'PicoAtomicUnitOfCharge', PicoAtomicUnitOfCharge, 'FemtoAtomicUnitOfCharge', FemtoAtomicUnitOfCharge, 'AttoAtomicUnitOfCharge', AttoAtomicUnitOfCharge, 'ZeptoAtomicUnitOfCharge', ZeptoAtomicUnitOfCharge, 'YoctoAtomicUnitOfCharge', YoctoAtomicUnitOfCharge, 'Gram', 'Grams', YottaGram, ZettaGram, ExaGram, PetaGram, TeraGram, GigaGram, MegaGram, KiloGram, HectoGram, DecaGram, DeciGram, CentiGram, MilliGram, MicroGram, NanoGram, PicoGram, FemtoGram, AttoGram, ZeptoGram, YoctoGram, 'AtomicMassUnit', 'AtomicMassUnits', YottaAtomicMassUnit, ZettaAtomicMassUnit, ExaAtomicMassUnit, PetaAtomicMassUnit, TeraAtomicMassUnit, GigaAtomicMassUnit, MegaAtomicMassUnit, KiloAtomicMassUnit, HectoAtomicMassUnit, DecaAtomicMassUnit, DeciAtomicMassUnit, CentiAtomicMassUnit, MilliAtomicMassUnit, MicroAtomicMassUnit, NanoAtomicMassUnit, PicoAtomicMassUnit, FemtoAtomicMassUnit, AttoAtomicMassUnit, ZeptoAtomicMassUnit, YoctoAtomicMassUnit, 'YottaAMU', YottaAMU, 'ZettaAMU', ZettaAMU, 'ExaAMU', ExaAMU, 'PetaAMU', PetaAMU, 'TeraAMU', TeraAMU, 'GigaAMU', GigaAMU, 'MegaAMU', MegaAMU, 'KiloAMU', KiloAMU, 'HectoAMU', HectoAMU, 'DecaAMU', DecaAMU, 'DeciAMU', DeciAMU, 'CentiAMU', CentiAMU, 'MilliAMU', MilliAMU, 'MicroAMU', MicroAMU, 'NanoAMU', NanoAMU, 'PicoAMU', PicoAMU, 'FemtoAMU', FemtoAMU, 'AttoAMU', AttoAMU, 'ZeptoAMU', ZeptoAMU, 'YoctoAMU', YoctoAMU, 'AtomicUnitOfMass', 'AtomicUnitsOfMass', YottaAtomicUnitOfMass, ZettaAtomicUnitOfMass, ExaAtomicUnitOfMass, PetaAtomicUnitOfMass, TeraAtomicUnitOfMass, GigaAtomicUnitOfMass, MegaAtomicUnitOfMass, KiloAtomicUnitOfMass, HectoAtomicUnitOfMass, DecaAtomicUnitOfMass, DeciAtomicUnitOfMass, CentiAtomicUnitOfMass, MilliAtomicUnitOfMass, MicroAtomicUnitOfMass, NanoAtomicUnitOfMass, PicoAtomicUnitOfMass, FemtoAtomicUnitOfMass, AttoAtomicUnitOfMass, ZeptoAtomicUnitOfMass, YoctoAtomicUnitOfMass]
name
prefix_factor(other)
prefixes = [<grendel.util.units.unit.Prefix object at 0x1e192330>, <grendel.util.units.unit.Prefix object at 0x1e192350>, <grendel.util.units.unit.Prefix object at 0x1e192370>, <grendel.util.units.unit.Prefix object at 0x1e192390>, <grendel.util.units.unit.Prefix object at 0x1e192410>, <grendel.util.units.unit.Prefix object at 0x1e192430>, <grendel.util.units.unit.Prefix object at 0x1e192470>, <grendel.util.units.unit.Prefix object at 0x1e1924b0>, <grendel.util.units.unit.Prefix object at 0x1e1924d0>, <grendel.util.units.unit.Prefix object at 0x1e1924f0>, <grendel.util.units.unit.Prefix object at 0x1e192510>, <grendel.util.units.unit.Prefix object at 0x1e192550>, <grendel.util.units.unit.Prefix object at 0x1e192590>, <grendel.util.units.unit.Prefix object at 0x1e1925b0>, <grendel.util.units.unit.Prefix object at 0x1e1925d0>, <grendel.util.units.unit.Prefix object at 0x1e1925f0>, <grendel.util.units.unit.Prefix object at 0x1e192610>, <grendel.util.units.unit.Prefix object at 0x1e192630>, <grendel.util.units.unit.Prefix object at 0x1e192650>, <grendel.util.units.unit.Prefix object at 0x1e192670>]
to(other)
isunit(unit)

Aliased as is_unit()

is_unit(*fargs, **fkeywords)

Alias for isunit()

convert(*fargs, **fkeywords)

Alias for convert_units()

convert_units(val, from_unit, to_unit)

Aliased as convert()

compatible_units(unit1, unit2)

Aliased as iscompatible()

iscompatible(*fargs, **fkeywords)

Alias for compatible_units()

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

class AngularUnit

General superclass for all angular units

default

alias of Degree

reference_unit

alias of Degree

class ElectricChargeUnit

General superclass for all units of electric charge

default

alias of Coulomb

reference_unit

alias of Coulomb

class MassUnit

General superclass for all units of mass

default

alias of AtomicMassUnit

reference_unit

alias of Gram

class TimeUnit

General superclass for all time units

default

alias of Second

reference_unit

alias of Second

class Angstrom
classmethod to(other)
Angstroms

alias of Angstrom

class YottaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaangstrom

alias of YottaAngstrom

Yottaangstroms

alias of YottaAngstrom

class ZettaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaangstrom

alias of ZettaAngstrom

Zettaangstroms

alias of ZettaAngstrom

class ExaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaangstrom

alias of ExaAngstrom

Exaangstroms

alias of ExaAngstrom

class PetaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaangstrom

alias of PetaAngstrom

Petaangstroms

alias of PetaAngstrom

class TeraAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraangstrom

alias of TeraAngstrom

Teraangstroms

alias of TeraAngstrom

class GigaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaangstrom

alias of GigaAngstrom

Gigaangstroms

alias of GigaAngstrom

class MegaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaangstrom

alias of MegaAngstrom

Megaangstroms

alias of MegaAngstrom

class KiloAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloangstrom

alias of KiloAngstrom

Kiloangstroms

alias of KiloAngstrom

class HectoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoangstrom

alias of HectoAngstrom

Hectoangstroms

alias of HectoAngstrom

class DecaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaangstrom

alias of DecaAngstrom

Decaangstroms

alias of DecaAngstrom

class DeciAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciangstrom

alias of DeciAngstrom

Deciangstroms

alias of DeciAngstrom

class CentiAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiangstrom

alias of CentiAngstrom

Centiangstroms

alias of CentiAngstrom

class MilliAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliangstrom

alias of MilliAngstrom

Milliangstroms

alias of MilliAngstrom

class MicroAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microangstrom

alias of MicroAngstrom

Microangstroms

alias of MicroAngstrom

class NanoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoangstrom

alias of NanoAngstrom

Nanoangstroms

alias of NanoAngstrom

class PicoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoangstrom

alias of PicoAngstrom

Picoangstroms

alias of PicoAngstrom

class FemtoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoangstrom

alias of FemtoAngstrom

Femtoangstroms

alias of FemtoAngstrom

class AttoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoangstrom

alias of AttoAngstrom

Attoangstroms

alias of AttoAngstrom

class ZeptoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoangstrom

alias of ZeptoAngstrom

Zeptoangstroms

alias of ZeptoAngstrom

class YoctoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoangstrom

alias of YoctoAngstrom

Yoctoangstroms

alias of YoctoAngstrom

class Bohr
Bohrs

alias of Bohr

class YottaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottabohr

alias of YottaBohr

Yottabohrs

alias of YottaBohr

class ZettaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettabohr

alias of ZettaBohr

Zettabohrs

alias of ZettaBohr

class ExaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exabohr

alias of ExaBohr

Exabohrs

alias of ExaBohr

class PetaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petabohr

alias of PetaBohr

Petabohrs

alias of PetaBohr

class TeraBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terabohr

alias of TeraBohr

Terabohrs

alias of TeraBohr

class GigaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigabohr

alias of GigaBohr

Gigabohrs

alias of GigaBohr

class MegaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megabohr

alias of MegaBohr

Megabohrs

alias of MegaBohr

class KiloBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilobohr

alias of KiloBohr

Kilobohrs

alias of KiloBohr

class HectoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectobohr

alias of HectoBohr

Hectobohrs

alias of HectoBohr

class DecaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decabohr

alias of DecaBohr

Decabohrs

alias of DecaBohr

class DeciBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decibohr

alias of DeciBohr

Decibohrs

alias of DeciBohr

class CentiBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centibohr

alias of CentiBohr

Centibohrs

alias of CentiBohr

class MilliBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millibohr

alias of MilliBohr

Millibohrs

alias of MilliBohr

class MicroBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microbohr

alias of MicroBohr

Microbohrs

alias of MicroBohr

class NanoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanobohr

alias of NanoBohr

Nanobohrs

alias of NanoBohr

class PicoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picobohr

alias of PicoBohr

Picobohrs

alias of PicoBohr

class FemtoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtobohr

alias of FemtoBohr

Femtobohrs

alias of FemtoBohr

class AttoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attobohr

alias of AttoBohr

Attobohrs

alias of AttoBohr

class ZeptoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptobohr

alias of ZeptoBohr

Zeptobohrs

alias of ZeptoBohr

class YoctoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctobohr

alias of YoctoBohr

Yoctobohrs

alias of YoctoBohr

AtomicUnitOfDistance

alias of Bohr

AtomicUnitsOfDistance

alias of Bohr

class YottaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAtomicUnitsOfDistance

alias of YottaAtomicUnitOfDistance

class ZettaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAtomicUnitsOfDistance

alias of ZettaAtomicUnitOfDistance

class ExaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAtomicUnitsOfDistance

alias of ExaAtomicUnitOfDistance

class PetaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAtomicUnitsOfDistance

alias of PetaAtomicUnitOfDistance

class TeraAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAtomicUnitsOfDistance

alias of TeraAtomicUnitOfDistance

class GigaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAtomicUnitsOfDistance

alias of GigaAtomicUnitOfDistance

class MegaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAtomicUnitsOfDistance

alias of MegaAtomicUnitOfDistance

class KiloAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAtomicUnitsOfDistance

alias of KiloAtomicUnitOfDistance

class HectoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAtomicUnitsOfDistance

alias of HectoAtomicUnitOfDistance

class DecaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAtomicUnitsOfDistance

alias of DecaAtomicUnitOfDistance

class DeciAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAtomicUnitsOfDistance

alias of DeciAtomicUnitOfDistance

class CentiAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAtomicUnitsOfDistance

alias of CentiAtomicUnitOfDistance

class MilliAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAtomicUnitsOfDistance

alias of MilliAtomicUnitOfDistance

class MicroAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAtomicUnitsOfDistance

alias of MicroAtomicUnitOfDistance

class NanoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAtomicUnitsOfDistance

alias of NanoAtomicUnitOfDistance

class PicoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAtomicUnitsOfDistance

alias of PicoAtomicUnitOfDistance

class FemtoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAtomicUnitsOfDistance

alias of FemtoAtomicUnitOfDistance

class AttoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAtomicUnitsOfDistance

alias of AttoAtomicUnitOfDistance

class ZeptoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAtomicUnitsOfDistance

alias of ZeptoAtomicUnitOfDistance

class YoctoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAtomicUnitsOfDistance

alias of YoctoAtomicUnitOfDistance

class Meter
Meters

alias of Meter

class YottaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottameter

alias of YottaMeter

Yottameters

alias of YottaMeter

class ZettaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettameter

alias of ZettaMeter

Zettameters

alias of ZettaMeter

class ExaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exameter

alias of ExaMeter

Exameters

alias of ExaMeter

class PetaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petameter

alias of PetaMeter

Petameters

alias of PetaMeter

class TeraMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terameter

alias of TeraMeter

Terameters

alias of TeraMeter

class GigaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigameter

alias of GigaMeter

Gigameters

alias of GigaMeter

class MegaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megameter

alias of MegaMeter

Megameters

alias of MegaMeter

class KiloMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilometer

alias of KiloMeter

Kilometers

alias of KiloMeter

class HectoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectometer

alias of HectoMeter

Hectometers

alias of HectoMeter

class DecaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decameter

alias of DecaMeter

Decameters

alias of DecaMeter

class DeciMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decimeter

alias of DeciMeter

Decimeters

alias of DeciMeter

class CentiMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centimeter

alias of CentiMeter

Centimeters

alias of CentiMeter

class MilliMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millimeter

alias of MilliMeter

Millimeters

alias of MilliMeter

class MicroMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Micrometer

alias of MicroMeter

Micrometers

alias of MicroMeter

class NanoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanometer

alias of NanoMeter

Nanometers

alias of NanoMeter

class PicoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picometer

alias of PicoMeter

Picometers

alias of PicoMeter

class FemtoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtometer

alias of FemtoMeter

Femtometers

alias of FemtoMeter

class AttoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attometer

alias of AttoMeter

Attometers

alias of AttoMeter

class ZeptoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptometer

alias of ZeptoMeter

Zeptometers

alias of ZeptoMeter

class YoctoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctometer

alias of YoctoMeter

Yoctometers

alias of YoctoMeter

class Degree
classmethod to(other)
Degrees

alias of Degree

class YottaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottadegree

alias of YottaDegree

Yottadegrees

alias of YottaDegree

class ZettaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettadegree

alias of ZettaDegree

Zettadegrees

alias of ZettaDegree

class ExaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exadegree

alias of ExaDegree

Exadegrees

alias of ExaDegree

class PetaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petadegree

alias of PetaDegree

Petadegrees

alias of PetaDegree

class TeraDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teradegree

alias of TeraDegree

Teradegrees

alias of TeraDegree

class GigaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigadegree

alias of GigaDegree

Gigadegrees

alias of GigaDegree

class MegaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megadegree

alias of MegaDegree

Megadegrees

alias of MegaDegree

class KiloDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilodegree

alias of KiloDegree

Kilodegrees

alias of KiloDegree

class HectoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectodegree

alias of HectoDegree

Hectodegrees

alias of HectoDegree

class DecaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decadegree

alias of DecaDegree

Decadegrees

alias of DecaDegree

class DeciDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decidegree

alias of DeciDegree

Decidegrees

alias of DeciDegree

class CentiDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centidegree

alias of CentiDegree

Centidegrees

alias of CentiDegree

class MilliDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millidegree

alias of MilliDegree

Millidegrees

alias of MilliDegree

class MicroDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microdegree

alias of MicroDegree

Microdegrees

alias of MicroDegree

class NanoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanodegree

alias of NanoDegree

Nanodegrees

alias of NanoDegree

class PicoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picodegree

alias of PicoDegree

Picodegrees

alias of PicoDegree

class FemtoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtodegree

alias of FemtoDegree

Femtodegrees

alias of FemtoDegree

class AttoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attodegree

alias of AttoDegree

Attodegrees

alias of AttoDegree

class ZeptoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptodegree

alias of ZeptoDegree

Zeptodegrees

alias of ZeptoDegree

class YoctoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctodegree

alias of YoctoDegree

Yoctodegrees

alias of YoctoDegree

class Radian
Radians

alias of Radian

class YottaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaradian

alias of YottaRadian

Yottaradians

alias of YottaRadian

class ZettaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaradian

alias of ZettaRadian

Zettaradians

alias of ZettaRadian

class ExaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaradian

alias of ExaRadian

Exaradians

alias of ExaRadian

class PetaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaradian

alias of PetaRadian

Petaradians

alias of PetaRadian

class TeraRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraradian

alias of TeraRadian

Teraradians

alias of TeraRadian

class GigaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaradian

alias of GigaRadian

Gigaradians

alias of GigaRadian

class MegaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaradian

alias of MegaRadian

Megaradians

alias of MegaRadian

class KiloRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloradian

alias of KiloRadian

Kiloradians

alias of KiloRadian

class HectoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoradian

alias of HectoRadian

Hectoradians

alias of HectoRadian

class DecaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaradian

alias of DecaRadian

Decaradians

alias of DecaRadian

class DeciRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciradian

alias of DeciRadian

Deciradians

alias of DeciRadian

class CentiRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiradian

alias of CentiRadian

Centiradians

alias of CentiRadian

class MilliRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliradian

alias of MilliRadian

Milliradians

alias of MilliRadian

class MicroRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microradian

alias of MicroRadian

Microradians

alias of MicroRadian

class NanoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoradian

alias of NanoRadian

Nanoradians

alias of NanoRadian

class PicoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoradian

alias of PicoRadian

Picoradians

alias of PicoRadian

class FemtoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoradian

alias of FemtoRadian

Femtoradians

alias of FemtoRadian

class AttoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoradian

alias of AttoRadian

Attoradians

alias of AttoRadian

class ZeptoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoradian

alias of ZeptoRadian

Zeptoradians

alias of ZeptoRadian

class YoctoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoradian

alias of YoctoRadian

Yoctoradians

alias of YoctoRadian

class Joule
classmethod to(other)
Joules

alias of Joule

class YottaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottajoule

alias of YottaJoule

Yottajoules

alias of YottaJoule

class ZettaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettajoule

alias of ZettaJoule

Zettajoules

alias of ZettaJoule

class ExaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exajoule

alias of ExaJoule

Exajoules

alias of ExaJoule

class PetaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petajoule

alias of PetaJoule

Petajoules

alias of PetaJoule

class TeraJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terajoule

alias of TeraJoule

Terajoules

alias of TeraJoule

class GigaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigajoule

alias of GigaJoule

Gigajoules

alias of GigaJoule

class MegaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megajoule

alias of MegaJoule

Megajoules

alias of MegaJoule

class KiloJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilojoule

alias of KiloJoule

Kilojoules

alias of KiloJoule

class HectoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectojoule

alias of HectoJoule

Hectojoules

alias of HectoJoule

class DecaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decajoule

alias of DecaJoule

Decajoules

alias of DecaJoule

class DeciJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decijoule

alias of DeciJoule

Decijoules

alias of DeciJoule

class CentiJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centijoule

alias of CentiJoule

Centijoules

alias of CentiJoule

class MilliJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millijoule

alias of MilliJoule

Millijoules

alias of MilliJoule

class MicroJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microjoule

alias of MicroJoule

Microjoules

alias of MicroJoule

class NanoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanojoule

alias of NanoJoule

Nanojoules

alias of NanoJoule

class PicoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picojoule

alias of PicoJoule

Picojoules

alias of PicoJoule

class FemtoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtojoule

alias of FemtoJoule

Femtojoules

alias of FemtoJoule

class AttoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attojoule

alias of AttoJoule

Attojoules

alias of AttoJoule

class ZeptoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptojoule

alias of ZeptoJoule

Zeptojoules

alias of ZeptoJoule

class YoctoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctojoule

alias of YoctoJoule

Yoctojoules

alias of YoctoJoule

class Wavenumber
Wavenumbers

alias of Wavenumber

class YottaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottawavenumber

alias of YottaWavenumber

Yottawavenumbers

alias of YottaWavenumber

class ZettaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettawavenumber

alias of ZettaWavenumber

Zettawavenumbers

alias of ZettaWavenumber

class ExaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exawavenumber

alias of ExaWavenumber

Exawavenumbers

alias of ExaWavenumber

class PetaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petawavenumber

alias of PetaWavenumber

Petawavenumbers

alias of PetaWavenumber

class TeraWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terawavenumber

alias of TeraWavenumber

Terawavenumbers

alias of TeraWavenumber

class GigaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigawavenumber

alias of GigaWavenumber

Gigawavenumbers

alias of GigaWavenumber

class MegaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megawavenumber

alias of MegaWavenumber

Megawavenumbers

alias of MegaWavenumber

class KiloWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilowavenumber

alias of KiloWavenumber

Kilowavenumbers

alias of KiloWavenumber

class HectoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectowavenumber

alias of HectoWavenumber

Hectowavenumbers

alias of HectoWavenumber

class DecaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decawavenumber

alias of DecaWavenumber

Decawavenumbers

alias of DecaWavenumber

class DeciWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciwavenumber

alias of DeciWavenumber

Deciwavenumbers

alias of DeciWavenumber

class CentiWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiwavenumber

alias of CentiWavenumber

Centiwavenumbers

alias of CentiWavenumber

class MilliWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliwavenumber

alias of MilliWavenumber

Milliwavenumbers

alias of MilliWavenumber

class MicroWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microwavenumber

alias of MicroWavenumber

Microwavenumbers

alias of MicroWavenumber

class NanoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanowavenumber

alias of NanoWavenumber

Nanowavenumbers

alias of NanoWavenumber

class PicoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picowavenumber

alias of PicoWavenumber

Picowavenumbers

alias of PicoWavenumber

class FemtoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtowavenumber

alias of FemtoWavenumber

Femtowavenumbers

alias of FemtoWavenumber

class AttoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attowavenumber

alias of AttoWavenumber

Attowavenumbers

alias of AttoWavenumber

class ZeptoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptowavenumber

alias of ZeptoWavenumber

Zeptowavenumbers

alias of ZeptoWavenumber

class YoctoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctowavenumber

alias of YoctoWavenumber

Yoctowavenumbers

alias of YoctoWavenumber

class ElectronVolt
ElectronVolts

alias of ElectronVolt

class YottaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class ElectronVolt
class Hertz
Hertzs

alias of Hertz

class YottaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottahertz

alias of YottaHertz

Yottahertzs

alias of YottaHertz

class ZettaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettahertz

alias of ZettaHertz

Zettahertzs

alias of ZettaHertz

class ExaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exahertz

alias of ExaHertz

Exahertzs

alias of ExaHertz

class PetaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petahertz

alias of PetaHertz

Petahertzs

alias of PetaHertz

class TeraHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terahertz

alias of TeraHertz

Terahertzs

alias of TeraHertz

class GigaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigahertz

alias of GigaHertz

Gigahertzs

alias of GigaHertz

class MegaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megahertz

alias of MegaHertz

Megahertzs

alias of MegaHertz

class KiloHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilohertz

alias of KiloHertz

Kilohertzs

alias of KiloHertz

class HectoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectohertz

alias of HectoHertz

Hectohertzs

alias of HectoHertz

class DecaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decahertz

alias of DecaHertz

Decahertzs

alias of DecaHertz

class DeciHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decihertz

alias of DeciHertz

Decihertzs

alias of DeciHertz

class CentiHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centihertz

alias of CentiHertz

Centihertzs

alias of CentiHertz

class MilliHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millihertz

alias of MilliHertz

Millihertzs

alias of MilliHertz

class MicroHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microhertz

alias of MicroHertz

Microhertzs

alias of MicroHertz

class NanoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanohertz

alias of NanoHertz

Nanohertzs

alias of NanoHertz

class PicoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picohertz

alias of PicoHertz

Picohertzs

alias of PicoHertz

class FemtoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtohertz

alias of FemtoHertz

Femtohertzs

alias of FemtoHertz

class AttoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attohertz

alias of AttoHertz

Attohertzs

alias of AttoHertz

class ZeptoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptohertz

alias of ZeptoHertz

Zeptohertzs

alias of ZeptoHertz

class YoctoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctohertz

alias of YoctoHertz

Yoctohertzs

alias of YoctoHertz

class Hertz
class Hartree
Hartrees

alias of Hartree

class YottaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottahartree

alias of YottaHartree

Yottahartrees

alias of YottaHartree

class ZettaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettahartree

alias of ZettaHartree

Zettahartrees

alias of ZettaHartree

class ExaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exahartree

alias of ExaHartree

Exahartrees

alias of ExaHartree

class PetaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petahartree

alias of PetaHartree

Petahartrees

alias of PetaHartree

class TeraHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terahartree

alias of TeraHartree

Terahartrees

alias of TeraHartree

class GigaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigahartree

alias of GigaHartree

Gigahartrees

alias of GigaHartree

class MegaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megahartree

alias of MegaHartree

Megahartrees

alias of MegaHartree

class KiloHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilohartree

alias of KiloHartree

Kilohartrees

alias of KiloHartree

class HectoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectohartree

alias of HectoHartree

Hectohartrees

alias of HectoHartree

class DecaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decahartree

alias of DecaHartree

Decahartrees

alias of DecaHartree

class DeciHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decihartree

alias of DeciHartree

Decihartrees

alias of DeciHartree

class CentiHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centihartree

alias of CentiHartree

Centihartrees

alias of CentiHartree

class MilliHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millihartree

alias of MilliHartree

Millihartrees

alias of MilliHartree

class MicroHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microhartree

alias of MicroHartree

Microhartrees

alias of MicroHartree

class NanoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanohartree

alias of NanoHartree

Nanohartrees

alias of NanoHartree

class PicoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picohartree

alias of PicoHartree

Picohartrees

alias of PicoHartree

class FemtoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtohartree

alias of FemtoHartree

Femtohartrees

alias of FemtoHartree

class AttoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attohartree

alias of AttoHartree

Attohartrees

alias of AttoHartree

class ZeptoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptohartree

alias of ZeptoHartree

Zeptohartrees

alias of ZeptoHartree

class YoctoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctohartree

alias of YoctoHartree

Yoctohartrees

alias of YoctoHartree

class Hartree
AtomicUnitOfEnergy

alias of Hartree

AtomicUnitsOfEnergy

alias of Hartree

class YottaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAtomicUnitsOfEnergy

alias of YottaAtomicUnitOfEnergy

class ZettaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAtomicUnitsOfEnergy

alias of ZettaAtomicUnitOfEnergy

class ExaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAtomicUnitsOfEnergy

alias of ExaAtomicUnitOfEnergy

class PetaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAtomicUnitsOfEnergy

alias of PetaAtomicUnitOfEnergy

class TeraAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAtomicUnitsOfEnergy

alias of TeraAtomicUnitOfEnergy

class GigaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAtomicUnitsOfEnergy

alias of GigaAtomicUnitOfEnergy

class MegaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAtomicUnitsOfEnergy

alias of MegaAtomicUnitOfEnergy

class KiloAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAtomicUnitsOfEnergy

alias of KiloAtomicUnitOfEnergy

class HectoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAtomicUnitsOfEnergy

alias of HectoAtomicUnitOfEnergy

class DecaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAtomicUnitsOfEnergy

alias of DecaAtomicUnitOfEnergy

class DeciAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAtomicUnitsOfEnergy

alias of DeciAtomicUnitOfEnergy

class CentiAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAtomicUnitsOfEnergy

alias of CentiAtomicUnitOfEnergy

class MilliAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAtomicUnitsOfEnergy

alias of MilliAtomicUnitOfEnergy

class MicroAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAtomicUnitsOfEnergy

alias of MicroAtomicUnitOfEnergy

class NanoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAtomicUnitsOfEnergy

alias of NanoAtomicUnitOfEnergy

class PicoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAtomicUnitsOfEnergy

alias of PicoAtomicUnitOfEnergy

class FemtoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAtomicUnitsOfEnergy

alias of FemtoAtomicUnitOfEnergy

class AttoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAtomicUnitsOfEnergy

alias of AttoAtomicUnitOfEnergy

class ZeptoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAtomicUnitsOfEnergy

alias of ZeptoAtomicUnitOfEnergy

class YoctoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAtomicUnitsOfEnergy

alias of YoctoAtomicUnitOfEnergy

class KiloCaloriePerMol
KiloCaloriePerMols

alias of KiloCaloriePerMol

class KiloCaloriePerMol
KiloCaloriePerMole

alias of KiloCaloriePerMol

KiloCaloriesPerMol

alias of KiloCaloriePerMol

KCalPerMol

alias of KiloCaloriePerMol

KCalsPerMol

alias of KiloCaloriePerMol

KcalPerMol

alias of KiloCaloriePerMol

KcalsPerMol

alias of KiloCaloriePerMol

class KiloJoulePerMol
KiloJoulesPerMol

alias of KiloJoulePerMol

class KiloJoulePerMol
KJPerMol

alias of KiloJoulePerMol

KilojoulesPerMole

alias of KiloJoulePerMol

KilojoulesPerMoles

alias of KiloJoulePerMol

class Second
classmethod to(other)
Seconds

alias of Second

class YottaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottasecond

alias of YottaSecond

Yottaseconds

alias of YottaSecond

class ZettaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettasecond

alias of ZettaSecond

Zettaseconds

alias of ZettaSecond

class ExaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exasecond

alias of ExaSecond

Exaseconds

alias of ExaSecond

class PetaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petasecond

alias of PetaSecond

Petaseconds

alias of PetaSecond

class TeraSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terasecond

alias of TeraSecond

Teraseconds

alias of TeraSecond

class GigaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigasecond

alias of GigaSecond

Gigaseconds

alias of GigaSecond

class MegaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megasecond

alias of MegaSecond

Megaseconds

alias of MegaSecond

class KiloSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilosecond

alias of KiloSecond

Kiloseconds

alias of KiloSecond

class HectoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectosecond

alias of HectoSecond

Hectoseconds

alias of HectoSecond

class DecaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decasecond

alias of DecaSecond

Decaseconds

alias of DecaSecond

class DeciSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decisecond

alias of DeciSecond

Deciseconds

alias of DeciSecond

class CentiSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centisecond

alias of CentiSecond

Centiseconds

alias of CentiSecond

class MilliSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millisecond

alias of MilliSecond

Milliseconds

alias of MilliSecond

class MicroSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microsecond

alias of MicroSecond

Microseconds

alias of MicroSecond

class NanoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanosecond

alias of NanoSecond

Nanoseconds

alias of NanoSecond

class PicoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picosecond

alias of PicoSecond

Picoseconds

alias of PicoSecond

class FemtoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtosecond

alias of FemtoSecond

Femtoseconds

alias of FemtoSecond

class AttoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attosecond

alias of AttoSecond

Attoseconds

alias of AttoSecond

class ZeptoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptosecond

alias of ZeptoSecond

Zeptoseconds

alias of ZeptoSecond

class YoctoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctosecond

alias of YoctoSecond

Yoctoseconds

alias of YoctoSecond

class AtomicUnitOfTime
AtomicUnitsOfTime

alias of AtomicUnitOfTime

class YottaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class AtomicUnitOfTime
class Minute
Minutes

alias of Minute

class YottaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaminute

alias of YottaMinute

Yottaminutes

alias of YottaMinute

class ZettaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaminute

alias of ZettaMinute

Zettaminutes

alias of ZettaMinute

class ExaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Examinute

alias of ExaMinute

Examinutes

alias of ExaMinute

class PetaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaminute

alias of PetaMinute

Petaminutes

alias of PetaMinute

class TeraMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraminute

alias of TeraMinute

Teraminutes

alias of TeraMinute

class GigaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaminute

alias of GigaMinute

Gigaminutes

alias of GigaMinute

class MegaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaminute

alias of MegaMinute

Megaminutes

alias of MegaMinute

class KiloMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilominute

alias of KiloMinute

Kilominutes

alias of KiloMinute

class HectoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectominute

alias of HectoMinute

Hectominutes

alias of HectoMinute

class DecaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaminute

alias of DecaMinute

Decaminutes

alias of DecaMinute

class DeciMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciminute

alias of DeciMinute

Deciminutes

alias of DeciMinute

class CentiMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiminute

alias of CentiMinute

Centiminutes

alias of CentiMinute

class MilliMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliminute

alias of MilliMinute

Milliminutes

alias of MilliMinute

class MicroMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microminute

alias of MicroMinute

Microminutes

alias of MicroMinute

class NanoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanominute

alias of NanoMinute

Nanominutes

alias of NanoMinute

class PicoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picominute

alias of PicoMinute

Picominutes

alias of PicoMinute

class FemtoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtominute

alias of FemtoMinute

Femtominutes

alias of FemtoMinute

class AttoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attominute

alias of AttoMinute

Attominutes

alias of AttoMinute

class ZeptoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptominute

alias of ZeptoMinute

Zeptominutes

alias of ZeptoMinute

class YoctoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctominute

alias of YoctoMinute

Yoctominutes

alias of YoctoMinute

class Minute
class Hour
Hours

alias of Hour

class YottaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottahour

alias of YottaHour

Yottahours

alias of YottaHour

class ZettaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettahour

alias of ZettaHour

Zettahours

alias of ZettaHour

class ExaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exahour

alias of ExaHour

Exahours

alias of ExaHour

class PetaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petahour

alias of PetaHour

Petahours

alias of PetaHour

class TeraHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terahour

alias of TeraHour

Terahours

alias of TeraHour

class GigaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigahour

alias of GigaHour

Gigahours

alias of GigaHour

class MegaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megahour

alias of MegaHour

Megahours

alias of MegaHour

class KiloHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilohour

alias of KiloHour

Kilohours

alias of KiloHour

class HectoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectohour

alias of HectoHour

Hectohours

alias of HectoHour

class DecaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decahour

alias of DecaHour

Decahours

alias of DecaHour

class DeciHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decihour

alias of DeciHour

Decihours

alias of DeciHour

class CentiHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centihour

alias of CentiHour

Centihours

alias of CentiHour

class MilliHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millihour

alias of MilliHour

Millihours

alias of MilliHour

class MicroHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microhour

alias of MicroHour

Microhours

alias of MicroHour

class NanoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanohour

alias of NanoHour

Nanohours

alias of NanoHour

class PicoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picohour

alias of PicoHour

Picohours

alias of PicoHour

class FemtoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtohour

alias of FemtoHour

Femtohours

alias of FemtoHour

class AttoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attohour

alias of AttoHour

Attohours

alias of AttoHour

class ZeptoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptohour

alias of ZeptoHour

Zeptohours

alias of ZeptoHour

class YoctoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctohour

alias of YoctoHour

Yoctohours

alias of YoctoHour

class Hour
class Day
Days

alias of Day

class YottaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaday

alias of YottaDay

Yottadays

alias of YottaDay

class ZettaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaday

alias of ZettaDay

Zettadays

alias of ZettaDay

class ExaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaday

alias of ExaDay

Exadays

alias of ExaDay

class PetaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaday

alias of PetaDay

Petadays

alias of PetaDay

class TeraDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraday

alias of TeraDay

Teradays

alias of TeraDay

class GigaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaday

alias of GigaDay

Gigadays

alias of GigaDay

class MegaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaday

alias of MegaDay

Megadays

alias of MegaDay

class KiloDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloday

alias of KiloDay

Kilodays

alias of KiloDay

class HectoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoday

alias of HectoDay

Hectodays

alias of HectoDay

class DecaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaday

alias of DecaDay

Decadays

alias of DecaDay

class DeciDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciday

alias of DeciDay

Decidays

alias of DeciDay

class CentiDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiday

alias of CentiDay

Centidays

alias of CentiDay

class MilliDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliday

alias of MilliDay

Millidays

alias of MilliDay

class MicroDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microday

alias of MicroDay

Microdays

alias of MicroDay

class NanoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoday

alias of NanoDay

Nanodays

alias of NanoDay

class PicoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoday

alias of PicoDay

Picodays

alias of PicoDay

class FemtoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoday

alias of FemtoDay

Femtodays

alias of FemtoDay

class AttoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoday

alias of AttoDay

Attodays

alias of AttoDay

class ZeptoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoday

alias of ZeptoDay

Zeptodays

alias of ZeptoDay

class YoctoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoday

alias of YoctoDay

Yoctodays

alias of YoctoDay

class Day
class Week
Weeks

alias of Week

class YottaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaweek

alias of YottaWeek

Yottaweeks

alias of YottaWeek

class ZettaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaweek

alias of ZettaWeek

Zettaweeks

alias of ZettaWeek

class ExaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaweek

alias of ExaWeek

Exaweeks

alias of ExaWeek

class PetaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaweek

alias of PetaWeek

Petaweeks

alias of PetaWeek

class TeraWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraweek

alias of TeraWeek

Teraweeks

alias of TeraWeek

class GigaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaweek

alias of GigaWeek

Gigaweeks

alias of GigaWeek

class MegaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaweek

alias of MegaWeek

Megaweeks

alias of MegaWeek

class KiloWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloweek

alias of KiloWeek

Kiloweeks

alias of KiloWeek

class HectoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoweek

alias of HectoWeek

Hectoweeks

alias of HectoWeek

class DecaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaweek

alias of DecaWeek

Decaweeks

alias of DecaWeek

class DeciWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciweek

alias of DeciWeek

Deciweeks

alias of DeciWeek

class CentiWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiweek

alias of CentiWeek

Centiweeks

alias of CentiWeek

class MilliWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliweek

alias of MilliWeek

Milliweeks

alias of MilliWeek

class MicroWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microweek

alias of MicroWeek

Microweeks

alias of MicroWeek

class NanoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoweek

alias of NanoWeek

Nanoweeks

alias of NanoWeek

class PicoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoweek

alias of PicoWeek

Picoweeks

alias of PicoWeek

class FemtoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoweek

alias of FemtoWeek

Femtoweeks

alias of FemtoWeek

class AttoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoweek

alias of AttoWeek

Attoweeks

alias of AttoWeek

class ZeptoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoweek

alias of ZeptoWeek

Zeptoweeks

alias of ZeptoWeek

class YoctoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoweek

alias of YoctoWeek

Yoctoweeks

alias of YoctoWeek

class Week
class Year
Years

alias of Year

class YottaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottayear

alias of YottaYear

Yottayears

alias of YottaYear

class ZettaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettayear

alias of ZettaYear

Zettayears

alias of ZettaYear

class ExaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exayear

alias of ExaYear

Exayears

alias of ExaYear

class PetaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petayear

alias of PetaYear

Petayears

alias of PetaYear

class TeraYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Terayear

alias of TeraYear

Terayears

alias of TeraYear

class GigaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigayear

alias of GigaYear

Gigayears

alias of GigaYear

class MegaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megayear

alias of MegaYear

Megayears

alias of MegaYear

class KiloYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloyear

alias of KiloYear

Kiloyears

alias of KiloYear

class HectoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoyear

alias of HectoYear

Hectoyears

alias of HectoYear

class DecaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decayear

alias of DecaYear

Decayears

alias of DecaYear

class DeciYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciyear

alias of DeciYear

Deciyears

alias of DeciYear

class CentiYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiyear

alias of CentiYear

Centiyears

alias of CentiYear

class MilliYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliyear

alias of MilliYear

Milliyears

alias of MilliYear

class MicroYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microyear

alias of MicroYear

Microyears

alias of MicroYear

class NanoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoyear

alias of NanoYear

Nanoyears

alias of NanoYear

class PicoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoyear

alias of PicoYear

Picoyears

alias of PicoYear

class FemtoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoyear

alias of FemtoYear

Femtoyears

alias of FemtoYear

class AttoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoyear

alias of AttoYear

Attoyears

alias of AttoYear

class ZeptoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoyear

alias of ZeptoYear

Zeptoyears

alias of ZeptoYear

class YoctoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoyear

alias of YoctoYear

Yoctoyears

alias of YoctoYear

class Year
class Decade
Decades

alias of Decade

class YottaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottadecade

alias of YottaDecade

Yottadecades

alias of YottaDecade

class ZettaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettadecade

alias of ZettaDecade

Zettadecades

alias of ZettaDecade

class ExaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exadecade

alias of ExaDecade

Exadecades

alias of ExaDecade

class PetaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petadecade

alias of PetaDecade

Petadecades

alias of PetaDecade

class TeraDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teradecade

alias of TeraDecade

Teradecades

alias of TeraDecade

class GigaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigadecade

alias of GigaDecade

Gigadecades

alias of GigaDecade

class MegaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megadecade

alias of MegaDecade

Megadecades

alias of MegaDecade

class KiloDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilodecade

alias of KiloDecade

Kilodecades

alias of KiloDecade

class HectoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectodecade

alias of HectoDecade

Hectodecades

alias of HectoDecade

class DecaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decadecade

alias of DecaDecade

Decadecades

alias of DecaDecade

class DeciDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decidecade

alias of DeciDecade

Decidecades

alias of DeciDecade

class CentiDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centidecade

alias of CentiDecade

Centidecades

alias of CentiDecade

class MilliDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millidecade

alias of MilliDecade

Millidecades

alias of MilliDecade

class MicroDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microdecade

alias of MicroDecade

Microdecades

alias of MicroDecade

class NanoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanodecade

alias of NanoDecade

Nanodecades

alias of NanoDecade

class PicoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picodecade

alias of PicoDecade

Picodecades

alias of PicoDecade

class FemtoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtodecade

alias of FemtoDecade

Femtodecades

alias of FemtoDecade

class AttoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attodecade

alias of AttoDecade

Attodecades

alias of AttoDecade

class ZeptoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptodecade

alias of ZeptoDecade

Zeptodecades

alias of ZeptoDecade

class YoctoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctodecade

alias of YoctoDecade

Yoctodecades

alias of YoctoDecade

class Decade
class Century
Centuries

alias of Century

class YottaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottacentury

alias of YottaCentury

Yottacenturies

alias of YottaCentury

class ZettaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettacentury

alias of ZettaCentury

Zettacenturies

alias of ZettaCentury

class ExaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exacentury

alias of ExaCentury

Exacenturies

alias of ExaCentury

class PetaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petacentury

alias of PetaCentury

Petacenturies

alias of PetaCentury

class TeraCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teracentury

alias of TeraCentury

Teracenturies

alias of TeraCentury

class GigaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigacentury

alias of GigaCentury

Gigacenturies

alias of GigaCentury

class MegaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megacentury

alias of MegaCentury

Megacenturies

alias of MegaCentury

class KiloCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilocentury

alias of KiloCentury

Kilocenturies

alias of KiloCentury

class HectoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectocentury

alias of HectoCentury

Hectocenturies

alias of HectoCentury

class DecaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decacentury

alias of DecaCentury

Decacenturies

alias of DecaCentury

class DeciCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decicentury

alias of DeciCentury

Decicenturies

alias of DeciCentury

class CentiCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centicentury

alias of CentiCentury

Centicenturies

alias of CentiCentury

class MilliCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millicentury

alias of MilliCentury

Millicenturies

alias of MilliCentury

class MicroCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microcentury

alias of MicroCentury

Microcenturies

alias of MicroCentury

class NanoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanocentury

alias of NanoCentury

Nanocenturies

alias of NanoCentury

class PicoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picocentury

alias of PicoCentury

Picocenturies

alias of PicoCentury

class FemtoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtocentury

alias of FemtoCentury

Femtocenturies

alias of FemtoCentury

class AttoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attocentury

alias of AttoCentury

Attocenturies

alias of AttoCentury

class ZeptoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptocentury

alias of ZeptoCentury

Zeptocenturies

alias of ZeptoCentury

class YoctoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctocentury

alias of YoctoCentury

Yoctocenturies

alias of YoctoCentury

class Century
class Millennium
Millennia

alias of Millennium

class YottaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottamillennium

alias of YottaMillennium

Yottamillennia

alias of YottaMillennium

class ZettaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettamillennium

alias of ZettaMillennium

Zettamillennia

alias of ZettaMillennium

class ExaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Examillennium

alias of ExaMillennium

Examillennia

alias of ExaMillennium

class PetaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petamillennium

alias of PetaMillennium

Petamillennia

alias of PetaMillennium

class TeraMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teramillennium

alias of TeraMillennium

Teramillennia

alias of TeraMillennium

class GigaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigamillennium

alias of GigaMillennium

Gigamillennia

alias of GigaMillennium

class MegaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megamillennium

alias of MegaMillennium

Megamillennia

alias of MegaMillennium

class KiloMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilomillennium

alias of KiloMillennium

Kilomillennia

alias of KiloMillennium

class HectoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectomillennium

alias of HectoMillennium

Hectomillennia

alias of HectoMillennium

class DecaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decamillennium

alias of DecaMillennium

Decamillennia

alias of DecaMillennium

class DeciMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decimillennium

alias of DeciMillennium

Decimillennia

alias of DeciMillennium

class CentiMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centimillennium

alias of CentiMillennium

Centimillennia

alias of CentiMillennium

class MilliMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millimillennium

alias of MilliMillennium

Millimillennia

alias of MilliMillennium

class MicroMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Micromillennium

alias of MicroMillennium

Micromillennia

alias of MicroMillennium

class NanoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanomillennium

alias of NanoMillennium

Nanomillennia

alias of NanoMillennium

class PicoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picomillennium

alias of PicoMillennium

Picomillennia

alias of PicoMillennium

class FemtoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtomillennium

alias of FemtoMillennium

Femtomillennia

alias of FemtoMillennium

class AttoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attomillennium

alias of AttoMillennium

Attomillennia

alias of AttoMillennium

class ZeptoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptomillennium

alias of ZeptoMillennium

Zeptomillennia

alias of ZeptoMillennium

class YoctoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctomillennium

alias of YoctoMillennium

Yoctomillennia

alias of YoctoMillennium

class Millennium
class Coulomb
classmethod to(other)
Coulombs

alias of Coulomb

class YottaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottacoulomb

alias of YottaCoulomb

Yottacoulombs

alias of YottaCoulomb

class ZettaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettacoulomb

alias of ZettaCoulomb

Zettacoulombs

alias of ZettaCoulomb

class ExaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exacoulomb

alias of ExaCoulomb

Exacoulombs

alias of ExaCoulomb

class PetaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petacoulomb

alias of PetaCoulomb

Petacoulombs

alias of PetaCoulomb

class TeraCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teracoulomb

alias of TeraCoulomb

Teracoulombs

alias of TeraCoulomb

class GigaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigacoulomb

alias of GigaCoulomb

Gigacoulombs

alias of GigaCoulomb

class MegaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megacoulomb

alias of MegaCoulomb

Megacoulombs

alias of MegaCoulomb

class KiloCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilocoulomb

alias of KiloCoulomb

Kilocoulombs

alias of KiloCoulomb

class HectoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectocoulomb

alias of HectoCoulomb

Hectocoulombs

alias of HectoCoulomb

class DecaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decacoulomb

alias of DecaCoulomb

Decacoulombs

alias of DecaCoulomb

class DeciCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decicoulomb

alias of DeciCoulomb

Decicoulombs

alias of DeciCoulomb

class CentiCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centicoulomb

alias of CentiCoulomb

Centicoulombs

alias of CentiCoulomb

class MilliCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Millicoulomb

alias of MilliCoulomb

Millicoulombs

alias of MilliCoulomb

class MicroCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microcoulomb

alias of MicroCoulomb

Microcoulombs

alias of MicroCoulomb

class NanoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanocoulomb

alias of NanoCoulomb

Nanocoulombs

alias of NanoCoulomb

class PicoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picocoulomb

alias of PicoCoulomb

Picocoulombs

alias of PicoCoulomb

class FemtoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtocoulomb

alias of FemtoCoulomb

Femtocoulombs

alias of FemtoCoulomb

class AttoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attocoulomb

alias of AttoCoulomb

Attocoulombs

alias of AttoCoulomb

class ZeptoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptocoulomb

alias of ZeptoCoulomb

Zeptocoulombs

alias of ZeptoCoulomb

class YoctoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctocoulomb

alias of YoctoCoulomb

Yoctocoulombs

alias of YoctoCoulomb

class AtomicUnitOfElectricCharge
AtomicUnitsOfElectricCharge

alias of AtomicUnitOfElectricCharge

class YottaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class AtomicUnitOfElectricCharge
AtomicUnitOfCharge

alias of AtomicUnitOfElectricCharge

AtomicUnitsOfCharge

alias of AtomicUnitOfElectricCharge

class YottaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAtomicUnitsOfCharge

alias of YottaAtomicUnitOfCharge

class ZettaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAtomicUnitsOfCharge

alias of ZettaAtomicUnitOfCharge

class ExaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAtomicUnitsOfCharge

alias of ExaAtomicUnitOfCharge

class PetaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAtomicUnitsOfCharge

alias of PetaAtomicUnitOfCharge

class TeraAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAtomicUnitsOfCharge

alias of TeraAtomicUnitOfCharge

class GigaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAtomicUnitsOfCharge

alias of GigaAtomicUnitOfCharge

class MegaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAtomicUnitsOfCharge

alias of MegaAtomicUnitOfCharge

class KiloAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAtomicUnitsOfCharge

alias of KiloAtomicUnitOfCharge

class HectoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAtomicUnitsOfCharge

alias of HectoAtomicUnitOfCharge

class DecaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAtomicUnitsOfCharge

alias of DecaAtomicUnitOfCharge

class DeciAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAtomicUnitsOfCharge

alias of DeciAtomicUnitOfCharge

class CentiAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAtomicUnitsOfCharge

alias of CentiAtomicUnitOfCharge

class MilliAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAtomicUnitsOfCharge

alias of MilliAtomicUnitOfCharge

class MicroAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAtomicUnitsOfCharge

alias of MicroAtomicUnitOfCharge

class NanoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAtomicUnitsOfCharge

alias of NanoAtomicUnitOfCharge

class PicoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAtomicUnitsOfCharge

alias of PicoAtomicUnitOfCharge

class FemtoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAtomicUnitsOfCharge

alias of FemtoAtomicUnitOfCharge

class AttoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAtomicUnitsOfCharge

alias of AttoAtomicUnitOfCharge

class ZeptoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAtomicUnitsOfCharge

alias of ZeptoAtomicUnitOfCharge

class YoctoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAtomicUnitsOfCharge

alias of YoctoAtomicUnitOfCharge

class Gram
classmethod to(other)
Grams

alias of Gram

class YottaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottagram

alias of YottaGram

Yottagrams

alias of YottaGram

class ZettaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettagram

alias of ZettaGram

Zettagrams

alias of ZettaGram

class ExaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exagram

alias of ExaGram

Exagrams

alias of ExaGram

class PetaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petagram

alias of PetaGram

Petagrams

alias of PetaGram

class TeraGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teragram

alias of TeraGram

Teragrams

alias of TeraGram

class GigaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigagram

alias of GigaGram

Gigagrams

alias of GigaGram

class MegaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megagram

alias of MegaGram

Megagrams

alias of MegaGram

class KiloGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kilogram

alias of KiloGram

Kilograms

alias of KiloGram

class HectoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectogram

alias of HectoGram

Hectograms

alias of HectoGram

class DecaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decagram

alias of DecaGram

Decagrams

alias of DecaGram

class DeciGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Decigram

alias of DeciGram

Decigrams

alias of DeciGram

class CentiGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centigram

alias of CentiGram

Centigrams

alias of CentiGram

class MilliGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milligram

alias of MilliGram

Milligrams

alias of MilliGram

class MicroGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microgram

alias of MicroGram

Micrograms

alias of MicroGram

class NanoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanogram

alias of NanoGram

Nanograms

alias of NanoGram

class PicoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picogram

alias of PicoGram

Picograms

alias of PicoGram

class FemtoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtogram

alias of FemtoGram

Femtograms

alias of FemtoGram

class AttoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attogram

alias of AttoGram

Attograms

alias of AttoGram

class ZeptoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptogram

alias of ZeptoGram

Zeptograms

alias of ZeptoGram

class YoctoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctogram

alias of YoctoGram

Yoctograms

alias of YoctoGram

class AtomicMassUnit
AtomicMassUnits

alias of AtomicMassUnit

class YottaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
AMU

alias of AtomicMassUnit

AMUs

alias of AtomicMassUnit

class YottaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAMUs

alias of YottaAMU

class ZettaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAMUs

alias of ZettaAMU

class ExaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAMUs

alias of ExaAMU

class PetaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAMUs

alias of PetaAMU

class TeraAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAMUs

alias of TeraAMU

class GigaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAMUs

alias of GigaAMU

class MegaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAMUs

alias of MegaAMU

class KiloAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAMUs

alias of KiloAMU

class HectoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAMUs

alias of HectoAMU

class DecaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAMUs

alias of DecaAMU

class DeciAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAMUs

alias of DeciAMU

class CentiAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAMUs

alias of CentiAMU

class MilliAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAMUs

alias of MilliAMU

class MicroAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAMUs

alias of MicroAMU

class NanoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAMUs

alias of NanoAMU

class PicoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAMUs

alias of PicoAMU

class FemtoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAMUs

alias of FemtoAMU

class AttoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAMUs

alias of AttoAMU

class ZeptoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAMUs

alias of ZeptoAMU

class YoctoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAMUs

alias of YoctoAMU

class AtomicUnitOfMass
AtomicUnitsOfMass

alias of AtomicUnitOfMass

class YottaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class ZettaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ExaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class PetaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class TeraAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class GigaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class MegaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class KiloAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class HectoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class DecaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DeciAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class CentiAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class MilliAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MicroAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class NanoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class PicoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class FemtoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class AttoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class ZeptoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class YoctoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class CompositeUnit(numer_units_or_composed, denom_units=None, coeff=1.0)

A class for composite units, e.g. Joules/Angstrom^2

coefficient = 1.0
composed = None
genre

Analog of Unit.genre. Always returns CompositeUnit

name

The name of the composite unit, as a product of base units

reduced(using_units=None)

Reduce the composite unit into the fewest base units possible.

Examples :
>>> from grendel.util.units import *
>>> (Angstroms**2/Bohr).reduced()
(1.88972612457 Angstrom)
>>> (Degree / (Bohr**2)).reduced()
Degree / Bohr**2
>>> (Degree / (Bohr*Meter)).reduced()
(5.2917721092e-11 Degree / Bohr**2)
to()
exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

exception UnknownUnitError(unit1)

Exception for attempted conversion of something that is not a subclass of Unit

exception UnitizedObjectError

For errors encountered in handling unitized objects

hasunits(*fargs, **fkeywords)

Alias for has_units()

has_units(obj)

Aliased as hasunits()

strip_units
Strips the units off of a unitized object
(or, if the object is not Unitized, just return it). If convert_to is given, convert to these units if obj is Unitized. If assume_units is given, obj is assumed to have the units given by this argument if (and only if) it is not an instance of Unitized.

Aliased as stripunits()

stripunits(*fargs, **fkeywords)

Alias for strip_units()

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception MoleculeNotFoundError(identifier, value, url)

Raised when a function within the web_getter module cannot find a molecule with the given identifier.

I_ll(nballs, nboxes, labels)
I_llbar(nballs, nboxes, labels)
I_lu(nballs, nboxes, labels)
I_lubar(nballs, nboxes, labels)
I_ul(nballs, nboxes, labels)
I_ulbar(nballs, nboxes, labels)
I_uu(nballs, nboxes, labels)
I_uubar(nballs, nboxes, labels)
class Iterable
class Iterator
next()

Return the next item from the iterator. When exhausted, raise StopIteration

all_partitions_iter(sequence, length, allow_zero=True)

Iterate over all possible partitions of a sequence

Examples :
brace_notation_iter(sequence_of_sequences)

This iterates over the brace notation combinations from Allen, et al. Mol. Phys. 89 (1996), 1213-1221 See the explanation of its funtion therein. This is needed for the arbitrary order B tensor formulae.

Examples :
>>> [tuple(''.join(part) for part in parts) for parts in brace_notation_iter(['AB', 'C', 'D'])]
[('AB', 'C', 'D'), ('AC', 'B', 'D'), ('AD', 'B', 'C'), ('BC', 'A', 'D'), ('BD', 'A', 'C'), ('CD', 'A', 'B')]
class chain

chain(*iterables) –> chain object

Return a chain object whose .next() method returns elements from the first iterable until it is exhausted, then elements from the next iterable, until all of the iterables are exhausted.

static from_iterable()

chain.from_iterable(iterable) –> chain object

Alternate chain() contructor taking a single iterable argument that evaluates lazily.

next

x.next() -> the next value, or raise StopIteration

class combinations_with_replacement

combinations_with_replacement(iterable, r) –> combinations_with_replacement object

Return successive r-length combinations of elements in the iterable allowing individual elements to have successive repeats. combinations_with_replacement(‘ABC’, 2) –> AA AB AC BB BC CC

next

x.next() -> the next value, or raise StopIteration

cummulative_sum(iterable, initial_value=0, op=<built-in function add>)

Iterate over the progressive cumulative sum of the items in the iterable.

Examples :
>>> [i for i in cummulative_sum(xrange(6))]
[0, 1, 3, 6, 10, 15]
>>> [a for a in cummulative_sum('ABCD', '')]
['A', 'AB', 'ABC', 'ABCD']
>>> [a for a in cummulative_sum(cummulative_sum('ABCD', ''), '')]
['A', 'AAB', 'AABABC', 'AABABCABCD']
>>> [i for i in cummulative_sum(xrange(1,6), 1, op=operator.mul)]
[1, 2, 6, 24, 120]
class cycle

cycle(iterable) –> cycle object

Return elements from the iterable until it is exhausted. Then repeat the sequence indefinitely.

next

x.next() -> the next value, or raise StopIteration

first(iterable, predicate=<function <lambda> at 0x1e181870>, default_value=ArgumentNotGiven)
flattened(iterable, keep_types=None, debug=False)

Flatten across all levels of iteration.

Examples :
>>> [f for f in flattened([1,2,3,[4,5,[6]]])]
[1, 2, 3, 4, 5, 6]
>>> [f for f in flattened([1,2,3,[4,5,[6],[[xrange(1,17)]]]])]
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> [f for f in flattened([range(1,4),1,2,3,[4,5,[6],[[xrange(1,17)]]]])]
[1, 2, 3, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> [f for f in flattened([1, [3, 4], [["hello", ["world"]]], {"yes": True}])]
[1, 3, 4, 'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', 'y', 'e', 's']
>>> [f for f in flattened([1, [3, 4], [["hello", ["world"]]], {"yes": True}], keep_types=str)]
[1, 3, 4, 'hello', 'world', 'yes']
>>> [f for f in flattened([1, [3, 4], [["hello", ["world"]]], {"yes": True}], keep_types=(str, dict))]
[1, 3, 4, 'hello', 'world', {'yes': True}]
>>> [f for f in flattened([1, [3, 4], [["hello", ["world"]]], {"yes": True}], keep_types=(str, dict, list))]
[[1, [3, 4], [['hello', ['world']]], {'yes': True}]]
grouper(n, iterable, fillvalue=None)

group(3, ‘ABCDEFG’, ‘x’) –> ABC DEF Gxx

class islice

islice(iterable, [start,] stop [, step]) –> islice object

Return an iterator whose next() method returns selected values from an iterable. If start is specified, will skip all preceding elements; otherwise, start defaults to zero. Step defaults to one. If specified as another value, step determines how many values are skipped between successive calls. Works like a slice() on a list but returns an iterator.

next

x.next() -> the next value, or raise StopIteration

class izip_longest

izip_longest(iter1 [,iter2 [...]], [fillvalue=None]) –> izip_longest object

Return an izip_longest object whose .next() method returns a tuple where the i-th element comes from the i-th iterable argument. The .next() method continues until the longest iterable in the argument sequence is exhausted and then it raises StopIteration. When the shorter iterables are exhausted, the fillvalue is substituted in their place. The fillvalue defaults to None or can be specified by a keyword argument.

next

x.next() -> the next value, or raise StopIteration

labeled_balls_in_labeled_boxes(balls, box_sizes)

OVERVIEW

This function returns a generator that produces all distinct distributions of distinguishable balls among distinguishable boxes, with specified box sizes (capacities). This is a generalization of the most common formulation of the problem, where each box is sufficiently large to accommodate all of the balls.

CONSTRUCTOR INPUTS

n: the number of balls

box_sizes: This argument is a list of length 1 or greater. The length of the list corresponds to the number of boxes. box_sizes[i] is a positive integer that specifies the maximum capacity of the ith box. If box_sizes[i] equals n (or greater), then the ith box can accommodate all n balls and thus effectively has unlimited capacity.

EXAMPLE

Issue the following statement issued at the IPython prompt:

list(labeled_balls_in_labeled_boxes(3,[2,2]))

The output is as follows:

[((0, 1), (2,)),
((0, 2), (1,)), ((1, 2), (0,)), ((0,), (1, 2)), ((1,), (0, 2)), ((2,), (0, 1))]
labeled_balls_in_unlabeled_boxes(balls, box_sizes)

OVERVIEW

This function returns a generator that produces all distinct distributions of distinguishable balls among indistinguishable boxes, with specified box sizes (capacities). This is a generalization of the most common formulation of the problem, where each box is sufficiently large to accommodate all of the balls. It might be asked, ‘In what sense are the boxes indistinguishable if they have different capacities?’ The answer is that the box capacities must be considered when distributing the balls, but once the balls have been distributed, the identities of the boxes no longer matter.

CONSTRUCTOR INPUTS

n: the number of balls

box_sizes: This argument is a list of length 1 or greater. The length of the list corresponds to the number of boxes. box_sizes[i] is a positive integer that specifies the maximum capacity of the ith box. If box_sizes[i] equals n (or greater), then the ith box can accommodate all n balls and thus effectively has unlimited capacity.

NOTE

For labeled_balls_in_unlabeled_boxes, the order of the elements of the box_sizes list is unimportant because the code will sort it into non- increasing order before any other processing is done.

last(iterable, predicate=<function <lambda> at 0x1e1818f0>, default_value=ArgumentNotGiven)
ordered_partitions(sequence, length)

see ordered_partitions_iter

ordered_partitions_iter(sequence, length)

This iterates over the P^k,m operator from Allen, et al. Mol. Phys. 89 (1996), 1213-1221 See the explanation of its funtion therein. This is needed for the arbitrary order B tensor formulae.

Examples :
>>> [tuple(''.join(part) for part in parts) for parts in ordered_partitions_iter('ABCD', 2)]
[('A', 'BCD'), ('AB', 'CD')]
>>> [tuple(''.join(part) for part in parts) for parts in ordered_partitions_iter('ABCDEF', 3)]
[('A', 'B', 'CDEF'), ('A', 'BC', 'DEF'), ('AB', 'CD', 'EF')]
partitioned(iterable, partitions)

Iterate over iterable in chunks of sizes given in partitions. If partitions runs out before iterable does, partitions will be cycled (i.e. the next partition size will be the first element of partitions, the following size will be the second, and so on). If there are not enough elements remaining to fill the last partition, the last item yielded will be shorter (just as if a slice running over the end of the list were taken).

Examples :
>>> [''.join(a) for a in partitioned('ABCDEFG', (1, 3, 2, 1))]
['A', 'BCD', 'EF', 'G']
>>> [''.join(a) for a in partitioned('ABCDEFGHIJ', (1, 3, 2, 1))]
['A', 'BCD', 'EF', 'G', 'H', 'IJ']
>>> [''.join(a) for a in partitioned('ABCDEFGHIJK', (2,))]
['AB', 'CD', 'EF', 'GH', 'IJ', 'K']
>>> [''.join(a) for a in partitioned('ABC', (1, 3, 2, 1))]
['A', 'BC']
>>> [i for i in partitioned('abcdef', (0,3))]
[(), ('a', 'b', 'c'), (), ('d', 'e', 'f'), ()]
>>> [i for i in partitioned('abcdef', (3,1,0,3))]
[('a', 'b', 'c'), ('d',), (), ('e', 'f')]
>>> [i for i in partitioned('abcdef', (3,1,0))]
[('a', 'b', 'c'), ('d',), (), ('e', 'f')]
perm_unique_helper(listunique, result_list, d)
stutter(iterable, ntimes)

repeat each element n times before moving on.

Examples :
>>> [s for s in stutter([1, 2, 3, 4], 3)]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
>>> ''.join(a for a in stutter('hello', 2))
'hheelllloo'
tee()

tee(iterable, n=2) –> tuple of n independent iterators.

class unique_element(value, occurrences)
unique_permutations(elements)
unlabeled_balls_in_labeled_boxes(balls, box_sizes)

OVERVIEW

This function returns a generator that produces all distinct distributions of indistinguishable balls among labeled boxes with specified box sizes (capacities). This is a generalization of the most common formulation of the problem, where each box is sufficiently large to accommodate all of the balls, and is an important example of a class of combinatorics problems called ‘weak composition’ problems.

CONSTRUCTOR INPUTS

n: the number of balls

box_sizes: This argument is a list of length 1 or greater. The length of the list corresponds to the number of boxes. box_sizes[i] is a positive integer that specifies the maximum capacity of the ith box. If box_sizes[i] equals n (or greater), then the ith box can accommodate all n balls and thus effectively has unlimited capacity.

ACKNOWLEDGMENT

I’d like to thank Chris Rebert for helping me to convert my prototype class-based code into a generator function.

unlabeled_balls_in_unlabeled_boxes(balls, box_sizes)

OVERVIEW

This function returns a generator that produces all distinct distributions of indistinguishable balls among indistinguishable boxes, with specified box sizes (capacities). This is a generalization of the most common formulation of the problem, where each box is sufficiently large to accommodate all of the balls. It might be asked, ‘In what sense are the boxes indistinguishable if they have different capacities?’ The answer is that the box capacities must be considered when distributing the balls, but once the balls have been distributed, the identities of the boxes no longer matter.

CONSTRUCTOR INPUTS

n: the number of balls

box_sizes: This argument is a list of length 1 or greater. The length of the list corresponds to the number of boxes. box_sizes[i] is a positive integer that specifies the maximum capacity of the ith box. If box_sizes[i] equals n (or greater), then the ith box can accommodate all n balls and thus effectively has unlimited capacity.

NOTE

For unlabeled_balls_in_unlabeled_boxes, the order of the elements of the box_sizes list is unimportant because the code will sort it into non- increasing order before any other processing is done.

class RegexSequence(main, main_flags=0, start=None, start_flags=0, stop=None, stop_flags=0, last_only=False, require_stop=False, match_function=<function search at 0xf79680f0>)

A sequence of regular expressions for parsing a piece of data from a file. The sequence can have optional activation (“start”) and deactivation (“stop”) sequences, and matches are collected from every match of the main regex (or main list of regexes) given. The Ellipsis object may be given in the main sequence (or the start/stop sequences) to indicate that any number of lines may come in between the preceeding and succeding regexes. A RegexSequence.RepeatedRegex object can be used to indicate that a regex can be repeated without invalidating the sequence.

The RegexSequence object is used by passing a file in line by line to the parse_line() method.

If the last_only keyword argument is given to the initialization, only the last match (or sequence of matches,
if a list of regexes is given for the main sequence) is kept
class Duplicated(duplicated, prelude=None, postlude=None, interludes=None, min_dups=None, max_dups=None, flags=None)

A mechanism for allowing a certain part of a pattern to be duplicated an arbitrary number of times in a line.

class Interlude(regex, frequency, max_repeats=None, offset=None)

A super-lightweight class to hold an interlude

frequency = None
max_repeats = None
offset = None
regex = None
reset()
RegexSequence.Duplicated.duplicated = None
RegexSequence.Duplicated.flags = None
RegexSequence.Duplicated.interludes = None
RegexSequence.Duplicated.match(string)
RegexSequence.Duplicated.max_dups = None
RegexSequence.Duplicated.min_dups = None
RegexSequence.Duplicated.pattern

Returns the main regex, in order to conform with the Regex class protocol

RegexSequence.Duplicated.postlude = None
RegexSequence.Duplicated.prelude = None
RegexSequence.Duplicated.search(string)
class RegexSequence.RepeatedRegex(regexes, repeats=None, min_repeats=1, flags=0, exactly=False, greedy=True)

A regex that may be repeated on multiple consecutive lines without invalidating the sequence. The RepeatedRegex may be repeated an arbitrary (repeats = None, the default) or specified number of times. Currently, the behavior of repeated regexes with exact=False is not stable when multiple (different) RepeatedRegex objects are given consecutively and the number of intervening lines to be matched is fewer than the number of consecutive RepeatedRegex objects minus 1. This is a fairly extreme edge case that is demonstrated in the test suite in test_expected_failures() in the file “test_parsing.py”.

exactly = None
greedy = None
in_reset_state()

True if reset() would change nothing

match(string)
min_repeats = None
okay_to_finish()
regexes = None
repeats = None
reset()
search(string)
RegexSequence.groups(flat=True)

Returns a tuple containing all the match groups from all the matches. If the flat argument is True, (default) the groups are flattened across all matches. If flat is False, the groups are only flattened within a given series (this makes no difference for cases where the main regex is a single expression rather than a list of regexes; in this case a flat list of groups is always returned).

The name “groups” is meant to correspond roughly with the naming convention in Python’s re module.

RegexSequence.last_only = None
RegexSequence.main = None
RegexSequence.match_function = None
RegexSequence.matches

A (possibly nested) list of the matches collected thus far.

RegexSequence.parse_line(line)

Parse a line from a file.

RegexSequence.require_stop = None
RegexSequence.reset()

Reset the regex sequence. Do this, for instance, when you’ve finished parsing one file and need to start parsing another. This gets called by the constructor. Most internal uses of this class should already do this when it is supposed to be done.

RegexSequence.start = None
RegexSequence.stop = None
class Regex

Abstract base class for regular expressions. For now, anything that responds to ‘match’, ‘search’, and has the attributes ‘flags’ and ‘pattern’ is considered a Regex object. You can’t instantiate a Regex object; the __new__() just returns re.compile() with the same arguments.

Examples :
>>> import re
>>> isinstance(re.compile(r'test123'), Regex)
True
>>> isinstance(r'test123', Regex)
False
class Duplicated(duplicated, prelude=None, postlude=None, interludes=None, min_dups=None, max_dups=None, flags=None)

A mechanism for allowing a certain part of a pattern to be duplicated an arbitrary number of times in a line.

class Interlude(regex, frequency, max_repeats=None, offset=None)

A super-lightweight class to hold an interlude

frequency = None
max_repeats = None
offset = None
regex = None
reset()
Duplicated.duplicated = None
Duplicated.flags = None
Duplicated.interludes = None
Duplicated.match(string)
Duplicated.max_dups = None
Duplicated.min_dups = None
Duplicated.pattern

Returns the main regex, in order to conform with the Regex class protocol

Duplicated.postlude = None
Duplicated.prelude = None
Duplicated.search(string)
Repeated

alias of RepeatedRegex

class RepeatedRegex(regexes, repeats=None, min_repeats=1, flags=0, exactly=False, greedy=True)

A regex that may be repeated on multiple consecutive lines without invalidating the sequence. The RepeatedRegex may be repeated an arbitrary (repeats = None, the default) or specified number of times. Currently, the behavior of repeated regexes with exact=False is not stable when multiple (different) RepeatedRegex objects are given consecutively and the number of intervening lines to be matched is fewer than the number of consecutive RepeatedRegex objects minus 1. This is a fairly extreme edge case that is demonstrated in the test suite in test_expected_failures() in the file “test_parsing.py”.

exactly = None
greedy = None
in_reset_state()

True if reset() would change nothing

match(string)
min_repeats = None
okay_to_finish()
regexes = None
repeats = None
reset()
search(string)
class working_directory(dir, permissions=0, create=False)

Change to a certain working directory for the execution of a block of code, then change back upon (any kind of) exit.

divisors(n)

Generate the factors of an integer.

Examples :
>>> for i in divisors(12): print i
...
1
2
3
4
6
12
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
chop(tens, thresh=1e-14)

Round off near-integer values (within thresh) to integers for each value in the Tensor.

chopped(tens, thresh=1e-14)

Same as chop, but does not modify the original and instead returns a copy.

class ComputableTensor

A tensor with elements that can be computed as needed.

Warning

Using this class is a very bad idea. It makes development a nightmare. Don’t do it.

compute_function = None
fill()
hasitem(item)

Returns True if and only if the tensor has the item without having to compute it. Same as item in self.

is_sentinal_value(test_val)
sentinal_value = None
class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
cross(v1, v2, *args, **kwargs)

Wrapper to numpy.cross which viewcasts the result as a Vector if the first two arguments are Vector objects

Examples :
>>> cross( Vector(1, 2, 3), Vector(4, 5, 6) )
Vector([-3.,  6., -3.])
>>> # Can also be called as a method of Vector
>>> Vector(1, 2, 3).cross( Vector(4, 5, 6) )
Vector([-3.,  6., -3.])
magnitude(v)

Wrapper for Vector.magnitude()

Examples :
>>> magnitude(Vector(3.0, 4.0))
5.0
norm(v)

Wrapper for Vector.magnitude()

Examples :
>>> magnitude(Vector(3.0, 4.0))
5.0
class Matrix

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

I
back_transformed(other)
col_iter
cols
columns
classmethod diagonal(iterable)
eigensystem(sort=False)

Wrapper to numpy.eigh and numpy.eig for symmetric and non-symmetric matrices, respectively. Note that the eigenvectors are column vectors in the returned matrix.

classmethod identity(n)
inverse_sqrt_matrix()
is_hermitian()
is_square()
is_symmetric()
ncols

Number of columns that self has

nrows

Number of rows that self has

row_iter
rows
sqrt_matrix()
symmetrized()
transformed(other)
rotate_point_about_axis(point, axis, angle)

Returns the Cartesian vector point rotated about axis by angle

Source: http://en.wikipedia.org/wiki/Rotation_matrix

angle_between_vectors(a, b)

Returns the angle between the two vectors, in radians

class IndexRange(*args, **kwargs)

Allows for the definition of special indices that cover specific ranges and subranges of Tensor axes in einstein summations.

Examples :
>>> IndexRange.clear_known_ranges()  # Don't do this in your program; this is just for the doctest
>>> p = IndexRange('p,q,r,s', 5).with_subranges(
...   IndexRange('i,j,k,l', 0, 2),
...   IndexRange('a,b,c,d', 2, 5)
... )
>>> p
<IndexRange object covering slice 0:5 represented by indices ['p', 'q', 'r', 's']>
>>> p.subranges[0]
<IndexRange object covering slice 0:2 represented by indices ['i', 'j', 'k', 'l']>
>>> p.subranges[1]
<IndexRange object covering slice 2:5 represented by indices ['a', 'b', 'c', 'd']>
>>> prime = IndexRange["m, m',m''", 10, "m range"].with_subranges(
...            IndexRange["n,n',n''", ..., 6, "n range"],
...            IndexRange["o,o',o''", 6, ...]
... )
>>> prime
<IndexRange named 'm range' represented by indices ['m', 'm'', 'm''']>
>>> prime.subranges[0]
<IndexRange named 'n range' represented by indices ['n', 'n'', 'n''']>
>>> prime.subranges[1]
<IndexRange object covering slice 6:10 represented by indices ['o', 'o'', 'o''']>
add_subrange(subrange)

Add a subrange to the list of subranges for self. Note that this returns subrange (with subrange.parent modified) to allow for a ‘pass-through’ like usage (see examples below)

Examples :
>>> IndexRange.reset_ranges()
>>> p = IndexRange('p,q,r,s', 4, name="orbital space")
>>> # Convenient "pass-through" usage for saving subranges:
>>> i = p.add_subrange(IndexRange('i,j,k,l', 0, 2, name="occupied space"))
>>> a = p.add_subrange(IndexRange('a,b,c,d',2,4))
>>> a
<IndexRange object covering slice 2:4 represented by indices ['a', 'b', 'c', 'd']>
>>> p.subranges[0]
<IndexRange named 'occupied space' represented by indices ['i', 'j', 'k', 'l']>
>>> p.subranges[1]
<IndexRange object covering slice 2:4 represented by indices ['a', 'b', 'c', 'd']>
>>> a.parent
<IndexRange named 'orbital space' represented by indices ['p', 'q', 'r', 's']>
begin_index
classmethod begin_indexing_context(new_global_set)
classmethod clear_known_ranges()

Clears the known ranges. Use with care and only if you’re sure you know what you’re doing!

end_index
classmethod end_indexing_context(context_to_end=None)
global_index_range_set = <grendel.gmath.einsum_indices.IndexRangeSet object at 0x1d9934b0>
index_range_set = None
indices = None
name = None
parent
classmethod reset_ranges()

Clears the known ranges. Use with care and only if you’re sure you know what you’re doing!

classmethod set_global_index_range_set(new_global_set)
classmethod set_indexing_context(new_global_set)
size
slice
slice_in(parent_range)

Gets the slice of parent_range represented by self (parent_range need not be a direct parent of self, but it should be a parent. See is_subrange())

Examples :
>>> IndexRange.reset_ranges()
>>> p = IndexRange('p,q,r,s',4)
>>> i = p.add_subrange(IndexRange('i,j,k,l',0,2))
>>> a = p.add_subrange(IndexRange('a,b,c,d',2,4))
>>> a.slice_in(p)
slice(2, 4, None)
subranges = None
classmethod unset_global_index_range_set(context_to_end=None)
with_subranges(*subranges)

Basically the same thing as calling add_subrange() multiple times, except returns self instead of the subrange, allowing for a different syntax (see below)

Examples :
>>> IndexRange.reset_ranges()
>>> orb = DeclareIndexRange('p,q,r,s', 10, name="Orbital space").with_subranges(
...           DeclareIndexRange('i,j,k,l', 0, 3, name="Occupied space").with_subranges(
...               DeclareIndexRange("i*,j*,k*,l*", 0, 1, name="Core"),
...               DeclareIndexRange("i',j',k',l'", 1, 3)
...           ),
...           DeclareIndexRange('a,b,c,d', 3, 10, name="Virtual space")
...       )
>>> orb
<IndexRange named 'Orbital space' represented by indices ['p', 'q', 'r', 's']>
>>> len(orb.subranges)
2
>>> len(orb.subranges[0].subranges)
2
DeclareIndexRange(indices, begin_index_or_size, end_index=None, name=None, **kwargs)

Alias for IndexRange constructor that more accurately describes what is actually going on.

class IndexRangeSet
known_ranges = None
IndexingContext

alias of IndexRangeSet

issubrange(child_range, parent_range)

Returns True if child_range is parent_range or child_range is a child of parent_range (analogous to isinstance from the python standard library)

is_subrange(child_range, parent_range)

Returns True if child_range is parent_range or child_range is a child of parent_range (analogous to isinstance from the python standard library)

class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class FiniteDifferenceDerivative(*args, **kwargs)

An arbitrary finite difference derivative with respect to k FiniteDifferenceVariable instances (not necessarily distinct) of a FiniteDifferenceFunction of an arbitrary number of FiniteDifferenceVariable instances whose output is a Differentiable instance. Ideally, the derivative can be calculated to an arbitrary order of robustness in the displacement, though in practice not all orders may be implemented yet.

compute()
formula = None
formulas = []
function = None
generated_single_variable_formulas = {}
needed_increments
orders = None
classmethod precompute_single_variable(max_derivative, max_order, forward=False)

Save a little bit of time by prepopulating the single variable displacement formulas dictionary up to max_derivative and max_order. If forward is True, the forward formulas are precomputed instead of the central ones.

target_robustness = None
value
variables = None
class FiniteDifferenceFormula(orders, robustness, pairs, forward=False)

A formula for a given finite difference derivative.

CENTRAL = 0
FORWARD = 1
coefficients = None
direction = None
is_central()
is_forward()
needed_displacements
order
orders = None
robustness = None
class FiniteDifferenceFunction
deltas_for_variables(vars)

The displacement amounts for each of the variables.

value_for_displacements(pairs)

Get a value for the displacement corresponding to the (variable, number of deltas) pairs given in the argument pairs

variables

The list of FiniteDifferenceVariable instances on which the function depends.

class FiniteDifferenceVariable
class FloatShell
class Fraction

This class implements rational numbers.

In the two-argument form of the constructor, Fraction(8, 6) will produce a rational number equivalent to 4/3. Both arguments must be Rational. The numerator defaults to 0 and the denominator defaults to 1 so that Fraction(3) == 3 and Fraction() == 0.

Fractions can also be constructed from:

  • numeric strings similar to those accepted by the float constructor (for example, ‘-2.3’ or ‘1e10’)
  • strings of the form ‘123/456’
  • float and Decimal instances
  • other Rational instances (including integers)
denominator
classmethod from_decimal(dec)

Converts a finite Decimal instance to a rational number, exactly.

classmethod from_float(f)

Converts a finite float to a rational number, exactly.

Beware that Fraction.from_float(0.3) != Fraction(3, 10).

limit_denominator(max_denominator=1000000)

Closest Fraction to self with denominator at most max_denominator.

>>> Fraction('3.141592653589793').limit_denominator(10)
Fraction(22, 7)
>>> Fraction('3.141592653589793').limit_denominator(100)
Fraction(311, 99)
>>> Fraction(4321, 8765).limit_denominator(10000)
Fraction(4321, 8765)
numerator
class IterableOf(types)
arg_type_okay(arg)
collection_type

alias of Iterable

types = None
ReadOnlyAttribute

A read-only attribute. See SpecialAttribute for initialization variables standard to all SpecialAttribute subclasses.

Attributes :
error_text : str
The text for the error raised when setting of the attribute is attempted. Defaults to “cannot set read-only attribute”
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
abstractproperty

A decorator indicating abstract properties.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractproperty def my_abstract_property(self):

...

This defines a read-only property; you can also define a read-write abstract property using the ‘long’ form of property declaration:

class C:
__metaclass__ = ABCMeta def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx)
add()

add(a, b) – Same as a + b.

class attrgetter

attrgetter(attr, ...) –> attrgetter object

Return a callable object that fetches the given attribute(s) from its operand. After f = attrgetter(‘name’), the call f(r) returns r.name. After g = attrgetter(‘name’, ‘date’), the call g(r) returns (r.name, r.date). After h = attrgetter(‘name.first’, ‘name.last’), the call h(r) returns (r.name.first, r.name.last).

fornberg_coefficient_generator(M, N, x0, *alpha)

From Fornberg, Bengt. Mathematics of Computation 51 (1988), p. 699-706 M: “the order of the highest derivative we wish to approximate” N: given “a set of N + 1 grid points” x0: the point at which we wish to take the derivative alpha: alpha_i is the ith grid point

generate_single_variable_formulas(max_derivative, max_order, forward=False)
class groupby

groupby(iterable[, keyfunc]) -> create an iterator which returns (key, sub-iterator) grouped by each value of key(value).

next

x.next() -> the next value, or raise StopIteration

indented(instr, nspaces=4)

Aliased as indent()

listify_args(*args, **kwargs)

A simple way to accept arguments that can be an Iterable or a bunch of arguments that should be treated as a single Iterable. (This method is pretty trivial, but I find myself doing it a whole lot.) The reason you can’t just use list() for this purpose is that if an Iterable is given as the only argument, list(args) will return a list of Iterables rather than a single Iterable.

Examples :
>>> def test(*args):
...     return listify_args(*args)
...
>>> test(1,2,3)
[1, 2, 3]
>>> test([1,2,3])
[1, 2, 3]
>>> test([1,2,3], 4)
[[1, 2, 3], 4]
>>> test("1,2,3", 4)
['1,2,3', 4]
>>> test("1,2,3")
['1,2,3']
load_formulas()
mul()

mul(a, b) – Same as a * b.

typechecked

Type checking for functions and methods.

with_flexible_arguments(required=None, optional=None, what_to_call_it=None)

Allows the creation of functions with case insensative, alternately named keyword arguments.

Examples :
>>> @with_flexible_arguments(
...     required=[
...         ('name', 'greet', 'name_to_greet'),
...         ('from_where', 'source')
...     ],
...     optional=[
...         ('greeting', 'hello_phrase', 'salutation'),
...         ('message',)
...     ]
... )
... def say_hello(name, from_where, greeting='Hello', message=''):
...     print(greeting + ', ' + name + ', from ' + from_where + '!' + message)
...
>>> say_hello('moon', 'Earth')
Hello, moon, from Earth!
>>> say_hello('world', source='the moon')
Hello, world, from the moon!
>>> say_hello(source='France', name_to_greet='visitor', salutation='Bonjour')
Bonjour, visitor, from France!
>>> say_hello('earthlings', 'outer space', 'Greetings', message='  We come in peace!')
Greetings, earthlings, from outer space!  We come in peace!
CachedProperty

Decorator for properties with cached return values. The decorator creates a property that stores the return value of the method call in a variable named _[func_name] (where [func_name] is the name of the function).

Examples :
>>> class Factorializer(object):
...
...    n = None
...
...    def __init__(self, n):
...        self.n = n
...
...    @CachedProperty
...    def thirty_plus_n_fact(self):
...        ret_val = 1
...        for i in xrange(2, self.n + 31):
...            ret_val *= i
...        return ret_val
...
>>> f = Factorializer(3000)
>>> # Takes some time...
>>> var = f.thirty_plus_n_fact
>>> # Should take no time...
>>> for i in xrange(100):
...     var = f.thirty_plus_n_fact
...
>>> # Be careful... Remember to invalidate the cache when the appropriate variables are updated...
>>> f.n = 2500
>>> # Takes no time but gives the wrong answer:
>>> var = f.thirty_plus_n_fact
>>> # Invalidate the cache:
>>> f._thirty_plus_n_fact = None
>>> # This should take some time again, but now it will get the right answer
>>> var = f.thirty_plus_n_fact
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[7]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class Derivative(coords)

Encapsulates the concept of an (energy) derivative with respect to a coordinate. This may later be expanded (in a backwards compatible manner) to include other types of derivatives, e.g. dipole moment derivatives

Attributes :
of : subclass of Differentiable
The entity that the derivative is being taken of (usually the energy of the molecule, but can be anything that is a subclass of the abstract base class Differentiable
value : float
The value of the derivative, in the units given by units
units : CompositeUnit or some class with a Unit metaclass
The units of the derivative
coords : list of Coordinate
The coordinate(s) that the derivative is taken with respect to (multiple if the derivative is higher than first order)
coords = None
molecule

The Molecule object to which the coordinate

of = None
order

The order of the derivative. ‘1’ indicates first derivative, ‘2’ indicates second derivative, etc.

units = None
value = None
class ComputableTensor

A tensor with elements that can be computed as needed.

Warning

Using this class is a very bad idea. It makes development a nightmare. Don’t do it.

compute_function = None
fill()
hasitem(item)

Returns True if and only if the tensor has the item without having to compute it. Same as item in self.

is_sentinal_value(test_val)
sentinal_value = None
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[8]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class DerivativeCollection

A collection of derivatives with indices that are coordinates in a given representation.

coordinate = None
coordinates
coords
einsum_index = None
first_dimension_different = None
for_order()

Return the Tensor object corresponding to the `order`th order derivative.

has_order(order)
representation = None
secondary_representation = None
tensor_kwargs = None
tensors = None
uncomputed = None
class DerivativeTensor
collection = None
compute_function = None
class MatrixFormatter(**kwargs)
col_label_format
col_label_format_leader = None
col_label_width = None
float_digits = 4
float_format
float_format_leader = ' '
float_type_string = 'g'
float_width = 10
format(matrix, labels=None)
label_format_leader = '^'
label_overflow_character = 'X'
label_width = 10
line_width = 120
name = None
one_based = True
classmethod quick_format(matrix, labels=None, **kwargs)
row_label_format
row_label_format_leader = None
row_label_width = None
width_overflow_character = '*'
class NonstringIterable

An Iterable that is not an instance of basestring

class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class TensorFormatter(**kwargs)
format(tensor, labels=None)
symmetric = False
copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

hasunits(*fargs, **fkeywords)

Alias for has_units()

indent(*fargs, **fkeywords)

Alias for indented()

class permutations

permutations(iterable[, r]) –> permutations object

Return successive r-length permutations of elements in the iterable.

permutations(range(3), 2) –> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)

next

x.next() -> the next value, or raise StopIteration

shortstr(*fargs, **fkeywords)

Alias for short_str()

typechecked

Type checking for functions and methods.

class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[9]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class Displacement

Encapsulates a displacement from a base molecule.

Attributes :
base_molecule : Molecule
The Molecule object that the displacement is relative to.
representation : Representation
The Representation object that the displacements are values in.
disp_vect : Vector
The displacement amounts in the given representation. (e.g. disp_vect[i] corresponds to the amount of displacement of the i`th `Coordinate in representation)
base_molecule = None
desired_values = None
disp_vect = None
displaced_molecule

The displaced molecule object resulting from applying self to Molecule

displaced_representation

The displaced molecule object resulting from applying self to Molecule

classmethod from_increments(increments, rep, deltas=None)
classmethod get_default_deltas(rep)
increments(deltas=None)
max_iterations = 35
representation = None
tolerance = 1e-12
class DisplacementManager

A function (in the finite_difference.FiniteDifferenceFunction sense) that can get values for displacements of some base molecule.

base_molecule
deltas = None
deltas_for_variables(vars)
details = None
differentiable = None
displaced_molecules
displacement_for(increments)
displacements = None
output_type = None
representation = None
value_for_displacements(pairs)
variables = None
class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class FiniteDifferenceFunction
deltas_for_variables(vars)

The displacement amounts for each of the variables.

value_for_displacements(pairs)

Get a value for the displacement corresponding to the (variable, number of deltas) pairs given in the argument pairs

variables

The list of FiniteDifferenceVariable instances on which the function depends.

class FiniteDifferenceVariable
exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class Iterable
class LegacyXMLResultGetter(comparison_representation, *files)
can_get_property_for_molecule(molecule, property, details=None)
files = None
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=True)
properties = None
properties_for_molecules = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
ReadOnlyAttribute

A read-only attribute. See SpecialAttribute for initialization variables standard to all SpecialAttribute subclasses.

Attributes :
error_text : str
The text for the error raised when setting of the attribute is attempted. Defaults to “cannot set read-only attribute”
class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class RepresentationDependentProperty(molecule, units=None, details=None)

A property whose value is dependent on a given representation of the molecule.

get_value(*args, **kwargs)
molecule
representation
representation_getter = None
class SequenceOf(types)
collection_type

alias of Sequence

compatible_units(unit1, unit2)

Aliased as iscompatible()

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

hasunits(*fargs, **fkeywords)

Alias for has_units()

indented(instr, nspaces=4)

Aliased as indent()

typechecked

Type checking for functions and methods.

class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class DerivativeCollection

A collection of derivatives with indices that are coordinates in a given representation.

coordinate = None
coordinates
coords
einsum_index = None
first_dimension_different = None
for_order()

Return the Tensor object corresponding to the `order`th order derivative.

has_order(order)
representation = None
secondary_representation = None
tensor_kwargs = None
tensors = None
uncomputed = None
class DerivativeTensor
collection = None
compute_function = None
class DisplacementManager

A function (in the finite_difference.FiniteDifferenceFunction sense) that can get values for displacements of some base molecule.

base_molecule
deltas = None
deltas_for_variables(vars)
details = None
differentiable = None
displaced_molecules
displacement_for(increments)
displacements = None
output_type = None
representation = None
value_for_displacements(pairs)
variables = None
class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

class FiniteDifferenceDerivative(*args, **kwargs)

An arbitrary finite difference derivative with respect to k FiniteDifferenceVariable instances (not necessarily distinct) of a FiniteDifferenceFunction of an arbitrary number of FiniteDifferenceVariable instances whose output is a Differentiable instance. Ideally, the derivative can be calculated to an arbitrary order of robustness in the displacement, though in practice not all orders may be implemented yet.

compute()
formula = None
formulas = []
function = None
generated_single_variable_formulas = {}
needed_increments
orders = None
classmethod precompute_single_variable(max_derivative, max_order, forward=False)

Save a little bit of time by prepopulating the single variable displacement formulas dictionary up to max_derivative and max_order. If forward is True, the forward formulas are precomputed instead of the central ones.

target_robustness = None
value
variables = None
class FiniteDifferenceForceField(max_analytic_order=0, property=<class 'grendel.chemistry.molecular_properties.Energy'>, deltas=None, details=None, run_now=False, queue=None, robustness=2, **kwargs)
all_computations
computation_queue = None
computed_property = None
displacement_manager = None
fill()
fill_order(order)
filled_for_order = None
for_order()
max_analytic_order = None
needed_computations
robustness = None
class ForceField(representation, max_order, property=<class 'grendel.chemistry.molecular_properties.Energy'>, property_units=None)
base_molecule
for_order()
in_representation(representation)
max_order = None
molecular_property = None
property_units = None
class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
PropertyDerivative(*fargs, **fkeywords)

Alias for MolecularPropertyDerivative()

class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class permutations

permutations(iterable[, r]) –> permutations object

Return successive r-length permutations of elements in the iterable.

permutations(range(3), 2) –> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)

next

x.next() -> the next value, or raise StopIteration

symmetric_product

alias of combinations_with_replacement

typechecked

Type checking for functions and methods.

class AngularUnit

General superclass for all angular units

default

alias of Degree

reference_unit

alias of Degree

CachedProperty

Decorator for properties with cached return values. The decorator creates a property that stores the return value of the method call in a variable named _[func_name] (where [func_name] is the name of the function).

Examples :
>>> class Factorializer(object):
...
...    n = None
...
...    def __init__(self, n):
...        self.n = n
...
...    @CachedProperty
...    def thirty_plus_n_fact(self):
...        ret_val = 1
...        for i in xrange(2, self.n + 31):
...            ret_val *= i
...        return ret_val
...
>>> f = Factorializer(3000)
>>> # Takes some time...
>>> var = f.thirty_plus_n_fact
>>> # Should take no time...
>>> for i in xrange(100):
...     var = f.thirty_plus_n_fact
...
>>> # Be careful... Remember to invalidate the cache when the appropriate variables are updated...
>>> f.n = 2500
>>> # Takes no time but gives the wrong answer:
>>> var = f.thirty_plus_n_fact
>>> # Invalidate the cache:
>>> f._thirty_plus_n_fact = None
>>> # This should take some time again, but now it will get the right answer
>>> var = f.thirty_plus_n_fact
class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[10]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class Displacement

Encapsulates a displacement from a base molecule.

Attributes :
base_molecule : Molecule
The Molecule object that the displacement is relative to.
representation : Representation
The Representation object that the displacements are values in.
disp_vect : Vector
The displacement amounts in the given representation. (e.g. disp_vect[i] corresponds to the amount of displacement of the i`th `Coordinate in representation)
base_molecule = None
desired_values = None
disp_vect = None
displaced_molecule

The displaced molecule object resulting from applying self to Molecule

displaced_representation

The displaced molecule object resulting from applying self to Molecule

classmethod from_increments(increments, rep, deltas=None)
classmethod get_default_deltas(rep)
increments(deltas=None)
max_iterations = 35
representation = None
tolerance = 1e-12
class DisplacementGenerator(*args, **kwargs)
Backward = <object object at 0x11178f00>
Both = <object object at 0x11178f70>
Forward = <object object at 0x11178df8>
coordinates = None
direction = None
displaced_molecules = None
displacements = None
npoints_for_coord = None
ranges = None
representation = None
verbose = False
class FiniteDifferenceVariable
exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class Iterable
class IterableOf(types)
arg_type_okay(arg)
collection_type

alias of Iterable

types = None
exception MaximumGeometryIterationsExceededError
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

Radians

alias of Radian

ReadOnlyAttribute

A read-only attribute. See SpecialAttribute for initialization variables standard to all SpecialAttribute subclasses.

Attributes :
error_text : str
The text for the error raised when setting of the attribute is attempted. Defaults to “cannot set read-only attribute”
class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
compatible_units(unit1, unit2)

Aliased as iscompatible()

hasunits(*fargs, **fkeywords)

Alias for has_units()

class product

product(*iterables) –> product object

Cartesian product of input iterables. Equivalent to nested for-loops.

For example, product(A, B) returns the same as: ((x,y) for x in A for y in B). The leftmost iterators are in the outermost for-loop, so the output tuples cycle in a manner similar to an odometer (with the rightmost element changing on every iteration).

To compute the product of an iterable with itself, specify the number of repetitions with the optional repeat keyword argument. For example, product(A, repeat=4) means the same as product(A, A, A, A).

product(‘ab’, range(3)) –> (‘a’,0) (‘a’,1) (‘a’,2) (‘b’,0) (‘b’,1) (‘b’,2) product((0,1), (0,1), (0,1)) –> (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ...

next

x.next() -> the next value, or raise StopIteration

strip_units
Strips the units off of a unitized object
(or, if the object is not Unitized, just return it). If convert_to is given, convert to these units if obj is Unitized. If assume_units is given, obj is assumed to have the units given by this argument if (and only if) it is not an instance of Unitized.

Aliased as stripunits()

typechecked

Type checking for functions and methods.

with_flexible_arguments(required=None, optional=None, what_to_call_it=None)

Allows the creation of functions with case insensative, alternately named keyword arguments.

Examples :
>>> @with_flexible_arguments(
...     required=[
...         ('name', 'greet', 'name_to_greet'),
...         ('from_where', 'source')
...     ],
...     optional=[
...         ('greeting', 'hello_phrase', 'salutation'),
...         ('message',)
...     ]
... )
... def say_hello(name, from_where, greeting='Hello', message=''):
...     print(greeting + ', ' + name + ', from ' + from_where + '!' + message)
...
>>> say_hello('moon', 'Earth')
Hello, moon, from Earth!
>>> say_hello('world', source='the moon')
Hello, world, from the moon!
>>> say_hello(source='France', name_to_greet='visitor', salutation='Bonjour')
Bonjour, visitor, from France!
>>> say_hello('earthlings', 'outer space', 'Greetings', message='  We come in peace!')
Greetings, earthlings, from outer space!  We come in peace!
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[11]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class CartesianCoordinate

A cartesian coordinate compatible with the Coordinate class. CartesianCoordinate objects are immutable. If you need a different cartesian coordinate, create a new CartesianCoordinate objects.

Attributes :
atom : Atom
The atom to which the cartesian coordinate refers
direction : int
The direction (x, y, or z) that the coordinate describes. (0 for x, 1 for y, 2 for z, which are also class constants)
atom

The atom to which the cartesian coordinate refers.

atoms
copy_for_representation(rep, **kwargs)
default_delta = 0.01 Angstrom
direction

The direction (x, y, or z) that the coordinate describes. (0 for X, 1 for Y, 2 for Z, which are also class constants)

generate_name(one_based=True)
index

The index in the parent representation. This allows for the retrieval of the value for the coordinate on a different molecule, for instance.

iter_molecule_indices()
value_for_molecule_matrix(mat)
value_for_positions(*pos)
class InternalCoordinate

General superclass for all types internal coordinates. Internal coordinates may only refer to one representation.

analytic_b_orders = [1]
analytic_b_tensor_for_order(order)

Compute the analytic B tensor of a given order and return a tensor indexed by the coordinate’s own indexing scheme.

atoms
b_tensor_cache = <grendel.util.containers.LRUDict instance at 0x1e36f878>
b_tensor_element(*cart_coords_or_indices)

Retrieve an element of the Coordinate’s B tensor using CartesianCoordinate instances and/or integer indices in the molecule’s indexing scheme.

b_tensor_finite_difference_delta = 0.001 Angstrom
b_tensor_finite_difference_rigor = 10
b_vector
b_vector_for_positions(*pos)
bvector
cart_coords
cart_indices
copy_with_atoms(atoms)
deltas_for_variables(vars)
fill_b_tensor_analytically()

Fill the coordinate’s own _btensor attribute for a given order. (The _btensor attribute should be retrieved using the get_b_tensor() method, which calls this if the _btensor has not already been computed.) If the b tensor cannot be computed analytically at the given order, this method returns NotImplemented. Otherwise, it computes the B tensor to the given order and returns None. If the optional B argument is given, this Coordinate’s part of the Representation-based TensorCollection that B refers to is filled as well.

finite_difference_b_tensor()

Computes the B tensor for order order by finite difference of B tensors of order order-1, taking into account permutational symmetry. If use_parent_indices is False, a Tensor is returned that is indexed by the coordinate’s internal indices rather than the parent molecule’s atom indices. Otherwise, a DerivativeTensor is returned with its representation attribute set to the coordinate’s parent molecule’s cartesian_representation attribute.

finite_difference_b_tensor_element(*cart_coords, **kwargs)
generate_name(one_based=True)
get_b_tensor(max_order)

Get the coordinate’s b tensor as a Coordinate-based DerivativeCollection. If it has not already done so, the coordinate will fill in the b tensor up to max_order. The returned value uses the Coordinate‘s internal indexing scheme.

internal_indices_for_coordinates(*cart_coords)
iter_cart_coords(with_index=False)
max_b_tensor_cache_entries = 10000000
value_for_displacements(pairs)
variables
class SimpleInternalCoordinate

Superclass for all types of simple (non-symmetry, non-normal) internal coordinates.

Attributes :
atoms : list of Atom
list of Atom objects that the coordinate refers to
analytic_b_orders = [1]
atom_num(i)

Returns the number of the atom (as an index in self.molecule) that the i’th atom composing the coordinate self refers to.

static b_tensor_element_reindexed(current_coord, *coords)
classmethod b_vector_for_positions(*args)

Returns the b vector corresponding to a coordinate with atoms in the positions given as arguments (assumed to be Vector or at least LightVector instances). Note that the returned value uses the indexing scheme corresponding to the order of the argument’s passed in, not the indexing scheme corresponding to a Molecule instance somewhere.

copy_for_representation(rep, **kwargs)
copy_with_atoms(atoms, **kwargs)
created_coord_maps = {}
created_coords = {}
get_coord(ctype, *atoms)
value
value_for_molecule_matrix(mat)
classmethod value_for_positions(*posvects)

Get the value of the coordinate position vectors xyz.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

classmethod value_for_xyz(xyz)

Value for the xyz matrix constructed from the coordinates of the atoms for the coordinate. For instance, for a

xyz
xyz_delta = 0.001
class NormalCoordinate
atoms = None
b_vector = None
coordinate_symbol = 'q'
copy_for_representation(rep, **kwargs)
default_delta = 0.001 Angstrom / AtomicMassUnit**(1/2)
frequency = None
index = None
value_for_molecule_matrix(mat)
classmethod value_for_positions(*pos)
class Coordinate

Abstract base class for a general coordinate of a Molecule.

Coordinate`s are the components in which `Molecule`s are represented. The most important thing about `Coordinate`s is that they are immutible, like Python’s `str and tuple classes. [#f1]_ Let me say that again a bit louder:

Note

All coordinates are immutable!

Parentage and the molecule attribute:
 

Coordinate instances are typically (though not always) associated with a Representation, accessible through the parent read-only attribute. Coordinate instances that do not have a parent associated with them are called “orphaned” coordinates, and can be identified using the is_orphaned() instance method. Even orphaned coordinates must have a Molecule associated with them in one way or another. This happens in one of three ways:

  1. If the Coordinate is not orphaned, then parent‘s molecule attribute is used. Note that in this case, the Coordinate protocol requires the Coordinate‘s constituant atoms to have a parent molecule that is exactly the same instance as parent‘s molecule attribute. (If you aren’t doing something weird, this shouldn’t be an issue).
  2. If the Coordinate is orphaned, it still must be composed of one or more Atom instances, accessible through the atoms attribute. These Atom`s may themselves be orphaned, but if they are not, the first non-orphaned `Atom‘s parent is used. Note that if one Atom is non-orphaned, the Coordinate protocol requires that all of them must not be orphaned (i. e. the Coordinate constructor enforces this when sanity_checking_enabled is True)
  3. If the Coordinate is orphaned and all of its Atom`s are also orphaned (as is the case, for instance, with `Coordinate instances created for the purpose of finite difference B tensor computation), the Coordinate‘s base_analog attribute may be set to a Coordinate instance whose constituate Atom instances correspond to the derived Coordinate‘s atoms’ base_atom attributes. In this case, the base_analog‘s molecule attribute is used, though it should be utilized for index translation purposes only, since the positions of the atoms in the base molecule will not correspond to the positions of the Coordinate‘s atoms. (The base_analog, in turn, may be an orphaned coordinate of this third type, in which case that coordinate’s base_analog will be used, and so on recursively.)
  4. If the Coordinate is orphaned and no base_analog is given, then all of the atoms must have a base_atom that either has a parent_molecule or also has a base_atom defined (and so on so that a base_atom eventually has a parent_molecule somewhere up the line). In this case, the Coordinate protocol requires that all the atoms refer to the same Molecule obtained in this manner. Coordinates created in the course of analytic computation of B tensors fall into this catagory.
Indexing schemes:
 

Because all Coordinate`s may be austensibly associated with a `Molecule instance in one way or another, there are two different ways to index various tensor properties of a Coordinate: the Molecule‘s indices (3 * natoms total indices) and the Coordinate‘s indexing scheme (3 * len(coord.atoms) total indices, where coord is a Coordinate instance). The internal indexing scheme makes a lot more sense in many instances, (see the documentation of Coordinate.atoms for a simple example), but for determining properties of the whole molecule, we need to use the Molecule‘s indexing scheme. All of this should be handled seemlessly behind the scenes, but it’s a good distinction to be aware of.

Getting a Coordinate‘s value:
 

Coordinate has a number of methods that can be used to get the value of a Coordinate in a particular scenario. They hierarchically call each other to determine the value of the Coordinate. The basic scheme is as follows:

value”]
value_for_molecule [label=”value_for_molecule()”] value_for_molecule_matrix [label=”value_for_molecule_matrix()”,style=dotted]; value_for_molecule_matrix-> value_for_positions [style=dotted,label=”(only InternalCoordinate)”] value_for_positions -> value_for_xyz [style=dotted,label=”(only SimpleInternalCoordinate)”]; value_for_positions [label=”@classmethod
value_for_positions()”,style=dotted];
value_for_xyz [label=”@classmethod
value_for_xyz()”,style=dotted];
}

The reason for this relatively complex hierarchy is that there are instances in which I have needed each variety for some reason or another. Nodes with dotted borders must be implemented in the relevant subclasses: SimpleInternalCoordinate subclasses must implement value_for_xyz, InternalCoordinate subclasses must implement value_for_positions, and Coordinate subclasses must implement value_for_molecule_matrix().

Subclassing:

TODO: write this part

Footnotes

[12]Since Python doesn’t really have private attributes, you could in theory change some of the attributes of a Coordinate instance after it is created; the designation of “immutible” here merely means that the class is not guarenteed to work if you do. While it’s technically more of a “please don’t” than a “you can’t”, I for one will not be held responsible for your code not working if you do something like that, and the way these private attributes are used and changed is not guarenteed to stay the same between different versions. Bottom line: just don’t do it. If you don’t know what I’m talking about, you’re probably okay. Just don’t access or modify any attributes that start with a single underscore (you should never do this anyway from outside of a class).
atom_indices

The indices of the atom(s) the Coordinate depends on in the Molecule the Coordinate depends on.

This is guarenteed to work whether or not the Coordinate is orphaned. For each of the various possible CoordinateMolecule relationships detailed in the Coordinate class documentation, the reason the method works is as follows:

  1. If the Coordinate is not orphaned, then the Coordinate‘s atoms must not be orphaned (the Coordinate constructor enforces this when sanity_checking_enabled is True). Thus, each of the atoms must be non-orphaned and thus have an index.
  2. If the Coordinate is orphaned and at least one atom is non-orphaned, all atoms must be non-orphaned (enforced by the Coordinate protocol). Thus, we can use the non-orphaned atoms’ indices.
  3. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is not None, the atoms must have the base_atom attribute set to the corresponding atom in the Coordinate‘s base_analog. Thus, the Atom‘s base_atom‘s index is used.
  4. If the coordinate is orphaned and all of its atoms are orphaned and base_analog is None, then each atom must have a base_atom somewhere down the line that has a parent and thus an index; this atom’s index is used.

Use this carefully. Don’t ever retrieve an atom’s position by its index in the parent molecule, since that atom may not be the same instance (or even in the same position) as the Coordinate‘s atom.

atoms

List of the Atom instances that the Coordinate depends on. In the case of a CartesianCoordinate, for instance, this is trivially one Atom, but in the case of other coordinates it can be much more substantial. In the case of a NormalCoordinate, this is all the atoms in the parent Molecule.

The presence of an atoms list is essential to establish an internal indexing scheme that can be converted to the indexing scheme of the parent molecule. Besides making the B tensor code much more managable, the use of an internal indexing scheme make Coordinate instances much more self-contained, making “orphaned” coordinates much more viable. Consider the following example:

>>> from grendel.util.units import Degrees
>>> from grendel.coordinates.bond_angle import BondAngle
>>> ba = BondAngle(
...     Atom('O', [0.0, 0.0, 0.0]),
...     Atom('H', [0.0, 1.0, 0.0]),
...     Atom('H', [0.0, 0.0, 1.0]),
...     units=Degrees
... )
>>> round(ba.value)
90.

If orphaned coordinates where not allowed to exist, we would have to create a Molecule instance containing those three atoms, construct an InternalRepresentation containing the BondAngle instance (which would need to be a valid, complete representation, a non-trivial task in the general case), pair that InternalRepresentation instance with the Molecule instance, get the right Coordinate instance from the InternalRepresentation corresponding to the BondAngle we want, and then get that coordinate’s value. If all of the coordinate’s complicated methods were not implemented in terms of the Coordinate’s own indexing scheme, it would have to have all of this structure in place just to get a value.

Note

Since all Coordinate`s depend on `Atom`s and `Atom`s are not immutible, a `Coordinate`s `value and other properties such as its b_vector can change even if the Coordinate itself cannot. The one way around this is to specify freeze_value as True in the Coordinate‘s constructor. If that is done, the value of the Coordinate will not change over the life of the instance, even if the positions of the constituant atoms does change (so if you use this, make sure you know what you are doing). This behavior is useful, for instance, in the use of CartesianRepresentation`s as “snapshots” of a `Molecule instance to be used for the parsing of a particular RepresentationDependentProperty.

base_analog

Analogous Coordinate object on the base molecule, if self is a Coordinate on a displaced Molecule, or the Coordinate from which an orphaned displaced Coordinate was created, if the coordinate was created this way.

coordinate_symbol = 'chi'
copy_for_representation(rep, **kwargs)
default_delta

Every coordinate must define a reasonable default amount for a finite displacement of that kind of coordinate. This should be a class attribute.

generate_name(one_based=True)
in_units(new_units)
index
internal_indices_for()
is_orphaned()

Whether or not the Coordinate instance has a parent Representation

iter_molecule_indices()

Default implementation for coordinates dependent on atoms directly (basically anything but a CartesianCoordinate or some sort of symmetrized cartesian coordinate).

molecule

The molecule associated with the Coordinate.

Note

The molecule’s atoms’ positions may not correspond to the positions of the atoms the coordinate describes. See the class documentation for Coordinate for details.

molecule_indices = None
molecule_indices_for()
name = None
orphaned_copy(**kwargs)
parent

The InternalRepresentation instance which the coordinate self is a part of.

parent_representation

The InternalRepresentation instance which the coordinate self is a part of.

units

The units in which the coordinate’s value is expressed.

value
value_for_molecule(mol)
value_for_molecule_matrix(mat)

Get the value of the coordinate for the XYZ matrix mat, which is a (self.molecule.natoms) by 3 matrix. In other words, the matrix argument uses the parent Molecule‘s indexing scheme, not the Coordinate‘s own indexing scheme.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

value_for_positions(*pos)
value_with_units
class FunctionCoordinate(function, subcoordinates, index=None, default_delta=None, **kwargs)

A coordinate that is a function of one or more other Coordinate instances

atoms = None
copy_for_representation(rep, **kwargs)
default_delta = None
function = None
index = None
subcoordinates = None
value_for_molecule_matrix(mat)
value_for_positions(*pos)
class InternalCoordinate

General superclass for all types internal coordinates. Internal coordinates may only refer to one representation.

analytic_b_orders = [1]
analytic_b_tensor_for_order(order)

Compute the analytic B tensor of a given order and return a tensor indexed by the coordinate’s own indexing scheme.

atoms
b_tensor_cache = <grendel.util.containers.LRUDict instance at 0x1e36f878>
b_tensor_element(*cart_coords_or_indices)

Retrieve an element of the Coordinate’s B tensor using CartesianCoordinate instances and/or integer indices in the molecule’s indexing scheme.

b_tensor_finite_difference_delta = 0.001 Angstrom
b_tensor_finite_difference_rigor = 10
b_vector
b_vector_for_positions(*pos)
bvector
cart_coords
cart_indices
copy_with_atoms(atoms)
deltas_for_variables(vars)
fill_b_tensor_analytically()

Fill the coordinate’s own _btensor attribute for a given order. (The _btensor attribute should be retrieved using the get_b_tensor() method, which calls this if the _btensor has not already been computed.) If the b tensor cannot be computed analytically at the given order, this method returns NotImplemented. Otherwise, it computes the B tensor to the given order and returns None. If the optional B argument is given, this Coordinate’s part of the Representation-based TensorCollection that B refers to is filled as well.

finite_difference_b_tensor()

Computes the B tensor for order order by finite difference of B tensors of order order-1, taking into account permutational symmetry. If use_parent_indices is False, a Tensor is returned that is indexed by the coordinate’s internal indices rather than the parent molecule’s atom indices. Otherwise, a DerivativeTensor is returned with its representation attribute set to the coordinate’s parent molecule’s cartesian_representation attribute.

finite_difference_b_tensor_element(*cart_coords, **kwargs)
generate_name(one_based=True)
get_b_tensor(max_order)

Get the coordinate’s b tensor as a Coordinate-based DerivativeCollection. If it has not already done so, the coordinate will fill in the b tensor up to max_order. The returned value uses the Coordinate‘s internal indexing scheme.

internal_indices_for_coordinates(*cart_coords)
iter_cart_coords(with_index=False)
max_b_tensor_cache_entries = 10000000
value_for_displacements(pairs)
variables
class InternalFunctionCoordinate(b_vector_same_function=True, b_vector_function=None, b_vector_takes_coords=False, b_tensor_same_function=True, b_tensor_function=None, b_tensor_takes_coords=False, value_takes_coords=False, **kwargs)
analytic_b_tensor_for_order(order)
b_tensor_function = None
b_tensor_same_function = None
b_tensor_takes_coords = None
b_vector_for_positions(*pos)
b_vector_function = None
b_vector_same_function = None
b_vector_takes_coords = None
copy_with_atoms(atoms, **kwargs)
value_takes_coords = None
class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class Iterable
Radians

alias of Radian

class SimpleInternalCoordinate

Superclass for all types of simple (non-symmetry, non-normal) internal coordinates.

Attributes :
atoms : list of Atom
list of Atom objects that the coordinate refers to
analytic_b_orders = [1]
atom_num(i)

Returns the number of the atom (as an index in self.molecule) that the i’th atom composing the coordinate self refers to.

static b_tensor_element_reindexed(current_coord, *coords)
classmethod b_vector_for_positions(*args)

Returns the b vector corresponding to a coordinate with atoms in the positions given as arguments (assumed to be Vector or at least LightVector instances). Note that the returned value uses the indexing scheme corresponding to the order of the argument’s passed in, not the indexing scheme corresponding to a Molecule instance somewhere.

copy_for_representation(rep, **kwargs)
copy_with_atoms(atoms, **kwargs)
created_coord_maps = {}
created_coords = {}
get_coord(ctype, *atoms)
value
value_for_molecule_matrix(mat)
classmethod value_for_positions(*posvects)

Get the value of the coordinate position vectors xyz.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

classmethod value_for_xyz(xyz)

Value for the xyz matrix constructed from the coordinates of the atoms for the coordinate. For instance, for a

xyz
xyz_delta = 0.001
class SumOfInternalCoordinates(subcoordinates, coefficients=None, **kwargs)
coefficients = []
compute_sum(*items)
generate_name(one_based=True)
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
grouper(n, iterable, fillvalue=None)

group(3, ‘ABCDEFG’, ‘x’) –> ABC DEF Gxx

ismethod(object)

Return true if the object is an instance method.

Instance method objects provide these attributes:
__doc__ documentation string __name__ name with which this method was defined im_class class object in which this method belongs im_func function object containing implementation of method im_self instance to which this method is bound, or None
isunit(unit)

Aliased as is_unit()

class partial

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

class product

product(*iterables) –> product object

Cartesian product of input iterables. Equivalent to nested for-loops.

For example, product(A, B) returns the same as: ((x,y) for x in A for y in B). The leftmost iterators are in the outermost for-loop, so the output tuples cycle in a manner similar to an odometer (with the rightmost element changing on every iteration).

To compute the product of an iterable with itself, specify the number of repetitions with the optional repeat keyword argument. For example, product(A, repeat=4) means the same as product(A, A, A, A).

product(‘ab’, range(3)) –> (‘a’,0) (‘a’,1) (‘a’,2) (‘b’,0) (‘b’,1) (‘b’,2) product((0,1), (0,1), (0,1)) –> (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ...

next

x.next() -> the next value, or raise StopIteration

strip_units
Strips the units off of a unitized object
(or, if the object is not Unitized, just return it). If convert_to is given, convert to these units if obj is Unitized. If assume_units is given, obj is assumed to have the units given by this argument if (and only if) it is not an instance of Unitized.

Aliased as stripunits()

Angstroms

alias of Angstrom

class Atom

Encapsulates an atom. Molecules are made up of Atoms.

Attributes :
position : Vector
The atom’s Cartesian coordinates [x y z] as a Vector object.
parent_molecule : Molecule
Reference back to the parent molecule of the atom. (Not set in initializer, but set when the atom gets included in a Molecule). Note that for purposes of pickling and copying this may become a weakref in the future. Do not implement behavior that depends on it being a strong reference.
zmat_label : str
Used in the construction of a z-matrix to differentiate atoms of the same Element. Currently not used anywhere else, and not set when any other Atom construction method is used.
base_atom = None
cart_coords
cart_indices
cartesian_units = None
convert_units(new_units)
displace()
displaced(disp_vect)

Creates an orphaned copy of atom and displaces it by disp_vect

element

The Element object corresponding to self. Updated transparently using the symbol property

full_symbol = None
in_units(new_units)
index = None
is_bonded_to(other_atom, n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)
is_ghost()
is_orphaned()
isotope

The isotope of the element that self is composed of. Defaults to element.principal_isotope

iter_cart_coords(with_index=False)
mass

The atom’s mass as a float (in AMU). Automatically retrieved from the element and isotope attributes.

parent

Alias for the parent_molecule attribute.

parent_molecule = None
pos

Alias for self.position. pos is also an alias for self.position

position = None
same_coordinate_tolerance = 1e-06
symbol

The atomic symbol from the periodic table (as a str object) , with correct capitalization. Updating this property transparently updates the Element object associated with self.

x
xyz

Alias for self.position. pos is also an alias for self.position

y
z
zmat_label = None
class BondAngle
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'phi'
default_delta = 0.02 Radian
terminal_atoms
classmethod value_for_xyz(xyz)
class BondLength
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'R'
default_delta = 0.01 Angstrom
classmethod value_for_xyz(xyz)
class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class InternalCartesian
default_delta = 0.01 Angstrom
class InternalCartesianX
analytic_b_orders = [1]
classmethod b_vector_for_positions(*args)
classmethod value_for_xyz(xyz)
class InternalCartesianY
analytic_b_orders = []
classmethod b_vector_for_positions(*args)
classmethod value_for_xyz(xyz)
class InternalCartesianZ
analytic_b_orders = [1]
classmethod b_vector_for_positions(*args)
classmethod value_for_xyz(xyz)
class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class IterableOf(types)
arg_type_okay(arg)
collection_type

alias of Iterable

types = None
class LightVector
is_cartesian()

Returns True if the vector is Cartesian (i.e. if the vector is two or three dimensional).

is_zero_vector(cutoff=None)

Alias for Tensor.is_zero()

static l_add(a, b)
l_cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

l_normalized()

Same as l_normalize(), but does not modify self

Aliased as normalized()

static l_sub(a, b)
magnitude()

The magnitude of the vector.

Aliased as norm()

norm(*fargs, **fkeywords)

Alias for magnitude()

normalize()

Performs an in-place normalization of self.

Examples :
>>> Vector(2.0, 0.0, 0.0).normalize()
Vector([ 1.,  0.,  0.])
>>> Vector(0.5, 0.5, 0.5).normalize()
Vector([ 0.57735027,  0.57735027,  0.57735027])
>>> v = Vector(-0.5, 0.5, -0.5).normalize()
>>> v
Vector([-0.57735027,  0.57735027, -0.57735027])
>>> v.magnitude()
1.0
normalized(*fargs, **fkeywords)

Alias for l_normalized()

size()

The number of entries in the vector

class Matrix

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

I
back_transformed(other)
col_iter
cols
columns
classmethod diagonal(iterable)
eigensystem(sort=False)

Wrapper to numpy.eigh and numpy.eig for symmetric and non-symmetric matrices, respectively. Note that the eigenvectors are column vectors in the returned matrix.

classmethod identity(n)
inverse_sqrt_matrix()
is_hermitian()
is_square()
is_symmetric()
ncols

Number of columns that self has

nrows

Number of rows that self has

row_iter
rows
sqrt_matrix()
symmetrized()
transformed(other)
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class SimpleInternalCoordinate

Superclass for all types of simple (non-symmetry, non-normal) internal coordinates.

Attributes :
atoms : list of Atom
list of Atom objects that the coordinate refers to
analytic_b_orders = [1]
atom_num(i)

Returns the number of the atom (as an index in self.molecule) that the i’th atom composing the coordinate self refers to.

static b_tensor_element_reindexed(current_coord, *coords)
classmethod b_vector_for_positions(*args)

Returns the b vector corresponding to a coordinate with atoms in the positions given as arguments (assumed to be Vector or at least LightVector instances). Note that the returned value uses the indexing scheme corresponding to the order of the argument’s passed in, not the indexing scheme corresponding to a Molecule instance somewhere.

copy_for_representation(rep, **kwargs)
copy_with_atoms(atoms, **kwargs)
created_coord_maps = {}
created_coords = {}
get_coord(ctype, *atoms)
value
value_for_molecule_matrix(mat)
classmethod value_for_positions(*posvects)

Get the value of the coordinate position vectors xyz.

Note

For angular coordinates, this always returns a value in Radians. value, value_with_units, and value_for_molecule, however, return values in self.units

classmethod value_for_xyz(xyz)

Value for the xyz matrix constructed from the coordinates of the atoms for the coordinate. For instance, for a

xyz
xyz_delta = 0.001
class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

generate_fixed_fragment_coords(a, b, c, *others)

TODO Document this

isunit(unit)

Aliased as is_unit()

overloaded

Overload a function the Pythonic (at least, Python 2) way.

Types can be specified using the overloaded instance decorator method overload_with (which is aliased as overload, submethod, and subfunction).

Examples :
>>> @overloaded
... def test():
...     raise TypeError
...
>>> @test.overload_with(int, int)
... def test(a, b=5):
...     return a+b
...
>>> @test.overload_with(str)
... def test(string, *args, **kwargs):
...     return string + (' ' if len(args) else '') + ', '.join(list(args) + kwargs.keys())
...
>>> @test.overload_with(list, func=callable)
... def test(lst, func, *args):
...     for item in lst:
...         if func(item, *args):
...             return item
...
>>> test(1, 3)
4
>>> test(17)
22
>>> test("Hello")
'Hello'
>>> test("Hello", "World")
'Hello World'
>>> test("Hello", "Earth", "Mars", "Jupiter")
'Hello Earth, Mars, Jupiter'
>>> test([1, 2, 3], lambda x: x**2 % 2 == 0)
2
>>> test([1, 2, 3], lambda x, y: x**2 % y == 0, 1)
1
>>> test(3.14159, 3.234)
Traceback (most recent call last):
    ...
TypeError: invalid function signature test(float, float).
  Available signatures are:
    test(a: int, b: int=5)
        Not valid signature because: argument 'a' is not of the correct type
    test(string: str, *args, **kwargs)
        Not valid signature because: argument 'string' is not of the correct type
    test(lst: list, func: <something for which callable(func) returns True>, *args)
        Not valid signature because: argument 'lst' is not of the correct type
>>> # giving multiple values for a keyword argument means there is no match.  For instance:
>>> test('Hello', 'World', string='this is wrong')
Traceback (most recent call last):
    ...
TypeError: invalid function signature test(str, str, string=str).
  Available signatures are:
    test(a: int, b: int=5)
        Not valid signature because: argument 'a' is not of the correct type
    test(string: str, *args, **kwargs)
        Not valid signature because: got multiple values for keyword argument 'string'
    test(lst: list, func: <something for which callable(func) returns True>, *args)
        Not valid signature because: argument 'lst' is not of the correct type
>>> # Methods in classes
>>> class Foo(object):
...     @overloaded
...     def bar(self, *args, **kwargs): pass
...
...     @bar.overload_with(a=int, b=int)
...     def bar(self, a, b):
...         if not hasattr(self, 'total'):
...             self.total = 0
...         self.total += a + b
...         return a + b
...
>>> foo = Foo()
>>> foo.bar(1,2)
3
>>> foo.bar(4,5)
9
>>> foo.total
12
>>> Foo.bar(foo, 7, 8)
15
>>> foo.total
27
class BondAngle
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'phi'
default_delta = 0.02 Radian
terminal_atoms
classmethod value_for_xyz(xyz)
class BondLength
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'R'
default_delta = 0.01 Angstrom
classmethod value_for_xyz(xyz)
class Torsion
analytic_b_orders = All
analytic_b_tensor_for_order(order)
classmethod b_vector_for_positions(*args)
coordinate_symbol = 'tau'
default_delta = 0.02 Radian
classmethod noncanonical_value_for_xyz(xyz)
preferred_range = [-3.141592653589793, 3.141592653589793]
terminal_atoms
class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
AMU

alias of AtomicMassUnit

Angstroms

alias of Angstrom

Attojoules

alias of AttoJoule

class Bohr
Centimeters

alias of CentiMeter

class DerivativeTensor
collection = None
compute_function = None
class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class ForceField(representation, max_order, property=<class 'grendel.chemistry.molecular_properties.Energy'>, property_units=None)
base_molecule
for_order()
in_representation(representation)
max_order = None
molecular_property = None
property_units = None
Hartrees

alias of Hartree

class Hertz
class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
Joules

alias of Joule

Kilogram

alias of KiloGram

class Matrix

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

I
back_transformed(other)
col_iter
cols
columns
classmethod diagonal(iterable)
eigensystem(sort=False)

Wrapper to numpy.eigh and numpy.eig for symmetric and non-symmetric matrices, respectively. Note that the eigenvectors are column vectors in the returned matrix.

classmethod identity(n)
inverse_sqrt_matrix()
is_hermitian()
is_square()
is_symmetric()
ncols

Number of columns that self has

nrows

Number of rows that self has

row_iter
rows
sqrt_matrix()
symmetrized()
transformed(other)
class Meter
class NormalCoordinate
atoms = None
b_vector = None
coordinate_symbol = 'q'
copy_for_representation(rep, **kwargs)
default_delta = 0.001 Angstrom / AtomicMassUnit**(1/2)
frequency = None
index = None
value_for_molecule_matrix(mat)
classmethod value_for_positions(*pos)
class NormalRepresentation
add_coordinate_copy(coordinate)
b_matrix
static convert_to_wavenumbers(tensor, energy_units)
copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class Second
classmethod to(other)
class Vector

Encapsulates a vector. Most functionality gets passed up to Tensor, which in turn passes things up to numpy.ndarray. Special functionality for vectors gets implemented here.

Examples :

Multiplication >>> from grendel.gmath import Matrix, Vector >>> Matrix([1,2],[3,4]) * Vector([5,6]) Vector([ 17., 39.])

Cartesian components >>> vtwo = Vector(1., 2.) >>> vthree = Vector(1.11, 2.22, 3.33) >>> vtwo[0] 1.0 >>> vtwo.x 1.0 >>> vtwo.y == vtwo[1] True >>> vthree[2] == vthree.z True >>> # Can also set: >>> vtwo.x = -1 >>> vtwo.y = -2 >>> vtwo Vector([-1., -2.]) >>> vthree.x, vthree.z, vthree.y = 1, 3, 2 >>> vthree Vector([ 1., 2., 3.])

column

Return the column-vector version of self, which is currently implemented as a Matrix object. Note that matrix-vector multiplication will work without getting column first, so don’t use this unless you have a good reason to do so.

cross(other)

Returns cross product of self with other. Wrapper to numpy.cross

normalized()

Same as normalize(), but does not modify self

reshape(newshape, order='C')

Overrides the numpy.ndarray reshape function to make things make sense.

Examples :
>>> v = Vector([1,2,3,4])
>>> v.reshape((2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
>>> # `v` is unchanged:
>>> v
Vector([ 1.,  2.,  3.,  4.])
>>> v.reshape((4,1))
Matrix([[ 1.],
        [ 2.],
        [ 3.],
        [ 4.]])
>>> import numpy as np
>>> np.reshape(v, (2,2))
Matrix([[ 1.,  2.],
        [ 3.,  4.]])
x

The x component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
x_axis = Vector([ 1., 0., 0.])
y

The y component of a cartesian vector

Raises :
IndexError
If the vector is not cartesian (i.e. if it is not two or three dimensional)
y_axis = Vector([ 0., 1., 0.])
z

The z component of a cartesian vector

Raises :
IndexError
If the vector is not three dimensional
z_axis = Vector([ 0., 0., 1.])
Wavenumbers

alias of Wavenumber

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

deepcopy(x, memo=None, _nil=[])

Deep copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

prod(seq)

Because NumPy’s prod function uses 32-bit integer arithmetic with silent handling of overflows, results are wrong if the correct answer would exceed the limits of a signed 32-bit integer. When operating on a sequence of integers, the prod function that we define here uses large integer arithmetic and thus always gives correct results.

class product

product(*iterables) –> product object

Cartesian product of input iterables. Equivalent to nested for-loops.

For example, product(A, B) returns the same as: ((x,y) for x in A for y in B). The leftmost iterators are in the outermost for-loop, so the output tuples cycle in a manner similar to an odometer (with the rightmost element changing on every iteration).

To compute the product of an iterable with itself, specify the number of repetitions with the optional repeat keyword argument. For example, product(A, repeat=4) means the same as product(A, A, A, A).

product(‘ab’, range(3)) –> (‘a’,0) (‘a’,1) (‘a’,2) (‘b’,0) (‘b’,1) (‘b’,2) product((0,1), (0,1), (0,1)) –> (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ...

next

x.next() -> the next value, or raise StopIteration

typechecked

Type checking for functions and methods.

class AtomicMassUnit
class ElectronVolt
class Element(symbol, atomic_number, isotopes, atomic_weight, atomic_weight_uncertainty=None, is_synthetic=False, **kwargs)

Encapsulates an element. Contains attributes that are constant for a given element.

add_isotope(iso)
atomic_number = None
atomic_weight = None
atomic_weight_uncertainty = None
electron_affinity = None
electronegativity = None
ionization_energies = None
is_synthetic = None
isotopes = None
principal_isotope

The most abundant isotope. This contains the default mass for the element.

symbol = None
vdw_radius = None
class Isotope(mass, mass_uncertainty, abundance, abundance_uncertainty, mass_number, special_symbol=None)

Struct for containing the information about an isotope. For abundance, None means trace abundance

abundance = None
element = None
is_principal()
mass = None
spin = None
symbol
KilojoulesPerMole

alias of KiloJoulePerMol

MASS_UNIT

alias of AtomicMassUnit

Picometers

alias of PicoMeter

class Atom

Encapsulates an atom. Molecules are made up of Atoms.

Attributes :
position : Vector
The atom’s Cartesian coordinates [x y z] as a Vector object.
parent_molecule : Molecule
Reference back to the parent molecule of the atom. (Not set in initializer, but set when the atom gets included in a Molecule). Note that for purposes of pickling and copying this may become a weakref in the future. Do not implement behavior that depends on it being a strong reference.
zmat_label : str
Used in the construction of a z-matrix to differentiate atoms of the same Element. Currently not used anywhere else, and not set when any other Atom construction method is used.
base_atom = None
cart_coords
cart_indices
cartesian_units = None
convert_units(new_units)
displace()
displaced(disp_vect)

Creates an orphaned copy of atom and displaces it by disp_vect

element

The Element object corresponding to self. Updated transparently using the symbol property

full_symbol = None
in_units(new_units)
index = None
is_bonded_to(other_atom, n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)
is_ghost()
is_orphaned()
isotope

The isotope of the element that self is composed of. Defaults to element.principal_isotope

iter_cart_coords(with_index=False)
mass

The atom’s mass as a float (in AMU). Automatically retrieved from the element and isotope attributes.

parent

Alias for the parent_molecule attribute.

parent_molecule = None
pos

Alias for self.position. pos is also an alias for self.position

position = None
same_coordinate_tolerance = 1e-06
symbol

The atomic symbol from the periodic table (as a str object) , with correct capitalization. Updating this property transparently updates the Element object associated with self.

x
xyz

Alias for self.position. pos is also an alias for self.position

y
z
zmat_label = None
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
exception InvalidZMatrixException(line)

Raised if a line of a z-matrix has the wrong number of entries.

exception InvalidXYZFormatError

Raised if an invalid string in the XYZ format is passed into the Molecule class constructor

class Element(symbol, atomic_number, isotopes, atomic_weight, atomic_weight_uncertainty=None, is_synthetic=False, **kwargs)

Encapsulates an element. Contains attributes that are constant for a given element.

add_isotope(iso)
atomic_number = None
atomic_weight = None
atomic_weight_uncertainty = None
electron_affinity = None
electronegativity = None
ionization_energies = None
is_synthetic = None
isotopes = None
principal_isotope

The most abundant isotope. This contains the default mass for the element.

symbol = None
vdw_radius = None
class Isotope(mass, mass_uncertainty, abundance, abundance_uncertainty, mass_number, special_symbol=None)

Struct for containing the information about an isotope. For abundance, None means trace abundance

abundance = None
element = None
is_principal()
mass = None
spin = None
symbol
class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class MatrixProperty(molecule, units=None, details=None)

A property whose value is a matrix.

from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in MatrixProperty.from_sequence

from_sequence(seq, units)

Default implementation for matrix properties; only works if seq is a MatrixRegexSequence

class MatrixRegexSequence(*args, **kwargs)

Special subclass of RegexSequence that make parsing matrices easier.

get_matrix()
transpose = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

class OrbitalEnergies(molecule, units=None, details=None)
default_units

alias of Wavenumber

class PartiallyConstructed(cls_to_construct, *args, **kwargs)
Allow classes to be “partially constructed” by wrapping the class’s __init__
and __new__ with a method that sets given attributes or appends certain keyword arguments to the initialzation call.
counter = 2
with_args(*args)
with_attributes(**kwargs)

Append some attributes to be set after the initialization is performed. Note that these override anything done in the class’s __init__, so don’t do anything stupid.

with_kwargs(**kwargs)
class ScalarProperty(molecule, units=None, details=None)

A property whose value is a scalar

from_groups(groups, units)

By default, just get the last group matched.

class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class TensorProperty(molecule, units=None, details=None)

A property whose value is an n-dimensional tensor

class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception ValueNotAvailableError

Raised when a MolecularProperty is requested but not available for whatever reason.

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class VectorProperty(molecule, units=None, details=None)

A property whose value is a vector.

abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

hasunits(*fargs, **fkeywords)

Alias for has_units()

isunit(unit)

Aliased as is_unit()

class partial

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

typechecked

Type checking for functions and methods.

with_attributes(**kwargs)

Decorator allowing the assignment of attributes to a function.

exception ArgTypeError

Convenience error to raise when an argument is not of the right types.

class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class DerivativeProperty(*args, **kwargs)
from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in from_sequence

from_sequence(seq, units)

Expects a MatrixRegexSequence which returns a Nx3 matrix

known_subclasses = {'_EnergyDerivative2': <class 'abc._EnergyDerivative2'>, '_EnergyDerivative1': <class 'abc._EnergyDerivative1'>}
order = None
classmethod with_respect_to(rep)
class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

EnergyGradient

alias of _PartiallyConstructed___EnergyDerivative1_0

EnergyHessian

alias of _PartiallyConstructed___EnergyDerivative2_1

Forces

alias of _PartiallyConstructed___EnergyDerivative1_0

Gradient

alias of _PartiallyConstructed___EnergyDerivative1_0

Hessian

alias of _PartiallyConstructed___EnergyDerivative2_1

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class MatrixRegexSequence(*args, **kwargs)

Special subclass of RegexSequence that make parsing matrices easier.

get_matrix()
transpose = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
MolecularPropertyDerivative(prop, representation=<class 'grendel.representations.cartesian_representation.CartesianRepresentation'>, order=1)

Factory for creating MolecularProperty subclasses that represent the nth derivative of a MolecularProperty with respect to some set of coordinates.

Several possibilities for representation: If it’s a Representation subclass, then we want that representation of the molecule in question (used when requesting the derivative). If it’s a representation instance, then we want the Derivative with respect to that specific representation (raises an error if it is not compatible). If it’s an arbitrary callable, then the callable is called with the contents of the file and should return a representation, which the (typically parsed-from-a-file) derivative is considered to be with respect to. The default is CartesianRepresentation.

Derivative properties can be automatically or manually transformed to other representations.

Aliased as PropertyDerivative()

class PartiallyConstructed(cls_to_construct, *args, **kwargs)
Allow classes to be “partially constructed” by wrapping the class’s __init__
and __new__ with a method that sets given attributes or appends certain keyword arguments to the initialzation call.
counter = 2
with_args(*args)
with_attributes(**kwargs)

Append some attributes to be set after the initialization is performed. Note that these override anything done in the class’s __init__, so don’t do anything stupid.

with_kwargs(**kwargs)
PropertyDerivative(*fargs, **fkeywords)

Alias for MolecularPropertyDerivative()

class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class RepresentationDependentProperty(molecule, units=None, details=None)

A property whose value is dependent on a given representation of the molecule.

get_value(*args, **kwargs)
molecule
representation
representation_getter = None
class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class TensorProperty(molecule, units=None, details=None)

A property whose value is an n-dimensional tensor

function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
raises_error(callable_obj, *args, **kwargs)

Returns True if a call of callable with args raises an error, and False if not. Note that the callable will get called, so don’t do anything that takes a long time or changes things in a way you don’t want them to be changed. If the optional keyword argument ‘error’ is given as either an Exception subclass or an Iterable, raises_error returns True if the call of callable raises the error given or one of the errors given in the list. (The keyword argument can also be named ‘errors’). Any other keyword arguments are passed through to callable.

Technical note: As per the Python manual, only exceptions that subclass from Exception (and not BaseException directly) will be recognized. According to the python users manual, you should never implement a user exception that subclasses from BaseException directly.

Examples :
>>> raises_error(int, "5")
False
>>> raises_error(int, "0x5ab7", 0)
False
>>> raises_error(lambda x: int(x), "5")
False
>>> raises_error(int, "abc")
True
>>> raises_error(int, "abc", error = ValueError)
True
>>> raises_error(int, "abc", error = BufferError)
False
>>> raises_error(int, "abc", error = (BufferError, EnvironmentError))
False
>>> raises_error(int, "abc", error = [BufferError, ValueError])
True
>>> raises_error(float, "abc")
True
>>> # Use raises_error to see what errors raises_error raises
... # Raise a type error if the first argument is not a callable (i.e. 17(25) doesn't make sense to Python)
... raises_error(raises_error, 17, 25, error = TypeError)
True
>>> # Raise a TypeError if the error keyword argument is not a subclass of Exception
... raises_error(lambda x: raises_error(int, x, error = "hello world"), 25, error = TypeError)
True
>>> raises_error(lambda x: raises_error(int, x, error = BaseException), 25, error = TypeError)
True
exception GroupTheoryError

Raised when something that’s not allowed in group theory is done.

class PointGroup(molecule, ops)

Encapsulates a point group.

classes = []
element_for(op)

Returns the element that is the same as op in the group self. This allows us to avoid duplication. When self._generate_elements is True, this adds op to self.operations if no operation is found that is the same as op (this should pretty much only be used by the internal PointGroup._close_group() private method. If you come up with another use for it, use it with care!) Otherwise, if an equivalent of op is not found, a GroupTheoryError is raised.

element_with_matrix(mat)

Returns the element that has the matrix mat in the group self. Raises a GroupTheoryError indicating the group is not closed if no such element is found.

identity_element = None
improper_rotations = None
inversion = None
molecule = None
name = None
num_C_n_axes(n)

Returns the number of (unique) axes of order n in the point group

operations = []
reflections = None
ring_angle_tolerance = 0.03490658503988659
rotations = None
symmetry_tolerance = 0.0001
class ConjugacyClass(*initial_elements)
add_element(el)

Adds an element to the conjugacy class (if it has not already been added)

elements = []
first_element = None
order
class SymmetryOperation

The abstract superclass for elements of point groups.

Attributes :
name : str
An attempt at creating a human-readable name for the operation.
conjugacy_class = None
inverse = None
classmethod is_perpendicular(v1, v2)
classmethod is_same_axis(a1, a2, parallel_only=False)

True if the axes a1 and a2 are parallel or antiparallel. Note that normalized versions of a1 and a2 are used, so normalizing before passing in will just slow things down. If parallel_only is True (it is False by default), this method only returns True if the two axes are parallel, not anti_parallel.

classmethod is_same_matrix(m1, m2)

True if (a1-a2).norm() < SymmetryOperation.same_operation_tolerance (See ~pyobj:grendel.gmath.tensor.Tensor.norm for description of what is meant by norm here)

matrix

The Matrix that transforms the molecule according to the symmetry operation self

molecule

The Molecule that the operation acts on

name = None
perpendicular_tolerance = 0.017453292519943295
point_group = None
same_axis_tolerance = 0.0001
same_operation_tolerance = 0.0001
zero_vector_cutoff = 1e-05
class IdentityOperation(point_group=None)

The identity (E) element of a point group.

matrix
class Rotation(n, axis, exponent=1, point_group=None)

A rotation (C_n^m) element of a point group.

Attributes :
n : int
The order of the rotation (e.g. for a C_3 operation, n=3)
axis : Vector
The axis about which the operation occurs
exponent : int
The number of times the operation is applied. (e.g. for C_3, exponent = 1, for C_3^2, exponent = 2, etc.)
classmethod about_axis(molecule, axis, max_order)
axis = None
exponent = None
classmethod from_matrix(matrix)
matrix
n = None
theta

The angle of rotation, in Radians

class Reflection(axis, point_group=None)

A reflection (sigma) element of a point group.

axis = None
is_dihedral()

Whether or not the reflection is a sigma_d

is_principal_reflection()
matrix
principal_reflection = False
classmethod with_normal(molecule, axis)
class Inversion(point_group=None)

An inversion (i) element of a point group.

classmethod exists_for_molecule(molecule)
matrix
class ImproperRotation(n, axis, exponent=1, point_group=None)

An improper rotation (S_n^m) element of a point group.

Attributes :
n : int
The order of the rotation (e.g. for a S_3 operation, n=3)
axis : Vector
The axis about which the operation occurs
exponent : int
The number of times the operation is applied. (e.g. for S_5, exponent = 1, for S_5^4, exponent = 4, etc.)
classmethod about_axis(molecule, axis, max_ring)
axis = None
exponent = None
matrix
n = None
class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

exception ArgTypeError

Convenience error to raise when an argument is not of the right types.

class CartesianRepresentation

A representations of a molecule in Cartesian coordinates. Since Atom objects already have Cartesian vectors associated with them, this class mostly consists of helper functions and convenience (accessor) functions that make CartesianRepresentation compatible with the parent Representation class.

add_atom(atom)

Add an atom to the representation by creating a CartesianCoordinate object cooresponding to the atom.

add_coordinate_copy()

Add a CartesianCoordinate to the representation.

atom(number)

Convenience method for accessing atoms. Returns self.molecule.atoms[number]

atom_coords(atom_or_index)
atoms

Convenience property for referencing the atoms list in the molecule associated with self.

copy_with_molecule(molecule)
displaced_by(disp, tol=None, maxiter=None)
frozen_copy()
index(atom_or_coordinate)

Returns the index of the parameter atom in the representation self.

Parameters :
atom_or_coordinate : Atom or CartesianCoordinate
The atom or cartesian coordinate to obtain the index of. If an atom is passed in, the index of the X coordinate of the atom is returned.
Raises :
IndexError
If the parameter atom_or_coordinate is not found.
iter_atom_coords(with_atom=False)
l_xyz

Returns the value of the representation as a light vector

refresh_atom()

Renew the coordinates for an atom to coincide with the atom’s current position

static same_atom_indices(index)
transform_forcefield()
transform_tensor()
class Computation

Base class for all classes encapsulating runs of external programs

additional_safe_directory_characters = '+'
already_run()

Checks to see if an identical input file with an identical name has already been run in the computation’s directory to produce an output file of some sort (if that output file has errors, you probably don’t want to rerun the exact same input file, so this doesn’t do that by default. If you need to do that, call Computation.run() with the force_rerun argument set to True).

always_create_missing = False
attribute_aliases = {'Theory': ['Method', 'LevelOfTheory']}
completed

True if and only if the calculation has finished running. (regardless of success or failure). Setting completed to True triggers the output parser.

details = None
directory = None
directory_template = None
get_energy(details=None)
get_property(prop_class, details=None)
get_results()
has_energy(details=None)
has_property(prop_class, details=None)
input_generator = None
molecule = None
needed_properties

The types of the properties in the self.properties list.

needs_property(prop)
output_parser = None
properties = []
queued = False
run(force_rerun=False, lock=None)
runner = None
classmethod standardize_attribute(attr)

Convert strings to standard form for attributes. Strings with spaces, underscore_joined_strings, Uppercase_Underscore_Strings, and lowerCamelCase strings are all converted to UpperCamelCase.

Examples :
>>> Computation.standardize_attribute("basis_set")
'BasisSet'
>>> Computation.standardize_attribute("basis set")
'BasisSet'
>>> Computation.standardize_attribute("basis!Set")
'BasisSet'
>>> # Only _ and space serve as CamelCase separators:
>>> Computation.standardize_attribute("basis!set")
'Basisset'
>>> Computation.standardize_attribute("Level___of!*theory")
'LevelOftheory'
>>> # "Accidental" caps are not fixed...
>>> Computation.standardize_attribute("Level___of!*tHEory")
'LevelOftHEory'
>>> #All caps gets translated into title case
>>> Computation.standardize_attribute("Level&$#of__THEORY")
'LevelofTheory'
start()
started = False
task_description()
class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
exception ComputationFailureError

Thrown when a computation fails for one reason or another

class ComputationResultGetter
add_computation(comp)
can_get_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

can_get_property_for_molecule(molecule, property, details=None)

Aliased as has_property(), can_get_property()

computation_kwargs = None
computations = None
directory_series = {}
get_computation_for_property(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

has_property_for_molecule(molecule, property, details=None, verbose=False)
known_result_getters = {}
use_directory_series = None
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class DerivativeProperty(*args, **kwargs)
from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in from_sequence

from_sequence(seq, units)

Expects a MatrixRegexSequence which returns a Nx3 matrix

known_subclasses = {'_EnergyDerivative2': <class 'abc._EnergyDerivative2'>, '_EnergyDerivative1': <class 'abc._EnergyDerivative1'>}
order = None
classmethod with_respect_to(rep)
class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

EnergyGradient

alias of _PartiallyConstructed___EnergyDerivative1_0

EnergyHessian

alias of _PartiallyConstructed___EnergyDerivative2_1

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

Forces

alias of _PartiallyConstructed___EnergyDerivative1_0

Gradient

alias of _PartiallyConstructed___EnergyDerivative1_0

Hessian

alias of _PartiallyConstructed___EnergyDerivative2_1

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class InputGenerator(computation)

Abstract base class for classes that generate input files.

computation = None
generate(filename)
generated = None
needed_properties
validate()

Determine if we will be able to generate an input.

class InternalRepresentation

An internal coordinate representations of a molecule. TODO: More thoroughly document what this means.

BEND_NAMES = ['bend', 'angle']
STRE_NAMES = ['str', 'stre', 'bond']
TORS_NAMES = ['tors']
a_matrix

The El’yashevich–Wilson B matrix pseudoinverse, with the Sayvetz conditions used to generate the inverse mass external conditions.

add_coordinate_copy()
b_matrix

The El’yashevich–Wilson B matrix for the molecule in the representation.

b_tensor(cartesian_representation=None)
copy_with_molecule(molecule)
default_units = {<class 'grendel.util.units.unit.DistanceUnit'>: Angstrom, <class 'grendel.util.units.unit.AngularUnit'>: Degree}
displaced_by(disp, tol=None, maxiter=None)
g_matrix
is_valid()
transform_forcefield(ff, to_representation)
transform_tensor(tensor, to_representation)
validate()
zero_eigenvalue = 1e-08
class Iterable
class MatrixProperty(molecule, units=None, details=None)

A property whose value is a matrix.

from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in MatrixProperty.from_sequence

from_sequence(seq, units)

Default implementation for matrix properties; only works if seq is a MatrixRegexSequence

class MatrixRegexSequence(*args, **kwargs)

Special subclass of RegexSequence that make parsing matrices easier.

get_matrix()
transpose = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
MolecularPropertyDerivative(prop, representation=<class 'grendel.representations.cartesian_representation.CartesianRepresentation'>, order=1)

Factory for creating MolecularProperty subclasses that represent the nth derivative of a MolecularProperty with respect to some set of coordinates.

Several possibilities for representation: If it’s a Representation subclass, then we want that representation of the molecule in question (used when requesting the derivative). If it’s a representation instance, then we want the Derivative with respect to that specific representation (raises an error if it is not compatible). If it’s an arbitrary callable, then the callable is called with the contents of the file and should return a representation, which the (typically parsed-from-a-file) derivative is considered to be with respect to. The default is CartesianRepresentation.

Derivative properties can be automatically or manually transformed to other representations.

Aliased as PropertyDerivative()

class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

class OrbitalEnergies(molecule, units=None, details=None)
default_units

alias of Wavenumber

class OutputParser(computation, property_parsers=None)

Abstract base class for classes that parse the output file for a computation.

computation = None
molecule
needed_indices
needed_properties
parse_file(file)
property_parsers = None
reset()
valid_parsers = None
validate()
class PackageInterface(input_generator, runner, output_parser)

Container for the various custom classes needed to run a calculation in a given software package.

computation_class

alias of Computation

details_class

alias of ComputationDetails

input_generator = None
classmethod load_package(name, input_generator=None, output_parser=None, runner=None, details_class=None, computation_class=None)

Load a package with the given name to be used for computations. Optionally, specify specific subclasses to use for certain things.

output_parser = None
runner = None
class PartiallyConstructed(cls_to_construct, *args, **kwargs)
Allow classes to be “partially constructed” by wrapping the class’s __init__
and __new__ with a method that sets given attributes or appends certain keyword arguments to the initialzation call.
counter = 2
with_args(*args)
with_attributes(**kwargs)

Append some attributes to be set after the initialization is performed. Note that these override anything done in the class’s __init__, so don’t do anything stupid.

with_kwargs(**kwargs)
PropertyDerivative(*fargs, **fkeywords)

Alias for MolecularPropertyDerivative()

class Representation

Superclass of all the representations types.

Attributes :
molecule : Molecule

The Molecule object represented by self.

coords : list of Coordinate

The coordinates that make up the representation

add_coordinate_copy(coordinate)
coords = None
copy_with_molecule(molecule)

Make a copy of self that is the same in every way except for the molecule attribute. New Coordinate objects are created using the Coordinate.copy_for_representation() method for each element of self.coords. This is an abstract method that must be implemented by all Representation subclasses.

displaced_by(disp, tol=None, maxiter=None)

Apply the Displacement instance disp to the molecule and current representation, generating a new molecule and a new representation (which start as a deepcopy and the return value of Representation.copy_with_molecule, respectively) with the displacement applied. This is an abstract method that must be implemented by all Representation subclasses.

molecule = None
units = None
value
value_for_matrix(*fargs, **fkeywords)

Alias for values_for_matrix()

value_for_molecule(*fargs, **fkeywords)

Alias for values_for_molecule()

values
values_for_matrix(mat)

Aliased as value_for_matrix()

values_for_molecule(mol)

Aliased as value_for_molecule()

class RepresentationDependentProperty(molecule, units=None, details=None)

A property whose value is dependent on a given representation of the molecule.

get_value(*args, **kwargs)
molecule
representation
representation_getter = None
class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class Runner(input_file=None, output_file=None, **kwargs)

Abstract base class for classes that run a computation (or an equivalent task, such as submit a job to a PBS queue). Not all Computation objects need a runner; for instance XML-parsed computations are constructed in an already-run state.

command_sequence = None
default_input_filename = 'input.dat'
default_output_filename = 'output.dat'
environment = None
input_file = None
output_file = None
process = None
run()

Run in a blocking manner. Default implementation calls wait() on the process returned by start(). Overload it if this doesn’t make sense.

start()
stderr = None
stdin = None
stdout = None
validate()

Determine if we will be able to run. Raise a ComputationUnavailableError if running will cause a crash

working_directory = None
class ScalarProperty(molecule, units=None, details=None)

A property whose value is a scalar

from_groups(groups, units)

By default, just get the last group matched.

TemporaryFile(mode='w+b', bufsize=-1, suffix='', prefix='tmp', dir=None)

Create and return a temporary file. Arguments: ‘prefix’, ‘suffix’, ‘dir’ – as for mkstemp. ‘mode’ – the mode argument to os.fdopen (default “w+b”). ‘bufsize’ – the buffer size argument to os.fdopen (default -1). The file is created as mkstemp() would do it.

Returns an object with a file-like interface. The file has no name, and will cease to exist when it is closed.

class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class TensorProperty(molecule, units=None, details=None)

A property whose value is an n-dimensional tensor

class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception ValueNotAvailableError

Raised when a MolecularProperty is requested but not available for whatever reason.

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class VectorProperty(molecule, units=None, details=None)

A property whose value is a vector.

abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
class acquired_lock(lock)

Execute code with a lock acquired before the block of code and released afterwards

classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

full_path(path)
function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
grouper(n, iterable, fillvalue=None)

group(3, ‘ABCDEFG’, ‘x’) –> ABC DEF Gxx

hasunits(*fargs, **fkeywords)

Alias for has_units()

indent(*fargs, **fkeywords)

Alias for indented()

class islice

islice(iterable, [start,] stop [, step]) –> islice object

Return an iterator whose next() method returns selected values from an iterable. If start is specified, will skip all preceding elements; otherwise, start defaults to zero. Step defaults to one. If specified as another value, step determines how many values are skipped between successive calls. Works like a slice() on a list but returns an iterator.

next

x.next() -> the next value, or raise StopIteration

isunit(unit)

Aliased as is_unit()

make_safe_identifier(instr, replace_with='_')
class partial

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

pop_kwarg(kwarg_dict, *args)

Utility function for getting the value of a keyword argument that can be named multiple things and popping that value off of the kwarg dictionary. If the None of the keywords given are found in kwarg_dict, None is returned.

See Also:

get_multikwarg

raises_error(callable_obj, *args, **kwargs)

Returns True if a call of callable with args raises an error, and False if not. Note that the callable will get called, so don’t do anything that takes a long time or changes things in a way you don’t want them to be changed. If the optional keyword argument ‘error’ is given as either an Exception subclass or an Iterable, raises_error returns True if the call of callable raises the error given or one of the errors given in the list. (The keyword argument can also be named ‘errors’). Any other keyword arguments are passed through to callable.

Technical note: As per the Python manual, only exceptions that subclass from Exception (and not BaseException directly) will be recognized. According to the python users manual, you should never implement a user exception that subclasses from BaseException directly.

Examples :
>>> raises_error(int, "5")
False
>>> raises_error(int, "0x5ab7", 0)
False
>>> raises_error(lambda x: int(x), "5")
False
>>> raises_error(int, "abc")
True
>>> raises_error(int, "abc", error = ValueError)
True
>>> raises_error(int, "abc", error = BufferError)
False
>>> raises_error(int, "abc", error = (BufferError, EnvironmentError))
False
>>> raises_error(int, "abc", error = [BufferError, ValueError])
True
>>> raises_error(float, "abc")
True
>>> # Use raises_error to see what errors raises_error raises
... # Raise a type error if the first argument is not a callable (i.e. 17(25) doesn't make sense to Python)
... raises_error(raises_error, 17, 25, error = TypeError)
True
>>> # Raise a TypeError if the error keyword argument is not a subclass of Exception
... raises_error(lambda x: raises_error(int, x, error = "hello world"), 25, error = TypeError)
True
>>> raises_error(lambda x: raises_error(int, x, error = BaseException), 25, error = TypeError)
True
typechecked

Type checking for functions and methods.

warn()

Issue a warning, or maybe ignore it or raise an exception.

with_attributes(**kwargs)

Decorator allowing the assignment of attributes to a function.

with_flexible_arguments(required=None, optional=None, what_to_call_it=None)

Allows the creation of functions with case insensative, alternately named keyword arguments.

Examples :
>>> @with_flexible_arguments(
...     required=[
...         ('name', 'greet', 'name_to_greet'),
...         ('from_where', 'source')
...     ],
...     optional=[
...         ('greeting', 'hello_phrase', 'salutation'),
...         ('message',)
...     ]
... )
... def say_hello(name, from_where, greeting='Hello', message=''):
...     print(greeting + ', ' + name + ', from ' + from_where + '!' + message)
...
>>> say_hello('moon', 'Earth')
Hello, moon, from Earth!
>>> say_hello('world', source='the moon')
Hello, world, from the moon!
>>> say_hello(source='France', name_to_greet='visitor', salutation='Bonjour')
Bonjour, visitor, from France!
>>> say_hello('earthlings', 'outer space', 'Greetings', message='  We come in peace!')
Greetings, earthlings, from outer space!  We come in peace!
class working_directory(dir, permissions=0, create=False)

Change to a certain working directory for the execution of a block of code, then change back upon (any kind of) exit.

class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
Methods

Simple container for keyword-like objects (“sentinal values”). Can also be used as a container for sub-keywords via instance objects. Sub-keywords are case-insensative. Keywords cannot be assigned values using the value attribute (note that this means you can’t create a sub-keyword called ‘value’).

Warning

Since there is exactly one instance of every unique keyword (with two keywords that differ by capitalization not being unique), storing a value can have some unexpected consequences. For instance:

>>> Hello = Keyword('Hello')
>>> foo = Hello.World
>>> foo.value = "good bye"
>>> # ...some time later...
>>> Hello.WORLD.value = "good night"
>>> foo.value
'good night'

Note

Since value, parent, _parent, parents, _name, and any of the double-underscore methods inherited from object are already attributes of Keyword objects, you can’t make sub-keywords with these names. Everything else is fair game.

Examples :
>>> Hello = Keyword('Hello')
>>> Hello.World
Hello.World
>>> # Any future changes in case simply refer back to the original
>>> Hello.WoRlD
Hello.World
>>> # But, of course, not for the first level
>>> hEllO.World
Traceback (most recent call last):
   ...
NameError: name 'hEllO' is not defined
>>> # Multiple levels can be created at once
>>> Hello.there.world
Hello.there.world
>>> Hello.there == Hello.ThErE
True
>>> Hello.there == Hello.ThErE.world
False
>>> Hello.there.WORLD == Hello.ThErE.world
True
>>> Hello.There.World.value = "Hello World"
>>> Hello.THERE.WORLD.value
'Hello World'
Bases

Simple container for keyword-like objects (“sentinal values”). Can also be used as a container for sub-keywords via instance objects. Sub-keywords are case-insensative. Keywords cannot be assigned values using the value attribute (note that this means you can’t create a sub-keyword called ‘value’).

Warning

Since there is exactly one instance of every unique keyword (with two keywords that differ by capitalization not being unique), storing a value can have some unexpected consequences. For instance:

>>> Hello = Keyword('Hello')
>>> foo = Hello.World
>>> foo.value = "good bye"
>>> # ...some time later...
>>> Hello.WORLD.value = "good night"
>>> foo.value
'good night'

Note

Since value, parent, _parent, parents, _name, and any of the double-underscore methods inherited from object are already attributes of Keyword objects, you can’t make sub-keywords with these names. Everything else is fair game.

Examples :
>>> Hello = Keyword('Hello')
>>> Hello.World
Hello.World
>>> # Any future changes in case simply refer back to the original
>>> Hello.WoRlD
Hello.World
>>> # But, of course, not for the first level
>>> hEllO.World
Traceback (most recent call last):
   ...
NameError: name 'hEllO' is not defined
>>> # Multiple levels can be created at once
>>> Hello.there.world
Hello.there.world
>>> Hello.there == Hello.ThErE
True
>>> Hello.there == Hello.ThErE.world
False
>>> Hello.there.WORLD == Hello.ThErE.world
True
>>> Hello.There.World.value = "Hello World"
>>> Hello.THERE.WORLD.value
'Hello World'
Basis

Simple container for keyword-like objects (“sentinal values”). Can also be used as a container for sub-keywords via instance objects. Sub-keywords are case-insensative. Keywords cannot be assigned values using the value attribute (note that this means you can’t create a sub-keyword called ‘value’).

Warning

Since there is exactly one instance of every unique keyword (with two keywords that differ by capitalization not being unique), storing a value can have some unexpected consequences. For instance:

>>> Hello = Keyword('Hello')
>>> foo = Hello.World
>>> foo.value = "good bye"
>>> # ...some time later...
>>> Hello.WORLD.value = "good night"
>>> foo.value
'good night'

Note

Since value, parent, _parent, parents, _name, and any of the double-underscore methods inherited from object are already attributes of Keyword objects, you can’t make sub-keywords with these names. Everything else is fair game.

Examples :
>>> Hello = Keyword('Hello')
>>> Hello.World
Hello.World
>>> # Any future changes in case simply refer back to the original
>>> Hello.WoRlD
Hello.World
>>> # But, of course, not for the first level
>>> hEllO.World
Traceback (most recent call last):
   ...
NameError: name 'hEllO' is not defined
>>> # Multiple levels can be created at once
>>> Hello.there.world
Hello.there.world
>>> Hello.there == Hello.ThErE
True
>>> Hello.there == Hello.ThErE.world
False
>>> Hello.there.WORLD == Hello.ThErE.world
True
>>> Hello.There.World.value = "Hello World"
>>> Hello.THERE.WORLD.value
'Hello World'
class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Computation

Base class for all classes encapsulating runs of external programs

additional_safe_directory_characters = '+'
already_run()

Checks to see if an identical input file with an identical name has already been run in the computation’s directory to produce an output file of some sort (if that output file has errors, you probably don’t want to rerun the exact same input file, so this doesn’t do that by default. If you need to do that, call Computation.run() with the force_rerun argument set to True).

always_create_missing = False
attribute_aliases = {'Theory': ['Method', 'LevelOfTheory']}
completed

True if and only if the calculation has finished running. (regardless of success or failure). Setting completed to True triggers the output parser.

details = None
directory = None
directory_template = None
get_energy(details=None)
get_property(prop_class, details=None)
get_results()
has_energy(details=None)
has_property(prop_class, details=None)
input_generator = None
molecule = None
needed_properties

The types of the properties in the self.properties list.

needs_property(prop)
output_parser = None
properties = []
queued = False
run(force_rerun=False, lock=None)
runner = None
classmethod standardize_attribute(attr)

Convert strings to standard form for attributes. Strings with spaces, underscore_joined_strings, Uppercase_Underscore_Strings, and lowerCamelCase strings are all converted to UpperCamelCase.

Examples :
>>> Computation.standardize_attribute("basis_set")
'BasisSet'
>>> Computation.standardize_attribute("basis set")
'BasisSet'
>>> Computation.standardize_attribute("basis!Set")
'BasisSet'
>>> # Only _ and space serve as CamelCase separators:
>>> Computation.standardize_attribute("basis!set")
'Basisset'
>>> Computation.standardize_attribute("Level___of!*theory")
'LevelOftheory'
>>> # "Accidental" caps are not fixed...
>>> Computation.standardize_attribute("Level___of!*tHEory")
'LevelOftHEory'
>>> #All caps gets translated into title case
>>> Computation.standardize_attribute("Level&$#of__THEORY")
'LevelofTheory'
start()
started = False
task_description()
class ComputationOptimizationResultGetter
can_get_property_for_molecule(molecule, property, details=None)
computations = None
get_optimized_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_optimized_property_for_molecule(molecule, property, details=None, verbose=False)
has_property_for_molecule(molecule, property, details=None, verbose=False)
class ComputationResultGetter
add_computation(comp)
can_get_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

can_get_property_for_molecule(molecule, property, details=None)

Aliased as has_property(), can_get_property()

computation_kwargs = None
computations = None
directory_series = {}
get_computation_for_property(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

has_property_for_molecule(molecule, property, details=None, verbose=False)
known_result_getters = {}
use_directory_series = None
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class OptimizationResultGetter
can_optimize_property_for_molecule(molecule, property, details=None)
get_optimized_property_for_molecule(molecule, property, details=None)
has_optimized_property_for_molecule(molecule, property, details=None, verbose=False)
known_optimizers = {}
class ResultGetter

Abstract base class for all classes that encapsulate a method of retrieving a (set of) properties of a molecule from a computational chemistry package. An instance of a ResultGetter object should know how to turn a request for a given molecular property into a Computation object (which, in turn, houses MolecularProperty objects for one or more Molecule objects). ResultGetter objects generate Computation objects. Any ResultGetter subclass should always check for an available computation on (exactly) the same molecule that already has the result available.

can_get_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=False)
abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class DetailSpecificObject

Superclass for classes that are compatible with specific ComputationDetail objects or any ComputationDetail object more specifically specifice than the details variable.

compatible_with_details(details)
details = None
unsupported_details = None
class Differentiable

Abstract base class for things that you are allowed to take derivatives of.

shape
value

The value of the differentiable property. If this function is not overridden, assume that self can be added and subtracted, as well as multiplied by a float.

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

class InputGenerator(computation)

Abstract base class for classes that generate input files.

computation = None
generate(filename)
generated = None
needed_properties
validate()

Determine if we will be able to generate an input.

class InputGeneratorFactory

A collection of convenience methods for generating InputGenerator classes

generated_number = 0
classmethod template_based_class(filename, required_details=None, property=All, class_name=None)
class Iterable
class Keyword(name, parent=None)

Simple container for keyword-like objects (“sentinal values”). Can also be used as a container for sub-keywords via instance objects. Sub-keywords are case-insensative. Keywords cannot be assigned values using the value attribute (note that this means you can’t create a sub-keyword called ‘value’).

Warning

Since there is exactly one instance of every unique keyword (with two keywords that differ by capitalization not being unique), storing a value can have some unexpected consequences. For instance:

>>> Hello = Keyword('Hello')
>>> foo = Hello.World
>>> foo.value = "good bye"
>>> # ...some time later...
>>> Hello.WORLD.value = "good night"
>>> foo.value
'good night'

Note

Since value, parent, _parent, parents, _name, and any of the double-underscore methods inherited from object are already attributes of Keyword objects, you can’t make sub-keywords with these names. Everything else is fair game.

Examples :
>>> Hello = Keyword('Hello')
>>> Hello.World
Hello.World
>>> # Any future changes in case simply refer back to the original
>>> Hello.WoRlD
Hello.World
>>> # But, of course, not for the first level
>>> hEllO.World
Traceback (most recent call last):
   ...
NameError: name 'hEllO' is not defined
>>> # Multiple levels can be created at once
>>> Hello.there.world
Hello.there.world
>>> Hello.there == Hello.ThErE
True
>>> Hello.there == Hello.ThErE.world
False
>>> Hello.there.WORLD == Hello.ThErE.world
True
>>> Hello.There.World.value = "Hello World"
>>> Hello.THERE.WORLD.value
'Hello World'
parent

The keyword immediately preceding self in the heirarchical keyword notation. For instance:

>>> Hello = Keyword('Hello')
>>> Hello.World.parent
Hello
>>> Hello.There.World.parent
Hello.There
parents

list of all parent keywords, ordered from immediate parent to most distant

value = None
class MatrixProperty(molecule, units=None, details=None)

A property whose value is a matrix.

from_groups(groups, units)

Placeholder implementation to satisfy abstract class requirements. Everything is already taken care of in MatrixProperty.from_sequence

from_sequence(seq, units)

Default implementation for matrix properties; only works if seq is a MatrixRegexSequence

class MatrixRegexSequence(*args, **kwargs)

Special subclass of RegexSequence that make parsing matrices easier.

get_matrix()
transpose = None
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class Molecule

Encapsulates all of the functionality and attributes of a Molecule itself.

Signatures :
  • Molecule(xyz_string)
  • Molecule(atoms)
  • Molecule(atom_names, cart_mat)
Parameters :
xyz_string : str
a string in the format of a standard .xyz file
atoms : list of Atom
a list of Atom objects
atom_names : list of str
a list of atomic symbols corresponding to the rows of the cart_mat parameter
cart_mat : Matrix
an Nx3 Matrix of positions
Other Parameters:
 
description : str
optional keyword argument that works with all forms. See the description attribute
Attributes :

atoms : list of Atom internal_representations : list of InternalRepresentation normal_representation : NormalRepresentation cartesian_representation : CartesianRepresentation description : str

Examples :

Constructor

>>> Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])
>>> Molecule([
...     Atom('H', [0,0,0]),
...     Atom('H', [0,0,0.75])
... ])
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  0.75000000 ] )
])
>>> Molecule(['H','C'], Matrix([[0,0,0],[1,0.5,0]]))
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('C', [  1.00000000,  0.50000000,  0.00000000 ] )
])
>>> mol = Molecule("""
...     5
...
...     C        0.000000        0.000000        0.000000
...     H        0.000000        0.000000        1.089000
...     H        1.026719        0.000000       -0.363000
...     H       -0.513360       -0.889165       -0.363000
...     H       -0.513360        0.889165       -0.363000
... """)
>>> mol
Molecule([
    Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] ),
    Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] ),
    Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] ),
    Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
])

Iteration

>>> from __future__ import print_function
>>> for atom in mol:
...     print(repr(atom))
...
Atom('C', [  0.00000000,  0.00000000,  0.00000000 ] )
Atom('H', [  0.00000000,  0.00000000,  1.08900000 ] )
Atom('H', [  1.02671900,  0.00000000, -0.36300000 ] )
Atom('H', [ -0.51336000, -0.88916500, -0.36300000 ] )
Atom('H', [ -0.51336000,  0.88916500, -0.36300000 ] )
A_e = None
B_e = None
C_e = None
Z = None
a

The first principal axis of rotation, a. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

classmethod acene(length, rx=2.42260241888759, rcc_cross=1.41, rcc_side=1.398821025, rch=1.0800004490739805)
atoms = None
b

The second principal axis of rotation, b. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

c

The third principal axis of rotation, c. The positive phase is always chosen.

Note

This property depends directly on Molecule.principal_axes(), which is cached. See discussion of caching in A_e

can_get_energy(details=None)
can_get_property(property, details=None)
cartesian_representation

The current default cartesian representation associated with the molecule. If the molecule has multiple cartesian representations, the first in the list self.cartesian_representations is returned. The setter for this property pushes the cartesian representation onto the front of the list.

Note

The setter does not check for uniqueness (unless it’s exactly the same object as another CartesianRepresentation). Thus, you should check to make sure the CartesianRepresentation you are assigning to the molecule is not already part of the molecule’s list of representations (to the degree of accuracy required for your particular application) before assigning. Repeatedly failing to do this check could cause runaway memory usage.

cartesian_units = None
center_of_mass()

Returns a Vector giving the center of mass of the molecule in the current Cartesian representation. The units of the returned value are self.cartesian_units.

Note

This result of this method is cached, and the cached value gets flushed in update_cartesian_representation(). If you change an atom’s position (or mass) and forget to call update_cartesian_representation(), you may get some funny results for this method or any methods that depend on it, including recenter(), reorient(), and principal_moments_of_inertia(). You can detect whether caching is causing problems by setting the environment variable GRENDEL_NO_CACHE to 1 and rerunning your tests. If tests that were failing subsequently succeed, you probably forgot to call update_cartesian_representation() somewhere, or you were assuming that it was automatically called somewhere when in fact it was not getting called.

computations = None
convert_units(new_units)
copy_with_atoms(new_atoms, deep_copy=False, deep_copy_memo=None, new_charge=None, new_multiplicity=None, new_description=None)
copy_without_ghost_atoms()
default_charge = 0
default_multiplicity = 1
description = None
displace()
displacement = None
displacement_description(eq_name='eq', divider='_', delta_name='', one_based=True, include_zeros=False)
fragment(atom_numbers, charge=None, multiplicity=None, description=None)
classmethod from_identifier(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

classmethod from_z_matrix(*args, **kwargs)

TODO Document this more

Signatures :
  • Molecule.from_z_matrix(atom1, atom2, ...)
  • Molecule.from_z_matrix(atoms, create_representation = False)
Examples :
>>> Molecule.from_z_matrix("""
... O
... H1 O 1.0
... H2 O 1.0 H1 90.0
... """)
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
>>> Molecule.from_z_matrix(
...    [
...       ['H'],
...       ['O', 1, 0.9],
...       ['O', 2, 1.4, 1, 105.0],
...       ['H', 3, 0.9, 2, 105.0, 1, 120.0]
...   ]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] ),
    Atom('O', [  0.00000000,  1.35229616,  1.26234666 ] ),
    Atom('H', [ -0.75286467,  1.46479616,  1.74249095 ] )
])
>>> Molecule.from_z_matrix(
...       ['H'],
...       ['O', 1, 0.9]
... )
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('O', [  0.00000000,  0.00000000,  0.90000000 ] )
])
classmethod from_zmatrix_with_labels(string, *args, **kwargs)

@param string: String containing a z-matrix with labels defined at the end using e.g. a234=8.5 @param args: Passed on to Molecule.from_z_matrix @param kwargs: Passed on to Molecule.from_z_matrix @return: Molecule object corresponding to the z-matrix passed in

geometric_subgroups(n_vdw_radii=1.2, default_vdw_radius=2.0 Angstrom)

Return a list of geometrically separated moieties of the molecule. Note: sub-molecules returned will have charge 0 and multiplicity 1 for now

@param n_vdw_radii: How many Van der Waals radii two atoms may be separated by and still be considered bonded @param default_vdw_radius: Van der Waals radius to use for elements that grendel doesn’t know the VDW radius of. @return: list of moieties as Molecule objects.

classmethod get(*args, **kwargs)

Create a Molecule object using only the name, SMILES, InChIKey, etc.

The easiest way to call Molecule.from_identifier() is to give it a single argument that is one of the following properties: * smiles * stdinchikey * stdinchi * ncicadd_identifier # (for FICTS, FICuS, uuuuu) * hashisy * cas_number * chemspider_id # input must be chemspider_id=1234567 * opsin_name * cir_name (These are resolved in roughly this order.) Visit the NIH CIR documentation for (some) explaination of what these identifiers are: http://cactus.nci.nih.gov/chemical/structure/documentation

Molecule.from_identifier() can be called with any (single) keyword argument in the grendel.util.web_getter.input_identifiers list. In this form, there must be only

This can also be called using an argument that is the value of a property and a second argument that is a list of fields to search for that property in.

Note: Molecule.get() is a very useful alias for this.

Examples :

TODO

get_computation_for_property(property, details=None)
get_energy(details=None, run_computation=False)
get_optimized_geometry(details=None, property=None)
get_property(property, details=None, run_computation=False)
get_stub()
global_result_getters = []
has_energy()
has_property(property, details=None)
has_same_elements(other)

Returns True if the elements of self correspond directly to the elements of other (i.e. self.atoms[0].element == other.atoms[0].element and self.atoms[1].element == other.atoms[1].element and ...)

has_same_geometry()

Returns True if all of the elements are the same (including isotope and nuclear spin) and the reoriented() versions of self and other have no atoms whose pairwise position difference has a magnitude greater than tol (which defaults to 1e-8 Angstroms)

Examples :
>>> mol = Molecule('''
...     O 1.5 0.0 0.0
...     H 0.2 0.0 0.0
... ''')
>>> m1 = Molecule('''
...     O 0.0 1.5 0.0
...     H 0.0 0.2 0.0
... ''')
>>> m2 = Molecule('''
...     O 0.00000 0.00000 0.200000
...     H 0.00000 0.00000 1.500001
... ''')
>>> m3 = Molecule('''
...     H 0.0  0.0 0.0
...     H 0.0 -1.3 0.0
... ''')
>>> mol.has_same_geometry(m1)
True
>>> m1.has_same_geometry(m2)
False
>>> m1.has_same_geometry(m2, 1e-5)
True
>>> m2.has_same_geometry(mol, 1e-5)
True
>>> m1.has_same_geometry(m3)
False
has_symmetry()

True if op is a valid symmetry operation on self Each coordinate of the transformed atoms must differ from the original by less than

index(atom)

Returns the index of atom in the atoms array of the molecule

Note

This method returns a cached property Atom.index. If you reorder the atoms in a molecule, be sure and flush this cache by setting atom._index to None for all of the atoms in the reordered molecule.

Raises :

IndexError : if atom is not found in self

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> h2o = SampleMolecules['water']
>>> atom1 = h2o[0]
>>> atom2 = h2o[1]
>>> atom3 = h2o[2]
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] ),
    Atom('H', [  0.00000000,  0.75873400, -0.47261400 ] ),
    Atom('H', [  0.00000000, -0.75873400, -0.47261400 ] )
])
>>> h2o.index(atom2)
1
>>> h2o.index(atom1)
0
>>> # It must be exactly the same instance to avoid raising an index error
>>> h2o.index(Atom('O', [  0.00000000,  0.00000000,  0.11815400 ] )) 
Traceback (most recent call last):
    ...
IndexError: ...
inertial_system()

Returns a tuple of the principal moments of inertia vector and the principal axes matrix.

mol.inertial_system()

Computes the principal moments of inertia and the principal axes.

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Returns :

A tuple with types (Vector, Matrix) containing the principal moments of inertia and the principal axes, respectively. These should be aligned (i.e. ret_val[0][1] corresponds to the vector ret_val[1][1])

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> i = hnco.inertial_system()
>>> i[0]
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> i[1]
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
>>> j = hnco.inertial_system()
>>> i == j
True
>>> hnco.A_e
28.0085955528 Wavenumber
>>> hnco.B_e
0.370629408869 Wavenumber
>>> hnco.C_e
0.365789031483 Wavenumber
>>> hnco.a
Vector([ 0.        ,  0.09870438,  0.9951168 ])
>>> hnco.b
Vector([ 0.        , -0.9951168 ,  0.09870438])
>>> hnco.c
Vector([ 1.,  0.,  0.])
internal_representation

The first internal representations (of type InternalRepresentation), or None if it does not exist yet.

internal_representations = None
inverse_mass_matrix = None
inverse_sqrt_mass_matrix = None
is_centered(tol=1e-08 Angstrom, cartesian_representation=None)

True if the center of mass is at the origin. This actually computes the vector from the origin to the center of mass and then determines if the magnitude of that vector is less than tol.

Parameters :
tol : float or ValueWithUnits
The maximum ‘off-centeredness’ that will be tolerated and still return True. If a float is given, the units are assumed to be DistanceUnit.default
cartesian_representation : Representation or None
Determine if the molecule is centered when represented in cartesian_representation. If None, just use the molecule’s current cartesian representation.
is_linear(tol=None)

True if the molecule is linear to within tol. All diatomics should return True.

If tol is a ValueWithUnits and tol.units is an AngularUnit, then this method returns True only if all angles in the molecule are within tol of 180 Degrees. If tol.units is a unit-compatible with a moment of inertia (i.e. MassUnit * DistanceUnit**2 ), then this method returns True if the smallest principal moment of inertia is less than tol and the difference between the two largest principal moments of inertia is less than tol. If no units are given (i.e. tol is a float or other float-compatible unit), tol is assumed to have units of AngularUnit.default and the method proceeds as if tol.units was an AngularUnit subclass.

Parameters :
tol : float or ValueWithUnits
The linearity tolerance.
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> SampleMolecules['water'].is_linear()
False
>>> SampleMolecules['CO2'].is_linear()
True
>>> SampleMolecules['Benzene'].is_linear()
False
largest_difference_with(other)
classmethod linear_alkane(length, rCC=1.52999192202 Angstrom, rCH=1.09001479402 Angstrom, aCCC=109.472109383 Degree, aCCH=109.470735728 Degree)
linear_cutoff = 5.0 Degree
mass
molecular_mass
natoms
nelectrons = None
ninternals
normal_representation = None
pmi()

The principal moments of inertia, as a Vector

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples:
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_moments_of_inertia()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
>>> hnco.pmi()
Vector([  0.60187342,  45.48378728,  46.0856607 ])
See Also:

principal_axes, inertial_system, A_e, B_e, C_e

Aliased as principal_moments_of_inertia()

point_group
position

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

principal_axes()

The principal axes as column vectors in a Matrix. The Vector object mol.principal_axes()[:,i] corresponds to the i`th moment of inertia, `mol.principal_moments_of_inertia()[i].

mol.principal_axes()

Note

This funtion mol.recenter() if the molecule is not centered, so any CartesianRepresentations that are not both frozen and referenced elsewhere (e.g. in a RepresentationDependentProperty) will be lost forever.

Note

This method is cached. See discussion of the consequences of caching in Molecule.center_of_mass()

Examples :
>>> hnco = Molecule.from_z_matrix("""
... N
... C N 1.2145
... O C 1.1634 N 172.22
... H N 1.0030 C 123.34 O 180.0
... """
... )
>>> hnco.principal_axes()
Matrix([[ 0.        ,  0.        ,  1.        ],
        [ 0.09870438, -0.9951168 ,  0.        ],
        [ 0.9951168 ,  0.09870438,  0.        ]])
See Also:

principal_moments_of_inertia, inertial_system, A_e, B_e, C_e

principal_moments_of_inertia(*fargs, **fkeywords)

Alias for pmi()

recenter()

Recenters the molecule about the center of mass This modifies the molecule in place.

Examples :
>>> m = Molecule([Atom("O", [1.1, 1.3, 1.7])])
>>> m
Molecule([
    Atom('O', [  1.10000000,  1.30000000,  1.70000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> m = Molecule(['H','H'], Matrix([[0,0,0],[1,0.0,0]]))
>>> m
Molecule([
    Atom('H', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  1.00000000,  0.00000000,  0.00000000 ] )
])
>>> m.recenter()
>>> m
Molecule([
    Atom('H', [ -0.50000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.50000000,  0.00000000,  0.00000000 ] )
])
recentered()

Same as recenter, but makes returns a copy. self is not modified.

Examples :
>>> foo = Molecule([Atom("O", [1.3, 1.7, 2.0])])
>>> bar = foo.recentered()
>>> foo.recenter()
>>> foo
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] )
])
>>> foo == bar
True
>>> foo is bar
False
reorient(representation='II')

Reorient the molecule to align the x, y, and z axes with the principal axes of rotation.

Parameters :
representation : str, optional
Must be one of “I”, “II”, or “III”. “I” means {x,y,z} = {b,c,a}. “II” (the default) means {x,y,z} = {c,a,b}. “III” means {x,y,z} = {a,b,c}
Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = SampleMolecules['quantum water']
>>> h2o.principal_axes()
Matrix([[-0.        ,  0.        ,  1.        ],
        [-0.53654222, -0.84387348,  0.        ],
        [-0.84387348,  0.53654222,  0.        ]])
>>> h2o.reorient()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> # using abs to get rid of phase factor
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  0.,  1.],
        [ 1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> h2o.reorient("I")
>>> from grendel.gmath import chopped
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 0.,  1.,  0.],
        [ 0.,  0.,  1.],
        [ 1.,  0.,  0.]])
>>> h2o.reorient("III")
>>> abs(chopped(h2o.principal_axes()))
Matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])
reoriented(representation='II')

Same as reorient, but makes returns a copy. self is not modified.

Examples :
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> from grendel.gmath import chopped
>>> h2o = Molecule([
...    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
...    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
...    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
... ])
>>> new = h2o.reoriented()
>>> # Use chopped to get rid of very small numerical artifacts...
>>> chopped(new.principal_axes())
Matrix([[ 0.,  0.,  1.],
        [-1.,  0.,  0.],
        [ 0.,  1.,  0.]])
>>> new is h2o
False
>>> # original molecule is unchanged...
>>> h2o
Molecule([
    Atom('O', [  0.00000000,  0.00000000,  0.00000000 ] ),
    Atom('H', [  0.00000000,  0.00000000,  1.00000000 ] ),
    Atom('H', [  0.00000000, -1.00000000, -0.00000000 ] )
])
result_getters = None
rotate(axis, angle)

Rotates the molecule about axis (a Vector) by angle

rotated(axis, angle)
translate(translation)
update_cartesian_representation()
use_result_getter(rg)
write_xyz(filename, overwrite=False, format_str='%-3s %12.8f %12.8f %12.8f')

Writes the Molecule to the standard xyz format.

See Molecule.xyz_string() for more details.

See Also:

xyz_string

xyz

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_mat

The molecule’s position as a natoms x 3 Matrix. The ordering of rows is (as expected) the same as the ordering of the Molecule.atoms list attribute. Aliased to xyz_mat and position (the latter to be “consistant-ish” with the naming in Atom.

xyz_string(format_str='%-3s %12.8f %12.8f %12.8f', header=True)

The molecule, represented as a string in standard xyz format.

The first line will always be the number of atoms. The second line (which is a comment in the xyz specification) is filled by the description first line of the description attribute.

Parameters :
format_str : str, optional
The format to apply to the lines of the xyz output. The default is “%-3s %12.8f %12.8f %12.8f”, which should be fine for most purposes.
header : bool, optional
Whether or not to include the standard two-line header which is part of the standard xyz format (defaults to True)
Examples :
>>> from __future__ import print_function
>>> from grendel.chemistry import SampleMolecules, init_sample_molecules
>>> init_sample_molecules()
>>> print(SampleMolecules['water'].xyz_string())
3
CCSD(T)/aug-cc-pVTZ Water
O     0.00000000   0.00000000   0.11815400
H     0.00000000   0.75873400  -0.47261400
H     0.00000000  -0.75873400  -0.47261400
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f"))
1

Atom:  O, x: 1.0, y: 0.50, z: 1.500
>>> print(Molecule("O 1.0 0.5 1.5").xyz_string("Atom: %2s, x: %3.1f, y: %4.2f, z: %5.3f", False))
Atom:  O, x: 1.0, y: 0.50, z: 1.500
class Number

All numbers inherit from this class.

If you just want to check if an argument x is a number, without caring what kind, use isinstance(x, Number).

class OrbitalEnergies(molecule, units=None, details=None)
default_units

alias of Wavenumber

class PartiallyConstructed(cls_to_construct, *args, **kwargs)
Allow classes to be “partially constructed” by wrapping the class’s __init__
and __new__ with a method that sets given attributes or appends certain keyword arguments to the initialzation call.
counter = 2
with_args(*args)
with_attributes(**kwargs)

Append some attributes to be set after the initialization is performed. Note that these override anything done in the class’s __init__, so don’t do anything stupid.

with_kwargs(**kwargs)
class PropertyGenerator(filename, property, details=None, unsupported_details=None)

Contains the filename of a template that generates the input file for the computation of a molecular property, optionally with a set of specific details for which the template is valid. This class is mostly to mirror the OutputParser and PropertyParser from the output side of things.

details = None
filename = None
property = None
class ScalarProperty(molecule, units=None, details=None)

A property whose value is a scalar

from_groups(groups, units)

By default, just get the last group matched.

class TemplateInputGenerator(computation)

The simplest form of a generator. Takes a Mako-style template file, passes in the Computation object in as the argument “computation”, and runs the Mako templete engine.

generate(filename)
property_generators = []
validate()
class Tensor

Mostly a wrapper for the NumPy ndarray class. This gives us a place to put tensor-related functionality that we need but is not available in NumPy.

I
copy_shape(**kwargs)

Copy all properties of the tensor except for the data.

diagonal
flatten(order='C')

Same as numpy.ndarray.flatten, but modified to return a Vector object

Examples :
>>> t = Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
>>> t
Tensor([[[ 1.,  2.],
        [ 3.,  4.]],

       [[ 5.,  6.],
        [ 7.,  8.]]])
>>> t.flatten()
Vector([ 1.,  2.,  3., ...,  6.,  7.,  8.])
formatted_string(**kwargs)
in_units(other_units)
index_range_set = None
index_ranges

List of pointers to IndexRange objects over which the tensor is defined.

indices = None
is_antisymmetric(cutoff=1e-10)
is_square()
is_symmetric(cutoff=1e-10)
is_zero(cutoff=None)

Returns True if all elements of self have absolute values less than cutoff, which defaults to Tensor.zero_cutoff

Note

Tensor.zero_cutoff is treated as a pseudo-class attribute for Tensor instances, meaning individual instances can also set a zero_cutoff attribute which will take precidence over the class-level default.

iter_vectors(with_indices=False)
linearly_transformed(transmat, backwards=False)
max_abs()
name = None
reindexed(new_indices, dimensions=None, reverse=False)
static remove_phase_factor(*args, **kwargs)

Given any number of Tensor objects that are the same up to a phase factor, return a list of Tensor objects that have been. Copies are only made if necessary. The chosen phase is the one that makes the first non-zero element (in the numpy.nditer(tensor) iterator, using the cutoff keyword argument or Tensor.zero_cutoff if one is not given) positive.

same_tensor_cutoff = 1e-08
units = None
value

Allows conformance with the Unitized protocol.

zero_cutoff = 1e-08
zero_structure(max_width=120, row_label_width=5, one_based=True, positive_char='+', zero_char='0', one_char='1', negative_char='-', cutoff=1e-10)
class TensorProperty(molecule, units=None, details=None)

A property whose value is an n-dimensional tensor

class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception ValueNotAvailableError

Raised when a MolecularProperty is requested but not available for whatever reason.

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class VectorProperty(molecule, units=None, details=None)

A property whose value is a vector.

abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
camel_to_lower(instr, divider='_')

Converts a CamalCase string to a lower_case_string_with_underscores If the divider argument is given, it is used instead of underscores to join words.

Examples :
classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

hasunits(*fargs, **fkeywords)

Alias for has_units()

isunit(unit)

Aliased as is_unit()

class partial

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

typechecked

Type checking for functions and methods.

warn()

Issue a warning, or maybe ignore it or raise an exception.

with_attributes(**kwargs)

Decorator allowing the assignment of attributes to a function.

class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

CachedProperty

Decorator for properties with cached return values. The decorator creates a property that stores the return value of the method call in a variable named _[func_name] (where [func_name] is the name of the function).

Examples :
>>> class Factorializer(object):
...
...    n = None
...
...    def __init__(self, n):
...        self.n = n
...
...    @CachedProperty
...    def thirty_plus_n_fact(self):
...        ret_val = 1
...        for i in xrange(2, self.n + 31):
...            ret_val *= i
...        return ret_val
...
>>> f = Factorializer(3000)
>>> # Takes some time...
>>> var = f.thirty_plus_n_fact
>>> # Should take no time...
>>> for i in xrange(100):
...     var = f.thirty_plus_n_fact
...
>>> # Be careful... Remember to invalidate the cache when the appropriate variables are updated...
>>> f.n = 2500
>>> # Takes no time but gives the wrong answer:
>>> var = f.thirty_plus_n_fact
>>> # Invalidate the cache:
>>> f._thirty_plus_n_fact = None
>>> # This should take some time again, but now it will get the right answer
>>> var = f.thirty_plus_n_fact
class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class DetailSpecificObject

Superclass for classes that are compatible with specific ComputationDetail objects or any ComputationDetail object more specifically specifice than the details variable.

compatible_with_details(details)
details = None
unsupported_details = None
class Iterable
class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class OptimizedGeometryParser(geometry_getter, **kwargs)
get_optimized_geometry(file_contents)
get_value_for_molecule(property, file_contents)
class OutputParser(computation, property_parsers=None)

Abstract base class for classes that parse the output file for a computation.

computation = None
molecule
needed_indices
needed_properties
parse_file(file)
property_parsers = None
reset()
valid_parsers = None
validate()
exception OutputParsingError
class PropertyParser(property, details, units, getter=None, sequence=None, unsupported_details=None, custom_from=None)

Encapsulates a molecular property and the code to parse it from an output file.

custom_from = None
get_value_for_molecule(property, file_contents)
getter = None
parse_line(line)
property = None
reset()
sequence = None
units = None
class RepresentationDependentPropertyParser(representation_getter, **kwargs)
get_value_and_representation(property, file_contents)

..note :: This method ignores property.units

get_value_for_molecule(property, file_contents)
representation_getter = None
class RepresentationDependentTensor
first_dimension_different = None
formatted_string(**kwargs)
in_representation(new_rep)
permutational_symmetry = None
representation
secondary_representation
value
class ScalarProperty(molecule, units=None, details=None)

A property whose value is a scalar

from_groups(groups, units)

By default, just get the last group matched.

classname(class_or_str_or_obj)

Convenience method for getting the typename as a string from the <type ‘Something’> string sent back by str(type(obj))

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

deepcopy(x, memo=None, _nil=[])

Deep copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

isunit(unit)

Aliased as is_unit()

class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Queue

Abstract base class for queues of computations to be run.

computations

A decorator indicating abstract properties.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractproperty def my_abstract_property(self):

...

This defines a read-only property; you can also define a read-write abstract property using the ‘long’ form of property declaration:

class C:
__metaclass__ = ABCMeta def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx)
enqueue(*c)

Add computation(s) to the queue.

is_finished()

True if all the computations on the queue are finished

is_started()

True if the queue has been started (i. e. if any of the computations have been started)

quiet = False
run()

Run the queue. (Abstract method) This runs the whole queue and blocks until the run is complete. See also start

start()

Start the queue in the background and return to execution. Beware that if Python exits, the queue’s processes will be orphaned. This mode of running may not be supported by all queue types.

verbose = False
abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
abstractproperty

A decorator indicating abstract properties.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractproperty def my_abstract_property(self):

...

This defines a read-only property; you can also define a read-write abstract property using the ‘long’ form of property declaration:

class C:
__metaclass__ = ABCMeta def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx)
class LocalParallelQueue(nthreads, *computations)
computations = None
counter = None
enqueue(*computations)
finish()
is_finished()
is_started()
nthreads = None
queue_manager = None
run()
start()

Run the queue in a non-blocking manner. Calling start multiple times has no effect, but also raises no warning

wait()
waiting = None
class LocalSerialQueue(*computations)

The simplest possible queue. Runs one job at a time on the local machine.

class ABCMeta

Metaclass for defining Abstract Base Classes (ABCs).

Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).

register(subclass)

Register a virtual subclass of an ABC.

class Computation

Base class for all classes encapsulating runs of external programs

additional_safe_directory_characters = '+'
already_run()

Checks to see if an identical input file with an identical name has already been run in the computation’s directory to produce an output file of some sort (if that output file has errors, you probably don’t want to rerun the exact same input file, so this doesn’t do that by default. If you need to do that, call Computation.run() with the force_rerun argument set to True).

always_create_missing = False
attribute_aliases = {'Theory': ['Method', 'LevelOfTheory']}
completed

True if and only if the calculation has finished running. (regardless of success or failure). Setting completed to True triggers the output parser.

details = None
directory = None
directory_template = None
get_energy(details=None)
get_property(prop_class, details=None)
get_results()
has_energy(details=None)
has_property(prop_class, details=None)
input_generator = None
molecule = None
needed_properties

The types of the properties in the self.properties list.

needs_property(prop)
output_parser = None
properties = []
queued = False
run(force_rerun=False, lock=None)
runner = None
classmethod standardize_attribute(attr)

Convert strings to standard form for attributes. Strings with spaces, underscore_joined_strings, Uppercase_Underscore_Strings, and lowerCamelCase strings are all converted to UpperCamelCase.

Examples :
>>> Computation.standardize_attribute("basis_set")
'BasisSet'
>>> Computation.standardize_attribute("basis set")
'BasisSet'
>>> Computation.standardize_attribute("basis!Set")
'BasisSet'
>>> # Only _ and space serve as CamelCase separators:
>>> Computation.standardize_attribute("basis!set")
'Basisset'
>>> Computation.standardize_attribute("Level___of!*theory")
'LevelOftheory'
>>> # "Accidental" caps are not fixed...
>>> Computation.standardize_attribute("Level___of!*tHEory")
'LevelOftHEory'
>>> #All caps gets translated into title case
>>> Computation.standardize_attribute("Level&$#of__THEORY")
'LevelofTheory'
start()
started = False
task_description()
class ComputationOptimizationResultGetter
can_get_property_for_molecule(molecule, property, details=None)
computations = None
get_optimized_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_optimized_property_for_molecule(molecule, property, details=None, verbose=False)
has_property_for_molecule(molecule, property, details=None, verbose=False)
class ComputationResultGetter
add_computation(comp)
can_get_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

can_get_property_for_molecule(molecule, property, details=None)

Aliased as has_property(), can_get_property()

computation_kwargs = None
computations = None
directory_series = {}
get_computation_for_property(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property(*fargs, **fkeywords)

Alias for can_get_property_for_molecule()

has_property_for_molecule(molecule, property, details=None, verbose=False)
known_result_getters = {}
use_directory_series = None
exception ComputationUnavailableError

Raised when a computation can’t be generated either because a compatible input template can’t be found or a valid output parser can’t be found

class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class OptimizationResultGetter
can_optimize_property_for_molecule(molecule, property, details=None)
get_optimized_property_for_molecule(molecule, property, details=None)
has_optimized_property_for_molecule(molecule, property, details=None, verbose=False)
known_optimizers = {}
class ResultGetter

Abstract base class for all classes that encapsulate a method of retrieving a (set of) properties of a molecule from a computational chemistry package. An instance of a ResultGetter object should know how to turn a request for a given molecular property into a Computation object (which, in turn, houses MolecularProperty objects for one or more Molecule objects). ResultGetter objects generate Computation objects. Any ResultGetter subclass should always check for an available computation on (exactly) the same molecule that already has the result available.

can_get_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=False)
abstractmethod(funcobj)

A decorator indicating abstract methods.

Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal ‘super’ call mechanisms.

Usage:

class C:

__metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...):

...
copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.

function_alias(alias, function)

Alias a function as something else. Set the documentation of the new method to “Alias for <function>()” and add “Aliased as <alias>()” to the documentation of function. Not inteded to be used as a decorator.

Examples :
>>> def foo(a, b, c):
...     '''Print a test message.'''
...     print "testing {0}, {1}, {2}".format(a, b, c)
...
>>> foo(1, 2, 3)
testing 1, 2, 3
>>> bar = function_alias('bar', foo)
>>> bar(4, 5, 6)
testing 4, 5, 6
>>> print bar.__doc__
Alias for `foo()`
>>> print foo.__doc__
Print a test message.

Aliased as `bar()`
>>> baz = function_alias('baz', foo)
>>> baz(7, 8, 9)
testing 7, 8, 9
>>> print foo.__doc__
Print a test message.

Aliased as `baz()`, `bar()`

Inside a class

>>> class FooBar(object):
...     def testfunc(self, *args):
...         '''Print out the args.'''
...         print "testing " + ', '.join(str(a) for a in args)
...     another_name = function_alias('another_name', testfunc)
...     test_func = function_alias('test_func', testfunc)
...
>>> f = FooBar()
>>> f.test_func(1, 2, 3, 4)
testing 1, 2, 3, 4
>>> print FooBar.test_func.__doc__
Alias for `testfunc()`
>>> print FooBar.testfunc.__doc__
Print out the args.

Aliased as `test_func()`, `another_name()`
class Runner(input_file=None, output_file=None, **kwargs)

Abstract base class for classes that run a computation (or an equivalent task, such as submit a job to a PBS queue). Not all Computation objects need a runner; for instance XML-parsed computations are constructed in an already-run state.

command_sequence = None
default_input_filename = 'input.dat'
default_output_filename = 'output.dat'
environment = None
input_file = None
output_file = None
process = None
run()

Run in a blocking manner. Default implementation calls wait() on the process returned by start(). Overload it if this doesn’t make sense.

start()
stderr = None
stdin = None
stdout = None
validate()

Determine if we will be able to run. Raise a ComputationUnavailableError if running will cause a crash

working_directory = None
AMU

alias of AtomicMassUnit

AMUs

alias of AtomicMassUnit

class Angstrom
classmethod to(other)
Angstroms

alias of Angstrom

class AngularUnit

General superclass for all angular units

default

alias of Degree

reference_unit

alias of Degree

class AtomicMassUnit
AtomicMassUnits

alias of AtomicMassUnit

AtomicUnitOfCharge

alias of AtomicUnitOfElectricCharge

AtomicUnitOfDistance

alias of Bohr

class AtomicUnitOfElectricCharge
AtomicUnitOfEnergy

alias of Hartree

class AtomicUnitOfMass
class AtomicUnitOfTime
AtomicUnitsOfCharge

alias of AtomicUnitOfElectricCharge

AtomicUnitsOfDistance

alias of Bohr

AtomicUnitsOfElectricCharge

alias of AtomicUnitOfElectricCharge

AtomicUnitsOfEnergy

alias of Hartree

AtomicUnitsOfMass

alias of AtomicUnitOfMass

AtomicUnitsOfTime

alias of AtomicUnitOfTime

class AttoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAMUs

alias of AttoAMU

class AttoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
AttoAtomicUnitsOfCharge

alias of AttoAtomicUnitOfCharge

AttoAtomicUnitsOfDistance

alias of AttoAtomicUnitOfDistance

AttoAtomicUnitsOfEnergy

alias of AttoAtomicUnitOfEnergy

class AttoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
class AttoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192630>
Attoangstrom

alias of AttoAngstrom

Attoangstroms

alias of AttoAngstrom

Attobohr

alias of AttoBohr

Attobohrs

alias of AttoBohr

Attocenturies

alias of AttoCentury

Attocentury

alias of AttoCentury

Attocoulomb

alias of AttoCoulomb

Attocoulombs

alias of AttoCoulomb

Attoday

alias of AttoDay

Attodays

alias of AttoDay

Attodecade

alias of AttoDecade

Attodecades

alias of AttoDecade

Attodegree

alias of AttoDegree

Attodegrees

alias of AttoDegree

Attogram

alias of AttoGram

Attograms

alias of AttoGram

Attohartree

alias of AttoHartree

Attohartrees

alias of AttoHartree

Attohertz

alias of AttoHertz

Attohertzs

alias of AttoHertz

Attohour

alias of AttoHour

Attohours

alias of AttoHour

Attojoule

alias of AttoJoule

Attojoules

alias of AttoJoule

Attometer

alias of AttoMeter

Attometers

alias of AttoMeter

Attomillennia

alias of AttoMillennium

Attomillennium

alias of AttoMillennium

Attominute

alias of AttoMinute

Attominutes

alias of AttoMinute

Attoradian

alias of AttoRadian

Attoradians

alias of AttoRadian

Attosecond

alias of AttoSecond

Attoseconds

alias of AttoSecond

Attowavenumber

alias of AttoWavenumber

Attowavenumbers

alias of AttoWavenumber

Attoweek

alias of AttoWeek

Attoweeks

alias of AttoWeek

Attoyear

alias of AttoYear

Attoyears

alias of AttoYear

class Bohr
Bohrs

alias of Bohr

class CentiAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAMUs

alias of CentiAMU

class CentiAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
CentiAtomicUnitsOfCharge

alias of CentiAtomicUnitOfCharge

CentiAtomicUnitsOfDistance

alias of CentiAtomicUnitOfDistance

CentiAtomicUnitsOfEnergy

alias of CentiAtomicUnitOfEnergy

class CentiBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
class CentiYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192550>
Centiangstrom

alias of CentiAngstrom

Centiangstroms

alias of CentiAngstrom

Centibohr

alias of CentiBohr

Centibohrs

alias of CentiBohr

Centicenturies

alias of CentiCentury

Centicentury

alias of CentiCentury

Centicoulomb

alias of CentiCoulomb

Centicoulombs

alias of CentiCoulomb

Centiday

alias of CentiDay

Centidays

alias of CentiDay

Centidecade

alias of CentiDecade

Centidecades

alias of CentiDecade

Centidegree

alias of CentiDegree

Centidegrees

alias of CentiDegree

Centigram

alias of CentiGram

Centigrams

alias of CentiGram

Centihartree

alias of CentiHartree

Centihartrees

alias of CentiHartree

Centihertz

alias of CentiHertz

Centihertzs

alias of CentiHertz

Centihour

alias of CentiHour

Centihours

alias of CentiHour

Centijoule

alias of CentiJoule

Centijoules

alias of CentiJoule

Centimeter

alias of CentiMeter

Centimeters

alias of CentiMeter

Centimillennia

alias of CentiMillennium

Centimillennium

alias of CentiMillennium

Centiminute

alias of CentiMinute

Centiminutes

alias of CentiMinute

Centiradian

alias of CentiRadian

Centiradians

alias of CentiRadian

Centisecond

alias of CentiSecond

Centiseconds

alias of CentiSecond

Centiwavenumber

alias of CentiWavenumber

Centiwavenumbers

alias of CentiWavenumber

Centiweek

alias of CentiWeek

Centiweeks

alias of CentiWeek

Centiyear

alias of CentiYear

Centiyears

alias of CentiYear

Centuries

alias of Century

class Century
class CompositeUnit(numer_units_or_composed, denom_units=None, coeff=1.0)

A class for composite units, e.g. Joules/Angstrom^2

coefficient = 1.0
composed = None
genre

Analog of Unit.genre. Always returns CompositeUnit

name

The name of the composite unit, as a product of base units

reduced(using_units=None)

Reduce the composite unit into the fewest base units possible.

Examples :
>>> from grendel.util.units import *
>>> (Angstroms**2/Bohr).reduced()
(1.88972612457 Angstrom)
>>> (Degree / (Bohr**2)).reduced()
Degree / Bohr**2
>>> (Degree / (Bohr*Meter)).reduced()
(5.2917721092e-11 Degree / Bohr**2)
to()
class ComputationDetails(**kwargs)

Encapsulates specifics about how the calculation was/is to be carried out, such as level of theory, basis set, program, etc. Can be subclassed for specific programs which may require special detail setting methods.

available_pairs(*keys)
classmethod from_details(details)

Effectively clones details. Used internally for making a details into a ComputationDetails subclass

classmethod is_compatible_details(requested, details_computed_with)
is_subset_of(other)
is_superset_of(other)
keywordify(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

keywordify_if_available(format, *keys)

Mostly for use by templates, this method returns a string of keyword-value pairs in using the given format for each argument in the argument list. format should use the str.format() protocol from the python standard library with the named slots {key} where the keyword name should go and {value} where the value of the detail should go (or, if the value of the detail is a Keyword object, the contents of the value attribute for that Keyword, or, if the value attribute for the keyword is not defined, the _name attribute for the Keyword object in question.

Aliased as keywordify

required_details = []
class Coulomb
classmethod to(other)
Coulombs

alias of Coulomb

class Day
Days

alias of Day

class DecaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAMUs

alias of DecaAMU

class DecaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
DecaAtomicUnitsOfCharge

alias of DecaAtomicUnitOfCharge

DecaAtomicUnitsOfDistance

alias of DecaAtomicUnitOfDistance

DecaAtomicUnitsOfEnergy

alias of DecaAtomicUnitOfEnergy

class DecaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
class DecaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924f0>
Decaangstrom

alias of DecaAngstrom

Decaangstroms

alias of DecaAngstrom

Decabohr

alias of DecaBohr

Decabohrs

alias of DecaBohr

Decacenturies

alias of DecaCentury

Decacentury

alias of DecaCentury

Decacoulomb

alias of DecaCoulomb

Decacoulombs

alias of DecaCoulomb

Decaday

alias of DecaDay

Decadays

alias of DecaDay

class Decade
Decadecade

alias of DecaDecade

Decadecades

alias of DecaDecade

Decadegree

alias of DecaDegree

Decadegrees

alias of DecaDegree

Decades

alias of Decade

Decagram

alias of DecaGram

Decagrams

alias of DecaGram

Decahartree

alias of DecaHartree

Decahartrees

alias of DecaHartree

Decahertz

alias of DecaHertz

Decahertzs

alias of DecaHertz

Decahour

alias of DecaHour

Decahours

alias of DecaHour

Decajoule

alias of DecaJoule

Decajoules

alias of DecaJoule

Decameter

alias of DecaMeter

Decameters

alias of DecaMeter

Decamillennia

alias of DecaMillennium

Decamillennium

alias of DecaMillennium

Decaminute

alias of DecaMinute

Decaminutes

alias of DecaMinute

Decaradian

alias of DecaRadian

Decaradians

alias of DecaRadian

Decasecond

alias of DecaSecond

Decaseconds

alias of DecaSecond

Decawavenumber

alias of DecaWavenumber

Decawavenumbers

alias of DecaWavenumber

Decaweek

alias of DecaWeek

Decaweeks

alias of DecaWeek

Decayear

alias of DecaYear

Decayears

alias of DecaYear

class DeciAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAMUs

alias of DeciAMU

class DeciAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
DeciAtomicUnitsOfCharge

alias of DeciAtomicUnitOfCharge

DeciAtomicUnitsOfDistance

alias of DeciAtomicUnitOfDistance

DeciAtomicUnitsOfEnergy

alias of DeciAtomicUnitOfEnergy

class DeciBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
class DeciYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192510>
Deciangstrom

alias of DeciAngstrom

Deciangstroms

alias of DeciAngstrom

Decibohr

alias of DeciBohr

Decibohrs

alias of DeciBohr

Decicenturies

alias of DeciCentury

Decicentury

alias of DeciCentury

Decicoulomb

alias of DeciCoulomb

Decicoulombs

alias of DeciCoulomb

Deciday

alias of DeciDay

Decidays

alias of DeciDay

Decidecade

alias of DeciDecade

Decidecades

alias of DeciDecade

Decidegree

alias of DeciDegree

Decidegrees

alias of DeciDegree

Decigram

alias of DeciGram

Decigrams

alias of DeciGram

Decihartree

alias of DeciHartree

Decihartrees

alias of DeciHartree

Decihertz

alias of DeciHertz

Decihertzs

alias of DeciHertz

Decihour

alias of DeciHour

Decihours

alias of DeciHour

Decijoule

alias of DeciJoule

Decijoules

alias of DeciJoule

Decimeter

alias of DeciMeter

Decimeters

alias of DeciMeter

Decimillennia

alias of DeciMillennium

Decimillennium

alias of DeciMillennium

Deciminute

alias of DeciMinute

Deciminutes

alias of DeciMinute

Deciradian

alias of DeciRadian

Deciradians

alias of DeciRadian

Decisecond

alias of DeciSecond

Deciseconds

alias of DeciSecond

Deciwavenumber

alias of DeciWavenumber

Deciwavenumbers

alias of DeciWavenumber

Deciweek

alias of DeciWeek

Deciweeks

alias of DeciWeek

Deciyear

alias of DeciYear

Deciyears

alias of DeciYear

class Degree
classmethod to(other)
Degrees

alias of Degree

class DistanceUnit

General superclass for all distance units

default

alias of Angstrom

reference_unit

alias of Angstrom

class ElectricChargeUnit

General superclass for all units of electric charge

default

alias of Coulomb

reference_unit

alias of Coulomb

class ElectronVolt
ElectronVolts

alias of ElectronVolt

class Energy(molecule, units=None, details=None)

The energy of a molecule.

default_units

alias of Wavenumber

class EnergyUnit

General superclass for all energy units

default

alias of Wavenumber

reference_unit

alias of Joule

class ExaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAMUs

alias of ExaAMU

class ExaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
ExaAtomicUnitsOfCharge

alias of ExaAtomicUnitOfCharge

ExaAtomicUnitsOfDistance

alias of ExaAtomicUnitOfDistance

ExaAtomicUnitsOfEnergy

alias of ExaAtomicUnitOfEnergy

class ExaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
class ExaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192370>
Exaangstrom

alias of ExaAngstrom

Exaangstroms

alias of ExaAngstrom

Exabohr

alias of ExaBohr

Exabohrs

alias of ExaBohr

Exacenturies

alias of ExaCentury

Exacentury

alias of ExaCentury

Exacoulomb

alias of ExaCoulomb

Exacoulombs

alias of ExaCoulomb

Exaday

alias of ExaDay

Exadays

alias of ExaDay

Exadecade

alias of ExaDecade

Exadecades

alias of ExaDecade

Exadegree

alias of ExaDegree

Exadegrees

alias of ExaDegree

Exagram

alias of ExaGram

Exagrams

alias of ExaGram

Exahartree

alias of ExaHartree

Exahartrees

alias of ExaHartree

Exahertz

alias of ExaHertz

Exahertzs

alias of ExaHertz

Exahour

alias of ExaHour

Exahours

alias of ExaHour

Exajoule

alias of ExaJoule

Exajoules

alias of ExaJoule

Exameter

alias of ExaMeter

Exameters

alias of ExaMeter

Examillennia

alias of ExaMillennium

Examillennium

alias of ExaMillennium

Examinute

alias of ExaMinute

Examinutes

alias of ExaMinute

Exaradian

alias of ExaRadian

Exaradians

alias of ExaRadian

Exasecond

alias of ExaSecond

Exaseconds

alias of ExaSecond

Exawavenumber

alias of ExaWavenumber

Exawavenumbers

alias of ExaWavenumber

Exaweek

alias of ExaWeek

Exaweeks

alias of ExaWeek

Exayear

alias of ExaYear

Exayears

alias of ExaYear

class FemtoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAMUs

alias of FemtoAMU

class FemtoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
FemtoAtomicUnitsOfCharge

alias of FemtoAtomicUnitOfCharge

FemtoAtomicUnitsOfDistance

alias of FemtoAtomicUnitOfDistance

FemtoAtomicUnitsOfEnergy

alias of FemtoAtomicUnitOfEnergy

class FemtoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
class FemtoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192610>
Femtoangstrom

alias of FemtoAngstrom

Femtoangstroms

alias of FemtoAngstrom

Femtobohr

alias of FemtoBohr

Femtobohrs

alias of FemtoBohr

Femtocenturies

alias of FemtoCentury

Femtocentury

alias of FemtoCentury

Femtocoulomb

alias of FemtoCoulomb

Femtocoulombs

alias of FemtoCoulomb

Femtoday

alias of FemtoDay

Femtodays

alias of FemtoDay

Femtodecade

alias of FemtoDecade

Femtodecades

alias of FemtoDecade

Femtodegree

alias of FemtoDegree

Femtodegrees

alias of FemtoDegree

Femtogram

alias of FemtoGram

Femtograms

alias of FemtoGram

Femtohartree

alias of FemtoHartree

Femtohartrees

alias of FemtoHartree

Femtohertz

alias of FemtoHertz

Femtohertzs

alias of FemtoHertz

Femtohour

alias of FemtoHour

Femtohours

alias of FemtoHour

Femtojoule

alias of FemtoJoule

Femtojoules

alias of FemtoJoule

Femtometer

alias of FemtoMeter

Femtometers

alias of FemtoMeter

Femtomillennia

alias of FemtoMillennium

Femtomillennium

alias of FemtoMillennium

Femtominute

alias of FemtoMinute

Femtominutes

alias of FemtoMinute

Femtoradian

alias of FemtoRadian

Femtoradians

alias of FemtoRadian

Femtosecond

alias of FemtoSecond

Femtoseconds

alias of FemtoSecond

Femtowavenumber

alias of FemtoWavenumber

Femtowavenumbers

alias of FemtoWavenumber

Femtoweek

alias of FemtoWeek

Femtoweeks

alias of FemtoWeek

Femtoyear

alias of FemtoYear

Femtoyears

alias of FemtoYear

class GigaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAMUs

alias of GigaAMU

class GigaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
GigaAtomicUnitsOfCharge

alias of GigaAtomicUnitOfCharge

GigaAtomicUnitsOfDistance

alias of GigaAtomicUnitOfDistance

GigaAtomicUnitsOfEnergy

alias of GigaAtomicUnitOfEnergy

class GigaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
class GigaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192430>
Gigaangstrom

alias of GigaAngstrom

Gigaangstroms

alias of GigaAngstrom

Gigabohr

alias of GigaBohr

Gigabohrs

alias of GigaBohr

Gigacenturies

alias of GigaCentury

Gigacentury

alias of GigaCentury

Gigacoulomb

alias of GigaCoulomb

Gigacoulombs

alias of GigaCoulomb

Gigaday

alias of GigaDay

Gigadays

alias of GigaDay

Gigadecade

alias of GigaDecade

Gigadecades

alias of GigaDecade

Gigadegree

alias of GigaDegree

Gigadegrees

alias of GigaDegree

Gigagram

alias of GigaGram

Gigagrams

alias of GigaGram

Gigahartree

alias of GigaHartree

Gigahartrees

alias of GigaHartree

Gigahertz

alias of GigaHertz

Gigahertzs

alias of GigaHertz

Gigahour

alias of GigaHour

Gigahours

alias of GigaHour

Gigajoule

alias of GigaJoule

Gigajoules

alias of GigaJoule

Gigameter

alias of GigaMeter

Gigameters

alias of GigaMeter

Gigamillennia

alias of GigaMillennium

Gigamillennium

alias of GigaMillennium

Gigaminute

alias of GigaMinute

Gigaminutes

alias of GigaMinute

Gigaradian

alias of GigaRadian

Gigaradians

alias of GigaRadian

Gigasecond

alias of GigaSecond

Gigaseconds

alias of GigaSecond

Gigawavenumber

alias of GigaWavenumber

Gigawavenumbers

alias of GigaWavenumber

Gigaweek

alias of GigaWeek

Gigaweeks

alias of GigaWeek

Gigayear

alias of GigaYear

Gigayears

alias of GigaYear

class Gram
classmethod to(other)
Grams

alias of Gram

class Hartree
Hartrees

alias of Hartree

class HectoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAMUs

alias of HectoAMU

class HectoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
HectoAtomicUnitsOfCharge

alias of HectoAtomicUnitOfCharge

HectoAtomicUnitsOfDistance

alias of HectoAtomicUnitOfDistance

HectoAtomicUnitsOfEnergy

alias of HectoAtomicUnitOfEnergy

class HectoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
class HectoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924d0>
Hectoangstrom

alias of HectoAngstrom

Hectoangstroms

alias of HectoAngstrom

Hectobohr

alias of HectoBohr

Hectobohrs

alias of HectoBohr

Hectocenturies

alias of HectoCentury

Hectocentury

alias of HectoCentury

Hectocoulomb

alias of HectoCoulomb

Hectocoulombs

alias of HectoCoulomb

Hectoday

alias of HectoDay

Hectodays

alias of HectoDay

Hectodecade

alias of HectoDecade

Hectodecades

alias of HectoDecade

Hectodegree

alias of HectoDegree

Hectodegrees

alias of HectoDegree

Hectogram

alias of HectoGram

Hectograms

alias of HectoGram

Hectohartree

alias of HectoHartree

Hectohartrees

alias of HectoHartree

Hectohertz

alias of HectoHertz

Hectohertzs

alias of HectoHertz

Hectohour

alias of HectoHour

Hectohours

alias of HectoHour

Hectojoule

alias of HectoJoule

Hectojoules

alias of HectoJoule

Hectometer

alias of HectoMeter

Hectometers

alias of HectoMeter

Hectomillennia

alias of HectoMillennium

Hectomillennium

alias of HectoMillennium

Hectominute

alias of HectoMinute

Hectominutes

alias of HectoMinute

Hectoradian

alias of HectoRadian

Hectoradians

alias of HectoRadian

Hectosecond

alias of HectoSecond

Hectoseconds

alias of HectoSecond

Hectowavenumber

alias of HectoWavenumber

Hectowavenumbers

alias of HectoWavenumber

Hectoweek

alias of HectoWeek

Hectoweeks

alias of HectoWeek

Hectoyear

alias of HectoYear

Hectoyears

alias of HectoYear

class Hertz
Hertzs

alias of Hertz

class Hour
Hours

alias of Hour

exception IncompatibleUnitsError(unit1, unit2)

Exception for attempted incompatible unit conversions

exception InvalidLegacyXMLFileError
class Joule
classmethod to(other)
Joules

alias of Joule

KCalPerMol

alias of KiloCaloriePerMol

KCalsPerMol

alias of KiloCaloriePerMol

KJPerMol

alias of KiloJoulePerMol

KcalPerMol

alias of KiloCaloriePerMol

KcalsPerMol

alias of KiloCaloriePerMol

class KiloAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAMUs

alias of KiloAMU

class KiloAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
KiloAtomicUnitsOfCharge

alias of KiloAtomicUnitOfCharge

KiloAtomicUnitsOfDistance

alias of KiloAtomicUnitOfDistance

KiloAtomicUnitsOfEnergy

alias of KiloAtomicUnitOfEnergy

class KiloBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloCaloriePerMol
KiloCaloriePerMole

alias of KiloCaloriePerMol

KiloCaloriePerMols

alias of KiloCaloriePerMol

KiloCaloriesPerMol

alias of KiloCaloriePerMol

class KiloCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloJoulePerMol
KiloJoulesPerMol

alias of KiloJoulePerMol

class KiloMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
class KiloYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1924b0>
Kiloangstrom

alias of KiloAngstrom

Kiloangstroms

alias of KiloAngstrom

Kilobohr

alias of KiloBohr

Kilobohrs

alias of KiloBohr

Kilocenturies

alias of KiloCentury

Kilocentury

alias of KiloCentury

Kilocoulomb

alias of KiloCoulomb

Kilocoulombs

alias of KiloCoulomb

Kiloday

alias of KiloDay

Kilodays

alias of KiloDay

Kilodecade

alias of KiloDecade

Kilodecades

alias of KiloDecade

Kilodegree

alias of KiloDegree

Kilodegrees

alias of KiloDegree

Kilogram

alias of KiloGram

Kilograms

alias of KiloGram

Kilohartree

alias of KiloHartree

Kilohartrees

alias of KiloHartree

Kilohertz

alias of KiloHertz

Kilohertzs

alias of KiloHertz

Kilohour

alias of KiloHour

Kilohours

alias of KiloHour

Kilojoule

alias of KiloJoule

Kilojoules

alias of KiloJoule

KilojoulesPerMole

alias of KiloJoulePerMol

KilojoulesPerMoles

alias of KiloJoulePerMol

Kilometer

alias of KiloMeter

Kilometers

alias of KiloMeter

Kilomillennia

alias of KiloMillennium

Kilomillennium

alias of KiloMillennium

Kilominute

alias of KiloMinute

Kilominutes

alias of KiloMinute

Kiloradian

alias of KiloRadian

Kiloradians

alias of KiloRadian

Kilosecond

alias of KiloSecond

Kiloseconds

alias of KiloSecond

Kilowavenumber

alias of KiloWavenumber

Kilowavenumbers

alias of KiloWavenumber

Kiloweek

alias of KiloWeek

Kiloweeks

alias of KiloWeek

Kiloyear

alias of KiloYear

Kiloyears

alias of KiloYear

class LegacyXMLResultGetter(comparison_representation, *files)
can_get_property_for_molecule(molecule, property, details=None)
files = None
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=True)
properties = None
properties_for_molecules = None
class MassUnit

General superclass for all units of mass

default

alias of AtomicMassUnit

reference_unit

alias of Gram

class MegaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAMUs

alias of MegaAMU

class MegaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
MegaAtomicUnitsOfCharge

alias of MegaAtomicUnitOfCharge

MegaAtomicUnitsOfDistance

alias of MegaAtomicUnitOfDistance

MegaAtomicUnitsOfEnergy

alias of MegaAtomicUnitOfEnergy

class MegaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
class MegaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192470>
Megaangstrom

alias of MegaAngstrom

Megaangstroms

alias of MegaAngstrom

Megabohr

alias of MegaBohr

Megabohrs

alias of MegaBohr

Megacenturies

alias of MegaCentury

Megacentury

alias of MegaCentury

Megacoulomb

alias of MegaCoulomb

Megacoulombs

alias of MegaCoulomb

Megaday

alias of MegaDay

Megadays

alias of MegaDay

Megadecade

alias of MegaDecade

Megadecades

alias of MegaDecade

Megadegree

alias of MegaDegree

Megadegrees

alias of MegaDegree

Megagram

alias of MegaGram

Megagrams

alias of MegaGram

Megahartree

alias of MegaHartree

Megahartrees

alias of MegaHartree

Megahertz

alias of MegaHertz

Megahertzs

alias of MegaHertz

Megahour

alias of MegaHour

Megahours

alias of MegaHour

Megajoule

alias of MegaJoule

Megajoules

alias of MegaJoule

Megameter

alias of MegaMeter

Megameters

alias of MegaMeter

Megamillennia

alias of MegaMillennium

Megamillennium

alias of MegaMillennium

Megaminute

alias of MegaMinute

Megaminutes

alias of MegaMinute

Megaradian

alias of MegaRadian

Megaradians

alias of MegaRadian

Megasecond

alias of MegaSecond

Megaseconds

alias of MegaSecond

Megawavenumber

alias of MegaWavenumber

Megawavenumbers

alias of MegaWavenumber

Megaweek

alias of MegaWeek

Megaweeks

alias of MegaWeek

Megayear

alias of MegaYear

Megayears

alias of MegaYear

class Meter
Meters

alias of Meter

class MicroAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAMUs

alias of MicroAMU

class MicroAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
MicroAtomicUnitsOfCharge

alias of MicroAtomicUnitOfCharge

MicroAtomicUnitsOfDistance

alias of MicroAtomicUnitOfDistance

MicroAtomicUnitsOfEnergy

alias of MicroAtomicUnitOfEnergy

class MicroBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
class MicroYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925b0>
Microangstrom

alias of MicroAngstrom

Microangstroms

alias of MicroAngstrom

Microbohr

alias of MicroBohr

Microbohrs

alias of MicroBohr

Microcenturies

alias of MicroCentury

Microcentury

alias of MicroCentury

Microcoulomb

alias of MicroCoulomb

Microcoulombs

alias of MicroCoulomb

Microday

alias of MicroDay

Microdays

alias of MicroDay

Microdecade

alias of MicroDecade

Microdecades

alias of MicroDecade

Microdegree

alias of MicroDegree

Microdegrees

alias of MicroDegree

Microgram

alias of MicroGram

Micrograms

alias of MicroGram

Microhartree

alias of MicroHartree

Microhartrees

alias of MicroHartree

Microhertz

alias of MicroHertz

Microhertzs

alias of MicroHertz

Microhour

alias of MicroHour

Microhours

alias of MicroHour

Microjoule

alias of MicroJoule

Microjoules

alias of MicroJoule

Micrometer

alias of MicroMeter

Micrometers

alias of MicroMeter

Micromillennia

alias of MicroMillennium

Micromillennium

alias of MicroMillennium

Microminute

alias of MicroMinute

Microminutes

alias of MicroMinute

Microradian

alias of MicroRadian

Microradians

alias of MicroRadian

Microsecond

alias of MicroSecond

Microseconds

alias of MicroSecond

Microwavenumber

alias of MicroWavenumber

Microwavenumbers

alias of MicroWavenumber

Microweek

alias of MicroWeek

Microweeks

alias of MicroWeek

Microyear

alias of MicroYear

Microyears

alias of MicroYear

Millennia

alias of Millennium

class Millennium
class MilliAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAMUs

alias of MilliAMU

class MilliAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
MilliAtomicUnitsOfCharge

alias of MilliAtomicUnitOfCharge

MilliAtomicUnitsOfDistance

alias of MilliAtomicUnitOfDistance

MilliAtomicUnitsOfEnergy

alias of MilliAtomicUnitOfEnergy

class MilliBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
class MilliYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192590>
Milliangstrom

alias of MilliAngstrom

Milliangstroms

alias of MilliAngstrom

Millibohr

alias of MilliBohr

Millibohrs

alias of MilliBohr

Millicenturies

alias of MilliCentury

Millicentury

alias of MilliCentury

Millicoulomb

alias of MilliCoulomb

Millicoulombs

alias of MilliCoulomb

Milliday

alias of MilliDay

Millidays

alias of MilliDay

Millidecade

alias of MilliDecade

Millidecades

alias of MilliDecade

Millidegree

alias of MilliDegree

Millidegrees

alias of MilliDegree

Milligram

alias of MilliGram

Milligrams

alias of MilliGram

Millihartree

alias of MilliHartree

Millihartrees

alias of MilliHartree

Millihertz

alias of MilliHertz

Millihertzs

alias of MilliHertz

Millihour

alias of MilliHour

Millihours

alias of MilliHour

Millijoule

alias of MilliJoule

Millijoules

alias of MilliJoule

Millimeter

alias of MilliMeter

Millimeters

alias of MilliMeter

Millimillennia

alias of MilliMillennium

Millimillennium

alias of MilliMillennium

Milliminute

alias of MilliMinute

Milliminutes

alias of MilliMinute

Milliradian

alias of MilliRadian

Milliradians

alias of MilliRadian

Millisecond

alias of MilliSecond

Milliseconds

alias of MilliSecond

Milliwavenumber

alias of MilliWavenumber

Milliwavenumbers

alias of MilliWavenumber

Milliweek

alias of MilliWeek

Milliweeks

alias of MilliWeek

Milliyear

alias of MilliYear

Milliyears

alias of MilliYear

class Minute
Minutes

alias of Minute

class MolecularProperty(molecule, units=None, details=None)

Abstract base class for all properties

Attributes :

molecule : Molecule units : CompositeUnit or class with Unit metaclass

clear_value()
default_units = None
details = None
from_groups(groups, units)

Retrieve the value of the property from a tuple of groups matched in a RegexSequence. See RegexSequence.groups()

from_sequence(seq, units)

Retrieve the value of the property from a RegexSequence object that has already been used on a file. By default, this just calls self.from_groups() with seq.groups(flatten) where flatten comes from self.from_groups.flatten.

get_value(*args, **kwargs)

The new paradigm for obtaining values. Call the callable instance attribute getter with the arguments and keyword arguments passed in.

getter = None
has_value()
classmethod in_units(units)
static is_same_property(prop1, prop2)
molecule = None
property_type
static property_type_of(cls_or_inst)
units = None
value

The value of the molecular property.

value_with_units
class MoleculeDict
default = None
default_factory = None
equality_digits = 7
hash_digits = 6
items()
iteritems()
iterkeys()
itervalues()
key_representation = None
keys()
update(**kwargs)
values()
class MoleculeStub(*args, **kwargs)

The exact same thing as the parent Molecule class (for now, anyway), but used for holding specifications of molecules that can later be replaced by a full molecule class (so things like, for instance, the calculations attribute won’t be filled in, but later if the geometry is found to match, the class using the MoleculeStub in some list can replace the stub with the full Molecule instance upon matching.

charge_specified = None
eq_precision = 7
hash_precision = 5
multiplicity_specified = None
classmethod stub_for(molecule)
units_specified = None
class NanoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAMUs

alias of NanoAMU

class NanoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
NanoAtomicUnitsOfCharge

alias of NanoAtomicUnitOfCharge

NanoAtomicUnitsOfDistance

alias of NanoAtomicUnitOfDistance

NanoAtomicUnitsOfEnergy

alias of NanoAtomicUnitOfEnergy

class NanoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
class NanoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925d0>
Nanoangstrom

alias of NanoAngstrom

Nanoangstroms

alias of NanoAngstrom

Nanobohr

alias of NanoBohr

Nanobohrs

alias of NanoBohr

Nanocenturies

alias of NanoCentury

Nanocentury

alias of NanoCentury

Nanocoulomb

alias of NanoCoulomb

Nanocoulombs

alias of NanoCoulomb

Nanoday

alias of NanoDay

Nanodays

alias of NanoDay

Nanodecade

alias of NanoDecade

Nanodecades

alias of NanoDecade

Nanodegree

alias of NanoDegree

Nanodegrees

alias of NanoDegree

Nanogram

alias of NanoGram

Nanograms

alias of NanoGram

Nanohartree

alias of NanoHartree

Nanohartrees

alias of NanoHartree

Nanohertz

alias of NanoHertz

Nanohertzs

alias of NanoHertz

Nanohour

alias of NanoHour

Nanohours

alias of NanoHour

Nanojoule

alias of NanoJoule

Nanojoules

alias of NanoJoule

Nanometer

alias of NanoMeter

Nanometers

alias of NanoMeter

Nanomillennia

alias of NanoMillennium

Nanomillennium

alias of NanoMillennium

Nanominute

alias of NanoMinute

Nanominutes

alias of NanoMinute

Nanoradian

alias of NanoRadian

Nanoradians

alias of NanoRadian

Nanosecond

alias of NanoSecond

Nanoseconds

alias of NanoSecond

Nanowavenumber

alias of NanoWavenumber

Nanowavenumbers

alias of NanoWavenumber

Nanoweek

alias of NanoWeek

Nanoweeks

alias of NanoWeek

Nanoyear

alias of NanoYear

Nanoyears

alias of NanoYear

class PetaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAMUs

alias of PetaAMU

class PetaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
PetaAtomicUnitsOfCharge

alias of PetaAtomicUnitOfCharge

PetaAtomicUnitsOfDistance

alias of PetaAtomicUnitOfDistance

PetaAtomicUnitsOfEnergy

alias of PetaAtomicUnitOfEnergy

class PetaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
class PetaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192390>
Petaangstrom

alias of PetaAngstrom

Petaangstroms

alias of PetaAngstrom

Petabohr

alias of PetaBohr

Petabohrs

alias of PetaBohr

Petacenturies

alias of PetaCentury

Petacentury

alias of PetaCentury

Petacoulomb

alias of PetaCoulomb

Petacoulombs

alias of PetaCoulomb

Petaday

alias of PetaDay

Petadays

alias of PetaDay

Petadecade

alias of PetaDecade

Petadecades

alias of PetaDecade

Petadegree

alias of PetaDegree

Petadegrees

alias of PetaDegree

Petagram

alias of PetaGram

Petagrams

alias of PetaGram

Petahartree

alias of PetaHartree

Petahartrees

alias of PetaHartree

Petahertz

alias of PetaHertz

Petahertzs

alias of PetaHertz

Petahour

alias of PetaHour

Petahours

alias of PetaHour

Petajoule

alias of PetaJoule

Petajoules

alias of PetaJoule

Petameter

alias of PetaMeter

Petameters

alias of PetaMeter

Petamillennia

alias of PetaMillennium

Petamillennium

alias of PetaMillennium

Petaminute

alias of PetaMinute

Petaminutes

alias of PetaMinute

Petaradian

alias of PetaRadian

Petaradians

alias of PetaRadian

Petasecond

alias of PetaSecond

Petaseconds

alias of PetaSecond

Petawavenumber

alias of PetaWavenumber

Petawavenumbers

alias of PetaWavenumber

Petaweek

alias of PetaWeek

Petaweeks

alias of PetaWeek

Petayear

alias of PetaYear

Petayears

alias of PetaYear

class PicoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAMUs

alias of PicoAMU

class PicoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
PicoAtomicUnitsOfCharge

alias of PicoAtomicUnitOfCharge

PicoAtomicUnitsOfDistance

alias of PicoAtomicUnitOfDistance

PicoAtomicUnitsOfEnergy

alias of PicoAtomicUnitOfEnergy

class PicoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
class PicoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e1925f0>
Picoangstrom

alias of PicoAngstrom

Picoangstroms

alias of PicoAngstrom

Picobohr

alias of PicoBohr

Picobohrs

alias of PicoBohr

Picocenturies

alias of PicoCentury

Picocentury

alias of PicoCentury

Picocoulomb

alias of PicoCoulomb

Picocoulombs

alias of PicoCoulomb

Picoday

alias of PicoDay

Picodays

alias of PicoDay

Picodecade

alias of PicoDecade

Picodecades

alias of PicoDecade

Picodegree

alias of PicoDegree

Picodegrees

alias of PicoDegree

Picogram

alias of PicoGram

Picograms

alias of PicoGram

Picohartree

alias of PicoHartree

Picohartrees

alias of PicoHartree

Picohertz

alias of PicoHertz

Picohertzs

alias of PicoHertz

Picohour

alias of PicoHour

Picohours

alias of PicoHour

Picojoule

alias of PicoJoule

Picojoules

alias of PicoJoule

Picometer

alias of PicoMeter

Picometers

alias of PicoMeter

Picomillennia

alias of PicoMillennium

Picomillennium

alias of PicoMillennium

Picominute

alias of PicoMinute

Picominutes

alias of PicoMinute

Picoradian

alias of PicoRadian

Picoradians

alias of PicoRadian

Picosecond

alias of PicoSecond

Picoseconds

alias of PicoSecond

Picowavenumber

alias of PicoWavenumber

Picowavenumbers

alias of PicoWavenumber

Picoweek

alias of PicoWeek

Picoweeks

alias of PicoWeek

Picoyear

alias of PicoYear

Picoyears

alias of PicoYear

exception PropertyUnavailableError
class Radian
Radians

alias of Radian

ReadOnlyAttribute

A read-only attribute. See SpecialAttribute for initialization variables standard to all SpecialAttribute subclasses.

Attributes :
error_text : str
The text for the error raised when setting of the attribute is attempted. Defaults to “cannot set read-only attribute”
class ResultGetter

Abstract base class for all classes that encapsulate a method of retrieving a (set of) properties of a molecule from a computational chemistry package. An instance of a ResultGetter object should know how to turn a request for a given molecular property into a Computation object (which, in turn, houses MolecularProperty objects for one or more Molecule objects). ResultGetter objects generate Computation objects. Any ResultGetter subclass should always check for an available computation on (exactly) the same molecule that already has the result available.

can_get_property_for_molecule(molecule, property, details=None)
get_property_for_molecule(molecule, property, details=None)
has_property_for_molecule(molecule, property, details=None, verbose=False)
class Second
classmethod to(other)
Seconds

alias of Second

class TeraAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAMUs

alias of TeraAMU

class TeraAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
TeraAtomicUnitsOfCharge

alias of TeraAtomicUnitOfCharge

TeraAtomicUnitsOfDistance

alias of TeraAtomicUnitOfDistance

TeraAtomicUnitsOfEnergy

alias of TeraAtomicUnitOfEnergy

class TeraBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
class TeraYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192410>
Teraangstrom

alias of TeraAngstrom

Teraangstroms

alias of TeraAngstrom

Terabohr

alias of TeraBohr

Terabohrs

alias of TeraBohr

Teracenturies

alias of TeraCentury

Teracentury

alias of TeraCentury

Teracoulomb

alias of TeraCoulomb

Teracoulombs

alias of TeraCoulomb

Teraday

alias of TeraDay

Teradays

alias of TeraDay

Teradecade

alias of TeraDecade

Teradecades

alias of TeraDecade

Teradegree

alias of TeraDegree

Teradegrees

alias of TeraDegree

Teragram

alias of TeraGram

Teragrams

alias of TeraGram

Terahartree

alias of TeraHartree

Terahartrees

alias of TeraHartree

Terahertz

alias of TeraHertz

Terahertzs

alias of TeraHertz

Terahour

alias of TeraHour

Terahours

alias of TeraHour

Terajoule

alias of TeraJoule

Terajoules

alias of TeraJoule

Terameter

alias of TeraMeter

Terameters

alias of TeraMeter

Teramillennia

alias of TeraMillennium

Teramillennium

alias of TeraMillennium

Teraminute

alias of TeraMinute

Teraminutes

alias of TeraMinute

Teraradian

alias of TeraRadian

Teraradians

alias of TeraRadian

Terasecond

alias of TeraSecond

Teraseconds

alias of TeraSecond

Terawavenumber

alias of TeraWavenumber

Terawavenumbers

alias of TeraWavenumber

Teraweek

alias of TeraWeek

Teraweeks

alias of TeraWeek

Terayear

alias of TeraYear

Terayears

alias of TeraYear

class TimeUnit

General superclass for all time units

default

alias of Second

reference_unit

alias of Second

class Unit(name, bases, dct)

Metaclass for a general unit of something.

genre
genre_check(other)
known_units = ['Angstrom', 'Angstroms', YottaAngstrom, ZettaAngstrom, ExaAngstrom, PetaAngstrom, TeraAngstrom, GigaAngstrom, MegaAngstrom, KiloAngstrom, HectoAngstrom, DecaAngstrom, DeciAngstrom, CentiAngstrom, MilliAngstrom, MicroAngstrom, NanoAngstrom, PicoAngstrom, FemtoAngstrom, AttoAngstrom, ZeptoAngstrom, YoctoAngstrom, 'Bohr', 'Bohrs', YottaBohr, ZettaBohr, ExaBohr, PetaBohr, TeraBohr, GigaBohr, MegaBohr, KiloBohr, HectoBohr, DecaBohr, DeciBohr, CentiBohr, MilliBohr, MicroBohr, NanoBohr, PicoBohr, FemtoBohr, AttoBohr, ZeptoBohr, YoctoBohr, 'YottaAtomicUnitOfDistance', YottaAtomicUnitOfDistance, 'ZettaAtomicUnitOfDistance', ZettaAtomicUnitOfDistance, 'ExaAtomicUnitOfDistance', ExaAtomicUnitOfDistance, 'PetaAtomicUnitOfDistance', PetaAtomicUnitOfDistance, 'TeraAtomicUnitOfDistance', TeraAtomicUnitOfDistance, 'GigaAtomicUnitOfDistance', GigaAtomicUnitOfDistance, 'MegaAtomicUnitOfDistance', MegaAtomicUnitOfDistance, 'KiloAtomicUnitOfDistance', KiloAtomicUnitOfDistance, 'HectoAtomicUnitOfDistance', HectoAtomicUnitOfDistance, 'DecaAtomicUnitOfDistance', DecaAtomicUnitOfDistance, 'DeciAtomicUnitOfDistance', DeciAtomicUnitOfDistance, 'CentiAtomicUnitOfDistance', CentiAtomicUnitOfDistance, 'MilliAtomicUnitOfDistance', MilliAtomicUnitOfDistance, 'MicroAtomicUnitOfDistance', MicroAtomicUnitOfDistance, 'NanoAtomicUnitOfDistance', NanoAtomicUnitOfDistance, 'PicoAtomicUnitOfDistance', PicoAtomicUnitOfDistance, 'FemtoAtomicUnitOfDistance', FemtoAtomicUnitOfDistance, 'AttoAtomicUnitOfDistance', AttoAtomicUnitOfDistance, 'ZeptoAtomicUnitOfDistance', ZeptoAtomicUnitOfDistance, 'YoctoAtomicUnitOfDistance', YoctoAtomicUnitOfDistance, 'Meter', 'Meters', YottaMeter, ZettaMeter, ExaMeter, PetaMeter, TeraMeter, GigaMeter, MegaMeter, KiloMeter, HectoMeter, DecaMeter, DeciMeter, CentiMeter, MilliMeter, MicroMeter, NanoMeter, PicoMeter, FemtoMeter, AttoMeter, ZeptoMeter, YoctoMeter, 'Degree', 'Degrees', YottaDegree, ZettaDegree, ExaDegree, PetaDegree, TeraDegree, GigaDegree, MegaDegree, KiloDegree, HectoDegree, DecaDegree, DeciDegree, CentiDegree, MilliDegree, MicroDegree, NanoDegree, PicoDegree, FemtoDegree, AttoDegree, ZeptoDegree, YoctoDegree, 'Radian', 'Radians', YottaRadian, ZettaRadian, ExaRadian, PetaRadian, TeraRadian, GigaRadian, MegaRadian, KiloRadian, HectoRadian, DecaRadian, DeciRadian, CentiRadian, MilliRadian, MicroRadian, NanoRadian, PicoRadian, FemtoRadian, AttoRadian, ZeptoRadian, YoctoRadian, 'Joule', 'Joules', YottaJoule, ZettaJoule, ExaJoule, PetaJoule, TeraJoule, GigaJoule, MegaJoule, KiloJoule, HectoJoule, DecaJoule, DeciJoule, CentiJoule, MilliJoule, MicroJoule, NanoJoule, PicoJoule, FemtoJoule, AttoJoule, ZeptoJoule, YoctoJoule, 'Wavenumber', 'Wavenumbers', YottaWavenumber, ZettaWavenumber, ExaWavenumber, PetaWavenumber, TeraWavenumber, GigaWavenumber, MegaWavenumber, KiloWavenumber, HectoWavenumber, DecaWavenumber, DeciWavenumber, CentiWavenumber, MilliWavenumber, MicroWavenumber, NanoWavenumber, PicoWavenumber, FemtoWavenumber, AttoWavenumber, ZeptoWavenumber, YoctoWavenumber, 'ElectronVolt', 'ElectronVolts', YottaElectronVolt, ZettaElectronVolt, ExaElectronVolt, PetaElectronVolt, TeraElectronVolt, GigaElectronVolt, MegaElectronVolt, KiloElectronVolt, HectoElectronVolt, DecaElectronVolt, DeciElectronVolt, CentiElectronVolt, MilliElectronVolt, MicroElectronVolt, NanoElectronVolt, PicoElectronVolt, FemtoElectronVolt, AttoElectronVolt, ZeptoElectronVolt, YoctoElectronVolt, 'Hertz', 'Hertzs', YottaHertz, ZettaHertz, ExaHertz, PetaHertz, TeraHertz, GigaHertz, MegaHertz, KiloHertz, HectoHertz, DecaHertz, DeciHertz, CentiHertz, MilliHertz, MicroHertz, NanoHertz, PicoHertz, FemtoHertz, AttoHertz, ZeptoHertz, YoctoHertz, 'Hartree', 'Hartrees', YottaHartree, ZettaHartree, ExaHartree, PetaHartree, TeraHartree, GigaHartree, MegaHartree, KiloHartree, HectoHartree, DecaHartree, DeciHartree, CentiHartree, MilliHartree, MicroHartree, NanoHartree, PicoHartree, FemtoHartree, AttoHartree, ZeptoHartree, YoctoHartree, 'YottaAtomicUnitOfEnergy', YottaAtomicUnitOfEnergy, 'ZettaAtomicUnitOfEnergy', ZettaAtomicUnitOfEnergy, 'ExaAtomicUnitOfEnergy', ExaAtomicUnitOfEnergy, 'PetaAtomicUnitOfEnergy', PetaAtomicUnitOfEnergy, 'TeraAtomicUnitOfEnergy', TeraAtomicUnitOfEnergy, 'GigaAtomicUnitOfEnergy', GigaAtomicUnitOfEnergy, 'MegaAtomicUnitOfEnergy', MegaAtomicUnitOfEnergy, 'KiloAtomicUnitOfEnergy', KiloAtomicUnitOfEnergy, 'HectoAtomicUnitOfEnergy', HectoAtomicUnitOfEnergy, 'DecaAtomicUnitOfEnergy', DecaAtomicUnitOfEnergy, 'DeciAtomicUnitOfEnergy', DeciAtomicUnitOfEnergy, 'CentiAtomicUnitOfEnergy', CentiAtomicUnitOfEnergy, 'MilliAtomicUnitOfEnergy', MilliAtomicUnitOfEnergy, 'MicroAtomicUnitOfEnergy', MicroAtomicUnitOfEnergy, 'NanoAtomicUnitOfEnergy', NanoAtomicUnitOfEnergy, 'PicoAtomicUnitOfEnergy', PicoAtomicUnitOfEnergy, 'FemtoAtomicUnitOfEnergy', FemtoAtomicUnitOfEnergy, 'AttoAtomicUnitOfEnergy', AttoAtomicUnitOfEnergy, 'ZeptoAtomicUnitOfEnergy', ZeptoAtomicUnitOfEnergy, 'YoctoAtomicUnitOfEnergy', YoctoAtomicUnitOfEnergy, 'KiloCaloriePerMol', 'KiloCaloriePerMols', 'KiloJoulePerMol', 'KiloJoulesPerMol', 'Second', 'Seconds', YottaSecond, ZettaSecond, ExaSecond, PetaSecond, TeraSecond, GigaSecond, MegaSecond, KiloSecond, HectoSecond, DecaSecond, DeciSecond, CentiSecond, MilliSecond, MicroSecond, NanoSecond, PicoSecond, FemtoSecond, AttoSecond, ZeptoSecond, YoctoSecond, 'AtomicUnitOfTime', 'AtomicUnitsOfTime', YottaAtomicUnitOfTime, ZettaAtomicUnitOfTime, ExaAtomicUnitOfTime, PetaAtomicUnitOfTime, TeraAtomicUnitOfTime, GigaAtomicUnitOfTime, MegaAtomicUnitOfTime, KiloAtomicUnitOfTime, HectoAtomicUnitOfTime, DecaAtomicUnitOfTime, DeciAtomicUnitOfTime, CentiAtomicUnitOfTime, MilliAtomicUnitOfTime, MicroAtomicUnitOfTime, NanoAtomicUnitOfTime, PicoAtomicUnitOfTime, FemtoAtomicUnitOfTime, AttoAtomicUnitOfTime, ZeptoAtomicUnitOfTime, YoctoAtomicUnitOfTime, 'Minute', 'Minutes', YottaMinute, ZettaMinute, ExaMinute, PetaMinute, TeraMinute, GigaMinute, MegaMinute, KiloMinute, HectoMinute, DecaMinute, DeciMinute, CentiMinute, MilliMinute, MicroMinute, NanoMinute, PicoMinute, FemtoMinute, AttoMinute, ZeptoMinute, YoctoMinute, 'Hour', 'Hours', YottaHour, ZettaHour, ExaHour, PetaHour, TeraHour, GigaHour, MegaHour, KiloHour, HectoHour, DecaHour, DeciHour, CentiHour, MilliHour, MicroHour, NanoHour, PicoHour, FemtoHour, AttoHour, ZeptoHour, YoctoHour, 'Day', 'Days', YottaDay, ZettaDay, ExaDay, PetaDay, TeraDay, GigaDay, MegaDay, KiloDay, HectoDay, DecaDay, DeciDay, CentiDay, MilliDay, MicroDay, NanoDay, PicoDay, FemtoDay, AttoDay, ZeptoDay, YoctoDay, 'Week', 'Weeks', YottaWeek, ZettaWeek, ExaWeek, PetaWeek, TeraWeek, GigaWeek, MegaWeek, KiloWeek, HectoWeek, DecaWeek, DeciWeek, CentiWeek, MilliWeek, MicroWeek, NanoWeek, PicoWeek, FemtoWeek, AttoWeek, ZeptoWeek, YoctoWeek, 'Year', 'Years', YottaYear, ZettaYear, ExaYear, PetaYear, TeraYear, GigaYear, MegaYear, KiloYear, HectoYear, DecaYear, DeciYear, CentiYear, MilliYear, MicroYear, NanoYear, PicoYear, FemtoYear, AttoYear, ZeptoYear, YoctoYear, 'Decade', 'Decades', YottaDecade, ZettaDecade, ExaDecade, PetaDecade, TeraDecade, GigaDecade, MegaDecade, KiloDecade, HectoDecade, DecaDecade, DeciDecade, CentiDecade, MilliDecade, MicroDecade, NanoDecade, PicoDecade, FemtoDecade, AttoDecade, ZeptoDecade, YoctoDecade, 'Century', 'Centuries', YottaCentury, ZettaCentury, ExaCentury, PetaCentury, TeraCentury, GigaCentury, MegaCentury, KiloCentury, HectoCentury, DecaCentury, DeciCentury, CentiCentury, MilliCentury, MicroCentury, NanoCentury, PicoCentury, FemtoCentury, AttoCentury, ZeptoCentury, YoctoCentury, 'Millennium', 'Millennia', YottaMillennium, ZettaMillennium, ExaMillennium, PetaMillennium, TeraMillennium, GigaMillennium, MegaMillennium, KiloMillennium, HectoMillennium, DecaMillennium, DeciMillennium, CentiMillennium, MilliMillennium, MicroMillennium, NanoMillennium, PicoMillennium, FemtoMillennium, AttoMillennium, ZeptoMillennium, YoctoMillennium, 'Coulomb', 'Coulombs', YottaCoulomb, ZettaCoulomb, ExaCoulomb, PetaCoulomb, TeraCoulomb, GigaCoulomb, MegaCoulomb, KiloCoulomb, HectoCoulomb, DecaCoulomb, DeciCoulomb, CentiCoulomb, MilliCoulomb, MicroCoulomb, NanoCoulomb, PicoCoulomb, FemtoCoulomb, AttoCoulomb, ZeptoCoulomb, YoctoCoulomb, 'AtomicUnitOfElectricCharge', 'AtomicUnitsOfElectricCharge', YottaAtomicUnitOfElectricCharge, ZettaAtomicUnitOfElectricCharge, ExaAtomicUnitOfElectricCharge, PetaAtomicUnitOfElectricCharge, TeraAtomicUnitOfElectricCharge, GigaAtomicUnitOfElectricCharge, MegaAtomicUnitOfElectricCharge, KiloAtomicUnitOfElectricCharge, HectoAtomicUnitOfElectricCharge, DecaAtomicUnitOfElectricCharge, DeciAtomicUnitOfElectricCharge, CentiAtomicUnitOfElectricCharge, MilliAtomicUnitOfElectricCharge, MicroAtomicUnitOfElectricCharge, NanoAtomicUnitOfElectricCharge, PicoAtomicUnitOfElectricCharge, FemtoAtomicUnitOfElectricCharge, AttoAtomicUnitOfElectricCharge, ZeptoAtomicUnitOfElectricCharge, YoctoAtomicUnitOfElectricCharge, 'YottaAtomicUnitOfCharge', YottaAtomicUnitOfCharge, 'ZettaAtomicUnitOfCharge', ZettaAtomicUnitOfCharge, 'ExaAtomicUnitOfCharge', ExaAtomicUnitOfCharge, 'PetaAtomicUnitOfCharge', PetaAtomicUnitOfCharge, 'TeraAtomicUnitOfCharge', TeraAtomicUnitOfCharge, 'GigaAtomicUnitOfCharge', GigaAtomicUnitOfCharge, 'MegaAtomicUnitOfCharge', MegaAtomicUnitOfCharge, 'KiloAtomicUnitOfCharge', KiloAtomicUnitOfCharge, 'HectoAtomicUnitOfCharge', HectoAtomicUnitOfCharge, 'DecaAtomicUnitOfCharge', DecaAtomicUnitOfCharge, 'DeciAtomicUnitOfCharge', DeciAtomicUnitOfCharge, 'CentiAtomicUnitOfCharge', CentiAtomicUnitOfCharge, 'MilliAtomicUnitOfCharge', MilliAtomicUnitOfCharge, 'MicroAtomicUnitOfCharge', MicroAtomicUnitOfCharge, 'NanoAtomicUnitOfCharge', NanoAtomicUnitOfCharge, 'PicoAtomicUnitOfCharge', PicoAtomicUnitOfCharge, 'FemtoAtomicUnitOfCharge', FemtoAtomicUnitOfCharge, 'AttoAtomicUnitOfCharge', AttoAtomicUnitOfCharge, 'ZeptoAtomicUnitOfCharge', ZeptoAtomicUnitOfCharge, 'YoctoAtomicUnitOfCharge', YoctoAtomicUnitOfCharge, 'Gram', 'Grams', YottaGram, ZettaGram, ExaGram, PetaGram, TeraGram, GigaGram, MegaGram, KiloGram, HectoGram, DecaGram, DeciGram, CentiGram, MilliGram, MicroGram, NanoGram, PicoGram, FemtoGram, AttoGram, ZeptoGram, YoctoGram, 'AtomicMassUnit', 'AtomicMassUnits', YottaAtomicMassUnit, ZettaAtomicMassUnit, ExaAtomicMassUnit, PetaAtomicMassUnit, TeraAtomicMassUnit, GigaAtomicMassUnit, MegaAtomicMassUnit, KiloAtomicMassUnit, HectoAtomicMassUnit, DecaAtomicMassUnit, DeciAtomicMassUnit, CentiAtomicMassUnit, MilliAtomicMassUnit, MicroAtomicMassUnit, NanoAtomicMassUnit, PicoAtomicMassUnit, FemtoAtomicMassUnit, AttoAtomicMassUnit, ZeptoAtomicMassUnit, YoctoAtomicMassUnit, 'YottaAMU', YottaAMU, 'ZettaAMU', ZettaAMU, 'ExaAMU', ExaAMU, 'PetaAMU', PetaAMU, 'TeraAMU', TeraAMU, 'GigaAMU', GigaAMU, 'MegaAMU', MegaAMU, 'KiloAMU', KiloAMU, 'HectoAMU', HectoAMU, 'DecaAMU', DecaAMU, 'DeciAMU', DeciAMU, 'CentiAMU', CentiAMU, 'MilliAMU', MilliAMU, 'MicroAMU', MicroAMU, 'NanoAMU', NanoAMU, 'PicoAMU', PicoAMU, 'FemtoAMU', FemtoAMU, 'AttoAMU', AttoAMU, 'ZeptoAMU', ZeptoAMU, 'YoctoAMU', YoctoAMU, 'AtomicUnitOfMass', 'AtomicUnitsOfMass', YottaAtomicUnitOfMass, ZettaAtomicUnitOfMass, ExaAtomicUnitOfMass, PetaAtomicUnitOfMass, TeraAtomicUnitOfMass, GigaAtomicUnitOfMass, MegaAtomicUnitOfMass, KiloAtomicUnitOfMass, HectoAtomicUnitOfMass, DecaAtomicUnitOfMass, DeciAtomicUnitOfMass, CentiAtomicUnitOfMass, MilliAtomicUnitOfMass, MicroAtomicUnitOfMass, NanoAtomicUnitOfMass, PicoAtomicUnitOfMass, FemtoAtomicUnitOfMass, AttoAtomicUnitOfMass, ZeptoAtomicUnitOfMass, YoctoAtomicUnitOfMass]
name
prefix_factor(other)
prefixes = [<grendel.util.units.unit.Prefix object at 0x1e192330>, <grendel.util.units.unit.Prefix object at 0x1e192350>, <grendel.util.units.unit.Prefix object at 0x1e192370>, <grendel.util.units.unit.Prefix object at 0x1e192390>, <grendel.util.units.unit.Prefix object at 0x1e192410>, <grendel.util.units.unit.Prefix object at 0x1e192430>, <grendel.util.units.unit.Prefix object at 0x1e192470>, <grendel.util.units.unit.Prefix object at 0x1e1924b0>, <grendel.util.units.unit.Prefix object at 0x1e1924d0>, <grendel.util.units.unit.Prefix object at 0x1e1924f0>, <grendel.util.units.unit.Prefix object at 0x1e192510>, <grendel.util.units.unit.Prefix object at 0x1e192550>, <grendel.util.units.unit.Prefix object at 0x1e192590>, <grendel.util.units.unit.Prefix object at 0x1e1925b0>, <grendel.util.units.unit.Prefix object at 0x1e1925d0>, <grendel.util.units.unit.Prefix object at 0x1e1925f0>, <grendel.util.units.unit.Prefix object at 0x1e192610>, <grendel.util.units.unit.Prefix object at 0x1e192630>, <grendel.util.units.unit.Prefix object at 0x1e192650>, <grendel.util.units.unit.Prefix object at 0x1e192670>]
to(other)
class Unitized

Abstract base class for things with units. It requires its subclasses to implement the properties ‘value’ and ‘units’. Unitized subclasses are also expected have __mul__, __div__, __truediv__, __pow__, __add__, __sub__, __neg__, __pos__, and __abs__ handle units correctly, when implemented in the given subclass.

in_units(new_units)
units
value
exception UnitizedObjectError

For errors encountered in handling unitized objects

exception UnknownUnitError(unit1)

Exception for attempted conversion of something that is not a subclass of Unit

class ValueWithUnits(value, units)

A class for encapsulating a physical constant and it’s units.

Attributes :
units : CompositeUnit or a class with Unit as its metaclass
The units in which the value of self is to be interpreted
convert_to(units)
in_units(units)
units = None
value
class Wavenumber
Wavenumbers

alias of Wavenumber

class Week
Weeks

alias of Week

exception XMLResultGetterError
class Year
Years

alias of Year

class YoctoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAMUs

alias of YoctoAMU

class YoctoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
YoctoAtomicUnitsOfCharge

alias of YoctoAtomicUnitOfCharge

YoctoAtomicUnitsOfDistance

alias of YoctoAtomicUnitOfDistance

YoctoAtomicUnitsOfEnergy

alias of YoctoAtomicUnitOfEnergy

class YoctoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
class YoctoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192670>
Yoctoangstrom

alias of YoctoAngstrom

Yoctoangstroms

alias of YoctoAngstrom

Yoctobohr

alias of YoctoBohr

Yoctobohrs

alias of YoctoBohr

Yoctocenturies

alias of YoctoCentury

Yoctocentury

alias of YoctoCentury

Yoctocoulomb

alias of YoctoCoulomb

Yoctocoulombs

alias of YoctoCoulomb

Yoctoday

alias of YoctoDay

Yoctodays

alias of YoctoDay

Yoctodecade

alias of YoctoDecade

Yoctodecades

alias of YoctoDecade

Yoctodegree

alias of YoctoDegree

Yoctodegrees

alias of YoctoDegree

Yoctogram

alias of YoctoGram

Yoctograms

alias of YoctoGram

Yoctohartree

alias of YoctoHartree

Yoctohartrees

alias of YoctoHartree

Yoctohertz

alias of YoctoHertz

Yoctohertzs

alias of YoctoHertz

Yoctohour

alias of YoctoHour

Yoctohours

alias of YoctoHour

Yoctojoule

alias of YoctoJoule

Yoctojoules

alias of YoctoJoule

Yoctometer

alias of YoctoMeter

Yoctometers

alias of YoctoMeter

Yoctomillennia

alias of YoctoMillennium

Yoctomillennium

alias of YoctoMillennium

Yoctominute

alias of YoctoMinute

Yoctominutes

alias of YoctoMinute

Yoctoradian

alias of YoctoRadian

Yoctoradians

alias of YoctoRadian

Yoctosecond

alias of YoctoSecond

Yoctoseconds

alias of YoctoSecond

Yoctowavenumber

alias of YoctoWavenumber

Yoctowavenumbers

alias of YoctoWavenumber

Yoctoweek

alias of YoctoWeek

Yoctoweeks

alias of YoctoWeek

Yoctoyear

alias of YoctoYear

Yoctoyears

alias of YoctoYear

class YottaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAMUs

alias of YottaAMU

class YottaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
YottaAtomicUnitsOfCharge

alias of YottaAtomicUnitOfCharge

YottaAtomicUnitsOfDistance

alias of YottaAtomicUnitOfDistance

YottaAtomicUnitsOfEnergy

alias of YottaAtomicUnitOfEnergy

class YottaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
class YottaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192330>
Yottaangstrom

alias of YottaAngstrom

Yottaangstroms

alias of YottaAngstrom

Yottabohr

alias of YottaBohr

Yottabohrs

alias of YottaBohr

Yottacenturies

alias of YottaCentury

Yottacentury

alias of YottaCentury

Yottacoulomb

alias of YottaCoulomb

Yottacoulombs

alias of YottaCoulomb

Yottaday

alias of YottaDay

Yottadays

alias of YottaDay

Yottadecade

alias of YottaDecade

Yottadecades

alias of YottaDecade

Yottadegree

alias of YottaDegree

Yottadegrees

alias of YottaDegree

Yottagram

alias of YottaGram

Yottagrams

alias of YottaGram

Yottahartree

alias of YottaHartree

Yottahartrees

alias of YottaHartree

Yottahertz

alias of YottaHertz

Yottahertzs

alias of YottaHertz

Yottahour

alias of YottaHour

Yottahours

alias of YottaHour

Yottajoule

alias of YottaJoule

Yottajoules

alias of YottaJoule

Yottameter

alias of YottaMeter

Yottameters

alias of YottaMeter

Yottamillennia

alias of YottaMillennium

Yottamillennium

alias of YottaMillennium

Yottaminute

alias of YottaMinute

Yottaminutes

alias of YottaMinute

Yottaradian

alias of YottaRadian

Yottaradians

alias of YottaRadian

Yottasecond

alias of YottaSecond

Yottaseconds

alias of YottaSecond

Yottawavenumber

alias of YottaWavenumber

Yottawavenumbers

alias of YottaWavenumber

Yottaweek

alias of YottaWeek

Yottaweeks

alias of YottaWeek

Yottayear

alias of YottaYear

Yottayears

alias of YottaYear

class ZeptoAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAMUs

alias of ZeptoAMU

class ZeptoAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
ZeptoAtomicUnitsOfCharge

alias of ZeptoAtomicUnitOfCharge

ZeptoAtomicUnitsOfDistance

alias of ZeptoAtomicUnitOfDistance

ZeptoAtomicUnitsOfEnergy

alias of ZeptoAtomicUnitOfEnergy

class ZeptoBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
class ZeptoYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192650>
Zeptoangstrom

alias of ZeptoAngstrom

Zeptoangstroms

alias of ZeptoAngstrom

Zeptobohr

alias of ZeptoBohr

Zeptobohrs

alias of ZeptoBohr

Zeptocenturies

alias of ZeptoCentury

Zeptocentury

alias of ZeptoCentury

Zeptocoulomb

alias of ZeptoCoulomb

Zeptocoulombs

alias of ZeptoCoulomb

Zeptoday

alias of ZeptoDay

Zeptodays

alias of ZeptoDay

Zeptodecade

alias of ZeptoDecade

Zeptodecades

alias of ZeptoDecade

Zeptodegree

alias of ZeptoDegree

Zeptodegrees

alias of ZeptoDegree

Zeptogram

alias of ZeptoGram

Zeptograms

alias of ZeptoGram

Zeptohartree

alias of ZeptoHartree

Zeptohartrees

alias of ZeptoHartree

Zeptohertz

alias of ZeptoHertz

Zeptohertzs

alias of ZeptoHertz

Zeptohour

alias of ZeptoHour

Zeptohours

alias of ZeptoHour

Zeptojoule

alias of ZeptoJoule

Zeptojoules

alias of ZeptoJoule

Zeptometer

alias of ZeptoMeter

Zeptometers

alias of ZeptoMeter

Zeptomillennia

alias of ZeptoMillennium

Zeptomillennium

alias of ZeptoMillennium

Zeptominute

alias of ZeptoMinute

Zeptominutes

alias of ZeptoMinute

Zeptoradian

alias of ZeptoRadian

Zeptoradians

alias of ZeptoRadian

Zeptosecond

alias of ZeptoSecond

Zeptoseconds

alias of ZeptoSecond

Zeptowavenumber

alias of ZeptoWavenumber

Zeptowavenumbers

alias of ZeptoWavenumber

Zeptoweek

alias of ZeptoWeek

Zeptoweeks

alias of ZeptoWeek

Zeptoyear

alias of ZeptoYear

Zeptoyears

alias of ZeptoYear

class ZettaAMU
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAMUs

alias of ZettaAMU

class ZettaAngstrom
base_unit

alias of Angstrom

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicMassUnit
base_unit

alias of AtomicMassUnit

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfDistance
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfElectricCharge
base_unit

alias of AtomicUnitOfElectricCharge

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfEnergy
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfMass
base_unit

alias of AtomicUnitOfMass

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaAtomicUnitOfTime
base_unit

alias of AtomicUnitOfTime

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
ZettaAtomicUnitsOfCharge

alias of ZettaAtomicUnitOfCharge

ZettaAtomicUnitsOfDistance

alias of ZettaAtomicUnitOfDistance

ZettaAtomicUnitsOfEnergy

alias of ZettaAtomicUnitOfEnergy

class ZettaBohr
base_unit

alias of Bohr

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaCentury
base_unit

alias of Century

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaCoulomb
base_unit

alias of Coulomb

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDay
base_unit

alias of Day

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDecade
base_unit

alias of Decade

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaDegree
base_unit

alias of Degree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaElectronVolt
base_unit

alias of ElectronVolt

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaGram
base_unit

alias of Gram

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHartree
base_unit

alias of Hartree

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHertz
base_unit

alias of Hertz

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaHour
base_unit

alias of Hour

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaJoule
base_unit

alias of Joule

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMeter
base_unit

alias of Meter

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMillennium
base_unit

alias of Millennium

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaMinute
base_unit

alias of Minute

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaRadian
base_unit

alias of Radian

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaSecond
base_unit

alias of Second

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaWavenumber
base_unit

alias of Wavenumber

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaWeek
base_unit

alias of Week

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
class ZettaYear
base_unit

alias of Year

prefix = <grendel.util.units.unit.Prefix object at 0x1e192350>
Zettaangstrom

alias of ZettaAngstrom

Zettaangstroms

alias of ZettaAngstrom

Zettabohr

alias of ZettaBohr

Zettabohrs

alias of ZettaBohr

Zettacenturies

alias of ZettaCentury

Zettacentury

alias of ZettaCentury

Zettacoulomb

alias of ZettaCoulomb

Zettacoulombs

alias of ZettaCoulomb

Zettaday

alias of ZettaDay

Zettadays

alias of ZettaDay

Zettadecade

alias of ZettaDecade

Zettadecades

alias of ZettaDecade

Zettadegree

alias of ZettaDegree

Zettadegrees

alias of ZettaDegree

Zettagram

alias of ZettaGram

Zettagrams

alias of ZettaGram

Zettahartree

alias of ZettaHartree

Zettahartrees

alias of ZettaHartree

Zettahertz

alias of ZettaHertz

Zettahertzs

alias of ZettaHertz

Zettahour

alias of ZettaHour

Zettahours

alias of ZettaHour

Zettajoule

alias of ZettaJoule

Zettajoules

alias of ZettaJoule

Zettameter

alias of ZettaMeter

Zettameters

alias of ZettaMeter

Zettamillennia

alias of ZettaMillennium

Zettamillennium

alias of ZettaMillennium

Zettaminute

alias of ZettaMinute

Zettaminutes

alias of ZettaMinute

Zettaradian

alias of ZettaRadian

Zettaradians

alias of ZettaRadian

Zettasecond

alias of ZettaSecond

Zettaseconds

alias of ZettaSecond

Zettawavenumber

alias of ZettaWavenumber

Zettawavenumbers

alias of ZettaWavenumber

Zettaweek

alias of ZettaWeek

Zettaweeks

alias of ZettaWeek

Zettayear

alias of ZettaYear

Zettayears

alias of ZettaYear

compatible_units(unit1, unit2)

Aliased as iscompatible()

convert(*fargs, **fkeywords)

Alias for convert_units()

convert_units(val, from_unit, to_unit)

Aliased as convert()

class defaultdict

defaultdict(default_factory) –> dict with default factory

The default factory is called without arguments to produce a new value when a key is not present, in __getitem__ only. A defaultdict compares equal to a dict with the same items.

copy() → a shallow copy of D.
default_factory

Factory for default value called by __missing__().

has_units(obj)

Aliased as hasunits()

hasunits(*fargs, **fkeywords)

Alias for has_units()

indented(instr, nspaces=4)

Aliased as indent()

is_unit(*fargs, **fkeywords)

Alias for isunit()

iscompatible(*fargs, **fkeywords)

Alias for compatible_units()

isunit(unit)

Aliased as is_unit()

listify_args(*args, **kwargs)

A simple way to accept arguments that can be an Iterable or a bunch of arguments that should be treated as a single Iterable. (This method is pretty trivial, but I find myself doing it a whole lot.) The reason you can’t just use list() for this purpose is that if an Iterable is given as the only argument, list(args) will return a list of Iterables rather than a single Iterable.

Examples :
>>> def test(*args):
...     return listify_args(*args)
...
>>> test(1,2,3)
[1, 2, 3]
>>> test([1,2,3])
[1, 2, 3]
>>> test([1,2,3], 4)
[[1, 2, 3], 4]
>>> test("1,2,3", 4)
['1,2,3', 4]
>>> test("1,2,3")
['1,2,3']
strip_units
Strips the units off of a unitized object
(or, if the object is not Unitized, just return it). If convert_to is given, convert to these units if obj is Unitized. If assume_units is given, obj is assumed to have the units given by this argument if (and only if) it is not an instance of Unitized.

Aliased as stripunits()

stripunits(*fargs, **fkeywords)

Alias for strip_units()

p4util

Module with utility functions for use in input files.

compare_integers(expected, computed, label)[source]

Function to compare two integers. Prints util.success() when value computed matches value expected. Performs a system exit on failure. Used in input files in the test suite.

compare_matrices(expected, computed, digits, label)[source]

Function to compare two matrices. Prints util.success() when elements of matrix computed match elements of matrix expected to number of digits. Performs a system exit on failure to match symmetry structure, dimensions, or element values. Used in input files in the test suite.

compare_strings(expected, computed, label)[source]

Function to compare two strings. Prints util.success() when string computed exactly matches string expected. Performs a system exit on failure. Used in input files in the test suite.

compare_values(expected, computed, digits, label)[source]

Function to compare two values. Prints util.success() when value computed matches value expected to number of digits. Performs a system exit on failure. Used in input files in the test suite.

compare_vectors(expected, computed, digits, label)[source]

Function to compare two vectors. Prints util.success() when elements of vector computed match elements of vector expected to number of digits. Performs a system exit on failure to match symmetry structure, dimension, or element values. Used in input files in the test suite.

copy_file_from_scratch(filename, prefix, namespace, unit, move=False)[source]

Function to move file out of scratch with correct naming convention.

Arguments:

@arg filename full path to target file @arg prefix computation prefix, usually ‘psi’ @arg namespace context namespace, usually molecule name @arg unit unit number, e.g. 32 @arg move copy or move? (default copy)

Example:

Assume PID is 12345 and SCRATCH is /scratch/parrish/

copy_file_to_scratch(‘temp’, ‘psi’, ‘h2o’, 32):
-cp /scratch/parrish/psi.12345.h2o.32 .temp
copy_file_to_scratch(‘/tmp/temp’, ‘psi’, ‘h2o’, 32):
-cp /scratch/parrish/psi.12345.h2o.32 /tmp/temp
copy_file_to_scratch(‘/tmp/temp’, ‘psi’, ‘’, 32):
-cp /scratch/parrish/psi.12345.32 /tmp/temp
copy_file_to_scratch(‘/tmp/temp’, ‘psi’, ‘’, 32, True):
-mv /scratch/parrish/psi.12345.32 /tmp/temp
copy_file_to_scratch(filename, prefix, namespace, unit, move=False)[source]

Function to move file into scratch with correct naming convention.

Arguments:

@arg filename full path to file @arg prefix computation prefix, usually ‘psi’ @arg namespace context namespace, usually molecule name @arg unit unit number, e.g. 32 @arg move copy or move? (default copy)

Example:

Assume PID is 12345 and SCRATCH is /scratch/parrish/

copy_file_to_scratch(‘temp’, ‘psi’, ‘h2o’, 32):
-cp ./temp /scratch/parrish/psi.12345.h2o.32
copy_file_to_scratch(‘/tmp/temp’, ‘psi’, ‘h2o’, 32):
-cp /tmp/temp /scratch/parrish/psi.12345.h2o.32
copy_file_to_scratch(‘/tmp/temp’, ‘psi’, ‘’, 32):
-cp /tmp/temp /scratch/parrish/psi.12345.32
copy_file_to_scratch(‘/tmp/temp’, ‘psi’, ‘’, 32, True):
-mv /tmp/temp /scratch/parrish/psi.12345.32
cubefile(filename='psi4.cube', nptsx=50, nptsy=50, nptsz=50, buffer_size=5.0, prop='density', **kwargs)[source]
get_memory()[source]

Function to return the total memory allocation.

get_num_threads()[source]

Function to return the number of threads to parallelize across.

oeprop(*args, **kwargs)[source]
set_memory(bytes)[source]

Function to reset the total memory allocation.

set_num_threads(nthread)[source]

Function to reset the number of threads to parallelize across.

success(label)[source]

Function to print a ‘label...PASSED’ line to screen. Used by util.compare_values() family when functions pass.

Module (auto-generated from make_dunning.pl script) with commands building BasisFamily objects that encode the Dunning basis set orbital definitions in psi4/lib/basis/NOTES and fitting bases designed for those orbital bases.

load_basfam_dunning()[source]
class Table(rows=(), row_label_width=10, row_label_precision=4, cols=(), width=16, precision=10)[source]

Class defining a flexible Table object for storing data.

absolute_to_relative(Factor=627.5095)[source]

Function to shift the data of each column of the Table object such that the lowest value is zero. A scaling factor of Factor is applied.

copy()[source]

Function to return a copy of the Table object.

format_label()[source]

Function to pad the width of Table object labels.

format_values(values)[source]

Function to pad the width of Table object data cells.

save(file)[source]

Function to save string of the Table object to file.

scale(Factor=627.5095)[source]

Function to apply a scaling factor Factor to the data of the Table object.

banner(text, type=1, width=35, strNotOutfile=False)[source]

Function to print text to output file in a banner of minimum width width and minimum three-line height for type = 1 or one-line height for type = 2. If strNotOutfile is True, function returns string rather than printing it to output file.

find_approximate_string_matches(seq1, options, max_distance)[source]

Function to compute approximate string matches from a list of options.

levenshtein(seq1, seq2)[source]

Function to compute the Levenshtein distance between two strings.

print_stderr(stuff)[source]

Function to print stuff to standard error stream.

print_stdout(stuff)[source]

Function to print stuff to standard output stream.

Module to provide mechanism to store and restore option states in driver.

class OptionState(option, module=None)[source]

Class to store the state of a single option. If module given, the option value and has_changed value is stored for global, local to module, and used by module scopes; otherwise (used for BASIS keywords), only global scope is stored. Class can store, print, and restore option values.

>>> OptionState('SCF_TYPE', 'SCF')

>>> print(OptionState('DF_BASIS_MP2'))
restore()[source]
class OptionsState(*largs)[source]

Class to contain multiple OptionsState() objects. Used in python driver functions to collect several options before altering them, then restoring before function return.

>>> optstash = OptionsState(
        ['SCF', 'DFT_FUNCTIONAL'],
        ['DF_BASIS_SCF'],
        ['SCF', 'SCF_TYPE'],
        ['SCF', 'REFERENCE'])

>>> print(optstash)

>>> optstash.restore()
restore()[source]

Module with utility functions used by several Python functions.

all_casings(input_string)[source]

Function to return a generator of all lettercase permutations of input_string.

drop_duplicates(seq)[source]

Function that given an array seq, returns an array without any duplicate entries. There is no guarantee of which duplicate entry is dropped.

extract_sowreap_from_output(sowout, quantity, sownum, linkage, allvital=False)[source]

Function to examine file sowout from a sow/reap distributed job for formatted line with electronic energy information about index sownum to be used for construction of quantity computations as directed by master input file with linkage kwarg. When file sowout is missing or incomplete files, function will either return zero (allvital is False) or terminate (allvital is True) since some sow/reap procedures can produce meaningful results (database) from an incomplete set of sown files, while others cannot (gradient, hessian).

format_currentstate_for_input(func, name, allButMol=False, **kwargs)[source]

Function to return an input file in preprocessed psithon. Captures memory, molecule, options, function, method, and kwargs. Used to write distributed (sow/reap) input files.

format_kwargs_for_input(filename, lmode=1, **kwargs)[source]

Function to pickle to file filename the options dictionary kwargs. Mode lmode =2 pickles appropriate settings for reap mode. Used to capture Python options information for distributed (sow/reap) input files.

format_molecule_for_input(mol, name='')[source]

Function to return a string of the output of inputparser.process_input() applied to the XYZ format of molecule, passed as either fragmented geometry string mol or molecule instance mol. Used to capture molecule information from database modules and for distributed (sow/reap) input files. For the reverse, see molutil.geometry().

format_options_for_input()[source]

Function to return a string of commands to replicate the current state of user-modified options. Used to capture C++ options information for distributed (sow/reap) input files.

Caution

Some features are not yet implemented. Buy a developer a coffee.

  • Does not cover local (as opposed to global) options.
get_psifile(fileno, pidspace='18869')[source]

Function to return the full path and filename for psi file fileno (e.g., psi.32) in current namespace pidspace.

getattr_ignorecase(module, attr)[source]

Function to extract attribute attr from module if attr is available in any possible lettercase permutation. Returns attribute if available, None if not.

import_ignorecase(module)[source]

Function to import module in any possible lettercase permutation. Returns module object if available, None if not.

kwargs_lower(kwargs)[source]

Function to rebuild and return kwargs dictionary with all keys made lowercase. Should be called by every function that could be called directly by the user.

mat2arr(mat)[source]

Function to convert psi4.Matrix mat to Python array of arrays. Expects psi4.Matrix to be flat with respect to symmetry.

prepare_options_for_modules(changedOnly=False, commandsInsteadDict=False)[source]

Function to return a string of commands to replicate the current state of user-modified options. Used to capture C++ options information for distributed (sow/reap) input files.

Caution

Some features are not yet implemented. Buy a developer a coffee.

  • Need some option to get either all or changed
  • Need some option to either get dict or set string or psimod command list
  • command return doesn’t revoke has_changed setting for unchanged with changedOnly=False

Module with commands building BasisFamily objects for Pople and other non-Dunning orbital basis sets. Some plausible fitting basis sets are supplied as defaults.

load_basfam_other()[source]

Module to define a class BasisFamily that associates fitting basis sets to an orbital basis and to provide functions to query appropriate fitting bases for any orbital basis distributed with Psi4.

class BasisFamily(ornate, orbital=None, jk=None, ri=None, dual=None)[source]

Class to associate with an orbital basis name ornate the gbs file names in which the orbital basis orbital (usually the coded form of ornate) and jfit, jkfit, rifit, and dualfit auxiliary bases can be found.

add_dualfit(fit)[source]

Function to add basis fit as associated helper basis member dualfit to a BasisFamily object.

add_jfit(fit)[source]

Function to add basis fit as associated fitting basis member jfit to a BasisFamily object.

add_jkfit(fit)[source]

Function to add basis fit as associated fitting basis member jkfit to a BasisFamily object.

add_rifit(fit)[source]

Function to add basis fit as associated fitting basis member rifit to a BasisFamily object.

name()[source]

Function to return the ornate name of the orbital basis, e.g., 6-311++G** for 6-311ppgss.

corresponding_dualfit(name)[source]

Function to return an appropriate DUAL helper basis for the orbital basis name in coded or ornate form. None is returned if no fitting basis is defined or if the orbital basis is not found.

corresponding_jfit(name)[source]

Function to return an appropriate J fitting basis for the orbital basis name in coded or ornate form. None is returned if no fitting basis is defined or if the orbital basis is not found.

corresponding_jkfit(name)[source]

Function to return an appropriate JK fitting basis for the orbital basis name in coded or ornate form. None is returned if no fitting basis is defined or if the orbital basis is not found.

corresponding_orbital(name)[source]

Function to validate if the orbital basis name in coded or ornate form is in Psi4’s standard installed bases list. None is returned if the orbital basis is not found.

corresponding_rifit(name)[source]

Function to return an appropriate RI fitting basis for the orbital basis name in coded or ornate form. None is returned if no fitting basis is defined or if the orbital basis is not found.

load_basis_families()[source]

Function to load into the array basisfamily_list BasisFamily objects for all Psi4’s standard installed bases.

print_basis_families()[source]

Function to print to the output file a formatted summary of all the BasisFamily objects in basisfamily_list, by default all Psi4’s standard installed bases.

sanitize_basisname(name)[source]

Function to return name in coded form, stripped of characters that confuse filenames, characters into lowercase, + into p, * into s, and (, ), & , into _.