コード例 #1
0
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- ")
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
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 ")
コード例 #5
0
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 ")
コード例 #6
0
    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"
コード例 #7
0
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 ")
コード例 #8
0
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- ")
コード例 #9
0
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)
コード例 #10
0
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- ")
コード例 #11
0
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)
コード例 #12
0
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)
コード例 #13
0
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 ")
コード例 #14
0
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- ")
コード例 #15
0
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- ")
コード例 #16
0
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- ")
コード例 #17
0
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 ")
コード例 #18
0
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 ")