@drussel drussel tagged this Oct 22, 2013 · 5354 commits to develop since this tag

Assets 2
- There is now some limited IMP-wide gathering of timing
  statistics. You can add `--statistics=filename` to the command line
  or use the IMP::base::show_timings() function to view of summary of
  where IMP has spent time.

- Slack was being used inconsistently (and not always correctly) among
  the various containers and restraints. If you had heavily optimized
  the slack value for speed, you may want to revisit it.

- class name OwnerPointer was switched to PointerMember, to denote
  more clearly a ref-counting pointer that is a class member

- The dependency handling in IMP has been rewritten to simplify it and
  fix a bunch of bugs. There are now more checks of correctness, so
  behavior that might have silently worked (or not worked) before may
  now trigger errors. In particular, restraints/score states must have
  access to the IMP::kernel::Model to do much of anything, so either
  use constructors that take the model or call
  IMP::kernel::ModelObject::set_model(). Also, changing your set of
  inputs or outputs without calling
  IMP::kernel::ModelObject::set_has_dependencies(false) is now likely
  to trigger a check failure (it would just silently do the wrong
  thing before).

- Decorators have been cleaned up to make them behave consistently
  regarding IMP::kernel::Particle vs
  IMP::kernel::ParticleIndexes. This change shouldn't break existing
  code, but decorators should move to the new macros
  IMP_DECORATOR_METHODS(), IMP_DECORATOR_SETUP_0() etc.

- The IMP_GRAPH() and IMP_WEIGHTED_GRAPH() macros got an extra
  argument describing how to show the vertexes in the graph. They also
  now expose a method, eg IMP::kernel::show_as_graphviz() that writes
  the graph in graphviz format to an IMP::base::TextOutput.

- Support and rules for deprecating code in IMP have been
  updated. There are new macros and instructions how to use them that
  should result in much better visibility about changes. See the C++
  wiki for IMP for more information. And there is now an encoded
  policy of keeping deprecated things around for 1 release after
  deprecation.

- IMP is now much more selective about when it invalidates the
  dependency graph. See
  [Dependencies](http://github.com/salilab/imp/wiki/Dependencies) for
  more information. This change should make evaluation of isolated
  restraints much faster in certain situations where they were
  unexpectedly slow before.

- IMP::atom::Selection has been completely rewritten as it was very
  brittle. The set of particles returned may change in some cases, in
  some cases because it was buggy before, in some cases because of new
  bugs.

- Reminder: the IMP_PROTECTED macros didn't work out well, and are now
  deprecated. If you had python implementations on top of IMP base
  classes that implement protected virtual methods, you may need to
  remove a leading `_` on the method name, if you get `Swig director
  pure virtual method called IMP::kernel::PairScore::do_get_inputs`
  messages.

- The generated `cmake` files are no longer store in the
  repository. Instead `tools/build/setup_cmake.py` is run after
  checkouts and other git events that change the repository tree
  (assuming you have run `setup_git.py`).

- Generation of documenation using `doxygen` has been refactored. It
  is now done on a per-module bases, via targets like
  `IMP.core-doc`. The main advantage is that changes to the doc for a
  module can be tested comparatively quickly, just by building that
  module's docs. On the down side, docs are no longer quite so heavily
  interconnected, so dependencies only work to things that the module
  actually depends on.

- The restraint and score state statistics functions were remove from
  IMP::Model. They had been broken for quite a while, with no one
  complaining. Statistics can be added back easily if requested.

- Added an IMP-specific fork of `git-flow`. It handles things like
  `README.md` files when you start and finish feature branches and
  provides a tool to nicely update IMP and display the change log. The
  main commands of use are `git imp feature start <feature_name>`,
  `git imp feature finish <feature_name>`, and `git imp update`. You
  may want to remove the `git-flow` lines from your `.git/config` file
  as you may accidentally type `git flow` instead of `git imp`. You
  need to run `setup_git.py` to set things up.

- [RMF](http://salilab.github.com/rmf) is now included as a git
  submodule rather than copied into the IMP repository. You should
  rerun `setup_git.py` to make sure submodule stuff is initialized.