;; -*- Mode:Lisp; Syntax:ANSI-Common-LISP; Coding:us-ascii-unix; fill-column:158 -*-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;; @file      use-chem.lisp
;; @author    Mitch Richling <https://www.mitchr.me>
;; @brief     Chemical element data.@EOL
;; @std       Common Lisp
;; @see       tst-chem.lisp
;; @copyright
;;  @parblock
;;  Copyright (c) 2013,2015, Mitchell Jay Richling <https://www.mitchr.me> All rights reserved.
;;
;;  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
;;
;;  1. Redistributions of source code must retain the above copyright notice, this list of conditions, and the following disclaimer.
;;
;;  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation
;;     and/or other materials provided with the distribution.
;;
;;  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software
;;     without specific prior written permission.
;;
;;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
;;  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
;;  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
;;  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
;;  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
;;  DAMAGE.
;;  @endparblock
;; @todo      Add isotope information.@EOL@EOL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defpackage :MJR_CHEM
  (:USE :COMMON-LISP)
  (:DOCUMENTATION "Brief: Chemical element data.;")
  (:EXPORT #:mjr_chem_help
           #:mjr_chem_element-key-to-element-key
           #:mjr_chem_find-element-property
           #:mjr_chem_find-element-key
           ))

(in-package :MJR_CHEM)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun mjr_chem_help ()
  "The focus of this package is on providing basic chemical element data.

The API:
  * mjr_chem_find-element-property      -- Find element property values via element-key
  * mjr_chem_find-element-key           -- Find element-keys via property search criteria
  * mjr_chem_element-key-to-element-key -- convert between various element-keys and element-symbols

Vocabulary:
 * element-key .................. An object uniquely identifying an element
                                   * element-symbol  -- A string or LISP symbol. Examples: \"He\" or :HE
                                   * element-name    -- A string or LISP symbol. Examples: \"Helium\" or :HELIUM
                                   * element-anumber -- An integer representing the atomic number of an element (ex: 2)
                                   NOTE: An element-name or element-symbol returned from a function will always be a STRING!
 * element-key-type ............. A LISP symbol that may be used to specify the type of an element-key
                                   * :ek-symbol       -- element-symbol
                                   * :ek-name         -- element-name
                                   * :ek-anumber      -- element-anumber
                                   * NIL              -- Used when the type is unknown or should be auto determined somehow
 * element-property-name ........ A string or symbol representing. Example: \"electronicConfiguration\" or :ELECTRONICCONFIGURATION
                                   NOTE: An element-property-name returned from a function will always be a STRING!
 * element-property-value ....... A value (usually a number but possibly a string)
 * element-property-value-cons .. A CONS cell containing an element-key and an element-property-value
 * element-property-value-list .. A list of element-property-value-cons

Element properties are as follows:

 |--------------------------+---------+------------------|
 | Property                 | Type    | Unit             |
 |--------------------------+---------+------------------|
 | name                     | string  | N/A              |
 | HeatCapacity             | float   | J/(g*K)          |
 | HeatCapacityMol          | float   | J/(mol*K)        |
 | atomicNumber             | integer | N/A              |
 | boilingpoint             | float   | Kelvin           |
 | electronAffinity         | float   | ev               |
 | electronegativityPauling | float   | paulingScaleUnit |
 | electronicConfiguration  | string  | N/A              |
 | exactMass                | float   | atmass           |
 | family                   | integer | N/A              |
 | gasDensity (STP)         | float   | g/L              |
 | group                    | integer | N/A              |
 | ionization               | float   | ev               |
 | liquidDensity            | float   | g/cm^3           |
 | mass                     | float   | atmass           |
 | meltingpoint             | float   | Kelvin           |
 | period                   | integer | N/A              |
 | radiusCovalent           | float   | ang              |
 | radiusVDW                | float   | ang              |
 | solidDensity             | float   | g/cm^3           |
 | thermalConductivity      | float   | W/(m*K)          |
 | thermalExpansion         | float   | m/(m*K)          |
 |--------------------------+---------+------------------|"
  (documentation 'mjr_ia_help 'function))



(defvar *element-property-units-db*
  '(("HeatCapacity"             . "J/(g*K)")
    ("HeatCapacityMol"          . "J/(mol*K)")
    ("boilingpoint"             . "K")
    ("electronAffinity"         . "ev")                ;; Not in :MJR_UNITS
    ("electronegativity"        . "paulingScaleUnit")  ;; Not in :MJR_UNITS
    ("exactMass"                . "atmass")            ;; Not in :MJR_UNITS
    ("gasDensity"               . "g/L")
    ("ionization"               . "ev")                ;; Not in :MJR_UNITS
    ("liquidDensity"            . "g/cm^3")
    ("mass"                     . "atmass")            ;; Not in :MJR_UNITS
    ("melingpoint"              . "K")
    ("radiusCovalent"           . "ang")               ;; Not in :MJR_UNITS
    ("radiusVDW"                . "ang")               ;; Not in :MJR_UNITS
    ("solidDensity"             . "g/cm^3")
    ("thermalConductivity"      . "W/(m*K)")
    ("thermalExpansion"         . "m/(m*K)"))
  "Units for each of the properties")

(defvar *element-property-db*
  '(("name"                     . (("H"."Hydrogen") ("He"."Helium") ("Li"."Lithium") ("Be"."Beryllium") ("B"."Boron") ("C"."Carbon") ("N"."Nitrogen") ("O"."Oxygen") ("F"."Fluorine") ("Ne"."Neon") ("Na"."Sodium") ("Mg"."Magnesium") ("Al"."Aluminium") ("Si"."Silicon") ("P"."Phosphorus") ("S"."Sulfur") ("Cl"."Chlorine") ("Ar"."Argon") ("K"."Potassium") ("Ca"."Calcium") ("Sc"."Scandium") ("Ti"."Titanium") ("V"."Vanadium") ("Cr"."Chromium")   ("Mn"."Manganese") ("Fe"."Iron") ("Co"."Cobalt") ("Ni"."Nickel") ("Cu"."Copper") ("Zn"."Zinc") ("Ga"."Gallium") ("Ge"."Germanium") ("As"."Arsenic")  ("Se"."Selenium") ("Br"."Bromine") ("Kr"."Krypton") ("Rb"."Rubidium") ("Sr"."Strontium") ("Y"."Yttrium") ("Zr"."Zirconium") ("Nb"."Niobium")   ("Mo"."Molybdenum") ("Tc"."Technetium") ("Ru"."Ruthenium") ("Rh"."Rhodium") ("Pd"."Palladium") ("Ag"."Silver") ("Cd"."Cadmium") ("In"."Indium")   ("Sn"."Tin") ("Sb"."Antimony") ("Te"."Tellurium") ("I"."Iodine") ("Xe"."Xenon") ("Cs"."Caesium") ("Ba"."Barium") ("La"."Lanthanum") ("Ce"."Cerium")  ("Pr"."Praseodymium") ("Nd"."Neodymium") ("Pm"."Promethium") ("Sm"."Samarium") ("Eu"."Europium") ("Gd"."Gadolinium") ("Tb"."Terbium") ("Dy"."Dysprosium")   ("Ho"."Holmium") ("Er"."Erbium") ("Tm"."Thulium") ("Yb"."Ytterbium") ("Lu"."Lutetium") ("Hf"."Hafnium") ("Ta"."Tantalum") ("W"."Tungsten") ("Re"."Rhenium")   ("Os"."Osmium") ("Ir"."Iridium") ("Pt"."Platinum") ("Au"."Gold") ("Hg"."Mercury") ("Tl"."Thallium") ("Pb"."Lead") ("Bi"."Bismuth") ("Po"."Polonium") ("At"."Astatine") ("Rn"."Radon") ("Fr"."Francium") ("Ra"."Radium") ("Ac"."Actinium") ("Th"."Thorium") ("Pa"."Protactinium") ("U"."Uranium") ("Np"."Neptunium") ("Pu"."Plutonium") ("Am"."Americium") ("Cm"."Curium") ("Bk"."Berkelium") ("Cf"."Californium") ("Es"."Einsteinium") ("Fm"."Fermium") ("Md"."Mendelevium") ("No"."Nobelium") ("Lr"."Lawrencium") ("Rf"."Rutherfordium") ("Db"."Dubnium") ("Sg"."Seaborgium") ("Bh"."Bohrium") ("Hs"."Hassium") ("Mt"."Meitnerium") ("Ds"."Darmstadtium") ("Rg"."Roentgenium") ("Cn"."Copernicium") ("Uut"."Ununtrium") ("Uuq"."Ununquadium") ("Uup"."Ununpentium") ("Uuh"."Ununhexium") ("Uus"."Ununseptium") ("Uuo"."Ununoctium")))
    ("symbol"                   . (("H" . "H") ("He" . "He") ("Li" . "Li") ("Be" . "Be") ("B" . "B") ("C" . "C") ("N" . "N") ("O" . "O") ("F" . "F") ("Ne" . "Ne") ("Na" . "Na") ("Mg" . "Mg") ("Al" . "Al") ("Si" . "Si") ("P" . "P") ("S" . "S") ("Cl" . "Cl") ("Ar" . "Ar") ("K" . "K") ("Ca" . "Ca") ("Sc" . "Sc") ("Ti" . "Ti") ("V" . "V") ("Cr" . "Cr") ("Mn" . "Mn") ("Fe" . "Fe") ("Co" . "Co") ("Ni" . "Ni") ("Cu" . "Cu") ("Zn" . "Zn") ("Ga" . "Ga") ("Ge" . "Ge") ("As" . "As") ("Se" . "Se") ("Br" . "Br") ("Kr" . "Kr") ("Rb" . "Rb") ("Sr" . "Sr") ("Y" . "Y") ("Zr" . "Zr") ("Nb" . "Nb") ("Mo" . "Mo") ("Tc" . "Tc") ("Ru" . "Ru") ("Rh" . "Rh") ("Pd" . "Pd") ("Ag" . "Ag") ("Cd" . "Cd") ("In" . "In") ("Sn" . "Sn") ("Sb" . "Sb") ("Te" . "Te") ("I" . "I") ("Xe" . "Xe") ("Cs" . "Cs") ("Ba" . "Ba") ("La" . "La") ("Ce" . "Ce") ("Pr" . "Pr") ("Nd" . "Nd") ("Pm" . "Pm") ("Sm" . "Sm") ("Eu" . "Eu") ("Gd" . "Gd") ("Tb" . "Tb") ("Dy" . "Dy") ("Ho" . "Ho") ("Er" . "Er") ("Tm" . "Tm") ("Yb" . "Yb") ("Lu" . "Lu") ("Hf" . "Hf") ("Ta" . "Ta") ("W" . "W") ("Re" . "Re") ("Os" . "Os") ("Ir" . "Ir") ("Pt" . "Pt") ("Au" . "Au") ("Hg" . "Hg") ("Tl" . "Tl") ("Pb" . "Pb") ("Bi" . "Bi") ("Po" . "Po") ("At" . "At") ("Rn" . "Rn") ("Fr" . "Fr") ("Ra" . "Ra") ("Ac" . "Ac") ("Th" . "Th") ("Pa" . "Pa") ("U" . "U") ("Np" . "Np") ("Pu" . "Pu") ("Am" . "Am") ("Cm" . "Cm") ("Bk" . "Bk") ("Cf" . "Cf") ("Es" . "Es") ("Fm" . "Fm") ("Md" . "Md") ("No" . "No") ("Lr" . "Lr") ("Rf" . "Rf") ("Db" . "Db") ("Sg" . "Sg") ("Bh" . "Bh") ("Hs" . "Hs") ("Mt" . "Mt") ("Ds" . "Ds") ("Rg" . "Rg") ("Cn" . "Cn") ("Uut" . "Uut") ("Uuq" . "Uuq") ("Uup" . "Uup") ("Uuh" . "Uuh") ("Uus" . "Uus") ("Uuo" . "Uuo")))
    ("atomicNumber"             . (("H". 1) ("He". 2) ("Li". 3) ("Be". 4) ("B". 5) ("C". 6) ("N". 7) ("O". 8) ("F". 9) ("Ne". 10) ("Na". 11) ("Mg". 12) ("Al". 13) ("Si". 14) ("P". 15) ("S". 16) ("Cl". 17) ("Ar". 18) ("K". 19) ("Ca". 20) ("Sc". 21) ("Ti". 22) ("V". 23) ("Cr". 24) ("Mn". 25) ("Fe". 26) ("Co". 27) ("Ni". 28) ("Cu". 29) ("Zn". 30) ("Ga". 31) ("Ge". 32) ("As". 33) ("Se". 34) ("Br". 35) ("Kr". 36) ("Rb". 37) ("Sr". 38) ("Y". 39) ("Zr". 40) ("Nb". 41) ("Mo". 42) ("Tc". 43) ("Ru". 44) ("Rh". 45) ("Pd". 46) ("Ag". 47) ("Cd". 48) ("In". 49) ("Sn". 50) ("Sb". 51) ("Te". 52) ("I". 53) ("Xe". 54) ("Cs". 55) ("Ba". 56) ("La". 57) ("Ce". 58) ("Pr". 59) ("Nd". 60) ("Pm". 61) ("Sm". 62) ("Eu". 63) ("Gd". 64) ("Tb". 65) ("Dy". 66) ("Ho". 67) ("Er". 68) ("Tm". 69) ("Yb". 70) ("Lu". 71) ("Hf". 72) ("Ta". 73) ("W". 74) ("Re". 75) ("Os". 76) ("Ir". 77) ("Pt". 78) ("Au". 79) ("Hg". 80) ("Tl". 81) ("Pb". 82) ("Bi". 83) ("Po". 84) ("At". 85) ("Rn". 86) ("Fr". 87) ("Ra". 88) ("Ac". 89) ("Th". 90) ("Pa". 91) ("U". 92) ("Np". 93) ("Pu". 94) ("Am". 95) ("Cm". 96) ("Bk". 97) ("Cf". 98) ("Es". 99) ("Fm". 100) ("Md". 101) ("No". 102) ("Lr". 103) ("Rf". 104) ("Db". 105) ("Sg". 106) ("Bh". 107) ("Hs". 108) ("Mt". 109) ("Ds". 110) ("Rg". 111) ("Cn". 112) ("Uut". 113) ("Uuq". 114) ("Uup". 115) ("Uuh". 116) ("Uus". 117) ("Uuo". 118)))
    ("electronicConfiguration"  . (("H"."1s1") ("He"."1s2") ("Li"."He 2s1") ("Be"."He 2s2") ("B"."He 2s2 2p1") ("C"."He 2s2 2p2") ("N"."He 2s2 2p3") ("O"."He 2s2 2p4") ("F"."He 2s2 2p5") ("Ne"."He 2s2 2p6") ("Na"."Ne 3s1") ("Mg"."Ne 3s2") ("Al"."Ne 3s2 3p1") ("Si"."Ne 3s2 3p2") ("P"."Ne 3s2 3p3") ("S"."Ne 3s2 3p4") ("Cl"."Ne 3s2 3p5") ("Ar"."Ne 3s2 3p6") ("K"."Ar 4s1") ("Ca"."Ar 4s2") ("Sc"."Ar 3d1 4s2") ("Ti"."Ar 3d2 4s2") ("V"."Ar 3d3 4s2") ("Cr"."Ar 3d5 4s1") ("Mn"."Ar 3d5 4s2") ("Fe"."Ar 3d6 4s2") ("Co"."Ar 3d7 4s2") ("Ni"."Ar 3d8 4s2") ("Cu"."Ar 3d10 4s1") ("Zn"."Ar 3d10 4s2") ("Ga"."Ar 3d10 4s2 4p1") ("Ge"."Ar 3d10 4s2 4p2") ("As"."Ar 3d10 4s2 4p3") ("Se"."Ar 3d10 4s2 4p4") ("Br"."Ar 3d10 4s2 4p5") ("Kr"."Ar 3d10 4s2 4p6") ("Rb"."Kr 5s1") ("Sr"."Kr 5s2") ("Y"."Kr 4d1 5s2") ("Zr"."Kr 4d2 5s2") ("Nb"."Kr 4d4") ("Mo"."Kr 4d5 5s1") ("Tc"."Kr 4d6 5s1") ("Ru"."Kr 4d7 5s1") ("Rh"."Kr 4d8 5s1") ("Pd"."Kr 4d10") ("Ag"."Kr 4d10 5s1") ("Cd"."Kr 4d10 5s2") ("In"."Kr 4d10 5s2 5p1") ("Sn"."Kr 4d10 5s2 5p2") ("Sb"."Kr 4d10 5s2 5p3") ("Te"."Kr 4d10 5s2 5p4") ("I"."Kr 4d10 5s2 5p5") ("Xe"."Kr 4d10 5s2 5p6") ("Cs"."Xe 6s1") ("Ba"."Xe 6s2") ("La"."Xe 5d1 6s2") ("Ce"."Xe 4f1 5d1 6s2") ("Pr"."Xe 4f3 6s2") ("Nd"."Xe 4f4 6s2") ("Pm"."Xe 4f5 6s2") ("Sm"."Xe 4f6 6s2") ("Eu"."Xe 4f7 6s2") ("Gd"."Xe 4f7 5d1 6s2") ("Tb"."Xe 4f9 6s2") ("Dy"."Xe 4f10 6s2") ("Ho"."Xe 4f11 6s2") ("Er"."Xe 4f12 6s2") ("Tm"."Xe 4f13 6s2") ("Yb"."Xe 4f14 6s2") ("Lu"."Xe 4f14 5d1 6s2") ("Hf"."Xe 4f14 5d2 6s2") ("Ta"."Xe 4f14 5d3 6s2") ("W"."Xe 4f14 5d4 6s2") ("Re"."Xe 4f14 5d5 6s2") ("Os"."Xe 4f14 5d6 6s2") ("Ir"."Xe 4f14 5d7 6s2") ("Pt"."Xe 4f14 5d9 6s1") ("Au"."Xe 4f14 5d10 6s1") ("Hg"."Xe 4f14 5d10 6s2") ("Tl"."Xe 4f14 5d10 6s2 6p1") ("Pb"."Xe 4f14 5d10 6s2 6p2") ("Bi"."Xe 4f14 5d10 6s2 6p3") ("Po"."Xe 4f14 5d10 6s2 6p4") ("At"."Xe 4f14 5d10 6s2 6p5") ("Rn"."Xe 4f14 5d10 6s2 6p6") ("Fr"."Rn 7s1") ("Ra"."Rn 7s2") ("Ac"."Rn 6d1 7s2") ("Th"."Rn 6d2 7s2") ("Pa"."Rn 5f2 6d1 7s2") ("U"."Rn 5f3 6d1 7s2") ("Np"."Rn 5f4 6d1 7s2") ("Pu"."Rn 5f6 7s2") ("Am"."Rn 5f7 7s2") ("Cm"."Rn 5f7 6d1 7s2") ("Bk"."Rn 5f9 7s2") ("Cf"."Rn 5f10 7s2") ("Es"."Rn 5f11 7s2") ("Fm"."Rn 5f12 7s2") ("Md"."Rn 5f13 7s2") ("No"."Rn 5f14 7s2") ("Lr"."Rn 5f14 7s2 7p1") ("Rf"."Rn 5f14 6d2 7s2") ("Db"."Rn 5f14 6d3 7s2") ("Sg"."") ("Bh"."") ("Hs"."") ("Mt"."") ("Ds"."") ("Rg"."") ("Cn"."") ("Uut"."") ("Uuq"."") ("Uup"."") ("Uuh"."") ("Uus"."") ("Uuo"."")))
    ("boilingpoint"             . (("H". 20.28) ("He". 4.216) ("Li". 1615) ("Be". 3243) ("B". 4275) ("C". 5100) ("N". 77.344) ("O". 90.188) ("F". 85) ("Ne". 27.1) ("Na". 1156) ("Mg". 1380) ("Al". 2740) ("Si". 2630) ("P". 553) ("S". 717.82) ("Cl". 239.18) ("Ar". 87.45) ("K". 1033) ("Ca". 1757) ("Sc". 3109) ("Ti". 3560) ("V". 3650) ("Cr". 2945) ("Mn". 2235) ("Fe". 3023) ("Co". 3143) ("Ni". 3005) ("Cu". 2840) ("Zn". 1180) ("Ga". 2478) ("Ge". 3107) ("As". 876) ("Se". 958) ("Br". 331.85) ("Kr". 120.85) ("Rb". 961) ("Sr". 1655) ("Y". 3611) ("Zr". 4682) ("Nb". 5015) ("Mo". 4912) ("Tc". 4538) ("Ru". 4425) ("Rh". 3970) ("Pd". 3240) ("Ag". 2436) ("Cd". 1040) ("In". 2350) ("Sn". 2876) ("Sb". 1860) ("Te". 1261) ("I". 457.5) ("Xe". 165.1) ("Cs". 944) ("Ba". 2078) ("La". 3737) ("Ce". 3715) ("Pr". 3785) ("Nd". 3347) ("Pm". 3273) ("Sm". 2067) ("Eu". 1800) ("Gd". 3545) ("Tb". 3500) ("Dy". 2840) ("Ho". 2968) ("Er". 3140) ("Tm". 2223) ("Yb". 1469) ("Lu". 3668) ("Hf". 4875) ("Ta". 5730) ("W". 5825) ("Re". 5870) ("Os". 5300) ("Ir". 4700) ("Pt". 4100) ("Au". 3130) ("Hg". 629.88) ("Tl". 1746) ("Pb". 2023) ("Bi". 1837) ("At". 610) ("Rn". 211.4) ("Fr". 950) ("Ra". 1413) ("Ac". 3470) ("Th". 5060) ("Pa". 4300) ("U". 4407) ("Np". 4175) ("Pu". 3505) ("Am". 2880) ("Cm". 3383) ("Bk". 983) ("Cf". 1173)))
    ("melingpoint"              . (("H". 14.01) ("He". 0.95) ("Li". 453.7) ("Be". 1560) ("B". 2365) ("C". 3825) ("N". 63.15) ("O". 54.8) ("F". 53.55) ("Ne". 24.55) ("Na". 371) ("Mg". 922) ("Al". 933.5) ("Si". 1683) ("P". 317.3) ("S". 392.2) ("Cl". 172.17) ("Ar". 83.95) ("K". 336.8) ("Ca". 1112) ("Sc". 1814) ("Ti". 1935) ("V". 2163) ("Cr". 2130) ("Mn". 1518) ("Fe". 1808) ("Co". 1768) ("Ni". 1726) ("Cu". 1356.6) ("Zn". 692.73) ("Ga". 302.92) ("Ge". 1211.5) ("As". 1090) ("Se". 494) ("Br". 265.95) ("Kr". 116) ("Rb". 312.63) ("Sr". 1042) ("Y". 1795) ("Zr". 2128) ("Nb". 2742) ("Mo". 2896) ("Tc". 2477) ("Ru". 2610) ("Rh". 2236) ("Pd". 1825) ("Ag". 1235.1) ("Cd". 594.26) ("In". 429.78) ("Sn". 505.12) ("Sb". 903.91) ("Te". 722.72) ("I". 386.7) ("Xe". 161.39) ("Cs". 301.54) ("Ba". 1002) ("La". 1191) ("Ce". 1071) ("Pr". 1204) ("Nd". 1294) ("Pm". 1315) ("Sm". 1347) ("Eu". 1095) ("Gd". 1585) ("Tb". 1629) ("Dy". 1685) ("Ho". 1747) ("Er". 1802) ("Tm". 1818) ("Yb". 1092) ("Lu". 1936) ("Hf". 2504) ("Ta". 3293) ("W". 3695) ("Re". 3455) ("Os". 3300) ("Ir". 2720) ("Pt". 2042.1) ("Au". 1337.58) ("Hg". 234.31) ("Tl". 577) ("Pb". 600.65) ("Bi". 544.59) ("Po". 527) ("At". 575) ("Rn". 202) ("Fr". 300) ("Ra". 973) ("Ac". 1324) ("Th". 2028) ("Pa". 1845) ("U". 1408) ("Np". 912) ("Pu". 913) ("Am". 1449) ("Cm". 1620) ("Bk". 1258) ("Cf". 1172) ("Es". 1130) ("Fm". 1800) ("Md". 1100) ("No". 1100) ("Lr". 1900)) )
    ("family"                   . (("H"."Non-Metal") ("He"."Noblegas") ("Li"."Alkali_Earth") ("Be"."Alkaline_Earth") ("B"."Metalloids") ("C"."Non-Metal") ("N"."Non-Metal") ("O"."Non-Metal") ("F"."Halogen") ("Ne"."Noblegas") ("Na"."Alkali_Earth") ("Mg"."Alkaline_Earth") ("Al"."Other_Metal") ("Si"."Metalloids") ("P"."Non-Metal") ("S"."Non-Metal") ("Cl"."Halogen") ("Ar"."Noblegas") ("K"."Alkali_Earth") ("Ca"."Alkaline_Earth") ("Sc"."Transition") ("Ti"."Transition") ("V"."Transition") ("Cr"."Transition") ("Mn"."Transition") ("Fe"."Transition") ("Co"."Transition") ("Ni"."Transition") ("Cu"."Transition") ("Zn"."Transition") ("Ga"."Other_Metal") ("Ge"."Metalloids") ("As"."Metalloids") ("Se"."Non-Metal") ("Br"."Halogen") ("Kr"."Noblegas") ("Rb"."Alkali_Earth") ("Sr"."Alkaline_Earth") ("Y"."Transition") ("Zr"."Transition") ("Nb"."Transition") ("Mo"."Transition") ("Tc"."Transition") ("Ru"."Transition") ("Rh"."Transition") ("Pd"."Transition") ("Ag"."Transition") ("Cd"."Transition") ("In"."Other_Metal") ("Sn"."Other_Metal") ("Sb"."Metalloids") ("Te"."Metalloids") ("I"."Halogen") ("Xe"."Noblegas") ("Cs"."Alkali_Earth") ("Ba"."Alkaline_Earth") ("La"."Rare_Earth") ("Ce"."Rare_Earth") ("Pr"."Rare_Earth") ("Nd"."Rare_Earth") ("Pm"."Rare_Earth") ("Sm"."Rare_Earth") ("Eu"."Rare_Earth") ("Gd"."Rare_Earth") ("Tb"."Rare_Earth") ("Dy"."Rare_Earth") ("Ho"."Rare_Earth") ("Er"."Rare_Earth") ("Tm"."Rare_Earth") ("Yb"."Rare_Earth") ("Lu"."Rare_Earth") ("Hf"."Transition") ("Ta"."Transition") ("W"."Transition") ("Re"."Transition") ("Os"."Transition") ("Ir"."Transition") ("Pt"."Transition") ("Au"."Transition") ("Hg"."Transition") ("Tl"."Other_Metal") ("Pb"."Other_Metal") ("Bi"."Other_Metal") ("Po"."Metalloids") ("At"."Halogen") ("Rn"."Noblegas") ("Fr"."Alkali_Earth") ("Ra"."Alkaline_Earth") ("Ac"."Other_Metal") ("Th"."Other_Metal") ("Pa"."Other_Metal") ("U"."Other_Metal") ("Np"."Other_Metal") ("Pu"."Other_Metal") ("Am"."Other_Metal") ("Cm"."Other_Metal") ("Bk"."Other_Metal") ("Cf"."Other_Metal") ("Es"."Other_Metal") ("Fm"."Other_Metal") ("Md"."Other_Metal") ("No"."Other_Metal") ("Lr"."Other_Metal") ("Rf"."Transition") ("Db"."Transition") ("Sg"."Transition") ("Bh"."Transition") ("Hs"."Transition") ("Mt"."Transition") ("Ds"."Transition") ("Rg"."Transition") ("Cn"."Transition") ("Uut"."Other_Metal") ("Uuq"."Other_Metal") ("Uup"."Other_Metal") ("Uuh"."Other_Metal") ("Uus"."Halogen") ("Uuo"."Noblegas")))
    ("group"                    . (("H". 1) ("He". 8) ("Li". 1) ("Be". 2) ("B". 3) ("C". 4) ("N". 5) ("O". 6) ("F". 7) ("Ne". 8) ("Na". 1) ("Mg". 2) ("Al". 3) ("Si". 4) ("P". 5) ("S". 6) ("Cl". 7) ("Ar". 8) ("K". 1) ("Ca". 2) ("Sc". 3) ("Ti". 4) ("V". 5) ("Cr". 6) ("Mn". 7) ("Fe". 8) ("Co". 8) ("Ni". 8) ("Cu". 1) ("Zn". 2) ("Ga". 3) ("Ge". 4) ("As". 5) ("Se". 6) ("Br". 7) ("Kr". 8) ("Rb". 1) ("Sr". 2) ("Y". 3) ("Zr". 4) ("Nb". 5) ("Mo". 6) ("Tc". 7) ("Ru". 8) ("Rh". 8) ("Pd". 8) ("Ag". 1) ("Cd". 2) ("In". 3) ("Sn". 4) ("Sb". 5) ("Te". 6) ("I". 7) ("Xe". 8) ("Cs". 1) ("Ba". 2) ("La". 3) ("Ce". 4) ("Pr". 5) ("Nd". 6) ("Pm". 7) ("Sm". 8) ("Eu". 8) ("Gd". 8) ("Tb". 1) ("Dy". 2) ("Ho". 3) ("Er". 4) ("Tm". 5) ("Yb". 6) ("Lu". 7) ("Hf". 4) ("Ta". 5) ("W". 6) ("Re". 7) ("Os". 8) ("Ir". 8) ("Pt". 8) ("Au". 1) ("Hg". 2) ("Tl". 3) ("Pb". 4) ("Bi". 5) ("Po". 6) ("At". 7) ("Rn". 8) ("Fr". 1) ("Ra". 2) ("Ac". 3) ("Th". 4) ("Pa". 5) ("U". 6) ("Np". 7) ("Pu". 8) ("Am". 8) ("Cm". 8) ("Bk". 1) ("Cf". 2) ("Es". 3) ("Fm". 4) ("Md". 5) ("No". 6) ("Lr". 7) ("Rf". 4) ("Db". 5) ("Sg". 6) ("Bh". 7) ("Hs". 8) ("Mt". 8) ("Ds". 8) ("Rg". 1)))
    ("period"                   . (("H". 1) ("He". 1) ("Li". 2) ("Be". 2) ("B". 2) ("C". 2) ("N". 2) ("O". 2) ("F". 2) ("Ne". 2) ("Na". 3) ("Mg". 3) ("Al". 3) ("Si". 3) ("P". 3) ("S". 3) ("Cl". 3) ("Ar". 3) ("K". 4) ("Ca". 4) ("Sc". 4) ("Ti". 4) ("V". 4) ("Cr". 4) ("Mn". 4) ("Fe". 4) ("Co". 4) ("Ni". 4) ("Cu". 4) ("Zn". 4) ("Ga". 4) ("Ge". 4) ("As". 4) ("Se". 4) ("Br". 4) ("Kr". 4) ("Rb". 5) ("Sr". 5) ("Y". 5) ("Zr". 5) ("Nb". 5) ("Mo". 5) ("Tc". 5) ("Ru". 5) ("Rh". 5) ("Pd". 5) ("Ag". 5) ("Cd". 5) ("In". 5) ("Sn". 5) ("Sb". 5) ("Te". 5) ("I". 5) ("Xe". 5) ("Cs". 6) ("Ba". 6) ("La". 6) ("Ce". 6) ("Pr". 6) ("Nd". 6) ("Pm". 6) ("Sm". 6) ("Eu". 6) ("Gd". 6) ("Tb". 6) ("Dy". 6) ("Ho". 6) ("Er". 6) ("Tm". 6) ("Yb". 6) ("Lu". 6) ("Hf". 6) ("Ta". 6) ("W". 6) ("Re". 6) ("Os". 6) ("Ir". 6) ("Pt". 6) ("Au". 6) ("Hg". 6) ("Tl". 6) ("Pb". 6) ("Bi". 6) ("Po". 6) ("At". 6) ("Rn". 6) ("Fr". 7) ("Ra". 7) ("Ac". 7) ("Th". 7) ("Pa". 7) ("U". 7) ("Np". 7) ("Pu". 7) ("Am". 7) ("Cm". 7) ("Bk". 7) ("Cf". 7) ("Es". 7) ("Fm". 7) ("Md". 7) ("No". 7) ("Lr". 7) ("Rf". 7) ("Db". 7) ("Sg". 7) ("Bh". 7) ("Hs". 7) ("Mt". 7) ("Ds". 7) ("Rg". 7) ("Cn". 7) ("Uut". 7) ("Uuq". 7) ("Uup". 7) ("Uuh". 7) ("Uus". 7) ("Uuo". 7)))
    ("electronAffinity"         . (("H". 0.75420375) ("He". 0) ("Li". 0.618049) ("Be". 0) ("B". 0.279723) ("C". 1.262118) ("N". -0.07) ("O". 1.4611120) ("F". 3.4011887) ("Ne". 0) ("Na". 0.547926) ("Mg". 0) ("Al". 0.43283) ("Si". 1.389521) ("P". 0.7465) ("S". 2.0771029) ("Cl". 3.612724) ("Ar". 0) ("K". 0.501459) ("Ca". 0.02455) ("Sc". 0.188) ("Ti". 0.084) ("V". 0.525) ("Cr". 0.67584) ("Mn". 0) ("Fe". 0.151) ("Co". 0.6633) ("Ni". 1.15716) ("Cu". 1.23578) ("Zn". 0) ("Ga". 0.41) ("Ge". 1.232712) ("As". 0.814) ("Se". 2.02067) ("Br". 3.3635880) ("Kr". 0) ("Rb". 0.485916) ("Sr". 0.05206) ("Y". 0.307) ("Zr". 0.426) ("Nb". 0.893) ("Mo". 0.7472) ("Tc". 0.55) ("Ru". 1.04638) ("Rh". 1.14289) ("Pd". 0.56214) ("Ag". 1.30447) ("Cd". 0) ("In". 0.404) ("Sn". 1.112066) ("Sb". 1.047401) ("Te". 1.970875) ("I". 3.059038) ("Xe". 0) ("Cs". 0.471626) ("Ba". 0.14462) ("La". 0.47) ("Ce". 0.5) ("Pr". 0.5) ("Nd". 0.5) ("Pm". 0.5) ("Sm". 0.5) ("Eu". 0.5) ("Gd". 0.5) ("Tb". 0.5) ("Dy". 0.5) ("Ho". 0.5) ("Er". 0.5) ("Tm". 0.5) ("Yb". 0.5) ("Lu". 0.5) ("Hf". 0) ("Ta". 0.322) ("W". 0.815) ("Re". 0.15) ("Os". 1.07780) ("Ir". 1.56436) ("Pt". 2.12510) ("Au". 2.30861) ("Hg". 0) ("Tl". 0.377) ("Pb". 0.364) ("Bi". 0.942363) ("Po". 1.9) ("At". 2.8) ("Rn". 0)))
    ("ionization"               . (("H". 13.5984) ("He". 24.5874) ("Li". 5.3917) ("Be". 9.3227) ("B". 8.2980) ("C". 11.2603) ("N". 14.5341) ("O". 13.6181) ("F". 17.4228) ("Ne". 21.5645) ("Na". 5.1391) ("Mg". 7.6462) ("Al". 5.9858) ("Si". 8.1517) ("P". 10.4867) ("S". 10.3600) ("Cl". 12.9676) ("Ar". 15.7596) ("K". 4.3407) ("Ca". 6.1132) ("Sc". 6.5615) ("Ti". 6.8281) ("V". 6.7462) ("Cr". 6.7665) ("Mn". 7.4340) ("Fe". 7.9024) ("Co". 7.8810) ("Ni". 7.6398) ("Cu". 7.7264) ("Zn". 9.3942) ("Ga". 5.9993) ("Ge". 7.8994) ("As". 9.7886) ("Se". 9.7524) ("Br". 11.8138) ("Kr". 13.9996) ("Rb". 4.1771) ("Sr". 5.6949) ("Y". 6.2173) ("Zr". 6.6339) ("Nb". 6.7589) ("Mo". 7.0924) ("Tc". 7.28) ("Ru". 7.3605) ("Rh". 7.4589) ("Pd". 8.3369) ("Ag". 7.5762) ("Cd". 8.9938) ("In". 5.7864) ("Sn". 7.3439) ("Sb". 8.6084) ("Te". 9.0096) ("I". 10.4513) ("Xe". 12.1298) ("Cs". 3.8939) ("Ba". 5.2117) ("La". 5.5769) ("Ce". 5.5387) ("Pr". 5.473) ("Nd". 5.5250) ("Pm". 5.582) ("Sm". 5.6437) ("Eu". 5.6704) ("Gd". 6.1498) ("Tb". 5.8638) ("Dy". 5.9389) ("Ho". 6.0215) ("Er". 6.1077) ("Tm". 6.1843) ("Yb". 6.2542) ("Lu". 5.4259) ("Hf". 6.8251) ("Ta". 7.5496) ("W". 7.8640) ("Re". 7.8335) ("Os". 8.4382) ("Ir". 8.9670) ("Pt". 8.9588) ("Au". 9.2255) ("Hg". 10.4375) ("Tl". 6.1082) ("Pb". 7.4167) ("Bi". 7.2855) ("Po". 8.414) ("At". 0) ("Rn". 10.7485) ("Fr". 4.0727) ("Ra". 5.2784) ("Ac". 5.17) ("Th". 6.3067) ("Pa". 5.89) ("U". 6.1941) ("Np". 6.2657) ("Pu". 6.0260) ("Am". 5.9738) ("Cm". 5.9914) ("Bk". 6.1979) ("Cf". 6.2817) ("Es". 6.42) ("Fm". 6.50) ("Md". 6.58) ("No". 6.65) ("Lr". 4.9) ("Rf". 6.0)))
    ("electronegativity"        . (("H". 2.20) ("Li". 0.98) ("Be". 1.57) ("B". 2.04) ("C". 2.55) ("N". 3.04) ("O". 3.44) ("F". 3.98) ("Na". 0.93) ("Mg". 1.31) ("Al". 1.61) ("Si". 1.90) ("P". 2.19) ("S". 2.58) ("Cl". 3.16) ("K". 0.82) ("Ca". 1.00) ("Sc". 1.36) ("Ti". 1.54) ("V". 1.63) ("Cr". 1.66) ("Mn". 1.55) ("Fe". 1.83) ("Co". 1.88) ("Ni". 1.91) ("Cu". 1.90) ("Zn". 1.65) ("Ga". 1.81) ("Ge". 2.01) ("As". 2.18) ("Se". 2.55) ("Br". 2.96) ("Kr". 3.00) ("Rb". 0.82) ("Sr". 0.95) ("Y". 1.22) ("Zr". 1.33) ("Nb". 1.6) ("Mo". 2.16) ("Tc". 1.9) ("Ru". 2.2) ("Rh". 2.28) ("Pd". 2.20) ("Ag". 1.93) ("Cd". 1.69) ("In". 1.78) ("Sn". 1.96) ("Sb". 2.05) ("Te". 2.1) ("I". 2.66) ("Xe". 2.6) ("Cs". 0.79) ("Ba". 0.89) ("La". 1.10) ("Ce". 1.12) ("Pr". 1.13) ("Nd". 1.14) ("Sm". 1.17) ("Gd". 1.20) ("Dy". 1.22) ("Ho". 1.23) ("Er". 1.24) ("Tm". 1.25) ("Lu". 1.27) ("Hf". 1.3) ("Ta". 1.5) ("W". 2.36) ("Re". 1.9) ("Os". 2.2) ("Ir". 2.20) ("Pt". 2.28) ("Au". 2.54) ("Hg". 2.00) ("Tl". 1.62) ("Pb". 2.33) ("Bi". 2.02) ("Po". 2.0) ("At". 2.2) ("Fr". 0.7) ("Ra". 0.9) ("Ac". 1.1) ("Th". 1.3) ("Pa". 1.5) ("U". 1.38) ("Np". 1.36) ("Pu". 1.28) ("Am". 1.3) ("Cm". 1.3) ("Bk". 1.3) ("Cf". 1.3) ("Es". 1.3) ("Fm". 1.3) ("Md". 1.3) ("No". 1.3)))
    ("exactMass"                . (("H". 1.007825032) ("He". 4.002603254) ("Li". 7.01600455) ("Be". 9.0121822) ("B". 11.0093054) ("C". 12) ("N". 14.003074) ("O". 15.99491462) ("F". 18.99840322) ("Ne". 19.99244018) ("Na". 22.98976928) ("Mg". 23.9850417) ("Al". 26.98153863) ("Si". 27.97692653) ("P". 30.97376163) ("S". 31.972071) ("Cl". 34.96885268) ("Ar". 39.96238312) ("K". 38.96370668) ("Ca". 39.96259098) ("Sc". 44.9559119) ("Ti". 47.9479463) ("V". 50.9439595) ("Cr". 51.9405075) ("Mn". 54.9380451) ("Fe". 55.9349375) ("Co". 58.933195) ("Ni". 57.9353429) ("Cu". 62.9295975) ("Zn". 63.9291422) ("Ga". 68.9255736) ("Ge". 73.9211778) ("As". 74.9215965) ("Se". 79.9165213) ("Br". 78.9183371) ("Kr". 83.911507) ("Rb". 84.91178974) ("Sr". 87.9056121) ("Y". 88.9058483) ("Zr". 89.9047044) ("Nb". 92.9063781) ("Mo". 97.9054082) ("Tc". 97.907216) ("Ru". 101.9043493) ("Rh". 102.905504) ("Pd". 105.903486) ("Ag". 106.905097) ("Cd". 113.9033585) ("In". 114.903878) ("Sn". 119.9021947) ("Sb". 120.9038157) ("Te". 129.9062244) ("I". 126.904473) ("Xe". 131.9041535) ("Cs". 132.9054519) ("Ba". 137.9052472) ("La". 138.9063533) ("Ce". 139.9054387) ("Pr". 140.9076528) ("Nd". 141.9077233) ("Pm". 144.912749) ("Sm". 151.9197324) ("Eu". 152.9212303) ("Gd". 157.9241039) ("Tb". 158.9253468) ("Dy". 163.9291748) ("Ho". 164.9303221) ("Er". 165.9302931) ("Tm". 168.9342133) ("Yb". 173.9388621) ("Lu". 174.9407718) ("Hf". 179.94655) ("Ta". 180.9479958) ("W". 183.9509312) ("Re". 186.9557531) ("Os". 191.9614807) ("Ir". 192.9629264) ("Pt". 194.9647911) ("Au". 196.9665687) ("Hg". 201.970643) ("Tl". 204.9744275) ("Pb". 207.9766521) ("Bi". 208.9803987) ("Po". 208.9824304) ("At". 209.987148) ("Rn". 222.0175777) ("Fr". 223.0197359) ("Ra". 226.0254098) ("Ac". 227.0277521) ("Th". 232.0380553) ("Pa". 231.035884) ("U". 238.0507882) ("Np". 237.0481734) ("Pu". 244.064204) ("Am". 243.0613811) ("Cm". 247.070354) ("Bk". 247.070307) ("Cf". 251.079587) ("Es". 252.08298) ("Fm". 257.095105) ("Md". 258.098431) ("No". 259.10103) ("Lr". 262.10963) ("Rf". 261.10877) ("Db". 262.11408) ("Sg". 263.11832) ("Bh". 264.1246) ("Hs". 265.13009) ("Mt". 268.13873) ("Ds". 271.14606) ("Rg". 272.15362) ("Cn". 285.17411) ("Uut". 284.17808) ("Uuq". 289.18728) ("Uup". 288.19249) ("Uuh". 292.19979)))
    ("mass"                     . (("H". 1.00794) ("He". 4.002602) ("Li". 6.941) ("Be". 9.012182) ("B". 10.811) ("C". 12.0107) ("N". 14.0067) ("O". 15.9994) ("F". 18.9984032) ("Ne". 20.1797) ("Na". 22.98976928) ("Mg". 24.3050) ("Al". 26.9815386) ("Si". 28.0855) ("P". 30.973762) ("S". 32.065) ("Cl". 35.453) ("Ar". 39.948) ("K". 39.0983) ("Ca". 40.078) ("Sc". 44.955912) ("Ti". 47.867) ("V". 50.9415) ("Cr". 51.9961) ("Mn". 54.938045) ("Fe". 55.845) ("Co". 58.933195) ("Ni". 58.6934) ("Cu". 63.546) ("Zn". 65.38) ("Ga". 69.723) ("Ge". 72.64) ("As". 74.92160) ("Se". 78.96) ("Br". 79.904) ("Kr". 83.798) ("Rb". 85.4678) ("Sr". 87.62) ("Y". 88.90585) ("Zr". 91.224) ("Nb". 92.90638) ("Mo". 95.96) ("Tc". 98) ("Ru". 101.07) ("Rh". 102.90550) ("Pd". 106.42) ("Ag". 107.8682) ("Cd". 112.411) ("In". 114.818) ("Sn". 118.710) ("Sb". 121.760) ("Te". 127.60) ("I". 126.90447) ("Xe". 131.293) ("Cs". 132.9054519) ("Ba". 137.327) ("La". 138.90547) ("Ce". 140.116) ("Pr". 140.90765) ("Nd". 144.242) ("Pm". 145) ("Sm". 150.36) ("Eu". 151.964) ("Gd". 157.25) ("Tb". 158.92535) ("Dy". 162.500) ("Ho". 164.93032) ("Er". 167.259) ("Tm". 168.93421) ("Yb". 173.054) ("Lu". 174.9668) ("Hf". 178.49) ("Ta". 180.94788) ("W". 183.84) ("Re". 186.207) ("Os". 190.23) ("Ir". 192.217) ("Pt". 195.084) ("Au". 196.966569) ("Hg". 200.59) ("Tl". 204.3833) ("Pb". 207.2) ("Bi". 208.98040) ("Po". 209) ("At". 210) ("Rn". 222) ("Fr". 223) ("Ra". 226) ("Ac". 227) ("Th". 232.03806) ("Pa". 231.03588) ("U". 238.02891) ("Np". 237) ("Pu". 244) ("Am". 243) ("Cm". 247) ("Bk". 247) ("Cf". 251) ("Es". 252) ("Fm". 257) ("Md". 258) ("No". 259) ("Lr". 262) ("Rf". 267) ("Db". 268) ("Sg". 271) ("Bh". 272) ("Hs". 270) ("Mt". 276) ("Ds". 281) ("Rg". 280) ("Cn". 285) ("Uut". 284) ("Uuq". 289) ("Uup". 288) ("Uuh". 293) ("Uuo". 294)))
    ("radiusVDW"                . (("H". 1.2) ("He". 1.4) ("Li". 2.2) ("Be". 1.9) ("B". 1.8) ("C". 1.7) ("N". 1.6) ("O". 1.55) ("F". 1.5) ("Ne". 1.54) ("Na". 2.4) ("Mg". 2.2) ("Al". 2.1) ("Si". 2.1) ("P". 1.95) ("S". 1.8) ("Cl". 1.8) ("Ar". 1.88) ("K". 2.8) ("Ca". 2.4) ("Sc". 2.3) ("Ti". 2.15) ("V". 2.05) ("Cr". 2.05) ("Mn". 2.05) ("Fe". 2.05) ("Co". 2) ("Ni". 2) ("Cu". 2) ("Zn". 2.1) ("Ga". 2.1) ("Ge". 2.1) ("As". 2.05) ("Se". 1.9) ("Br". 1.9) ("Kr". 2.02) ("Rb". 2.9) ("Sr". 2.55) ("Y". 2.4) ("Zr". 2.3) ("Nb". 2.15) ("Mo". 2.1) ("Tc". 2.05) ("Ru". 2.05) ("Rh". 2) ("Pd". 2.05) ("Ag". 2.1) ("Cd". 2.2) ("In". 2.2) ("Sn". 2.25) ("Sb". 2.2) ("Te". 2.1) ("I". 2.1) ("Xe". 2.16) ("Cs". 3) ("Ba". 2.7) ("La". 2.5) ("Ce". 2.48) ("Pr". 2.47) ("Nd". 2.45) ("Pm". 2.43) ("Sm". 2.42) ("Eu". 2.4) ("Gd". 2.38) ("Tb". 2.37) ("Dy". 2.35) ("Ho". 2.33) ("Er". 2.32) ("Tm". 2.3) ("Yb". 2.28) ("Lu". 2.27) ("Hf". 2.25) ("Ta". 2.2) ("W". 2.1) ("Re". 2.05) ("Os". 2) ("Ir". 2) ("Pt". 2.05) ("Au". 2.1) ("Hg". 2.05) ("Tl". 2.2) ("Pb". 2.3) ("Bi". 2.3) ("Po". 2) ("At". 2) ("Rn". 2) ("Fr". 2) ("Ra". 2) ("Ac". 2) ("Th". 2.4) ("Pa". 2) ("U". 2.3) ("Np". 2) ("Pu". 2) ("Am". 2) ("Cm". 2) ("Bk". 2) ("Cf". 2) ("Es". 2) ("Fm". 2) ("Md". 2) ("No". 2) ("Lr". 2) ("Rf". 2) ("Db". 2) ("Sg". 2) ("Bh". 2) ("Hs". 2) ("Mt". 2)))
    ("radiusCovalent"           . (("H". 0.37) ("He". 0.32) ("Li". 1.34) ("Be". 0.90) ("B". 0.82) ("C". 0.77) ("N". 0.75) ("O". 0.73) ("F". 0.71) ("Ne". 0.69) ("Na". 1.54) ("Mg". 1.30) ("Al". 1.18) ("Si". 1.11) ("P". 1.06) ("S". 1.02) ("Cl". 0.99) ("Ar". 0.97) ("K". 1.96) ("Ca". 1.74) ("Sc". 1.44) ("Ti". 1.36) ("V". 1.25) ("Cr". 1.27) ("Mn". 1.39) ("Fe". 1.25) ("Co". 1.26) ("Ni". 1.21) ("Cu". 1.38) ("Zn". 1.31) ("Ga". 1.26) ("Ge". 1.22) ("As". 1.19) ("Se". 1.16) ("Br". 1.14) ("Kr". 1.10) ("Rb". 2.11) ("Sr". 1.92) ("Y". 1.62) ("Zr". 1.48) ("Nb". 1.37) ("Mo". 1.45) ("Tc". 1.56) ("Ru". 1.26) ("Rh". 1.35) ("Pd". 1.31) ("Ag". 1.53) ("Cd". 1.48) ("In". 1.44) ("Sn". 1.41) ("Sb". 1.38) ("Te". 1.35) ("I". 1.33) ("Xe". 1.30) ("Cs". 2.25) ("Ba". 1.98) ("La". 1.69)  ("Lu". 1.60) ("Hf". 1.50) ("Ta". 1.38) ("W". 1.46) ("Re". 1.59) ("Os". 1.28) ("Ir". 1.37) ("Pt". 1.28) ("Au". 1.44) ("Hg". 1.49) ("Tl". 1.48) ("Pb". 1.47) ("Bi". 1.46)))
    ("solidDensity"             . (("Li". 0.534) ("Be". 1.85) ("B". 2.34) ("C". 2.267) ("C". 3.513) ("Na". 0.968) ("Mg". 1.738) ("Al". 2.70) ("Si". 2.33) ("P". 1.823) ("P". 2.34) ("P". 2.69) ("S". 2.08) ("S". 1.96) ("S". 1.92) ("K". 0.89) ("Ca". 1.55) ("Sc". 2.985) ("Ti". 4.506) ("V". 6.0) ("Cr". 7.15) ("Mn". 7.21) ("Fe". 7.86) ("Co". 8.90) ("Ni". 8.908) ("Cu". 8.96) ("Zn". 7.14) ("Ga". 5.91) ("Ge". 5.323) ("As". 5.727) ("Se". 4.81) ("Se". 4.39) ("Se". 4.28) ("Rb". 1.532) ("Sr". 2.64) ("Y". 4.472) ("Zr". 6.52) ("Nb". 8.57) ("Mo". 10.28) ("Tc". 11) ("Ru". 12.45) ("Rh". 12.41) ("Pd". 12.023) ("Ag". 10.49) ("Cd". 8.65) ("In". 7.31) ("Sn". 7.265) ("Sn". 5.769) ("Sb". 6.697) ("Te". 6.24) ("I". 4.933) ("Cs". 1.93) ("Ba". 3.51) ("La". 6.162) ("Ce". 6.770) ("Pr". 6.77) ("Nd". 7.01) ("Pm". 7.26) ("Sm". 7.52) ("Eu". 5.244) ("Gd". 7.90) ("Tb". 8.23) ("Dy". 8.540) ("Ho". 8.79) ("Er". 9.066) ("Tm". 9.32) ("Yb". 6.90) ("Lu". 9.841) ("Hf". 13.31) ("Ta". 16.69) ("W". 19.25) ("Re". 21.02) ("Os". 22.59) ("Ir". 22.56) ("Pt". 21.45) ("Au". 19.3) ("Tl". 11.85) ("Pb". 11.34) ("Bi". 9.78) ("Po". 9.196) ("Po". 9.398) ("Ra". 5.5) ("Ac". 10) ("Th". 11.7) ("Pa". 15.37) ("U". 19.1) ("Np". 20.2) ("Pu". 19.816) ("Am". 12) ("Cm". 13.51) ("Bk". 14.78) ("Bk". 13.25) ("Cf". 15.1) ("Es". 8.84)))
    ("liquidDensity"            . (("Li". 0.512) ("Be". 1.690) ("B". 2.08) ("Na". 0.927) ("Mg". 1.584) ("Al". 2.375) ("Si". 2.57) ("S". 1.819) ("Cl". 1.5649) ("K". 0.828) ("Ca". 1.378) ("Sc". 2.80) ("Ti". 4.11) ("V". 5.5) ("Cr". 6.3) ("Mn". 5.95) ("Fe". 6.98) ("Co". 7.75) ("Ni". 7.81) ("Cu". 8.02) ("Zn". 6.57) ("Ga". 6.095) ("Ge". 5.60) ("As". 5.22) ("Se". 3.99) ("Br". 3.1028) ("Rb". 1.46) ("Sr". 6.980) ("Y". 4.24) ("Zr". 5.8) ("Mo". 9.33) ("Ru". 10.65) ("Rh". 10.7) ("Pd". 10.38) ("Ag". 9.320) ("Cd". 7.996) ("In". 7.02) ("Sn". 6.99) ("Sb". 6.53) ("Te". 5.70) ("Cs". 1.843) ("Ba". 3.338) ("La". 5.94) ("Ce". 6.55) ("Pr". 6.50) ("Nd". 6.89) ("Sm". 7.16) ("Eu". 5.13) ("Gd". 7.4) ("Tb". 7.65) ("Dy". 8.37) ("Ho". 8.34) ("Er". 8.86) ("Tm". 8.56) ("Yb". 6.21) ("Lu". 9.3) ("Hf". 12) ("Ta". 15) ("W". 17.6) ("Re". 18.9) ("Os". 20) ("Ir". 19) ("Pt". 19.77) ("Au". 17.31) ("Hg". 13.534) ("Tl". 11.22) ("Pb". 10.66) ("Bi". 10.05) ("U". 17.3) ("Pu". 16.63)))
    ("gasDensity"               . (("H". 0.08988) ("He". 0.1786) ("N". 1.251) ("O". 1.429) ("F". 1.7) ("Ne". 0.9002) ("Cl". 3.2) ("Ar". 1.784) ("Kr". 3.749) ("Xe". 5.894) ("Rn". 9.73)))
    ("HeatCapacityMol"          . (("H". 28.836) ("He". 20.786) ("Li". 24.860) ("Be". 16.443) ("B". 11.087) ("C". 8.517) ("N". 29.124) ("O". 29.378) ("F". 31.304) ("Ne". 20.786) ("Na". 28.230) ("Mg". 24.869) ("Al". 24.200) ("Si". 19.789) ("P". 23.824) ("S". 22.75) ("Cl". 33.949) ("Ar". 20.786) ("K". 29.600) ("Ca". 25.929) ("Sc". 25.52) ("Ti". 25.060) ("V". 24.89) ("Cr". 23.35) ("Mn". 26.32) ("Fe". 25.10) ("Co". 24.81) ("Ni". 26.07) ("Cu". 24.440) ("Zn". 25.390) ("Ga". 25.86) ("Ge". 23.222) ("As". 24.64) ("Se". 25.363) ("Br". 75.69) ("Kr". 20.786) ("Rb". 31.060) ("Sr". 26.4) ("Y". 26.53) ("Zr". 25.36) ("Nb". 24.60) ("Mo". 24.06) ("Tc". 24.27) ("Ru". 24.06) ("Rh". 24.98) ("Pd". 25.98) ("Ag". 25.350) ("Cd". 26.020) ("In". 26.74) ("Sn". 27.112) ("Sb". 25.23) ("Te". 25.73) ("I". 54.44) ("Xe". 20.786) ("Cs". 32.210) ("Ba". 28.07) ("La". 27.11) ("Ce". 26.94) ("Pr". 27.20) ("Nd". 27.45) ("Sm". 29.54) ("Eu". 27.66) ("Gd". 37.03) ("Tb". 28.91) ("Dy". 27.7) ("Ho". 27.15) ("Er". 28.12) ("Tm". 27.03) ("Yb". 26.74) ("Lu". 26.86) ("Hf". 25.73) ("Ta". 25.36) ("W". 24.27) ("Re". 25.48) ("Os". 24.7) ("Ir". 25.10) ("Pt". 25.86) ("Au". 25.418) ("Hg". 27.983) ("Tl". 26.32) ("Pb". 26.650) ("Bi". 25.52) ("Po". 26.4) ("Rn". 20.786) ("Fr". 31.80) ("Ac". 27.2) ("Th". 26.230) ("U". 27.665) ("Np". 29.46) ("Pu". 35.5) ("Am". 62.7)))
    ("HeatCapacity"             . (("H". 14.30) ("He". 5.193) ("Li". 3.582) ("Be". 1.825) ("B". 1.026) ("C". 0.709) ("N". 1.040) ("O". 0.918) ("F". 0.824) ("Ne". 1.030) ("Na". 1.228) ("Mg". 1.023) ("Al". 0.897) ("Si". 0.705) ("P". 0.769) ("S". 0.710) ("Cl". 0.479) ("Ar". 0.520) ("K". 0.757) ("Ca". 0.647) ("Sc". 0.568) ("Ti". 0.523) ("V". 0.489) ("Cr". 0.449) ("Mn". 0.479) ("Fe". 0.449) ("Co". 0.421) ("Ni". 0.444) ("Cu". 0.385) ("Zn". 0.388) ("Ga". 0.371) ("Ge". 0.320) ("As". 0.329) ("Se". 0.321) ("Br". 0.474) ("Kr". 0.248) ("Rb". 0.363) ("Sr". 0.301) ("Y". 0.298) ("Zr". 0.278) ("Nb". 0.265) ("Mo". 0.251) ("Ru". 0.238) ("Rh". 0.243) ("Pd". 0.244) ("Ag". 0.235) ("Cd". 0.232) ("In". 0.233) ("Sn". 0.228) ("Sb". 0.207) ("Te". 0.202) ("I". 0.214) ("Xe". 0.158) ("Cs". 0.242) ("Ba". 0.204) ("La". 0.195) ("Ce". 0.192) ("Pr". 0.193) ("Nd". 0.190) ("Sm". 0.197) ("Eu". 0.182) ("Gd". 0.236) ("Tb". 0.182) ("Dy". 0.170) ("Ho". 0.165) ("Er". 0.168) ("Tm". 0.160) ("Yb". 0.155) ("Lu". 0.154) ("Hf". 0.144) ("Ta". 0.140) ("W". 0.132) ("Re". 0.137) ("Os". 0.130) ("Ir". 0.131) ("Pt". 0.133) ("Au". 0.129) ("Hg". 0.140) ("Tl". 0.129) ("Pb". 0.129) ("Bi". 0.122) ("Rn". 0.094) ("Ac". 0.120) ("Th". 0.113) ("U". 0.116)))
    ("thermalExpansion"         . (("Li" . 4.6e-5) ("Be" . 1.1300001e-5) ("Na" . 7.1e-5) ("Mg" . 2.48e-5) ("Al" . 2.31e-5) ("Si" . 2.5999998e-6) ("K" . 8.33e-5) ("Ca" . 2.2299999e-5) ("Sc" . 1.0199999e-5) ("Ti" . 8.6e-6) ("V" . 8.399999e-6) ("Cr" . 4.9e-6) ("Mn" . 2.1700002e-5) ("Fe" . 1.18e-5) ("Co" . 1.3e-5) ("Ni" . 1.3399999e-5) ("Cu" . 1.65e-5) ("Zn" . 3.02e-5) ("Ge" . 6.e-6) ("Se" . 3.7e-5) ("Sr" . 2.25e-5) ("Y" . 1.0600001e-5) ("Zr" . 5.6999997e-6) ("Nb" . 7.3e-6) ("Mo" . 4.8e-6) ("Ru" . 6.4e-6) ("Rh" . 8.2e-6) ("Pd" . 1.18e-5) ("Ag" . 1.89e-5) ("Cd" . 3.0799998e-5) ("In" . 3.2099997e-5) ("Sn" . 2.2e-5) ("Sb" . 1.1e-5) ("Cs" . 9.7e-5) ("Ba" . 2.06e-5) ("La" . 1.21e-5) ("Ce" . 6.3e-6) ("Pr" . 6.6999996e-6) ("Nd" . 9.6e-6) ("Sm" . 1.2699999e-5) ("Eu" . 3.5e-5) ("Gd" . 9.4e-6) ("Tb" . 1.03e-5) ("Dy" . 9.9e-6) ("Ho" . 1.12e-5) ("Er" . 1.22e-5) ("Tm" . 1.33e-5) ("Yb" . 2.6299998e-5) ("Lu" . 9.9e-6) ("Hf" . 5.9e-6) ("Ta" . 6.3e-6) ("W" . 4.5e-6) ("Re" . 6.2e-6) ("Os" . 5.0999997e-6) ("Ir" . 6.4e-6) ("Pt" . 8.800001e-6) ("Au" . 1.42e-5) ("Hg" . 6.04e-5) ("Tl" . 2.99e-5) ("Pb" . 2.89e-5) ("Bi" . 1.3399999e-5) ("Po" . 2.35e-5) ("Th" . 1.1e-5) ("U" . 1.3899999e-5) ("Pu" . 4.67e-5)))
    ("thermalConductivity"      . (("H". 180.5e3) ("He". 151.3e3) ("Li". 84.8) ("Be". 200) ("B". 27.4) ("C". 119) ("N". 25.83e3) ("O". 26.58e3) ("F". 27.7e3) ("Ne". 49.1e3) ("Na". 142) ("Mg". 156) ("Al". 237) ("Si". 149) ("P". 0.236) ("Cl". 8.9e3) ("Ar". 17.72e3) ("K". 102.5) ("Ca". 201) ("Sc". 15.8) ("Ti". 21.9) ("V". 30.7) ("Cr". 93.9) ("Mn". 7.81) ("Fe". 80.4) ("Co". 100) ("Ni". 90.9) ("Cu". 401) ("Zn". 116) ("Ga". 40.6) ("Ge". 60.2) ("As". 50.2) ("Se". 0.519) ("Br". 0.122) ("Kr". 9.43e3) ("Rb". 58.2) ("Sr". 35.4) ("Y". 17.2) ("Zr". 22.6) ("Nb". 53.7) ("Mo". 138) ("Tc". 50.6) ("Ru". 117) ("Rh". 150) ("Pd". 71.8) ("Ag". 429) ("Cd". 96.6) ("In". 81.8) ("Sn". 66.8) ("Sb". 24.4) ("I". 0.449) ("Xe". 5.65e3) ("Cs". 35.9) ("Ba". 18.4) ("La". 13.4) ("Ce". 11.3) ("Pr". 12.5) ("Nd". 16.5) ("Pm". 17.9) ("Sm". 13.3) ("Gd". 10.6) ("Tb". 11.1) ("Dy". 10.7) ("Ho". 16.2) ("Er". 14.5) ("Tm". 16.9) ("Yb". 38.5) ("Lu". 16.4) ("Hf". 23.0) ("Ta". 57.5) ("W". 173) ("Re". 48.0) ("Os". 87.6) ("Ir". 147) ("Pt". 71.6) ("Au". 318) ("Hg". 8.30) ("Tl". 46.1) ("Pb". 35.3) ("Bi". 7.97) ("At". 1.7) ("Rn". 3.61e3) ("Ra". 18.6) ("Ac". 12) ("Th". 54.0) ("Pa". 47) ("U". 27.5) ("Np". 6.3) ("Pu". 6.74) ("Am". 10) ("Bk". 10)))
    )
  "element properties")

(defvar *element-symbols-db*
  '("H" "He" "Li" "Be" "B" "C" "N" "O" "F" "Ne" "Na" "Mg" "Al" "Si" "P" "S" "Cl" "Ar" "K" "Ca" "Sc" "Ti" "V" "Cr" "Mn" "Fe" "Co" "Ni" "Cu" "Zn" "Ga" "Ge" "As" "Se" "Br" "Kr" "Rb" "Sr" "Y" "Zr" "Nb" "Mo" "Tc" "Ru" "Rh" "Pd" "Ag" "Cd" "In" "Sn" "Sb" "Te" "I" "Xe" "Cs" "Ba" "La" "Ce" "Pr" "Nd" "Pm" "Sm" "Eu" "Gd" "Tb" "Dy" "Ho" "Er" "Tm" "Yb" "Lu" "Hf" "Ta" "W" "Re" "Os" "Ir" "Pt" "Au" "Hg" "Tl" "Pb" "Bi" "Po" "At" "Rn" "Fr" "Ra" "Ac" "Th" "Pa" "U" "Np" "Pu" "Am" "Cm" "Bk" "Cf" "Es" "Fm" "Md" "No" "Lr" "Rf" "Db" "Sg" "Bh" "Hs" "Mt" "Ds" "Rg" "Cn" "Uut" "Uuq" "Uup" "Uuh" "Uus" "Uuo")
  "element symbols list")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun mjr_chem_element-key-to-element-key (out-element-key-type element-key-or-keys)
  "Transform element-keys to the kind specified by out-element-key-type.

If no conversion is required, then element-key-or-keys is simply returned. Only conversions to or from :ek-symbol are supported now.

Return is NIL if conversion is unsupported, otherwise the return depends on element-key-or-keys.  If element-key-or-keys is:
  * NIL ........................
  * an element-symbol .......... a element-symbol converted to the specified type
  * a list of element-symbols .. a list of element-symbols each converted to the specified type
  * cons cell .................. a cons is with the car converted to out-element-key-type
  * a list of cons cells ....... a list of cons cells with the cars converted to the specified type"
  (if (listp element-key-or-keys)
      (if (listp (cdr element-key-or-keys))
          (mapcar (lambda (x) (mjr_chem_element-key-to-element-key out-element-key-type x)) element-key-or-keys)
          (cons (mjr_chem_element-key-to-element-key out-element-key-type (car element-key-or-keys))
                (cdr element-key-or-keys)))
      (let ((in-element-key-type (if (numberp element-key-or-keys)
                                     :ek-atomicnumber
                                     (if (or (stringp element-key-or-keys) (and (not (null element-key-or-keys)) (symbolp element-key-or-keys)))
                                         (let ((element-key-or-keys (if (symbolp element-key-or-keys) (symbol-name element-key-or-keys) element-key-or-keys)))
                                           (if (or (> (length element-key-or-keys) 3) (string-equal "Tin" element-key-or-keys))
                                               :ek-name
                                               :ek-symbol))))))
        (if (equalp in-element-key-type out-element-key-type)
            element-key-or-keys
            (case in-element-key-type
              (:ek-symbol       (case out-element-key-type
                                  (:ek-atomicnumber       (cdr (assoc  element-key-or-keys (cdr (assoc "atomicNumber" *element-property-db* :test #'string-equal)) :test #'string-equal)))
                                  (:ek-name               (cdr (assoc  element-key-or-keys (cdr (assoc "name"         *element-property-db* :test #'string-equal)) :test #'string-equal)))))
              (:ek-atomicnumber (case out-element-key-type
                                  (:ek-symbol             (car (rassoc element-key-or-keys (cdr (assoc "atomicNumber" *element-property-db* :test #'string-equal)) :test #'equal)))))
              (:ek-name         (case out-element-key-type
                                  (:ek-symbol             (car (rassoc element-key-or-keys (cdr (assoc "name"         *element-property-db* :test #'string-equal))  :test #'string-equal))))))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun mjr_chem_find-element-property (element-key-or-keys element-property-name &optional (out-element-key-type :ek-symbol))
  "Take an element-key & element-property-value, and return the search results.

out-element-key-type determines the form of returned element-keys

The return will be NIL if the search had no hits, otherwise it depends on the value of element-key-or-keys:
  * A single element-key .... An element-property-value-cons
  * NIL ..................... An element-property-value-list containing ALL elements with the element-property defined
  * A list of element-keys .. An element-property-value-list"
  (let* ((the-data (cdr (assoc element-property-name *element-property-db* :test #'string-equal))))
    (if the-data
        (if element-key-or-keys
            (if (listp element-key-or-keys)
                (loop for cur-ele-sym in (mjr_chem_element-key-to-element-key :ek-symbol element-key-or-keys)
                      for resu = (assoc cur-ele-sym the-data :test #'string-equal)
                      when resu
                      collect (mjr_chem_element-key-to-element-key out-element-key-type resu))
                (let ((cur-ele-sym (mjr_chem_element-key-to-element-key :ek-symbol element-key-or-keys)))
                  (mjr_chem_element-key-to-element-key out-element-key-type (assoc cur-ele-sym the-data :test #'string-equal))))
            (mjr_chem_element-key-to-element-key out-element-key-type the-data)))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun mjr_chem_find-element-key (out-element-key-type &rest search-terms)
  "Take one or more element-property-value related search terms, and return a list of matching element-symbols that match.
   search-terms are cons cells of one of two types:
     * (element-property-name . predicate)
         predicate is a function that takes a single element-property-value of the kind specified by element-property-name
     * (element-property-name . element-property-value)
         element-property-value is a value of the kind specified by element-property-name"
  (mjr_chem_element-key-to-element-key
   out-element-key-type
   (reduce (lambda (a b) (intersection a b :test #'string-equal))
           (loop for (cur-search-name . cur-search-criteria) in search-terms
                 for the-data = (cdr (assoc cur-search-name *element-property-db* :test #'string-equal))
                 collect (loop for (prop-key . prop-value) in the-data
                               when (typecase cur-search-criteria
                                      (number    (=            prop-value cur-search-criteria))
                                      (string    (string-equal prop-value cur-search-criteria))
                                      (otherwise (funcall cur-search-criteria prop-value)))
                               collect prop-key)))))