@@ -2633,6 +2633,38 @@ def test_split_mol(self):
2633
2633
self .assertEqual (m .to_smiles (), 'O' )
2634
2634
self .assertEqual (fragments , [[0 , 3 , 4 ], [1 , 5 , 6 ], [2 , 7 , 8 ]])
2635
2635
2636
+ def test_get_atom_theoretical_charge (self ):
2637
+ """Test getting the theoretical charge of an atom."""
2638
+ mol = Molecule (smiles = '[O-][S+]([O-])=[OH+]' )
2639
+ charges = [get_atom_theoretical_charge (atom ) for atom in mol .atoms ]
2640
+ self .assertEqual (sorted (charges ), [- 1.0 , - 1.0 , 0.0 , 1.0 , 1.0 ])
2641
+
2642
+ def test_fix_mol_electronic_configuration (self ):
2643
+ """Test fixing the electronic configuration of a molecule."""
2644
+ adjlist = """multiplicity 1
2645
+ 1 O u1 p2 c0 {3,S}
2646
+ 2 O u1 p2 c0 {3,S}
2647
+ 3 N u0 p1 c0 {1,S} {2,S} {4,S}
2648
+ 4 C u0 p0 c0 {3,S} {5,S} {6,S} {7,S}
2649
+ 5 C u0 p0 c0 {4,S} {8,S} {9,S} {10,S}
2650
+ 6 H u0 p0 c0 {4,S}
2651
+ 7 H u0 p0 c0 {4,S}
2652
+ 8 H u0 p0 c0 {5,S}
2653
+ 9 H u0 p0 c0 {5,S}
2654
+ 10 H u0 p0 c0 {5,S}"""
2655
+ mol_1 = Molecule ().from_adjacency_list (adjlist )
2656
+ self .assertEqual (mol_1 .multiplicity , 1 )
2657
+ self .assertNotIn ('[N+]' , mol_1 .to_smiles ())
2658
+ self .assertNotIn ('[O-]' , mol_1 .to_smiles ())
2659
+ charges = [get_atom_theoretical_charge (atom ) for atom in mol_1 .atoms ]
2660
+ self .assertEqual (list (set ((charges ))), [0.0 ])
2661
+ mol_2 = fix_mol_electronic_configuration (mol_1 )
2662
+ self .assertEqual (mol_2 .multiplicity , 1 )
2663
+ self .assertIn ('[N+]' , mol_2 .to_smiles ())
2664
+ self .assertIn ('[O-]' , mol_2 .to_smiles ())
2665
+ charges = [get_atom_theoretical_charge (atom ) for atom in mol_2 .atoms ]
2666
+ self .assertEqual (sorted (charges ), [- 1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 ])
2667
+
2636
2668
@classmethod
2637
2669
def tearDownClass (cls ):
2638
2670
"""
0 commit comments