コード例 #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)
コード例 #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
コード例 #3
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_equal_factors_differently_set(self):
     self.assertTrue(
         compare_chemical_expression("6/2H^+ + OH^-", " OH^- + 3H^+ "))
コード例 #4
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_one_superscript_explicitly_set(self):
     self.assertTrue(
         compare_chemical_expression("H^+ + OH^1-", " OH^- + H^+ "))
コード例 #5
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 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+"))
コード例 #6
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 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-"))
コード例 #7
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_same_factors(self):
     self.assertTrue(
         compare_chemical_expression("3H2O +  2CO2", "2CO2 + 3H2O "))
コード例 #8
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_different_order_no_phases_no_factors_no_ions(self):
     self.assertTrue(compare_chemical_expression("H2O + CO2", "CO2 + H2O"))
コード例 #9
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_phases_ignored(self):
     self.assertTrue(
         compare_chemical_expression("H2O(s) + CO2",
                                     "H2O+CO2",
                                     ignore_state=True))
コード例 #10
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_float_factors(self):
     self.assertTrue(
         compare_chemical_expression("7/2H^+ + 3/5OH^-",
                                     " 3/5OH^- + 7/2H^+ "))
コード例 #11
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_wrong_factors_ions(self):
     self.assertFalse(
         compare_chemical_expression("2H^+ + 3OH^-", " 2OH^- + 3H^+ "))
コード例 #12
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_correct_factors_ions_and_one(self):
     self.assertTrue(
         compare_chemical_expression("3H^+ + 2OH^-", " 2OH^- + 3H^+ "))
コード例 #13
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_parent_groups_ions(self):
     self.assertTrue(
         compare_chemical_expression("Fe(OH)^2- + (OH)^-",
                                     " (OH)^- + Fe(OH)^2- "))
コード例 #14
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_wrong_ions(self):
     self.assertFalse(
         compare_chemical_expression("H^+ + OH^-", " OH^- + H^- "))
コード例 #15
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_correct_ions(self):
     self.assertTrue(
         compare_chemical_expression("H^+ + OH^-", " OH^- + H^+ "))
コード例 #16
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_one_subscript_explicitly_set(self):
     self.assertFalse(compare_chemical_expression("H2 + CO2", "H2 + C102"))
コード例 #17
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_incorrect_order_of_atoms_in_molecule(self):
     self.assertFalse(compare_chemical_expression("H2O + CO2", "O2C + OH2"))
コード例 #18
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_phases_not_ignored_explicitly(self):
     self.assertFalse(
         compare_chemical_expression("H2O(s) + CO2",
                                     "H2O+CO2",
                                     ignore_state=False))
コード例 #19
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_different_order_three_multimolecule(self):
     self.assertTrue(
         compare_chemical_expression("H2O + Fe(OH)3 +  CO2",
                                     "CO2 + H2O + Fe(OH)3"))
コード例 #20
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_phases_not_ignored(self):  # same as previous
     self.assertFalse(compare_chemical_expression("H2O(s) + CO2",
                                                  "H2O+CO2"))
コード例 #21
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_compare_different_factors(self):
     self.assertFalse(
         compare_chemical_expression("2H2O +  3CO2", "2CO2 + 3H2O "))
コード例 #22
0
ファイル: test_all.py プロジェクト: stvstnfrd/openedx-chem
 def test_complex_additivity(self):
     self.assertTrue(
         compare_chemical_expression(
             "5(H1H212)^70010- + 2H20 + 7/2HCl + H2O",
             "7/2HCl + 2H20 + H2O + 5(H1H212)^70010-"))