Exemple #1
0
 def check(self, reply, clue):
     if not self._is_valid_expression(reply, self.is_equation):
         # Reply is not a valid chemical formula/equation
         if self.is_equation:
             return False, "Ответ не является корректным химическим уравнением"
         return False, "Ответ не является корректной химической формулой"
     if self.is_equation:
         return chemical_equations_equal(self.source.expression, reply)
     return compare_chemical_expression(self.source.expression, reply)
Exemple #2
0
 def _is_valid_expression(self, expression, is_equation=False):
     try:
         if is_equation:
             left_expr, arrow, right_expr = split_on_arrow(expression)
             compare_chemical_expression(left_expr, 'H')
             compare_chemical_expression(right_expr, 'H')
         else:
             compare_chemical_expression(expression, 'H')
     except ParseException:
         return False
     return True
Exemple #3
0
 def test_compare_equal_factors_differently_set(self):
     self.assertTrue(
         compare_chemical_expression("6/2H^+ + OH^-", " OH^- + 3H^+ "))
Exemple #4
0
 def test_compare_one_superscript_explicitly_set(self):
     self.assertTrue(
         compare_chemical_expression("H^+ + OH^1-", " OH^- + H^+ "))
Exemple #5
0
 def test_complex_all_grammar(self):
     self.assertTrue(
         compare_chemical_expression("5[Ni(NH3)4]^2+ + 5/2SO4^2-",
                                     "5/2SO4^2- + 5[Ni(NH3)4]^2+"))
Exemple #6
0
 def test_complex_additivity_wrong(self):
     self.assertFalse(
         compare_chemical_expression(
             "5(H1H212)^70010- + 2H20 + 7/2HCl + H2O",
             "2H20 + 7/2HCl + H2O + 5(H1H212)^70011-"))
Exemple #7
0
 def test_compare_same_factors(self):
     self.assertTrue(
         compare_chemical_expression("3H2O +  2CO2", "2CO2 + 3H2O "))
Exemple #8
0
 def test_compare_different_order_no_phases_no_factors_no_ions(self):
     self.assertTrue(compare_chemical_expression("H2O + CO2", "CO2 + H2O"))
Exemple #9
0
 def test_compare_phases_ignored(self):
     self.assertTrue(
         compare_chemical_expression("H2O(s) + CO2",
                                     "H2O+CO2",
                                     ignore_state=True))
Exemple #10
0
 def test_compare_float_factors(self):
     self.assertTrue(
         compare_chemical_expression("7/2H^+ + 3/5OH^-",
                                     " 3/5OH^- + 7/2H^+ "))
Exemple #11
0
 def test_compare_wrong_factors_ions(self):
     self.assertFalse(
         compare_chemical_expression("2H^+ + 3OH^-", " 2OH^- + 3H^+ "))
Exemple #12
0
 def test_compare_correct_factors_ions_and_one(self):
     self.assertTrue(
         compare_chemical_expression("3H^+ + 2OH^-", " 2OH^- + 3H^+ "))
Exemple #13
0
 def test_compare_parent_groups_ions(self):
     self.assertTrue(
         compare_chemical_expression("Fe(OH)^2- + (OH)^-",
                                     " (OH)^- + Fe(OH)^2- "))
Exemple #14
0
 def test_compare_wrong_ions(self):
     self.assertFalse(
         compare_chemical_expression("H^+ + OH^-", " OH^- + H^- "))
Exemple #15
0
 def test_compare_correct_ions(self):
     self.assertTrue(
         compare_chemical_expression("H^+ + OH^-", " OH^- + H^+ "))
Exemple #16
0
 def test_compare_one_subscript_explicitly_set(self):
     self.assertFalse(compare_chemical_expression("H2 + CO2", "H2 + C102"))
Exemple #17
0
 def test_compare_incorrect_order_of_atoms_in_molecule(self):
     self.assertFalse(compare_chemical_expression("H2O + CO2", "O2C + OH2"))
Exemple #18
0
 def test_compare_phases_not_ignored_explicitly(self):
     self.assertFalse(
         compare_chemical_expression("H2O(s) + CO2",
                                     "H2O+CO2",
                                     ignore_state=False))
Exemple #19
0
 def test_compare_different_order_three_multimolecule(self):
     self.assertTrue(
         compare_chemical_expression("H2O + Fe(OH)3 +  CO2",
                                     "CO2 + H2O + Fe(OH)3"))
Exemple #20
0
 def test_compare_phases_not_ignored(self):  # same as previous
     self.assertFalse(compare_chemical_expression("H2O(s) + CO2",
                                                  "H2O+CO2"))
Exemple #21
0
 def test_compare_different_factors(self):
     self.assertFalse(
         compare_chemical_expression("2H2O +  3CO2", "2CO2 + 3H2O "))
Exemple #22
0
 def test_complex_additivity(self):
     self.assertTrue(
         compare_chemical_expression(
             "5(H1H212)^70010- + 2H20 + 7/2HCl + H2O",
             "7/2HCl + 2H20 + H2O + 5(H1H212)^70010-"))