Re: [IMP-dev] [IMP-commits] r672 - in trunk/kernel: pyext test/optimizers
![](https://secure.gravatar.com/avatar/1294d100c1f5fcd24f7ba4dc0349cfac.jpg?s=120&d=mm&r=g)
Why did you skip the MonteCarlo and NonbondedList parts?
Notification of IMP commits wrote: > Author: ben@SALILAB.ORG > Date: 2008-08-26 16:59:29 -0700 (Tue, 26 Aug 2008) > New Revision: 672 > > Modified: > trunk/kernel/pyext/IMP.i > trunk/kernel/pyext/IMP_macros.i > trunk/kernel/test/optimizers/test_md_optimizer.py > Log: > Patch from Daniel, with minor changes and testcases by me: > - Add macros to handle the thisown stuff in IMP.i (and add a few missed ones). > - Enable Optimizer::get_optimizer_states() in Python code. > > > Modified: trunk/kernel/pyext/IMP.i > =================================================================== > --- trunk/kernel/pyext/IMP.i 2008-08-26 23:40:30 UTC (rev 671) > +++ trunk/kernel/pyext/IMP.i 2008-08-26 23:59:29 UTC (rev 672) > @@ -27,94 +27,30 @@ > %} > > namespace IMP { > - %pythonprepend Model::add_restraint %{ > - args[1].thisown=0 > - %} > - %pythonprepend Model::add_score_state %{ > - args[1].thisown=0 > - %} > - %pythonprepend Optimizer::add_optimizer_state %{ > - args[1].thisown=0 > - %} > - %pythonprepend RestraintSet::add_restraint %{ > - args[1].thisown=0 > - %} > - %pythonprepend NonbondedListScoreState::add_bonded_list %{ > - args[1].thisown=0 > - %} > - %pythonprepend DistanceRestraint::DistanceRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend AngleRestraint::AngleRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend DihedralRestraint::DihedralRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend TorusRestraint::TorusRestraint %{ > - args[3].thisown=0 > - %} > - %pythonprepend NonbondedRestraint::NonbondedRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend BondDecoratorRestraint::BondDecoratorRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend SingletonListRestraint::SingletonListRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend PairListRestraint::PairListRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend TripletChainRestraint::TripletChainRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend PairChainRestraint::PairChainRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend ConnectivityRestraint::ConnectivityRestraint %{ > - args[0].thisown=0 > - %} > - %pythonprepend DistancePairScore::DistancePairScore %{ > - args[0].thisown=0 > - %} > - %pythonprepend TransformedDistancePairScore::TransformedDistancePairScore %{ > - args[0].thisown=0 > - %} > - %pythonprepend BondCoverPairScore::BondCoverPairScore %{ > - args[0].thisown=0 > - %} > - %pythonprepend SphereDistancePairScore::SphereDistancePairScore %{ > - args[0].thisown=0 > - %} > - %pythonprepend RefineOncePairScore::RefineOncePairScore %{ > - args[0].thisown=0 > - args[1].thisown=0 > - %} > - %pythonprepend DistanceToSingletonScore::DistanceToSingletonScore %{ > - args[0].thisown=0 > - %} > - %pythonprepend AttributeSingletonScore::AttributeSingletonScore %{ > - args[0].thisown=0 > - %} > - %pythonprepend TunnelSingletonScore::TunnelSingletonScore %{ > - args[0].thisown=0 > - %} > - %pythonprepend AngleTripletScore::AngleTripletScore %{ > - args[0].thisown=0 > - %} > - %pythonprepend MonteCarlo::add_mover %{ > - args[1].thisown=0 > - %} > - %pythonprepend MonteCarlo::set_local_optimizer %{ > - args[1].thisown=0 > - %} > - %pythonprepend VRMLLogOptimizerState::add_particle_refiner %{ > - args[1].thisown=0 > - %} > - %pythonprepend TypedPairScore::set_pair_score %{ > - args[1].thisown=0 > - %} > + // need to special case particle so can't add this to macro > + IMP_OWN_FIRST_CONSTRUCTOR(DistanceRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(AngleRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(DihedralRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(TorusRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(NonbondedRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(BondDecoratorRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(SingletonListRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(PairListRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(TripletChainRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(PairChainRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(ConnectivityRestraint) > + IMP_OWN_FIRST_CONSTRUCTOR(DistancePairScore) > + IMP_OWN_FIRST_CONSTRUCTOR(TransformedDistancePairScore) > + IMP_OWN_FIRST_CONSTRUCTOR(BondCoverPairScore) > + IMP_OWN_FIRST_CONSTRUCTOR(SphereDistancePairScore) > + IMP_OWN_FIRST_SECOND_CONSTRUCTOR(RefineOncePairScore) > + IMP_OWN_FIRST_CONSTRUCTOR(DistanceToSingletonScore) > + IMP_OWN_FIRST_CONSTRUCTOR(AttributeSingletonScore) > + IMP_OWN_FIRST_CONSTRUCTOR(TunnelSingletonScore) > + IMP_OWN_FIRST_CONSTRUCTOR(AngleTripletScore) > + IMP_SET_OBJECT(MonteCarlo, set_local_optimizer) > + IMP_SET_OBJECT(TypedPairScore, set_pair_score) > + > %pythonprepend Particle::get_value %{ > check_particle(args[0], args[1]) > %} > @@ -144,10 +80,17 @@ > > %} > > - IMP_CONTAINER_SWIG(Model, Particle, particle); > + // special case since particles are ref counted > + %extend Model { > + Particles get_particles() const { > + IMP::Particles ret(self->particles_begin(), self->particles_end()); > + return ret; > + } > + } > IMP_CONTAINER_SWIG(Model, ScoreState, score_state); > IMP_CONTAINER_SWIG(Model, Restraint, restraint); > IMP_CONTAINER_SWIG(RestraintSet, Restraint, restraint); > + IMP_CONTAINER_SWIG(Optimizer, OptimizerState, optimizer_state); > } > > %feature("ref") Particle "$this->ref();" > > Modified: trunk/kernel/pyext/IMP_macros.i > =================================================================== > --- trunk/kernel/pyext/IMP_macros.i 2008-08-26 23:40:30 UTC (rev 671) > +++ trunk/kernel/pyext/IMP_macros.i 2008-08-26 23:59:29 UTC (rev 672) > @@ -1,6 +1,38 @@ > #define IMPDLLEXPORT > #define IMPDLLLOCAL > > +%define IMP_OWN_FIRST_CONSTRUCTOR(Ucname) > +%pythonprepend Ucname::Ucname %{ > + args[0].thisown=0 > +%} > +%enddef > + > +%define IMP_OWN_FIRST_SECOND_CONSTRUCTOR(Ucname) > +%pythonprepend Ucname::Ucname %{ > + args[0].thisown=0 > + args[1].thisown=0 > +%} > +%enddef > + > +%define IMP_SET_OBJECT(Ucname, methodname) > +%pythonprepend Ucname::methodname %{ > + args[1].thisown=0 > +%} > +%enddef > + > +%define IMP_ADD_OBJECT(Ucname, methodname) > +%pythonprepend Ucname::methodname %{ > + args[1].thisown=0 > +%} > +%enddef > + > +%define IMP_ADD_OBJECTS(Ucname, methodname) > +%pythonprepend Ucname::methodname %{ > + for p in args[1]: > + p.thisown=0 > +%} > +%enddef > + > /* Add additional IMP_CONTAINER methods for scripting languages */ > %define IMP_CONTAINER_SWIG(type, Ucname, lcname) > %extend type { > @@ -9,6 +41,8 @@ > return ret; > } > } > +IMP_ADD_OBJECT(type, add_##lcname) > +IMP_ADD_OBJECTS(type, add_##lcname##s) > %enddef > > %include "IMP/macros.h" > > Modified: trunk/kernel/test/optimizers/test_md_optimizer.py > =================================================================== > --- trunk/kernel/test/optimizers/test_md_optimizer.py 2008-08-26 23:40:30 UTC (rev 671) > +++ trunk/kernel/test/optimizers/test_md_optimizer.py 2008-08-26 23:59:29 UTC (rev 672) > @@ -159,6 +159,18 @@ > ekinetic2 = self.md.get_kinetic_energy() > self.assertNotEqual(ekinetic, ekinetic2) > > + def test_get_optimizer_states(self): > + """Test get_optimizer_states() method""" > + wrtraj = WriteTrajState([]) > + scaler = IMP.VelocityScalingOptimizerState( > + IMP.Particles(self.particles), 298.0, 10) > + self.md.add_optimizer_state(wrtraj) > + self.md.add_optimizer_state(scaler) > + m = self.md.get_optimizer_states() > + self.assertEqual(len(m), 2) > + for a in m: > + self.assert_(isinstance(a, IMP.OptimizerState)) > + > def test_rescaling(self): > """Test thermostatting by velocity rescaling""" > for i in range(100): > > _______________________________________________ > IMP-commits mailing list > IMP-commits@salilab.org > https://salilab.org/mailman/listinfo/imp-commits >
![](https://secure.gravatar.com/avatar/cfe8857a24d561e8e700ab18e3ba7ec8.jpg?s=120&d=mm&r=g)
Daniel Russel wrote: > Why did you skip the MonteCarlo and NonbondedList parts?
The added methods are not used or tested in the Python code, and would not really be usable anyway since the relevant std::vectors are not instantiated in the SWIG wrapper. I can certainly add these in if you have a use for them though.
Ben
![](https://secure.gravatar.com/avatar/1294d100c1f5fcd24f7ba4dc0349cfac.jpg?s=120&d=mm&r=g)
Ben Webb wrote: > Daniel Russel wrote: > >> Why did you skip the MonteCarlo and NonbondedList parts? >> > > The added methods are not used or tested in the Python code, and would > not really be usable anyway since the relevant std::vectors are not > instantiated in the SWIG wrapper. I can certainly add these in if you > have a use for them though. > I added the wrappers since I got bitten by the thisown part not being there. Better to have untested working code than untested nonworking code :-)
participants (2)
-
Ben Webb
-
Daniel Russel