예제 #1
0
    def __init__(self, symbol):
        self.symbol = "%s" % symbol
        d = _pt_data[symbol]

        # Store key variables for quick access
        self.Z = d["Atomic no"]
        self.X = d.get("X", 0)
        for a in [
                "mendeleev_no", "electrical_resistivity", "velocity_of_sound",
                "reflectivity", "refractive_index", "poissons_ratio",
                "molar_volume", "electronic_structure", "thermal_conductivity",
                "boiling_point", "melting_point", "critical_temperature",
                "superconduction_temperature", "liquid_range", "bulk_modulus",
                "youngs_modulus", "brinell_hardness", "rigidity_modulus",
                "mineral_hardness", "vickers_hardness", "density_of_solid",
                "atomic_radius_calculated", "van_der_waals_radius",
                "coefficient_of_linear_thermal_expansion"
        ]:
            kstr = a.capitalize().replace("_", " ")
            val = d.get(kstr, None)
            if str(val).startswith("no data"):
                val = None
            else:
                try:
                    val = float(val)
                except ValueError:
                    toks_nobracket = re.sub(r'\(.*\)', "", val)
                    toks = toks_nobracket.replace("about",
                                                  "").strip().split(" ", 1)
                    if len(toks) == 2:
                        try:
                            if "10<sup>" in toks[1]:
                                base_power = re.findall(r'([+-]?\d+)', toks[1])
                                factor = "e" + base_power[1]
                                toks[0] += factor
                                if a == "electrical_resistivity":
                                    unit = "ohm m"
                                elif a == "coefficient_of_linear_thermal_expansion":
                                    unit = "K^-1"
                                else:
                                    unit = toks[1]
                                val = FloatWithUnit(toks[0], unit)
                            else:
                                unit = toks[1].replace("<sup>", "^").replace(
                                    "</sup>", "").replace("&Omega;", "ohm")
                                units = Unit(unit)
                                if set(units.keys()).issubset(
                                        SUPPORTED_UNIT_NAMES):
                                    val = FloatWithUnit(toks[0], unit)
                        except ValueError as ex:
                            # Ignore error. val will just remain a string.
                            pass
            setattr(self, a, val)
        if str(d.get("Atomic radius", "no data")).startswith("no data"):
            self.atomic_radius = None
        else:
            self.atomic_radius = Length(d["Atomic radius"], "ang")
        self.atomic_mass = Mass(d["Atomic mass"], "amu")
        self._data = d
예제 #2
0
    def __init__(self, symbol):
        self.symbol = "%s" % symbol
        d = _pt_data[symbol]

        # Store key variables for quick access
        self.Z = d["Atomic no"]
        self.X = d.get("X", 0)
        for a in ["mendeleev_no", "electrical_resistivity",
                  "velocity_of_sound", "reflectivity",
                  "refractive_index", "poissons_ratio", "molar_volume",
                  "electronic_structure", "thermal_conductivity",
                  "boiling_point", "melting_point",
                  "critical_temperature", "superconduction_temperature",
                  "liquid_range", "bulk_modulus", "youngs_modulus",
                  "brinell_hardness", "rigidity_modulus",
                  "mineral_hardness", "vickers_hardness",
                  "density_of_solid", "atomic_radius_calculated",
                  "van_der_waals_radius",
                  "coefficient_of_linear_thermal_expansion"]:
            kstr = a.capitalize().replace("_", " ")
            val = d.get(kstr, None)
            if str(val).startswith("no data"):
                val = None
            else:
                try:
                    val = float(val)
                except ValueError:
                    toks_nobracket = re.sub(r'\(.*\)', "", val)
                    toks = toks_nobracket.replace("about", "").strip().split(" ", 1)
                    if len(toks) == 2:
                        try:
                            if "10<sup>" in toks[1]:
                                base_power = re.findall(r'([+-]?\d+)', toks[1])
                                factor = "e" + base_power[1]
                                toks[0] += factor
                                if a == "electrical_resistivity":
                                    unit = "ohm m"
                                elif a == "coefficient_of_linear_thermal_expansion":
                                    unit = "K^-1"
                                else:
                                    unit = toks[1]
                                val = FloatWithUnit(toks[0], unit)
                            else:
                                unit = toks[1].replace("<sup>", "^").replace(
                                    "</sup>", "").replace("&Omega;",
                                                          "ohm")
                                units = Unit(unit)
                                if set(units.keys()).issubset(SUPPORTED_UNIT_NAMES):
                                    val = FloatWithUnit(toks[0], unit)
                        except ValueError as ex:
                            # Ignore error. val will just remain a string.
                            pass
            setattr(self, a, val)
        if str(d.get("Atomic radius", "no data")).startswith("no data"):
            self.atomic_radius = None
        else:
            self.atomic_radius = Length(d["Atomic radius"], "ang")
        self.atomic_mass = Mass(d["Atomic mass"], "amu")
        self._data = d
예제 #3
0
 def __getattr__(self, item):
     if item in ["mendeleev_no", "electrical_resistivity",
                 "velocity_of_sound", "reflectivity",
                 "refractive_index", "poissons_ratio", "molar_volume",
                 "electronic_structure", "thermal_conductivity",
                 "boiling_point", "melting_point",
                 "critical_temperature", "superconduction_temperature",
                 "liquid_range", "bulk_modulus", "youngs_modulus",
                 "brinell_hardness", "rigidity_modulus",
                 "mineral_hardness", "vickers_hardness",
                 "density_of_solid", "atomic_radius_calculated",
                 "van_der_waals_radius", "atomic_orbitals",
                 "coefficient_of_linear_thermal_expansion",
                 "ground_state_term_symbol", "valence"]:
         kstr = item.capitalize().replace("_", " ")
         val = self._data.get(kstr, None)
         if str(val).startswith("no data"):
             val = None
         elif type(val) == dict:
             pass
         else:
             try:
                 val = float(val)
             except ValueError:
                 nobracket = re.sub(r'\(.*\)', "", val)
                 toks = nobracket.replace("about", "").strip().split(" ", 1)
                 if len(toks) == 2:
                     try:
                         if "10<sup>" in toks[1]:
                             base_power = re.findall(r'([+-]?\d+)', toks[1])
                             factor = "e" + base_power[1]
                             if toks[0] in ["&gt;", "high"]:
                                 toks[0] = "1"  # return the border value
                             toks[0] += factor
                             if item == "electrical_resistivity":
                                 unit = "ohm m"
                             elif (
                                     item ==
                                     "coefficient_of_linear_thermal_expansion"
                             ):
                                 unit = "K^-1"
                             else:
                                 unit = toks[1]
                             val = FloatWithUnit(toks[0], unit)
                         else:
                             unit = toks[1].replace("<sup>", "^").replace(
                                 "</sup>", "").replace("&Omega;",
                                                       "ohm")
                             units = Unit(unit)
                             if set(units.keys()).issubset(
                                     SUPPORTED_UNIT_NAMES):
                                 val = FloatWithUnit(toks[0], unit)
                     except ValueError as ex:
                         # Ignore error. val will just remain a string.
                         pass
         return val
     raise AttributeError
예제 #4
0
 def __getattr__(self, item):
     if item in ["mendeleev_no", "electrical_resistivity",
                 "velocity_of_sound", "reflectivity",
                 "refractive_index", "poissons_ratio", "molar_volume",
                 "electronic_structure", "thermal_conductivity",
                 "boiling_point", "melting_point",
                 "critical_temperature", "superconduction_temperature",
                 "liquid_range", "bulk_modulus", "youngs_modulus",
                 "brinell_hardness", "rigidity_modulus",
                 "mineral_hardness", "vickers_hardness",
                 "density_of_solid", "atomic_radius_calculated",
                 "van_der_waals_radius", "atomic_orbitals",
                 "coefficient_of_linear_thermal_expansion"]:
         kstr = item.capitalize().replace("_", " ")
         val = self._data.get(kstr, None)
         if str(val).startswith("no data"):
             val = None
         elif type(val) == dict:
             pass
         else:
             try:
                 val = float(val)
             except ValueError:
                 nobracket = re.sub(r'\(.*\)', "", val)
                 toks = nobracket.replace("about", "").strip().split(" ", 1)
                 if len(toks) == 2:
                     try:
                         if "10<sup>" in toks[1]:
                             base_power = re.findall(r'([+-]?\d+)', toks[1])
                             factor = "e" + base_power[1]
                             if toks[0] in ["&gt;", "high"]:
                                 toks[0] = "1"  # return the border value
                             toks[0] += factor
                             if item == "electrical_resistivity":
                                 unit = "ohm m"
                             elif (
                                 item ==
                                 "coefficient_of_linear_thermal_expansion"
                             ):
                                 unit = "K^-1"
                             else:
                                 unit = toks[1]
                             val = FloatWithUnit(toks[0], unit)
                         else:
                             unit = toks[1].replace("<sup>", "^").replace(
                                 "</sup>", "").replace("&Omega;",
                                                       "ohm")
                             units = Unit(unit)
                             if set(units.keys()).issubset(
                                     SUPPORTED_UNIT_NAMES):
                                 val = FloatWithUnit(toks[0], unit)
                     except ValueError as ex:
                         # Ignore error. val will just remain a string.
                         pass
         return val
     raise AttributeError