# Path: molml/features.py

# 
# Path: molml/constants.py
# BOND_LENGTHS = {
#     "C": {
#         "3":   0.62,
#         "2":   0.69,
#         "Ar": 0.72,
#         "1":   0.85,
#     },
#     "Cl": {
#         "1":   1.045,
#     },
#     "F": {
#         "1":   1.23,
#     },
#     "H": {
#         "1":   0.6,
#     },
#     "N": {
#         "3":   0.565,
#         "2":   0.63,
#         "Ar": 0.655,
#         "1":   0.74,
#     },
#     "O": {
#         "3":   0.53,
#         "2":   0.59,
#         "Ar": 0.62,
#         "1":   0.695,
#     },
#     "P": {
#         "2":   0.945,
#         "Ar": 0.985,
#         "1":   1.11,
#     },
#     "S": {
#         "2":   0.905,
#         "Ar": 0.945,
#         "1":   1.07,
#     },
# }
# 
# ELE_TO_NUM = bidict({
#     'H': 1,
#     'C': 6,
#     'N': 7,
#     'O': 8,
#     'F': 9,
#     'P': 15,
#     'S': 16,
#     'Cl': 17,
#     'Br': 35,
#     'I': 53,
#     'Se': 34
# })


import numpy as np
from molml.features import Connectivity, Autocorrelation
from molml.constants import BOND_LENGTHS, ELE_TO_NUM
        [0., 0., -1.46],
    ])
    feat = Connectivity(depth=2)
    # Notice the warning about missing elements.
    print(feat.fit_transform([(elements, coords)]))

    # 1) Modify the values in the constants module before your script.
    BOND_LENGTHS['Fe'] = {'1': 1.32}
    print(feat.fit_transform([(elements, coords)]))
    del BOND_LENGTHS['Fe']

    # 2) Include connectivity information in your data. The other instances
    # where constants are used (electronegativity, element symbols, atomic
    # numbers).
    connections = {
        0: {1: '1', 2: '1', 3: '1', 4: '1', 5: '1', 6: '1'},
        1: {0: '1'},
        2: {0: '1'},
        3: {0: '1'},
        4: {0: '1'},
        5: {0: '1'},
        6: {0: '1'},
    }
    print(feat.fit_transform([(elements, coords, connections)]))

    # Other potential constant additions would be ELECTRONEGATIVITY or
    # ELE_TO_NUM.
    # NOTE: ELE_TO_NUM is a bidict mapping element symbols to atomic numbers,
    # meaning ELE_TO_NUM.inv can be used for atomic number to element symbols.
    ELE_TO_NUM['Fe'] = 26

# Path: molml/features.py

# 
# Path: molml/constants.py
# BOND_LENGTHS = {
#     "C": {
#         "3":   0.62,
#         "2":   0.69,
#         "Ar": 0.72,
#         "1":   0.85,
#     },
#     "Cl": {
#         "1":   1.045,
#     },
#     "F": {
#         "1":   1.23,
#     },
#     "H": {
#         "1":   0.6,
#     },
#     "N": {
#         "3":   0.565,
#         "2":   0.63,
#         "Ar": 0.655,
#         "1":   0.74,
#     },
#     "O": {
#         "3":   0.53,
#         "2":   0.59,
#         "Ar": 0.62,
#         "1":   0.695,
#     },
#     "P": {
#         "2":   0.945,
#         "Ar": 0.985,
#         "1":   1.11,
#     },
#     "S": {
#         "2":   0.905,
#         "Ar": 0.945,
#         "1":   1.07,
#     },
# }
# 
# ELE_TO_NUM = bidict({
#     'H': 1,
#     'C': 6,
#     'N': 7,
#     'O': 8,
#     'F': 9,
#     'P': 15,
#     'S': 16,
#     'Cl': 17,
#     'Br': 35,
#     'I': 53,
#     'Se': 34
# })


# Path: examples/missing_constants.py
import numpy as np
from molml.features import Connectivity, Autocorrelation
from molml.constants import BOND_LENGTHS, ELE_TO_NUM

        [0., 0., -1.46],
    ])
    feat = Connectivity(depth=2)
    # Notice the warning about missing elements.
    print(feat.fit_transform([(elements, coords)]))

    # 1) Modify the values in the constants module before your script.
    BOND_LENGTHS['Fe'] = {'1': 1.32}
    print(feat.fit_transform([(elements, coords)]))
    del BOND_LENGTHS['Fe']

    # 2) Include connectivity information in your data. The other instances
    # where constants are used (electronegativity, element symbols, atomic
    # numbers).
    connections = {
        0: {1: '1', 2: '1', 3: '1', 4: '1', 5: '1', 6: '1'},
        1: {0: '1'},
        2: {0: '1'},
        3: {0: '1'},
        4: {0: '1'},
        5: {0: '1'},
        6: {0: '1'},
    }
    print(feat.fit_transform([(elements, coords, connections)]))

    # Other potential constant additions would be ELECTRONEGATIVITY or
    # ELE_TO_NUM.
    # NOTE: ELE_TO_NUM is a bidict mapping element symbols to atomic numbers,
    # meaning ELE_TO_NUM.inv can be used for atomic number to element symbols.
    ELE_TO_NUM['Fe'] = 26

    numbers = [ELE_TO_NUM[x] for x in elements]