def test_valid_qcschema_slow(basis_name):
    basis_dict = api.get_basis(basis_name)
    qcs_str = api.get_basis(basis_name, fmt='qcschema')
    qcs_json = json.loads(qcs_str)

    el_list = [
        lut.element_sym_from_Z(x, True) for x in basis_dict['elements'].keys()
    ]
    coords = []
    for idx, el in enumerate(el_list):
        coords.extend((0.0, 0.0, float(idx)))

    qcs_json['atom_map'] = list(qcs_json['center_data'].keys())
    assert len(qcs_json['atom_map']) == len(el_list)

    dummy_inp = {
        "schema_name": "qc_schema_input",
        "schema_version": 1,
        "keywords": {},
        "molecule": {
            "schema_name": "qcschema_molecule",
            "schema_version": 2,
            "geometry": coords,
            "symbols": el_list
        },
        'driver': 'energy',
        'model': {
            'method': 'B3LYP',
            'basis': qcs_json
        }
    }

    qcschema.validate(dummy_inp, 'input')
Esempio n. 2
0
def test_element_data(Z):
    # Cycle through the elements and check that
    # the info returned from the functions is consistent
    data = lut.element_data_from_Z(Z)
    assert data[1] == Z

    assert data == lut.element_data_from_sym(data[0])
    assert data == lut.element_data_from_name(data[2])

    assert data[0] == lut.element_sym_from_Z(Z)
    assert data[2] == lut.element_name_from_Z(Z)

    nsym = lut.element_sym_from_Z(Z, True)
    nname = lut.element_name_from_Z(Z, True)

    assert nsym[0] == data[0][0].upper()
    assert nname[0] == data[2][0].upper()
Esempio n. 3
0
def test_get_basis_2(basis_name):
    """For all versions of basis sets, test a simple get_basis
       with different element selections
    """
    this_metadata = bs_metadata[basis_name]
    latest = this_metadata['latest_version']
    avail_elements = this_metadata['versions'][latest]['elements']
    nelements = random.randint(1, len(avail_elements))
    selected_elements = random.sample(avail_elements, nelements)

    # Change some selected elements to strings
    for idx in range(len(selected_elements)):
        if idx % 3 == 1:
            selected_elements[idx] = lut.element_sym_from_Z(
                selected_elements[idx])
        elif idx % 3 == 2:
            selected_elements[idx] = str(selected_elements[idx])

    bs = bse.get_basis(basis_name, elements=selected_elements)
    assert len(bs['basis_set_elements']) == len(selected_elements)
        raise RuntimeError('Incorrect terminator: {}'.format(el[-1].strip()))
    # Remove last line
    el.pop()

    # Check that there is no extra terminator
    nterm = sum([1 if terminator_re.match(line) else 0 for line in el])
    if nterm != 0:
        for iline, line in enumerate(el):
            if terminator_re.match(line):
                raise RuntimeError('Problem in entry: {}'.format(el[iline+1]))

    # Extract the name of the basis set
    elname, Z = parse_line_regex(element_re, el[0], 'elementbasisname, Z')

    # Clean out the basis set name from the string
    sym = element_sym_from_Z(Z).upper()
    assert elname[:len(sym)] == sym
    basname = elname[len(sym):].strip()

    print('basis = {} sym = {}'.format(basname, sym))

    # Parse the shells
    shell_sections = partition_lines(el[1:], shell_re.match)

    # Basis set in Gaussian'94 format
    elstr = '{} 0\n'.format(element_sym_from_Z(Z, normalize=True))
    for shell in shell_sections:
        # First line is just shell definition
        elstr += ' '.join(shell[0].split()[1:]) + ' 1.00\n'
        for line in shell[1:]:
            elstr += '    ' + '    '.join(line.split()[1:]) + '\n'
Esempio n. 5
0
    assert el1 == el2
    assert name2 == 'ANO-RCC'
    assert name1 in all_names

    el = lut.element_Z_from_sym(el1, as_str=True)
    assert el not in split_data[name1]

    cont = re.findall(r'\d+[a-z]+', cont)
    split_data[name1][el] = cont

print(split_data)

for name, el_cont_data in split_data.items():
    print(name)
    new_basis = api.get_basis(name)

    for el, eldata in new_basis['elements'].items():
        el_split = el_cont_data[el]

        am = [sh['angular_momentum'] for sh in eldata['electron_shells']]

        new_pattern = []
        for sh in eldata['electron_shells']:
            new_pattern.append('{}{}'.format(
                len(sh['coefficients']),
                lut.amint_to_char(sh['angular_momentum'])))

        print(lut.element_sym_from_Z(el, True), ''.join(new_pattern))
        assert new_pattern == el_split
    print()