def r_3(comps: 'list(Compound)', is_input): """`iSaNo -> `iSiMe + `iSiNme""" react: str me: str me_oxs: int if is_input: iSaNo = comps[0] if len(iSaNo.formula.consist) > 2: return "" ((me, me_oxs), (nme, _)) = iSa_oxs(iSaNo.formula) iSiMe = Compound(simple(me)) iSiNme = Compound(simple(nme)) react = f"{iSaNo} -> {iSiMe} + {iSiNme}" else: iSiMe = Compound("Na") iSiNme = Compound("Cl2") if len(comps) == 1: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] else: iSiNme = comps[0] else: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] iSiNme = comps[1] else: iSiMe = comps[1] iSiNme = comps[0] me = list(iSiMe.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if me_oxs == 0: return "" nme = list(iSiNme.formula.consist.keys())[0].name if nme in ["O", "H"]: return "" nme_oxs = get_nme_oxs(nme) if nme_oxs == 0: return "" iSaNo = Compound(iSaNo_create(me, me_oxs, nme, nme_oxs)) if "iSa" not in iSaNo.comp_type: return "" react = f"{iSaNo} -> {iSiMe} + {iSiNme}" if not is_me_activer("Al", 3, me, me_oxs) or me == "Al": return Reaction(react, "te- ") else: return Reaction(react, "e- ")
def r_5(comps: 'list(Compound)', is_input): """`iSiMe + `HNO3` -> `iSaNo + `AmmNO3` + `iWa""" react: str if is_input: iSiMe = Compound("Mg") if len(comps) == 1: if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: iSiMe = comps[1] me = list(iSiMe.formula.consist.keys())[0].name if me in ["Au", "Pt"]: return "" me_oxs = get_me_oxs(me) if me_oxs == 0: return "" if is_me_activer("H", 1, me, me_oxs): return "" iSaNo = Compound(iSaNo_create(me, me_oxs, "NO3", 1)) react = f"{iSiMe} + HNO3 -> {iSaNo} + AmmNO3 + H2O" else: iSaNo = Compound("Mg(NO3)2") if len(comps) == 1: if "iSaNo" in comps[0].comp_type: iSaNo = comps[0] elif len(comps) == 2: if "iSaNo" in comps[0].comp_type: iSaNo = comps[0] elif "iSaNo" in comps[1].comp_type: iSaNo = comps[1] else: if "iSaNo" in comps[0].comp_type: iSaNo = comps[0] elif "iSaNo" in comps[1].comp_type: iSaNo = comps[1] else: iSaNo = comps[2] ((me, me_oxs), (an, an_oxs)) = iSa_oxs(iSaNo.formula) if an != "NO3": return "" if me in ["Au", "Pt"]: return "" if is_me_activer("H", 1, me, me_oxs): return "" iSiMe = Compound(simple(me)) react = f"{iSiMe} + HNO3 -> {iSaNo} + AmmNO3 + H2O" return Reaction(react)
def r_1(comps: 'list(Compound)', is_input): """`iSiMe + `H2SO4` -> `iSaNo + `SO2` + `iWa""" react: str if is_input: iSiMe = Compound("Cu") if len(comps) == 1: if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: iSiMe = comps[1] me = list(iSiMe.formula.consist.keys())[0].name if me in ["Au", "Pt"]: return "" me_oxs = get_me_oxs(me) if me_oxs == 0: return "" iSaNo = Compound(iSaNo_create(me, me_oxs, "SO4", 2)) react = f"{iSiMe} + H2SO4 -> {iSaNo} + SO2 + H2O" else: iSaNo = Compound("CuSO4") if len(comps) == 1: if "iSaNo" in comps[0].comp_type: iSaNo = comps[0] elif len(comps) == 2: if "iSaNo" in comps[0].comp_type: iSaNo = comps[0] elif "iSaNo" in comps[1].comp_type: iSaNo = comps[1] else: if "iSaNo" in comps[0].comp_type: iSaNo = comps[0] elif "iSaNo" in comps[1].comp_type: iSaNo = comps[1] else: iSaNo = comps[2] ((me, me_oxs), (an, an_oxs)) = iSa_oxs(iSaNo.formula) if an != "SO4": return "" if me in ["Au", "Pt"]: return "" iSiMe = Compound(simple(me)) react = f"{iSiMe} + H2SO4 -> {iSaNo} + SO2 + H2O" return Reaction(react)
def r_7(comps: 'list(Compound)', is_input): """(`iSiMe_, `iSiNme_) + `O2` ->"""\ """(`iOxAlk_, `iOxBa_, `iOxAc_, `iOxAm_, `iOxNs_, `iSaPer_)""" react: str if is_input: iSi = Compound("P") if len(comps) == 1: if comps[0].formula.value != "O2": iSi = comps[0] else: if comps[0].formula.value != "O2": iSi = comps[0] else: iSi = comps[1] el = list(iSi.formula.consist.keys())[0].name if el in ["O", "F", "Au", "Ag", "He", "Ne", "Kr", "Xe", "Rn"]: return "" el_oxs = get_oxs(el) if el_oxs == 0: return "" iOx = Compound(iOx_create(el, el_oxs)) if el == "N": iOx = Compound("NO") elif el == "Na": iOx = Compound("Na2O2") elif el in ["K", "Rb", "Cs"]: iOx = Compound(el + "2O2") elif el == "Fe": iOx = Compound("Fe3O4") react = f"{iSi} + O2 -> {iOx}" else: iOx = comps[0] if iOx.formula.value == "N2O5": return "" (el, _) = iOx_oxs(iOx.formula) if el in ["O", "F", "Au", "Ag", "He", "Ne", "Kr", "Xe", "Rn"]: return "" if el == "N" and iOx.formula.value != "NO": return "" iSi = Compound(simple(el)) react = f"{iSi} + O2 -> {iOx}" return Reaction(react, "t ")
def r_8(comps: 'list(Compound)', is_input): """`iSiMe + `iWa -> (`iOxBa_, `iOxAm_, `iOxAc_) + `H2`""" react: str if is_input: iSiMe = Compound("Zn") if len(comps) == 1: if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: iSiMe = comps[1] me = list(iSiMe.formula.consist.keys())[0].name me_oxs = get_oxs(me) if me_oxs == 0: return "" if is_me_activer("H", 1, me, me_oxs): return "" if not is_me_activer("Na", 1, me, me_oxs): return "" iOxBa = Compound(iOx_create(me, me_oxs)) react = f"{iSiMe} + H2O -> {iOxBa} + H2" else: iOxBa = Compound("ZnO") if len(comps) == 1: if "iOx" in comps[0].comp_type: iOxBa = comps[0] else: if "iOx" in comps[0].comp_type: iOxBa = comps[0] else: iOxBa = comps[1] (me, me_oxs) = iOx_oxs(iOxBa.formula) if is_me_activer("H", 1, me, me_oxs): return "" if not is_me_activer("Na", 1, me, me_oxs): return "" iSiMe = Compound(simple(me)) react = f"{iSiMe} + H2O -> {iOxBa} + H2" return Reaction(react, "t ")
def id_iSi(): # simple compound if len(formula.consist) != 1: return "" elem = list(formula.consist.keys())[0] if elem.name == "O": if formula.value not in ["[O]", "O2", "O3"]: return "nil" elif formula.value != simple(elem.name): return "nil" if elem.elem_type == "Me": # metal return "iSiMe" elif elem.elem_type == "NonMe": # non-metal return "iSiNme" else: return "nil"
def r_3(comps: 'list(Compound)', is_input): """`iSaNo -> `iSiMe + `NO2` + `O2`""" react: str if is_input: iSaNO3 = comps[0] ((me, me_oxs), (an, an_oxs)) = iSa_oxs(iSaNO3.formula) if an != "NO3": return "" if is_me_activer(me, me_oxs, "Cu", 2) or me == "Cu": return "" iSiMe = Compound(simple(me)) react = f"{iSaNO3} -> {iSiMe} + NO2 + O2" else: iSiMe = Compound("Ag") if len(comps) == 1: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] elif len(comps) == 2: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] elif "iSiMe" in comps[1].comp_type: iSiMe = comps[1] else: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] elif "iSiMe" in comps[1].comp_type: iSiMe = comps[1] else: iSiMe = comps[2] me = list(iSiMe.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if me_oxs == 0: return "" if is_me_activer(me, me_oxs, "Cu", 2) or me == "Cu": return "" iSaNO3 = Compound(iSaNo_create(me, me_oxs, "NO3", 1)) react = f"{iSaNO3} -> {iSiMe} + NO2 + O2" return Reaction(react, "t ")
def r_1(comps: 'list(Compound)', is_input): """`iBaAlk -> `iSiMe + `O2` + `iWa""" react: str if is_input: iBaAlk = comps[0] (me, me_oxs) = iBa_oxs(iBaAlk.formula) iSiMe = Compound(simple(me)) react = f"{iBaAlk} -> {iSiMe} + O2 + H2O" else: iSiMe = Compound("Na") if len(comps) == 1: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] elif len(comps) == 2: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] elif "iSiMe" in comps[1].comp_type: iSiMe = comps[1] else: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] elif "iSiMe" in comps[1].comp_type: iSiMe = comps[1] else: iSiMe = comps[2] me = list(iSiMe.formula.consist.keys())[0].name me_oxs: int if Element(me).elem_sub_type == "AlkMe": me_oxs = 1 elif Element(me).elem_sub_type == "AlkEMe": me_oxs = 2 else: return "" iBaAlk = Compound(iBa_create(me, me_oxs)) react = f"{iBaAlk} -> {iSiMe} + O2 + H2O" return Reaction(react, "te- ")
def r_4(comps: 'list(Compound)', is_input): """`iSiMe + `iWa -> `iBaAlk + `H2`""" react: str if is_input: iSiMe = Compound("Na") if len(comps) == 1: if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: iSiMe = comps[1] me = list(iSiMe.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if me_oxs == 0: return "" iBaAlk = Compound(iBa_create(me, me_oxs)) if "iBaAlk" not in iBaAlk.comp_type: return "" react = f"{iSiMe} + H2O -> {iBaAlk} + H2" else: iBaAlk = Compound("NaOH") if len(comps) == 1: if "iBa" in comps[0].comp_type: iBaAlk = comps[0] else: if "iBa" in comps[0].comp_type: iBaAlk = comps[0] else: iBaAlk = comps[1] (me, _) = iBa_oxs(iBaAlk.formula) iSiMe = Compound(simple(me)) react = f"{iSiMe} + H2O -> {iBaAlk} + H2" return Reaction(react)
def r_2(comps: 'list(Compound)', is_input): """`iAcNox -> `iSiNme + `H2`""" react: str if is_input: iAcNox = comps[0] (nme, _) = iAc_el_oxs(iAcNox.formula) iSiNme = Compound(simple(nme)) react = f"{iAcNox} -> H2 + {iSiNme}" else: iSiNme = Compound("Cl2") if len(comps) == 1: if comps[0].formula.value != "H2": iSiNme = comps[0] else: if comps[0].formula.value != "H2": iSiNme = comps[0] else: iSiNme = comps[1] nme = list(iSiNme.formula.consist.keys())[0].name if nme in ["O", "H"]: return "" nme_oxs = get_nme_oxs(nme) if nme_oxs == 0: return "" iAcNox = Compound(iAc_create(nme, nme_oxs)) if "iAc" not in iAcNox.comp_type: return "" react = f"{iAcNox} -> H2 + {iSiNme}" return Reaction(react, "e- ")
def r_3(comps: 'list(Compound)', is_input): """`iBaAlk + `iSiMe + `iWa -> `iSaCo + `H2`""" react: str if is_input: iBaAlk = Compound("NaOH") iSiMe = Compound("Al") if len(comps) == 1: if "iBa" in comps[0].comp_type: iBaAlk = comps[0] elif "iSi" in comps[0].comp_type: iSiMe = comps[0] elif len(comps) == 2: if "iBa" in comps[0].comp_type: iBaAlk = comps[0] elif "iBa" in comps[1].comp_type: iBaAlk = comps[1] if "iSi" in comps[0].comp_type: iSiMe = comps[0] elif "iSi" in comps[1].comp_type: iSiMe = comps[1] else: if "iBa" in comps[0].comp_type: iBaAlk = comps[0] if "iSi" in comps[1].comp_type: iSiMe = comps[1] else: iSiMe = comps[2] elif "iBa" in comps[1].comp_type: iBaAlk = comps[1] if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: iSiMe = comps[2] else: iBaAlk = comps[2] if "iSi" in comps[0].comp_type: iSiMe = comps[0] else: iSiMe = comps[1] (me, me_oxs) = iBa_oxs(iBaAlk.formula) ame = list(iSiMe.formula.consist.keys())[0].name ame_oxs = get_me_oxs(ame) if ame_oxs == 0: return "" iOxAm = Compound(iOx_create(ame, ame_oxs)) if iOxAm.comp_type != "iOxAm": return "" coo = coord(ame, ame_oxs)[0] if ame == "Al": coo = 4 kat = [(me, me_oxs, 1)] an = [(ame, ame_oxs, 1), ("OH", -1, coo)] iSaCo = Compound(iSaCo_create(kat, an)) react = f"{iBaAlk} + {iSiMe} + H2O -> {iSaCo} + H2" else: iSaCo = Compound("Na[Al(OH)4]") if len(comps) == 1: if "iSa" in comps[0].comp_type: iSaCo = comps[0] else: if "iSa" in comps[0].comp_type: iSaCo = comps[0] else: iSaCo = comps[1] ((me, me_oxs), (cpx, _)) = iSa_oxs(iSaCo.formula) [(ame, ame_oxs, _), an, oh, neu] = iSaCo_in(cpx[1:-1]) if oh[0] != "OH" or an[0] != None or neu[0] != None: return "" iOxAm = Compound(iOx_create(ame, ame_oxs)) if iOxAm.comp_type != "iOxAm": return "" iBaAlk = Compound(iBa_create(me, me_oxs)) iSiMe = Compound(simple(ame)) react = f"{iBaAlk} + {iSiMe} + H2O -> {iSaCo} + H2" return Reaction(react)
def r_4(comps: 'list(Compound)', is_input): """`iSiMe + `iSaAc -> `iSiMe + `iSaNo + (`iAcOx_, `iAcNox_)""" react: str if is_input: iSiMe1 = Compound("Mg") iSaAc = Compound("Cu(HSO4)2") if len(comps) == 1: if "iSi" in comps[0].comp_type: iSiMe1 = comps[0] me = list(iSiMe1.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if me_oxs == 0: return "" if is_me_activer("Cu", 2, me, me_oxs): return "" else: iSaAc = comps[0] ((me, me_oxs), _) = iSa_oxs(iSaAc.formula) else: if "iSi" in comps[0].comp_type: iSiMe1 = comps[0] iSaAc = comps[1] else: iSiMe1 = comps[1] iSaAc = comps[0] me1 = list(iSiMe1.formula.consist.keys())[0].name me1_oxs = get_me_oxs(me1) if me1_oxs == 0: return "" ((me2, me2_oxs), (an, an_oxs)) = iSa_oxs(iSaAc.formula) if not is_me_activer(me1, me1_oxs, me2, me2_oxs): return "" if not is_me_activer("Na", 1, me1, me1_oxs): return "" iSiMe2 = Compound(simple(me2)) iSaNo = Compound(iSaNo_create(me1, me1_oxs, an, an_oxs)) iAc = Compound(iAc_create(an, an_oxs)) react = f"{iSiMe1} + {iSaAc} -> {iSiMe2} + {iSaNo} + {iAc}" else: iSiMe2 = Compound("Cu") iSaNo = Compound("MgSO4") iAc = Compound("H2SO4") if len(comps) == 1: if "iSi" in comps[0].comp_type: iSiMe2 = comps[0] me = list(iSiMe2.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if me_oxs == 0: return "" elif "iSa" in comps[0].comp_type: iSaNo = comps[0] ((me, me_oxs), (an, an_oxs)) = iSa_oxs(iSaNo.formula) iAc = Compound(iAc_create(an, an_oxs)) if is_me_activer("Cu", 2, me, me_oxs): return "" if me == "Cu": iSiMe = Compound("Ag") else: iAc = comps[0] (an, an_oxs) = iAc_oxs(iAc.formula) iSaNo = Compound(iSaNo_create("Zn", 2, an, an_oxs)) elif len(comps) == 2: for i in range(0, 2): for j in range(0, 2): if "iSi" in comps[i].comp_type and "iSa" in comps[ j].comp_type: iSiMe = comps[i] iSaNo = comps[j] ((me, me_oxs), (an, an_oxs)) = iSa_oxs(iSaNo.formula) iAc = Compound(iAc_create(an, an_oxs)) break if "iSi" in comps[i].comp_type and "iAc" in comps[ j].comp_type: iSiMe = comps[i] iAc = comps[j] (an, an_oxs) = iAc_oxs(iAc.formula) iSaNo = Compound(iSaNo_create("Mg", 2, an, an_oxs)) break if "iSa" in comps[i].comp_type and "iAc" in comps[ j].comp_type: iSaNo = comps[i] iAc = comps[j] ((me, me_oxs), (an, an_oxs)) = iSa_oxs(iSaNo.formula) if me == "Cu": iSiMe = Compound("Ag") break else: if "iSi" in comps[0].comp_type: iSiMe2 = comps[0] if "iSa" in comps[1].comp_type: iSaNo = comps[1] iAc = comps[2] else: iSaNo = comps[2] iAc = comps[1] elif "iSa" in comps[0].comp_type: iSaNo = comps[0] if "iSi" in comps[1].comp_type: iSiMe2 = comps[1] iAc = comps[2] else: iSiMe2 = comps[2] iAc = comps[1] elif "iAc" in comps[0].comp_type: iAc = comps[0] if "iSi" in comps[1].comp_type: iSiMe2 = comps[1] iSaNo = comps[2] else: iSiMe2 = comps[2] iSaNo = comps[1] me2 = list(iSiMe2.formula.consist.keys())[0].name me2_oxs = get_me_oxs(me2) if me2_oxs == 0: return "" ((me1, me1_oxs), (an1, an1_oxs)) = iSa_oxs(iSaNo.formula) (an2, an2_oxs) = iAc_oxs(iAc.formula) if an1 != an2: return "" if an1_oxs == 1: return "" if not is_me_activer(me1, me1_oxs, me2, me2_oxs): return "" if not is_me_activer("Na", 1, me1, me1_oxs): return "" iSiMe1 = Compound(simple(me1)) iSaAc = Compound(iSaAc_create(me2, me2_oxs, an1, an1_oxs)) react = f"{iSiMe1} + {iSaAc} -> {iSiMe2} + {iSaNo} + {iAc}" return Reaction(react)
def r_1(comps: 'list(Compound)', is_input): """(`iSiMe_, `iSiNme_) + (`iSiMe__, `iSiNme__) ->"""\ """(`iSaNo_, `iBi_, `iAcNox_, `CH4`_)""" react: str if is_input: iSiMe = Compound("Na") iSiNme = Compound("H2") if len(comps) == 1: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] else: iSiNme = comps[0] else: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] iSiNme = comps[1] else: iSiMe = comps[1] iSiNme = comps[0] me = list(iSiMe.formula.consist.keys())[0].name nme = list(iSiNme.formula.consist.keys())[0].name if Element(me).elem_type == "NonMe": if is_me_activer(nme, 0, me, 0): iSiNme, iSiMe = iSiMe, iSiNme me = list(iSiMe.formula.consist.keys())[0].name nme = list(iSiNme.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if Element(me).elem_type == "NonMe": me_oxs = get_oxs(me) if me_oxs == 0: return "" nme_oxs = get_nme_oxs(nme) if nme_oxs == 0: return "" if nme in ["O"]: return "" Me = Element(me) Nme = Element(nme) if Me.elem_type == "Me" and Nme.elem_type == "NonMe": if Nme.elem_sub_type != "Hal" and \ nme not in ["H", "B", "C", "N", "Si", "P", "S"]: if Me.elem_sub_type != "AlkMe": return "" elif nme in ["H", "B", "C", "N", "Si", "P", "S"]: if is_me_activer("Al", 3, me, me_oxs): return "" if nme in db_not_bin: if me in db_not_bin[nme]: return "" iBi = Compound(iSaNo_create(me, me_oxs, nme, nme_oxs)) if me == "O" and nme == "F": iBi = Compound("O2F2") react = f"{iSiMe} + {iSiNme} -> {iBi}" else: iBi = comps[0] if len(iBi.formula.consist) != 2: return "" ((me, me_oxs), (nme, _)) = iSa_oxs(iBi.formula) if me == "H" and nme == "C": return "" Me = Element(me) Nme = Element(nme) if Me.elem_type == "Me" and Nme.elem_type == "NonMe": if Nme.elem_sub_type != "Hal" and \ nme not in ["H", "B", "C", "N", "Si", "P", "S"]: if Me.elem_sub_type != "AlkMe": return "" elif nme not in ["H", "B", "C", "N", "Si", "P", "S"]: if is_me_activer("Al", 3, me, me_oxs): return "" if nme in db_not_bin: if me in db_not_bin[nme]: return "" iSiMe = Compound(simple(me)) iSiNme = Compound(simple(nme)) react = f"{iSiMe} + {iSiNme} -> {iBi}" return Reaction(react, "t ")
def r_6(comps: 'list(Compound)', is_input): """`iSaNo + `iWa -> `iSiMe + `iAcOx + `O2`""" react: str if is_input: iSaNo = Compound("ZnSO4") if len(comps) == 1: if "iSa" in comps[0].comp_type: iSaNo = comps[0] else: if "iSa" in comps[0].comp_type: iSaNo = comps[0] else: iSaNo = comps[1] ((me, me_oxs), (an, an_oxs)) = iSa_oxs(iSaNo.formula) if not is_me_activer("Al", 3, me, me_oxs) or me == "Al": return "" if is_me_activer("H", 1, me, me_oxs): return "" iSiMe = Compound(simple(me)) iAcOx = Compound(iAc_create(an, an_oxs)) if "iAcNox" in iAcOx.comp_type: return "" react = f"{iSaNo} + H2O -> {iSiMe} + {iAcOx} + O2" else: iSiMe = Compound("Zn") iAcOx = Compound("H2SO4") if len(comps) == 1: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] elif "iAc" in comps[0].comp_type: iAcOx = comps[0] elif len(comps) == 2: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] if "iAc" in comps[0].comp_type: iAcOx = comps[1] elif "iSiMe" in comps[1].comp_type: iSiMe = comps[1] if "iAc" in comps[0].comp_type: iAcOx = comps[0] else: if "iAc" in comps[0].comp_type: iAcOx = comps[0] else: iAcOx = comps[1] else: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] if "iAc" in comps[0].comp_type: iAcOx = comps[1] else: iAcOx = comps[2] if "iSiMe" in comps[1].comp_type: iSiMe = comps[1] if "iAc" in comps[0].comp_type: iAcOx = comps[0] else: iAcOx = comps[2] if "iSiMe" in comps[2].comp_type: iSiMe = comps[2] if "iAc" in comps[0].comp_type: iAcOx = comps[0] else: iAcOx = comps[1] me = list(iSiMe.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if me_oxs == 0: return "" if not is_me_activer("Al", 3, me, me_oxs) or me == "Al": return "" if is_me_activer("H", 1, me, me_oxs): return "" (an, an_oxs) = iAc_oxs(iAcOx.formula) iSaNo = Compound(iSaNo_create(me, me_oxs, an, an_oxs)) react = f"{iSaNo} + H2O -> {iSiMe} + {iAcOx} + O2" return Reaction(react, "e- ")
def r_5(comps: 'list(Compound)', is_input): """`iSaNo + `iWa -> (`iBaAlk_, `iBaBa_, `iBaAm_) + `iSiNme + `H2`""" react: str if is_input: iSaNo = Compound("NaCl") if len(comps) == 1: if "iSa" in comps[0].comp_type: iSaNo = comps[0] else: if "iSa" in comps[0].comp_type: iSaNo = comps[0] else: iSaNo = comps[1] ((me, me_oxs), (an, an_oxs)) = iSa_oxs(iSaNo.formula) if is_me_activer("Al", 3, me, me_oxs): return "" iAc = Compound(iAc_create(an, an_oxs)) if "iAcOx" in iAc.comp_type: return "" (nme, _) = iAc_el_oxs(iAc.formula) iBa = Compound(iBa_create(me, me_oxs)) iSiNme = Compound(simple(nme)) react = f"{iSaNo} + H2O -> {iBa} + {iSiNme} + H2" else: iBa = Compound("NaOH") iSiNme = Compound("Cl2") if len(comps) == 1: if "iBa" in comps[0].comp_type: iBa = comps[0] elif comps[0].formula.value != "H2": iSiNme = comps[0] elif len(comps) == 2: if "iBa" in comps[0].comp_type: iBa = comps[0] if comps[1].formula.value != "H2": iSiNme = comps[1] elif "iBa" in comps[1].comp_type: iBa = comps[1] if comps[0].formula.value != "H2": iSiNme = comps[0] else: if comps[0].formula.value != "H2": iSiNme = comps[0] else: iSiNme = comps[1] else: if "iBa" in comps[0].comp_type: iBa = comps[0] if comps[1].formula.value != "H2": iSiNme = comps[1] else: iSiNme = comps[2] if "iBa" in comps[1].comp_type: iBa = comps[1] if comps[0].formula.value != "H2": iSiNme = comps[0] else: iSiNme = comps[2] if "iBa" in comps[2].comp_type: iBa = comps[2] if comps[0].formula.value != "H2": iSiNme = comps[0] else: iSiNme = comps[1] (me, me_oxs) = iBa_oxs(iBa.formula) if me == "Amm": return "" if is_me_activer("Al", 3, me, me_oxs): return "" nme = list(iSiNme.formula.consist.keys())[0].name if nme in ["O", "H"]: return "" nme_oxs = get_nme_oxs(nme) if nme_oxs == 0: return "" iSaNo = Compound(iSaNo_create(me, me_oxs, nme, nme_oxs)) if "iSa" not in iSaNo.comp_type: return "" react = f"{iSaNo} + H2O -> {iBa} + {iSiNme} + H2" return Reaction(react, "e- ")
def r_4(comps: 'list(Compound)', is_input): """`iSaNo -> `iSiMe + `iOxAc + `O2`""" react: str if is_input: iSaNo = comps[0] ((me, _), (an, an_oxs)) = iSa_oxs(iSaNo.formula) iAc = Compound(iAc_create(an, an_oxs)) if "iAcNox" in iAc.comp_type: return "" (nme, nme_oxs) = iAc_el_oxs(iAc.formula) if nme == "N": return "" iSiMe = Compound(simple(me)) iOxAc = Compound(iOx_create(nme, nme_oxs)) react = f"{iSaNo} -> {iSiMe} + {iOxAc} + O2" else: iSiMe = Compound("Na") iOxAc = Compound("SO3") if len(comps) == 1: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] elif "iOx" in comps[0].comp_type: iOxAc = comps[0] elif len(comps) == 2: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] if "iOx" in comps[1].comp_type: iOxAc = comps[1] elif "iSiMe" in comps[1].comp_type: iSiMe = comps[1] if "iOx" in comps[0].comp_type: iOxAc = comps[0] else: if "iOx" in comps[0].comp_type: iOxAc = comps[0] elif "iOx" in comps[1].comp_type: iOxAc = comps[1] else: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] if "iOx" in comps[1].comp_type: iOxAc = comps[1] else: iOxAc = comps[2] elif "iSiMe" in comps[1].comp_type: iSiMe = comps[1] if "iOx" in comps[0].comp_type: iOxAc = comps[0] else: iOxAc = comps[2] else: iSiMe = comps[2] if "iOx" in comps[0].comp_type: iOxAc = comps[0] else: iOxAc = comps[1] me = list(iSiMe.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if me_oxs == 0: return "" (nme, nme_oxs) = iOx_oxs(iOxAc.formula) if nme == "N": return "" iAcOx = Compound(iAc_el_create(nme, nme_oxs)) (an, an_oxs) = iAc_oxs(iAcOx.formula) iSaNo = Compound(iSaNo_create(me, me_oxs, an, an_oxs)) react = f"{iSaNo} -> {iSiMe} + {iOxAc} + O2" return Reaction(react, "te- ")
def r_3(comps: 'list(Compound)', is_input): """`oHAa + `iSiNme -> `oHal + `iAcNox""" react: str if is_input: oHAa = Compound("CH4") iSiNme = Compound("Cl2") if len(comps) == 1: if "oH" in comps[0].comp_type: oHAa = comps[0] else: iSiNme = comps[0] else: if "oH" in comps[0].comp_type: oHAa = comps[0] iSiNme = comps[0] else: oHAa = comps[1] iSiNme = comps[0] el = list(iSiNme.formula.consist.keys())[0].name if el not in db_Hal: return "" n = oHAa_parse(oHAa.skeleton) oHal = oHal_create(oHAa.skeleton, [(n, el)]) iAcNox = Compound(iAc_create(el, 1)) react = f"{oHAa} + {iSiNme} -> {oHal} + {iAcNox}" else: oHal = Compound("CCl4") iAcNox = Compound("HCl") if len(comps) == 1: if "oHal" in comps[0].comp_type: oHal = comps[0] else: iAcNox = comps[0] else: if "oHal" in comps[0].comp_type: oHal = comps[0] iAcNox = comps[0] else: oHal = comps[1] iAcNox = comps[0] (n, els) = oHal_parse(oHal.skeleton) (_, hals) = zip(*els) hals = list(set(hals)) if len(hals) != 1: return "" hal = hals[0] (an, _) = iAc_oxs(iAcNox.formula) if an != hal: if len(comps) == 1: if "o" in comps[0].comp_type: iAc = iAc_create(hal, 1) else: iHal = Compound("C" + hal + "4") else: return "" oHAa = oHAa_create(n) iSiNme = simple(hal) react = f"{oHAa} + {iSiNme} -> {oHal} + {iAcNox}" return Reaction(react, "hv ")
def r_2(comps: 'list(Compound)', is_input): """(`iBi_, `iSaNo_, `iAcNox_, `CH4`_) ->"""\ """(`iSiMe_, `iSiNme_) + (`iSiMe__, `iSiNme__)""" react: str if is_input: iBi = comps[0] if len(iBi.formula.consist) != 2: return "" ((me, _), (nme, _)) = iSa_oxs(iBi.formula) iSiMe = Compound(simple(me)) iSiNme = Compound(simple(nme)) react = f"{iBi} -> {iSiMe} + {iSiNme}" else: iSiMe = Compound("H2") iSiNme = Compound("Cl2") if len(comps) == 1: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] else: iSiNme = comps[0] else: if "iSiMe" in comps[0].comp_type: iSiMe = comps[0] iSiNme = comps[1] else: iSiMe = comps[1] iSiNme = comps[0] me = list(iSiMe.formula.consist.keys())[0].name nme = list(iSiNme.formula.consist.keys())[0].name if is_me_activer(nme, 0, me, 0): iSiNme, iSiMe = iSiMe, iSiNme me = list(iSiMe.formula.consist.keys())[0].name nme = list(iSiNme.formula.consist.keys())[0].name me_oxs = get_me_oxs(me) if Element(me).elem_type == "NonMe": me_oxs = get_oxs(me) if me_oxs == 0: return "" nme_oxs = get_nme_oxs(nme) if nme_oxs == 0: return "" if nme in ["O"]: return "" iBi = Compound(iSaNo_create(me, me_oxs, nme, nme_oxs)) if me == "O" and nme == "F": iBi = Compound("O2F2") if iBi.formula.value == "HH": return "" react = f"{iBi} -> {iSiMe} + {iSiNme}" return Reaction(react, "t ")