File tree Expand file tree Collapse file tree 4 files changed +128
-0
lines changed 
Sandpit/Exscientia/_SireWrappers 
Sandpit/Exscientia/_SireWrappers Expand file tree Collapse file tree 4 files changed +128
-0
lines changed Original file line number Diff line number Diff line change @@ -260,6 +260,47 @@ def __len__(self):
260260        """Return the number of molecules in the system.""" 
261261        return  self .nMolecules ()
262262
263+     def  copy (self , renumber = False ):
264+         """ 
265+         Return a copy of this System. 
266+ 
267+         Parameters 
268+         ---------- 
269+ 
270+         renumber : bool 
271+             Whether to give the copied molecules unique molecule numbers. 
272+ 
273+         Returns 
274+         ------- 
275+ 
276+         System : :class:`System <BioSimSpace._SireWrappers.System>` 
277+             A copy of the object. 
278+         """ 
279+ 
280+         if  not  isinstance (renumber , bool ):
281+             raise  TypeError ("'renumber' must be of type 'bool'" )
282+ 
283+         if  not  renumber :
284+             return  super ().copy ()
285+ 
286+         # Create a molecules container. 
287+         mols  =  _SireMol .MoleculeGroup ("all" )
288+ 
289+         # Give each molecule a unique molecule number. 
290+         for  mol  in  self ._sire_object :
291+             cursor  =  mol .cursor ()
292+             cursor .number  =  _SireMol .MolNum .getUniqueNumber ()
293+             mols .add (cursor .commit ())
294+ 
295+         # Create a new system. 
296+         system  =  _Molecules (mols ).toSystem ()
297+ 
298+         # Copy over the system properties. 
299+         for  prop  in  self ._sire_object .propertyKeys ():
300+             system ._sire_object .setProperty (prop , self ._sire_object .property (prop ))
301+ 
302+         return  system 
303+ 
263304    def  nMolecules (self ):
264305        """ 
265306        Return the number of molecules in the system. 
Original file line number Diff line number Diff line change @@ -260,6 +260,47 @@ def __len__(self):
260260        """Return the number of molecules in the system.""" 
261261        return  self .nMolecules ()
262262
263+     def  copy (self , renumber = False ):
264+         """ 
265+         Return a copy of this System. 
266+ 
267+         Parameters 
268+         ---------- 
269+ 
270+         renumber : bool 
271+             Whether to give the copied molecules unique molecule numbers. 
272+ 
273+         Returns 
274+         ------- 
275+ 
276+         System : :class:`System <BioSimSpace._SireWrappers.System>` 
277+             A copy of the object. 
278+         """ 
279+ 
280+         if  not  isinstance (renumber , bool ):
281+             raise  TypeError ("'renumber' must be of type 'bool'" )
282+ 
283+         if  not  renumber :
284+             return  super ().copy ()
285+ 
286+         # Create a molecules container. 
287+         mols  =  _SireMol .MoleculeGroup ("all" )
288+ 
289+         # Give each molecule a unique molecule number. 
290+         for  mol  in  self ._sire_object :
291+             cursor  =  mol .cursor ()
292+             cursor .number  =  _SireMol .MolNum .getUniqueNumber ()
293+             mols .add (cursor .commit ())
294+ 
295+         # Create a new system. 
296+         system  =  _Molecules (mols ).toSystem ()
297+ 
298+         # Copy over the system properties. 
299+         for  prop  in  self ._sire_object .propertyKeys ():
300+             system ._sire_object .setProperty (prop , self ._sire_object .property (prop ))
301+ 
302+         return  system 
303+ 
263304    def  nMolecules (self ):
264305        """ 
265306        Return the number of molecules in the system. 
Original file line number Diff line number Diff line change @@ -508,3 +508,26 @@ def test_remove_box(system):
508508
509509    # Make sure the box is removed. 
510510    assert  not  "space"  in  system ._sire_object .propertyKeys ()
511+ 
512+ 
513+ def  test_renumber (system ):
514+     # Make sure all the molecules retain their original numbers 
515+     # using the default copy. 
516+     for  mol0 , mol1  in  zip (system , system .copy ()):
517+         assert  mol0 .number () ==  mol1 .number ()
518+ 
519+     # Store the set of original molecule numbers. 
520+     original_numbers  =  set (mol .number () for  mol  in  system )
521+ 
522+     # Create a renumbered copy of the system. 
523+     renumbered_system  =  system .copy (renumber = True )
524+ 
525+     # Make sure that all of the numbers differ when renumbering. 
526+     for  mol0 , mol1  in  zip (system , renumbered_system ):
527+         assert  mol0 .number () !=  mol1 .number ()
528+ 
529+     # Store the set of renumbered molecule numbers. 
530+     renumbered_numbers  =  set (mol .number () for  mol  in  renumbered_system )
531+ 
532+     # Make sure that no original numbers are present in the renumbered set. 
533+     assert  original_numbers .isdisjoint (renumbered_numbers )
Original file line number Diff line number Diff line change @@ -498,3 +498,26 @@ def test_remove_box(system):
498498
499499    # Make sure the box is removed. 
500500    assert  not  "space"  in  system ._sire_object .propertyKeys ()
501+ 
502+ 
503+ def  test_renumber (system ):
504+     # Make sure all the molecules retain their original numbers 
505+     # using the default copy. 
506+     for  mol0 , mol1  in  zip (system , system .copy ()):
507+         assert  mol0 .number () ==  mol1 .number ()
508+ 
509+     # Store the set of original molecule numbers. 
510+     original_numbers  =  set (mol .number () for  mol  in  system )
511+ 
512+     # Create a renumbered copy of the system. 
513+     renumbered_system  =  system .copy (renumber = True )
514+ 
515+     # Make sure that all of the numbers differ when renumbering. 
516+     for  mol0 , mol1  in  zip (system , renumbered_system ):
517+         assert  mol0 .number () !=  mol1 .number ()
518+ 
519+     # Store the set of renumbered molecule numbers. 
520+     renumbered_numbers  =  set (mol .number () for  mol  in  renumbered_system )
521+ 
522+     # Make sure that no original numbers are present in the renumbered set. 
523+     assert  original_numbers .isdisjoint (renumbered_numbers )
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments