[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [IMP-dev] One final attempt to stir discussion before I give up on IMP svn

OK, then I'll work on moving the restraints and stuff I maintain into my svn repository. I'll put the general purpose restraints in IMP::dsr (unless someone has a better name to propose) and the npc dynamics ones into IMP::npc_dynamics.

How do the python library names work for sub-libraries? i.e. IMP is _IMP.so so what is IMP.em? Does it just go in a dir called IMP in your python path?

So then we will have a kernel which is actually a kernel (plus a couple random restraints and things :-)

Ben Webb wrote:
Friedrich Foerster wrote:
what is all the fuzz about? i thought ben already proposed a neat solution in that not everything needs to be in the kernel. anyway, imp was meant to be modular, i thought. so whatever does not need to be in the kernel should not be there and in a different module instead. in that module everybody can mess around as he wishes, at least to some extent.

Indeed. This is exactly what I proposed, but perhaps more succinctly put. All sorts of things rely on the kernel interfaces being stable, and the lab culture is to use current SVN for everything, so code changes there should go through code review, which thus far means me. The kernel was always envisioned to be compact; almost everything else belongs in a module. (If nothing else, this prevents the SWIG wrappers from becoming monstrous.) This could be remotely hosted (e.g. a lab outside of UCSF, or in a different SVN repository in the lab, as is currently done for Assembler) or it could be in IMP SVN (as is done for domino and impEM). Modules need not be subject to the same scrutiny - for example, Keren has write access to the domino and impEM modules. She does not need to send me patches, chat on the mailing list, undergo code review, etc. - although typically she is responsible and sends any changes by me first for review. Each module has an owner (Keren in this case) who works with me to set whatever policies they think are sensible. For impEM, so far this has meant I continue to review changes, since Keren was happy with that. For Assembler, Keren and Frido have essentially equal access. One could also envision a restrainer module owned by Jeremy, or an npc_dynamics module owned by Daniel, for example.

For experimental stuff that doesn't neatly fit into an existing module, I could certainly create an 'unstable' module if there's interest. Essentially everybody would have write access to this module. Code review and test cases are still strongly recommended, of course, but failures of the test cases would not result in the nightly builds failing. So users would use the 'unstable' module at their own risk.

As per Keren's suggestion, stuff from 'unstable' that users start to rely on can be moved to a more specialized module, or to the kernel after code review. (One could even imagine having both an unstable and a stable form of a given feature, although I'd like to minimize that if possible.)

To avoid confusion and namespace clashes, I propose that a module 'foo' has its C++ code live in the IMP::foo namespace, C++ headers in IMP/foo/ (or IMP/foo.h if the module provides a convenience 'everything' header), and Python classes in the IMP.foo module. So the existing IMPEM Python module would become IMP.em and move from the IMP namespace to IMP::em. This also fits in nicely with existing Python-only modules such as IMP.modeller_intf (ideally would be IMP.modeller, but until we can require Python 3.0 or later, we're stuck with relative imports). And if users wonder why their code keeps breaking, it should be obvious from looking at either C++ or Python code whether they're using 'unstable'.