You can subscribe to this list here.
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(111) |
Jul
(77) |
Aug
(25) |
Sep
(12) |
Oct
(12) |
Nov
(24) |
Dec
(12) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2012 |
Jan
(7) |
Feb
(38) |
Mar
(152) |
Apr
(53) |
May
(4) |
Jun
(7) |
Jul
(13) |
Aug
(13) |
Sep
(51) |
Oct
(20) |
Nov
(4) |
Dec
(16) |
2013 |
Jan
(2) |
Feb
(19) |
Mar
(2) |
Apr
(12) |
May
(11) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(3) |
2014 |
Jan
(2) |
Feb
(46) |
Mar
(7) |
Apr
(8) |
May
(16) |
Jun
(25) |
Jul
(33) |
Aug
(4) |
Sep
(7) |
Oct
(23) |
Nov
(2) |
Dec
(1) |
2015 |
Jan
(2) |
Feb
(5) |
Mar
|
Apr
(17) |
May
(2) |
Jun
|
Jul
(1) |
Aug
(11) |
Sep
(1) |
Oct
(3) |
Nov
(1) |
Dec
|
2016 |
Jan
(11) |
Feb
(8) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <bpe...@us...> - 2015-08-31 04:47:02
|
Revision: 4990 http://sourceforge.net/p/simupop/code/4990 Author: bpeng2000 Date: 2015-08-31 04:46:59 +0000 (Mon, 31 Aug 2015) Log Message: ----------- Use round function instead previous macro of PRECISION to support compiler 4.1.2 on RHEL5 Modified Paths: -------------- trunk/src/utility.h Modified: trunk/src/utility.h =================================================================== --- trunk/src/utility.h 2015-08-30 18:02:53 UTC (rev 4989) +++ trunk/src/utility.h 2015-08-31 04:46:59 UTC (rev 4990) @@ -92,7 +92,8 @@ // this is used to compare loci positions when loci are provided by // (chr, pos) pair. -#define PRECISION(f) (double(size_t(f)) == f ? f : (size_t((f) * 10000. + 0.5) / 10000.)) +#define PRECISION(f) ((round(f)*100000.)/100000.) +//double(size_t(f)) == f ? f : (size_t((f) * 10000. + 0.5) / 10000.)) namespace simuPOP { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-30 18:02:56
|
Revision: 4989 http://sourceforge.net/p/simupop/code/4989 Author: bpeng2000 Date: 2015-08-30 18:02:53 +0000 (Sun, 30 Aug 2015) Log Message: ----------- Continue to fix defdict for pickling Modified Paths: -------------- trunk/src/customizedTypes.c Modified: trunk/src/customizedTypes.c =================================================================== --- trunk/src/customizedTypes.c 2015-08-30 17:28:56 UTC (rev 4988) +++ trunk/src/customizedTypes.c 2015-08-30 18:02:53 UTC (rev 4989) @@ -1366,8 +1366,8 @@ Py_DECREF(items); return NULL; } - result = PyTuple_Pack(4, Py_TYPE(dd), - PyTuple_New(0), Py_None, iter); + result = PyTuple_Pack(5, Py_TYPE(dd), + PyTuple_New(0), Py_None, Py_None, iter); Py_DECREF(iter); Py_DECREF(items); return result; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-30 17:28:59
|
Revision: 4988 http://sourceforge.net/p/simupop/code/4988 Author: bpeng2000 Date: 2015-08-30 17:28:56 +0000 (Sun, 30 Aug 2015) Log Message: ----------- Fix a test Modified Paths: -------------- trunk/test/test_02_population.py Modified: trunk/test/test_02_population.py =================================================================== --- trunk/test/test_02_population.py 2015-08-30 06:38:44 UTC (rev 4987) +++ trunk/test/test_02_population.py 2015-08-30 17:28:56 UTC (rev 4988) @@ -1170,7 +1170,7 @@ 'Testing Population::sortIndividuals(infoFields)' pop = self.getPop(size=[1000, 2000], infoFields=['a', 'b']) initInfo(pop, lambda: random.randint(1, 5), infoFields=['a', 'b']) - print(pop.indInfo('a')) + pop.sortIndividuals('a') for sp in range(2): for i in range(1, pop.subPopSize(sp)): self.assertTrue(pop.individual(i-1, sp).a <= pop.individual(i, sp).a) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-30 06:38:46
|
Revision: 4987 http://sourceforge.net/p/simupop/code/4987 Author: bpeng2000 Date: 2015-08-30 06:38:44 +0000 (Sun, 30 Aug 2015) Log Message: ----------- Fix save/load for defdict type for python 3 Modified Paths: -------------- trunk/src/customizedTypes.c Modified: trunk/src/customizedTypes.c =================================================================== --- trunk/src/customizedTypes.c 2015-08-29 21:23:22 UTC (rev 4986) +++ trunk/src/customizedTypes.c 2015-08-30 06:38:44 UTC (rev 4987) @@ -1445,7 +1445,7 @@ PyTypeObject defdict_type = { PyVarObject_HEAD_INIT(DEFERRED_ADDRESS(&PyType_Type), 0) - "defdict", /* tp_name */ + "simuPOP.defdict", /* tp_name */ sizeof(defdictobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-29 21:23:23
|
Revision: 4986 http://sourceforge.net/p/simupop/code/4986 Author: bpeng2000 Date: 2015-08-29 21:23:22 +0000 (Sat, 29 Aug 2015) Log Message: ----------- Fix an accidental commit of setup.py Modified Paths: -------------- trunk/setup.py Modified: trunk/setup.py =================================================================== --- trunk/setup.py 2015-08-29 21:22:39 UTC (rev 4985) +++ trunk/setup.py 2015-08-29 21:23:22 UTC (rev 4986) @@ -745,7 +745,7 @@ if __name__ == '__main__': SIMUPOP_VER, SIMUPOP_REV = simuPOP_version() # create source file for each module - MODULES = ['std'] #, 'op', 'la', 'laop', 'ba', 'baop', 'mu', 'muop', 'lin', 'linop'] + MODULES = ['std', 'op', 'la', 'laop', 'ba', 'baop', 'mu', 'muop', 'lin', 'linop'] # # Generate Wrapping files This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-29 21:22:41
|
Revision: 4985 http://sourceforge.net/p/simupop/code/4985 Author: bpeng2000 Date: 2015-08-29 21:22:39 +0000 (Sat, 29 Aug 2015) Log Message: ----------- Use cPickle for python 2 and fix a bug for saving pickled result Modified Paths: -------------- trunk/setup.py trunk/src/utility.cpp Modified: trunk/setup.py =================================================================== --- trunk/setup.py 2015-08-29 18:42:38 UTC (rev 4984) +++ trunk/setup.py 2015-08-29 21:22:39 UTC (rev 4985) @@ -745,7 +745,7 @@ if __name__ == '__main__': SIMUPOP_VER, SIMUPOP_REV = simuPOP_version() # create source file for each module - MODULES = ['std', 'op', 'la', 'laop', 'ba', 'baop', 'mu', 'muop', 'lin', 'linop'] + MODULES = ['std'] #, 'op', 'la', 'laop', 'ba', 'baop', 'mu', 'muop', 'lin', 'linop'] # # Generate Wrapping files Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2015-08-29 18:42:38 UTC (rev 4984) +++ trunk/src/utility.cpp 2015-08-29 21:22:39 UTC (rev 4985) @@ -2398,13 +2398,17 @@ string SharedVariables::to_pickle() const { +#if PY_VERSION_HEX >= 0x03000000 PyObject * pickle = PyImport_ImportModule("pickle"); +#else + PyObject * pickle = PyImport_ImportModule("cPickle"); +#endif if (! pickle) throw RuntimeError("Failed to import module pickle to serialize population variables."); // here we use version 2 because this is the latest version that supported by - // both python 2 and python 3. This is a binary format so both point and size - // are needed. + // both python 2 and python 3, also because it is the one that handles simuPOP's + // defdict type using its __reduce__ interface. PyObject * pres = PyObject_CallMethod(pickle, "dumps", "(Oi)", m_dict, 2); if (pres == NULL) { PyErr_Print(); @@ -2418,10 +2422,12 @@ #else PyString_AsStringAndSize(pres, &buf, &sz); #endif + // need to copy the data out before releasing pres + string res(buf, sz); Py_DECREF(pres); Py_DECREF(pickle); - return string(buf, sz); + return res; } @@ -2455,7 +2461,11 @@ void SharedVariables::from_pickle(const string & vars) { +#if PY_VERSION_HEX >= 0x03000000 PyObject * pickle = PyImport_ImportModule("pickle"); +#else + PyObject * pickle = PyImport_ImportModule("cPickle"); +#endif if (! pickle) throw RuntimeError("Failed to import module pickle to serialize population variables."); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-29 18:42:40
|
Revision: 4984 http://sourceforge.net/p/simupop/code/4984 Author: bpeng2000 Date: 2015-08-29 18:42:38 +0000 (Sat, 29 Aug 2015) Log Message: ----------- Start testing the new population format Modified Paths: -------------- trunk/test/test_02_population.py Added Paths: ----------- trunk/test/sample_64_std_v3.pop Added: trunk/test/sample_64_std_v3.pop =================================================================== (Binary files differ) Index: trunk/test/sample_64_std_v3.pop =================================================================== --- trunk/test/sample_64_std_v3.pop 2015-08-29 16:10:32 UTC (rev 4983) +++ trunk/test/sample_64_std_v3.pop 2015-08-29 18:42:38 UTC (rev 4984) Property changes on: trunk/test/sample_64_std_v3.pop ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Modified: trunk/test/test_02_population.py =================================================================== --- trunk/test/test_02_population.py 2015-08-29 16:10:32 UTC (rev 4983) +++ trunk/test/test_02_population.py 2015-08-29 18:42:38 UTC (rev 4984) @@ -1296,7 +1296,7 @@ def testCrossPlatformLoad(self): 'Testing loading populations created from other platform and allele types' - localFile = 'sample_%d_%s_v2.pop' % ( \ + localFile = 'sample_%d_%s_v3.pop' % ( \ moduleInfo()['wordsize'], {'short': 'std', 'binary': 'ba', @@ -1309,9 +1309,10 @@ pop = Population(10000, loci=100, infoFields=['a', 'ind_id']) initGenotype(pop, genotype=[0, 1, 1, 1, 0, 1, 1]) initInfo(pop, values=[1, 2, 3, 4, 5], infoFields='a') + stat(pop, alleleFreq=ALL_AVAIL) pop.save(localFile) - for version in [0, 1, 2]: + for version in [0, 1, 2, 3]: for plat in [32, 64]: for mod in ['std', 'la', 'ba', 'mu', 'lin']: if version == 0 and mod in ['lin', 'mu']: @@ -1334,6 +1335,8 @@ [1, 2, 3, 4, 5] * int(10000 / 5)) self.assertEqual(pop.genotype(), ([0, 1, 1, 1, 0, 1, 1] * int(10000*100*2/7+1))[:10000*100*2]) + if '_v3' in popname: + self.assertTrue(isinstance(pop.dvars().alleleFreq, defdict)) def testVars(self): 'Testing Population::vars(), vars(subPop), dvars(), dvars(subPop)' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-29 16:10:35
|
Revision: 4983 http://sourceforge.net/p/simupop/code/4983 Author: bpeng2000 Date: 2015-08-29 16:10:32 +0000 (Sat, 29 Aug 2015) Log Message: ----------- Use pickle to load and save population variables Modified Paths: -------------- trunk/src/customizedTypes.c trunk/src/population.cpp trunk/src/population.h trunk/src/utility.cpp trunk/src/utility.h Modified: trunk/src/customizedTypes.c =================================================================== --- trunk/src/customizedTypes.c 2015-08-25 03:32:09 UTC (rev 4982) +++ trunk/src/customizedTypes.c 2015-08-29 16:10:32 UTC (rev 4983) @@ -806,7 +806,10 @@ } +//////////////////////////////////////////////////////////////////////////////////////////////////// + #else // for Python 3 + /* Array object implementation */ typedef struct arrayobject_template<GenoIterator> arrayobject; @@ -1364,7 +1367,7 @@ return NULL; } result = PyTuple_Pack(4, Py_TYPE(dd), - Py_None, Py_None, iter); + PyTuple_New(0), Py_None, iter); Py_DECREF(iter); Py_DECREF(items); return result; @@ -1442,7 +1445,7 @@ PyTypeObject defdict_type = { PyVarObject_HEAD_INIT(DEFERRED_ADDRESS(&PyType_Type), 0) - "simuPOP.defaultdict", /* tp_name */ + "defdict", /* tp_name */ sizeof(defdictobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ Modified: trunk/src/population.cpp =================================================================== --- trunk/src/population.cpp 2015-08-25 03:32:09 UTC (rev 4982) +++ trunk/src/population.cpp 2015-08-29 16:10:32 UTC (rev 4983) @@ -3392,7 +3392,7 @@ } -void Population::save(boost::archive::text_oarchive & ar, const unsigned int) const +void Population::save(boost::archive::text_oarchive & ar, const unsigned int version) const { // deep adjustment: everyone in order const_cast<Population *>(this)->syncIndPointers(); @@ -3631,7 +3631,8 @@ // save shared variables as string. // note that many format are not supported. DBG_DO(DBG_POPULATION, cerr << "Handling shared variables" << endl); - string vars = varsAsString(); + + string vars = varsAsString(version >= 3); ar & vars; } @@ -3653,7 +3654,7 @@ DBG_DO(DBG_POPULATION, cerr << "Handling genotype" << endl); // newer version unfied importer - if (version == 2) { + if (version >= 2) { // a newer version size_t size; ar & size; @@ -3873,7 +3874,7 @@ ar & pd.m_subPopSize; ar & pd.m_subPopNames; - if (version == 2) { + if (version >= 2) { // a newer version size_t size; ar & size; @@ -4063,8 +4064,8 @@ DBG_DO(DBG_POPULATION, cerr << "Handling shared variables" << endl); string vars; ar & vars; - varsFromString(vars); + varsFromString(vars, version >= 3); setIndOrdered(true); DBG_WARNIF(max_allele > ModuleMaxAllele, (boost::format("Warning: the maximum allele of the loaded population is %1%" " which is larger than the maximum allowed allele of this module. " Modified: trunk/src/population.h =================================================================== --- trunk/src/population.h 2015-08-25 03:32:09 UTC (rev 4982) +++ trunk/src/population.h 2015-08-29 16:10:32 UTC (rev 4983) @@ -1596,16 +1596,22 @@ /// CPPONLY - string varsAsString() const + string varsAsString(bool use_pickle=false) const { - return m_vars.asString(); + if (use_pickle) + return m_vars.to_pickle(); + else + return m_vars.asString(); } /// CPPONLY - void varsFromString(const string & vars) + void varsFromString(const string & vars, bool use_pickle=false) { - return m_vars.fromString(vars); + if (use_pickle) + return m_vars.from_pickle(vars); + else + return m_vars.fromString(vars); } @@ -1768,7 +1774,8 @@ // version 0: base (reset for version 1.0) // version 1: with lineage information for lineage-aware modules // version 2: for memory-efficient save/load -BOOST_CLASS_VERSION(simuPOP::Population, 2) +// version 3: use pickle to save load population variables +BOOST_CLASS_VERSION(simuPOP::Population, 3) # endif #endif #endif Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2015-08-25 03:32:09 UTC (rev 4982) +++ trunk/src/utility.cpp 2015-08-29 16:10:32 UTC (rev 4983) @@ -2396,6 +2396,35 @@ } +string SharedVariables::to_pickle() const +{ + PyObject * pickle = PyImport_ImportModule("pickle"); + if (! pickle) + throw RuntimeError("Failed to import module pickle to serialize population variables."); + + // here we use version 2 because this is the latest version that supported by + // both python 2 and python 3. This is a binary format so both point and size + // are needed. + PyObject * pres = PyObject_CallMethod(pickle, "dumps", "(Oi)", m_dict, 2); + if (pres == NULL) { + PyErr_Print(); + PyErr_Clear(); + throw RuntimeError("Failed to call pickle.dumps to save population variables."); + } + Py_ssize_t sz = 0; + char * buf = NULL; +#if PY_VERSION_HEX >= 0x03000000 + PyBytes_AsStringAndSize(pres, &buf, &sz); +#else + PyString_AsStringAndSize(pres, &buf, &sz); +#endif + Py_DECREF(pres); + Py_DECREF(pickle); + + return string(buf, sz); +} + + string SharedVariables::asString() const { // go through each variable and save @@ -2424,7 +2453,36 @@ m_dict = obj; } +void SharedVariables::from_pickle(const string & vars) +{ + PyObject * pickle = PyImport_ImportModule("pickle"); + if (! pickle) + throw RuntimeError("Failed to import module pickle to serialize population variables."); + // use protocol 1 for compatibility + string res; +#if PY_VERSION_HEX >= 0x03000000 + PyObject * args = PyBytes_FromStringAndSize(vars.c_str(), vars.size()); +#else + PyObject * args = PyString_FromStringAndSize(vars.c_str(), vars.size()); +#endif + // remove m_dict + if (m_ownVars) { + PyDict_Clear(m_dict); + Py_XDECREF(m_dict); + } + m_ownVars = true; + m_dict = PyObject_CallMethod(pickle, "loads", "(O)", args); + if (m_dict == NULL) { + PyErr_Print(); + PyErr_Clear(); + throw RuntimeError("Failed to call pickle.loads to load population variables."); + } + Py_DECREF(args); + + Py_DECREF(pickle); +} + // simuVars will hold replicate specific Shared Variables. // global dictionary Modified: trunk/src/utility.h =================================================================== --- trunk/src/utility.h 2015-08-25 03:32:09 UTC (rev 4982) +++ trunk/src/utility.h 2015-08-29 16:10:32 UTC (rev 4983) @@ -1264,8 +1264,15 @@ /// CPPONLY, save m_dist as string string asString() const; + /// CPPONLY void fromString(const string & vars); + /// CPPONLY, save m_dist to pickle + string to_pickle() const; + + /// CPPONLY + void from_pickle(const string & vars); + private: /// the list PyObject * m_dict; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-25 03:32:12
|
Revision: 4982 http://sourceforge.net/p/simupop/code/4982 Author: bpeng2000 Date: 2015-08-25 03:32:09 +0000 (Tue, 25 Aug 2015) Log Message: ----------- Bundle libstdc++ with linux binary to reduce dependency on linix and gcc versions Modified Paths: -------------- trunk/setup.py Modified: trunk/setup.py =================================================================== --- trunk/setup.py 2015-08-24 20:08:51 UTC (rev 4981) +++ trunk/setup.py 2015-08-25 03:32:09 UTC (rev 4982) @@ -641,10 +641,14 @@ common_extra_link_args = ['-stdlib=libstdc++'] common_extra_include_dirs = ['/usr/include/c++/4.2.1'] common_extra_compile_args = ['-Wno-error=unused-command-line-argument-hard-error-in-future'] -else: +elif os.name == 'nt': common_extra_link_args = [] common_extra_include_dirs = [] common_extra_compile_args = [] +else: + common_extra_link_args = ['-static-libgcc', '-static-libstdc++'] + common_extra_include_dirs = [] + common_extra_compile_args = [] # def ModuInfo(modu, SIMUPOP_VER, SIMUPOP_REV): @@ -661,7 +665,7 @@ if os.name == 'nt': # Windows, build zlib from source res['libraries'] = [] else: - res['libraries'] = ['stdc++', 'z'] + res['libraries'] = ['z'] if USE_OPENMP: if USE_ICC: res['libraries'].append('iomp5') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-08-24 20:08:52
|
Revision: 4981 http://sourceforge.net/p/simupop/code/4981 Author: bpeng2000 Date: 2015-08-24 20:08:51 +0000 (Mon, 24 Aug 2015) Log Message: ----------- Fix download address of boost 1.49.0 Modified Paths: -------------- trunk/setup.py Modified: trunk/setup.py =================================================================== --- trunk/setup.py 2015-07-03 03:39:08 UTC (rev 4980) +++ trunk/setup.py 2015-08-24 20:08:51 UTC (rev 4981) @@ -222,7 +222,7 @@ import tarfile downloadProgress.counter = 0 try: - BOOST_URL = 'http://downloads.sourceforge.net/project/boost/boost/1.48.0/boost_1_48_0.tar.gz?r=&ts=1435893980&use_mirror=iweb' + BOOST_URL = 'http://downloads.sourceforge.net/project/boost/boost/1.49.0/boost_1_49_0.tar.gz?r=&ts=1440446866&use_mirror=iweb' sys.stdout.write('Downloading boost C++ library 1.49.0 ') sys.stdout.flush() if not os.path.isfile('boost_1_49_0.tar.gz'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-07-03 03:39:10
|
Revision: 4980 http://sourceforge.net/p/simupop/code/4980 Author: bpeng2000 Date: 2015-07-03 03:39:08 +0000 (Fri, 03 Jul 2015) Log Message: ----------- Fix boost 1.49 download link Modified Paths: -------------- trunk/setup.py Modified: trunk/setup.py =================================================================== --- trunk/setup.py 2015-05-01 18:51:15 UTC (rev 4979) +++ trunk/setup.py 2015-07-03 03:39:08 UTC (rev 4980) @@ -222,7 +222,7 @@ import tarfile downloadProgress.counter = 0 try: - BOOST_URL = 'http://hivelocity.dl.sourceforge.net/project/boost/boost/1.49.0/boost_1_49_0.tar.gz' + BOOST_URL = 'http://downloads.sourceforge.net/project/boost/boost/1.48.0/boost_1_48_0.tar.gz?r=&ts=1435893980&use_mirror=iweb' sys.stdout.write('Downloading boost C++ library 1.49.0 ') sys.stdout.flush() if not os.path.isfile('boost_1_49_0.tar.gz'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-05-01 18:51:17
|
Revision: 4979 http://sourceforge.net/p/simupop/code/4979 Author: bpeng2000 Date: 2015-05-01 18:51:15 +0000 (Fri, 01 May 2015) Log Message: ----------- Remove conda dependency on distribute Modified Paths: -------------- trunk/development/conda/bld.bat trunk/development/conda/build.sh trunk/development/conda/meta.yaml Modified: trunk/development/conda/bld.bat =================================================================== --- trunk/development/conda/bld.bat 2015-05-01 17:51:54 UTC (rev 4978) +++ trunk/development/conda/bld.bat 2015-05-01 18:51:15 UTC (rev 4979) @@ -1,4 +1,4 @@ -"%PYTHON%" setup.py install +"%PYTHON%" setup.py install --single-version-externally-managed --record=record.txt if errorlevel 1 exit 1 :: Add more build steps here, if they are necessary. Modified: trunk/development/conda/build.sh =================================================================== --- trunk/development/conda/build.sh 2015-05-01 17:51:54 UTC (rev 4978) +++ trunk/development/conda/build.sh 2015-05-01 18:51:15 UTC (rev 4979) @@ -1,6 +1,6 @@ #!/bin/bash -$PYTHON setup.py install +$PYTHON setup.py install --single-version-externally-managed --record=record.txt # Add more build steps here, if they are necessary. Modified: trunk/development/conda/meta.yaml =================================================================== --- trunk/development/conda/meta.yaml 2015-05-01 17:51:54 UTC (rev 4978) +++ trunk/development/conda/meta.yaml 2015-05-01 18:51:15 UTC (rev 4979) @@ -4,12 +4,11 @@ source: fn: simuPOP-1.1.6.tar.gz - url: file:///simuPOP-1.1.6-src.tar.gz + url: https://binstar.org/simupop/simuPOP/1.1.6/download/simuPOP-1.1.6-src.tar.gz md5: # patches: # List any patch files here # - fix.patch - #url: https://binstar.org/simupop/simuPOP/1.1.6/download/simuPOP-1.1.6-src.tar.gz # build: # preserve_egg_dir: True This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-05-01 17:51:56
|
Revision: 4978 http://sourceforge.net/p/simupop/code/4978 Author: bpeng2000 Date: 2015-05-01 17:51:54 +0000 (Fri, 01 May 2015) Log Message: ----------- Prepare release of 1.1.6 Modified Paths: -------------- trunk/development/conda/meta.yaml trunk/doc/refManual.lyx trunk/doc/refManual.pdf trunk/doc/userGuide.lyx trunk/doc/userGuide.pdf trunk/simuPOP_version.py trunk/src/simuPOP_doc.i Modified: trunk/development/conda/meta.yaml =================================================================== --- trunk/development/conda/meta.yaml 2015-04-30 21:13:35 UTC (rev 4977) +++ trunk/development/conda/meta.yaml 2015-05-01 17:51:54 UTC (rev 4978) @@ -1,14 +1,15 @@ package: name: simupop - version: !!str 1.1.5 + version: !!str 1.1.6 source: - fn: simuPOP-1.1.5.tar.gz - url: https://pypi.python.org/packages/source/s/simuPOP/simuPOP-1.1.5.tar.gz + fn: simuPOP-1.1.6.tar.gz + url: file:///simuPOP-1.1.6-src.tar.gz md5: -# patches: + # patches: # List any patch files here # - fix.patch + #url: https://binstar.org/simupop/simuPOP/1.1.6/download/simuPOP-1.1.6-src.tar.gz # build: # preserve_egg_dir: True @@ -29,7 +30,6 @@ build: - python - setuptools - - distribute run: - python @@ -39,7 +39,6 @@ # Python imports imports: - simuPOP - - src # commands: # You can put test commands to be run here. Use this to test that the Modified: trunk/doc/refManual.lyx =================================================================== --- trunk/doc/refManual.lyx 2015-04-30 21:13:35 UTC (rev 4977) +++ trunk/doc/refManual.lyx 2015-05-01 17:51:54 UTC (rev 4978) @@ -5,7 +5,7 @@ \textclass manual \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4971})} +\setreleaseinfo{Release 1.1.6 (\mbox{Rev: 4972})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/doc/refManual.pdf =================================================================== (Binary files differ) Modified: trunk/doc/userGuide.lyx =================================================================== --- trunk/doc/userGuide.lyx 2015-04-30 21:13:35 UTC (rev 4977) +++ trunk/doc/userGuide.lyx 2015-05-01 17:51:54 UTC (rev 4978) @@ -6,7 +6,7 @@ \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4971})} +\setreleaseinfo{Release 1.1.6 (\mbox{Rev: 4972})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/doc/userGuide.pdf =================================================================== (Binary files differ) Modified: trunk/simuPOP_version.py =================================================================== --- trunk/simuPOP_version.py 2015-04-30 21:13:35 UTC (rev 4977) +++ trunk/simuPOP_version.py 2015-05-01 17:51:54 UTC (rev 4978) @@ -1,2 +1,2 @@ -SIMUPOP_VER="1.1.5" -SIMUPOP_REV="4971" +SIMUPOP_VER="1.1.6" +SIMUPOP_REV="4972" Modified: trunk/src/simuPOP_doc.i =================================================================== --- trunk/src/simuPOP_doc.i 2015-04-30 21:13:35 UTC (rev 4977) +++ trunk/src/simuPOP_doc.i 2015-05-01 17:51:54 UTC (rev 4978) @@ -11557,6 +11557,8 @@ %ignore simuPOP::simuPOPgetch(); +%ignore simuPOP::cleanupCircularRefs(); + %ignore simuPOP::PyObjAsString(PyObject *str); %ignore simuPOP::PyObjAsBool(PyObject *obj, bool &val); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-30 21:13:37
|
Revision: 4977 http://sourceforge.net/p/simupop/code/4977 Author: bpeng2000 Date: 2015-04-30 21:13:35 +0000 (Thu, 30 Apr 2015) Log Message: ----------- Minor update to version info in __init__ Modified Paths: -------------- trunk/src/__init__.py Modified: trunk/src/__init__.py =================================================================== --- trunk/src/__init__.py 2015-04-30 14:16:33 UTC (rev 4976) +++ trunk/src/__init__.py 2015-04-30 21:13:35 UTC (rev 4977) @@ -334,18 +334,17 @@ if simuOptions['Version'] is not None: expMajor, expMinor, expRelease = [int(x) for x in re.match(r'^(\d+)\.(\d+)\.(\d+)', simuOptions['Version']).groups()] - myMajor, myMinor, myRelease = [int(x) for x in re.match(r'^(\d+)\.(\d+)\.(\d+)', moduleInfo()['version']).groups()] + myMajor, myMinor, myRelease = [int(x) for x in re.match(r'^(\d+)\.(\d+)\.(\d+)', __version__).groups()] if (expMajor > myMajor) or (expMajor == myMajor and expMinor > myMinor) or \ (expMajor == myMajor and expMinor == myMinor and expRelease > myRelease): raise ImportError('simuPOP version %s is installed but version >= %s is required. ' % \ - (moduleInfo()['version'], simuOptions['Version']) + + (__version__, simuOptions['Version']) + 'Please upgrade your simuPOP installation.') if simuOptions['Revision'] is not None: - ver = moduleInfo()['version'] rev = moduleInfo()['revision'] if rev < simuOptions['Revision']: - raise ImportError('simuPOP version %s (revision %d) is installed ' % (ver, rev) + + raise ImportError('simuPOP version %s (revision %d) is installed ' % (__version__, rev) + 'but simuPOP revision >= %d is required. ' % simuOptions['Revision'] + 'Please upgrade your simuPOP installation.') if 'DBG_COMPATIBILITY' in simuOptions['Debug']: @@ -357,7 +356,7 @@ if not simuOptions['Quiet']: info = moduleInfo() - print("simuPOP Version %s : Copyright (c) 2004-2011 Bo Peng" % (info['version'])) + print("simuPOP Version %s : Copyright (c) 2004-2011 Bo Peng" % (__version__)) # compile date, compiler etc are macros that are replaced during compile time. print("Revision %d (%s) for Python %s (%dbit, %d%s)" % \ (info['revision'], info['date'], info['python'], info['wordsize'], info['threads'], This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-30 14:16:36
|
Revision: 4976 http://sourceforge.net/p/simupop/code/4976 Author: bpeng2000 Date: 2015-04-30 14:16:33 +0000 (Thu, 30 Apr 2015) Log Message: ----------- Add an __version__ attribute to simuPOP Modified Paths: -------------- trunk/src/__init__.py Modified: trunk/src/__init__.py =================================================================== --- trunk/src/__init__.py 2015-04-29 20:35:59 UTC (rev 4975) +++ trunk/src/__init__.py 2015-04-30 14:16:33 UTC (rev 4976) @@ -30,6 +30,7 @@ """ __all__ = [ + '__version__', # Constants # 'MALE', @@ -329,6 +330,7 @@ else: from simuPOP.simuPOP_std import * +__version__ = moduleInfo()['version'] if simuOptions['Version'] is not None: expMajor, expMinor, expRelease = [int(x) for x in re.match(r'^(\d+)\.(\d+)\.(\d+)', simuOptions['Version']).groups()] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-29 20:36:01
|
Revision: 4975 http://sourceforge.net/p/simupop/code/4975 Author: bpeng2000 Date: 2015-04-29 20:35:59 +0000 (Wed, 29 Apr 2015) Log Message: ----------- A safer fix for the management of circular references Modified Paths: -------------- trunk/src/utility.cpp trunk/src/utility.h Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2015-04-29 20:10:48 UTC (rev 4974) +++ trunk/src/utility.cpp 2015-04-29 20:35:59 UTC (rev 4975) @@ -856,25 +856,40 @@ m_references.insert(obj); } + // this function will be called by the destructor to remove + // the pointer from this global list. The destructor can + // be triggered by cleanup(), or at the Python level if the user + // decided to do something. + void deregister_ref(PyObject * obj) + { + std::set<PyObject *>::iterator it = m_references.find(obj); + if (it != m_references.end()) + m_references.erase(it); + } + // clean up circular refs. Because such objects might exist during // the creation of evolutionary scenario, we wait till the end of // each evolutionary cycle to clean up the mess void cleanup() { std::set<PyObject *>::iterator it = m_references.begin(); - while (it != m_references.end()) - { + std::set<PyObject *>::iterator it_end = m_references.end(); + std::vector<PyObject *> to_be_removed; + for (; it != it_end; ++it) // a circular ref has a reference to the function self.func // so it has at least one reference. In another word, if we see // that self has only one reference, it means the object is not // referenced by anyone else and should be removed. - if ((*it)->ob_refcnt == 1) { - // this will cause the destructor of operator to be called. - Py_DECREF(*it); - m_references.erase(it++); - } else - ++it; - } + if ((*it)->ob_refcnt == 1) + to_be_removed.push_back(*it); + + // now really remove the objects. We do it not within the above loop + // because the removal of objects will call deregister_ref and + // change the container. + std::vector<PyObject *>::iterator iv = to_be_removed.begin(); + std::vector<PyObject *>::iterator iv_end = to_be_removed.end(); + for (; iv != iv_end; ++iv) + Py_DECREF(*iv); } private: @@ -889,7 +904,7 @@ } -pyFunc::pyFunc(PyObject * func) : m_func(func), m_numArgs(0) +pyFunc::pyFunc(PyObject * func) : m_func(func), m_numArgs(0), m_circular_self(NULL) { if (!m_func.isValid()) return; @@ -1000,8 +1015,10 @@ // check the super class (BaseOperator) because of the SWIG // interface if (PyObject_HasAttrString(self, "apply") && - PyObject_HasAttrString(self, "describe")) + PyObject_HasAttrString(self, "describe")) { + m_circular_self = self; g_circular_refs.register_ref(self); + } Py_DECREF(self); } if (!PyObject_HasAttrString(obj, "__name__")) { Modified: trunk/src/utility.h =================================================================== --- trunk/src/utility.h 2015-04-29 20:10:48 UTC (rev 4974) +++ trunk/src/utility.h 2015-04-29 20:35:59 UTC (rev 4975) @@ -433,6 +433,8 @@ size_t m_numArgs; vectorstr m_args; + + PyObject * m_circular_self; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-29 20:10:51
|
Revision: 4974 http://sourceforge.net/p/simupop/code/4974 Author: bpeng2000 Date: 2015-04-29 20:10:48 +0000 (Wed, 29 Apr 2015) Log Message: ----------- Finally, a proper automatic fix of circular reference. Modified Paths: -------------- trunk/src/simulator.cpp trunk/src/utility.cpp trunk/src/utility.h Modified: trunk/src/simulator.cpp =================================================================== --- trunk/src/simulator.cpp 2015-04-29 04:36:55 UTC (rev 4973) +++ trunk/src/simulator.cpp 2015-04-29 20:10:48 UTC (rev 4974) @@ -407,6 +407,7 @@ // close every opened file (including append-cross-evolution ones) ostreamManager().closeAll(); + cleanupCircularRefs(); return evolvedGens; } Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2015-04-29 04:36:55 UTC (rev 4973) +++ trunk/src/utility.cpp 2015-04-29 20:10:48 UTC (rev 4974) @@ -856,6 +856,9 @@ m_references.insert(obj); } + // clean up circular refs. Because such objects might exist during + // the creation of evolutionary scenario, we wait till the end of + // each evolutionary cycle to clean up the mess void cleanup() { std::set<PyObject *>::iterator it = m_references.begin(); @@ -880,7 +883,12 @@ CircularReferences g_circular_refs; +void cleanupCircularRefs() +{ + g_circular_refs.cleanup(); +} + pyFunc::pyFunc(PyObject * func) : m_func(func), m_numArgs(0) { if (!m_func.isValid()) @@ -936,7 +944,6 @@ essentially converts func=obj to func=obj.__call__. This allows obj to be destructed after it is used. */ - //Py_DECREF(m_func.object()); m_func = pyObject(obj); Py_DECREF(obj); } @@ -993,10 +1000,8 @@ // check the super class (BaseOperator) because of the SWIG // interface if (PyObject_HasAttrString(self, "apply") && - PyObject_HasAttrString(self, "describe")) { - g_circular_refs.cleanup(); + PyObject_HasAttrString(self, "describe")) g_circular_refs.register_ref(self); - } Py_DECREF(self); } if (!PyObject_HasAttrString(obj, "__name__")) { Modified: trunk/src/utility.h =================================================================== --- trunk/src/utility.h 2015-04-29 04:36:55 UTC (rev 4973) +++ trunk/src/utility.h 2015-04-29 20:10:48 UTC (rev 4974) @@ -435,7 +435,13 @@ vectorstr m_args; }; + /// CPPONLY +/// Remove circular references to release memory of objects that +/// are derived from PyObject +void cleanupCircularRefs(); + +/// CPPONLY class pyGenerator { public: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-29 04:36:57
|
Revision: 4973 http://sourceforge.net/p/simupop/code/4973 Author: bpeng2000 Date: 2015-04-29 04:36:55 +0000 (Wed, 29 Apr 2015) Log Message: ----------- Another attempts to resolve the memory leak / circular link problem. srv_batch_simrareped still crash though Modified Paths: -------------- trunk/src/selector.h trunk/src/simuPOP_doc.i trunk/src/utility.cpp trunk/src/utility.h Modified: trunk/src/selector.h =================================================================== --- trunk/src/selector.h 2015-04-23 19:50:52 UTC (rev 4972) +++ trunk/src/selector.h 2015-04-29 04:36:55 UTC (rev 4973) @@ -445,14 +445,14 @@ */ PySelector(PyObject * func, lociList loci = vectoru(), int begin = 0, int end = -1, int step = 1, - const intList & at = vectori(), const intList & reps = intList(), + const intList & at = vectori(), const intList & reps = intList(), const stringFunc & output = "", const subPopList & subPops = subPopList(), const stringList & infoFields = stringList("fitness")) : - BaseSelector("", begin, end, step, at, reps, subPops, infoFields), + BaseSelector(output, begin, end, step, at, reps, subPops, infoFields), m_func(func), m_loci(loci) { DBG_ASSERT(m_func.isValid(), ValueError, "Passed variable is not a callable python function."); - }; + } /// HIDDEN Deep copy of a \c PySelector Modified: trunk/src/simuPOP_doc.i =================================================================== --- trunk/src/simuPOP_doc.i 2015-04-23 19:50:52 UTC (rev 4972) +++ trunk/src/simuPOP_doc.i 2015-04-29 04:36:55 UTC (rev 4973) @@ -7333,14 +7333,6 @@ "; -%feature("docstring") simuPOP::pyFunc::~pyFunc " - -Usage: - - x.~pyFunc() - -"; - %feature("docstring") simuPOP::pyFunc::numArgs " Description: @@ -8104,7 +8096,8 @@ Usage: PySelector(func, loci=[], begin=0, end=-1, step=1, at=[], - reps=ALL_AVAIL, subPops=ALL_AVAIL, infoFields=ALL_AVAIL) + reps=ALL_AVAIL, output=\"\", subPops=ALL_AVAIL, + infoFields=ALL_AVAIL) Details: Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2015-04-23 19:50:52 UTC (rev 4972) +++ trunk/src/utility.cpp 2015-04-29 04:36:55 UTC (rev 4973) @@ -837,8 +837,52 @@ } -pyFunc::pyFunc(PyObject * func) : m_func(func), m_numArgs(0), m_circular(false) + +/** A wrapper to a python function + * CPPONLY + */ +class CircularReferences { +public: + CircularReferences(): m_references() + { + } + + void register_ref(PyObject * obj) + { + // there is a slight chance that self has two functions... + // in which case obj should have at least reference two. + // I am ignoring this case here. + m_references.insert(obj); + } + + void cleanup() + { + std::set<PyObject *>::iterator it = m_references.begin(); + while (it != m_references.end()) + { + // a circular ref has a reference to the function self.func + // so it has at least one reference. In another word, if we see + // that self has only one reference, it means the object is not + // referenced by anyone else and should be removed. + if ((*it)->ob_refcnt == 1) { + // this will cause the destructor of operator to be called. + Py_DECREF(*it); + m_references.erase(it++); + } else + ++it; + } + } + +private: + std::set<PyObject *> m_references; +}; + +CircularReferences g_circular_refs; + + +pyFunc::pyFunc(PyObject * func) : m_func(func), m_numArgs(0) +{ if (!m_func.isValid()) return; @@ -949,12 +993,12 @@ // check the super class (BaseOperator) because of the SWIG // interface if (PyObject_HasAttrString(self, "apply") && - PyObject_HasAttrString(self, "describe")) - //std::cerr << "CIRCULAR " << std::endl; - m_circular = true; + PyObject_HasAttrString(self, "describe")) { + g_circular_refs.cleanup(); + g_circular_refs.register_ref(self); + } Py_DECREF(self); } - if (!PyObject_HasAttrString(obj, "__name__")) { cerr << "Cannot find name of the passed function. " << endl; throw ValueError("Cannot find name of the passed function."); @@ -998,47 +1042,6 @@ Py_DECREF(code); } - -pyFunc::pyFunc(const pyFunc & rhs) : m_func(rhs.m_func), m_name(rhs.m_name), m_numArgs(rhs.m_numArgs), - m_args(rhs.m_args), m_circular(rhs.m_circular) -{ - // prevent reference decrease of circular reference caused by removing of - // temporary rhs objects - rhs.m_circular = false; -} - - -pyFunc & pyFunc::operator=(const pyFunc & rhs) -{ - m_func = rhs.m_func; - m_name = rhs.m_name; - m_numArgs = rhs.m_numArgs; - m_args = rhs.m_args; - m_circular = rhs.m_circular; - // prevent reference decrease of circular reference caused by removing of - // temporary rhs objects - rhs.m_circular = false; - return *this; -} - - -pyFunc::~pyFunc() -{ - // in the case of circular reference, we will have to - // manually reduce reference of self, then self.func in order - // for both of them to be removed from memory - if (m_circular) { - PyObject * self = PyObject_GetAttrString(m_func.object(), SELF_ATTR); - // remove circular reference of self - Py_XDECREF(self); - // remove circular reference of self.func (not sure if this is needed) - Py_XDECREF(m_func.object()); - // remove reference caused by PyObject_GetAttrString. - Py_XDECREF(self); - } -} - - void pyGenerator::set(PyObject * gen) { Py_XDECREF(m_iterator); Modified: trunk/src/utility.h =================================================================== --- trunk/src/utility.h 2015-04-23 19:50:52 UTC (rev 4972) +++ trunk/src/utility.h 2015-04-29 04:36:55 UTC (rev 4973) @@ -68,6 +68,8 @@ #include <iomanip> using std::setw; +#include <set> + /// for ranr generator #include "gsl/gsl_sys.h" // for floating point comparison #include "gsl/gsl_rng.h" @@ -310,7 +312,6 @@ PyObject * m_object; }; - /** A wrapper to a python function * CPPONLY */ @@ -319,12 +320,6 @@ public: pyFunc(PyObject * func); - pyFunc(const pyFunc & rhs); - - pyFunc & operator=(const pyFunc & rhs); - - ~pyFunc(); - /// return number of arguments this function accepts. /// This function does not count tuple parameters. size_t numArgs() const @@ -438,11 +433,6 @@ size_t m_numArgs; vectorstr m_args; - - // if this function is a member function of a class - // that release of this function requires destroying - // self first. - mutable bool m_circular; }; /// CPPONLY This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-23 19:50:54
|
Revision: 4972 http://sourceforge.net/p/simupop/code/4972 Author: bpeng2000 Date: 2015-04-23 19:50:52 +0000 (Thu, 23 Apr 2015) Log Message: ----------- Fix an error Modified Paths: -------------- trunk/doc/refManual.lyx trunk/doc/userGuide.lyx trunk/simuPOP_version.py trunk/src/utility.cpp Modified: trunk/doc/refManual.lyx =================================================================== --- trunk/doc/refManual.lyx 2015-04-23 19:28:13 UTC (rev 4971) +++ trunk/doc/refManual.lyx 2015-04-23 19:50:52 UTC (rev 4972) @@ -5,7 +5,7 @@ \textclass manual \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4968})} +\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4971})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/doc/userGuide.lyx =================================================================== --- trunk/doc/userGuide.lyx 2015-04-23 19:28:13 UTC (rev 4971) +++ trunk/doc/userGuide.lyx 2015-04-23 19:50:52 UTC (rev 4972) @@ -6,7 +6,7 @@ \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4968})} +\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4971})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/simuPOP_version.py =================================================================== --- trunk/simuPOP_version.py 2015-04-23 19:28:13 UTC (rev 4971) +++ trunk/simuPOP_version.py 2015-04-23 19:50:52 UTC (rev 4972) @@ -1,2 +1,2 @@ SIMUPOP_VER="1.1.5" -SIMUPOP_REV="4968" +SIMUPOP_REV="4971" Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2015-04-23 19:28:13 UTC (rev 4971) +++ trunk/src/utility.cpp 2015-04-23 19:50:52 UTC (rev 4972) @@ -1018,7 +1018,7 @@ // prevent reference decrease of circular reference caused by removing of // temporary rhs objects rhs.m_circular = false; - return *rhs; + return *this; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-23 19:28:15
|
Revision: 4971 http://sourceforge.net/p/simupop/code/4971 Author: bpeng2000 Date: 2015-04-23 19:28:13 +0000 (Thu, 23 Apr 2015) Log Message: ----------- Minor fixes Modified Paths: -------------- trunk/development/conda/meta.yaml trunk/src/utility.cpp Modified: trunk/development/conda/meta.yaml =================================================================== --- trunk/development/conda/meta.yaml 2015-04-23 18:08:54 UTC (rev 4970) +++ trunk/development/conda/meta.yaml 2015-04-23 19:28:13 UTC (rev 4971) @@ -29,9 +29,11 @@ build: - python - setuptools + - distribute run: - python + - setuptools test: # Python imports Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2015-04-23 18:08:54 UTC (rev 4970) +++ trunk/src/utility.cpp 2015-04-23 19:28:13 UTC (rev 4971) @@ -1018,6 +1018,7 @@ // prevent reference decrease of circular reference caused by removing of // temporary rhs objects rhs.m_circular = false; + return *rhs; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-23 18:09:02
|
Revision: 4970 http://sourceforge.net/p/simupop/code/4970 Author: bpeng2000 Date: 2015-04-23 18:08:54 +0000 (Thu, 23 Apr 2015) Log Message: ----------- Update conda and other release information Modified Paths: -------------- trunk/development/conda/meta.yaml Modified: trunk/development/conda/meta.yaml =================================================================== --- trunk/development/conda/meta.yaml 2015-04-23 17:58:46 UTC (rev 4969) +++ trunk/development/conda/meta.yaml 2015-04-23 18:08:54 UTC (rev 4970) @@ -1,10 +1,10 @@ package: name: simupop - version: !!str 1.1.4 + version: !!str 1.1.5 source: - fn: simuPOP-1.1.4.tar.gz - url: https://pypi.python.org/packages/source/s/simuPOP/simuPOP-1.1.4.tar.gz#md5=f157cd3902747d72c59fd8460a78e3fc + fn: simuPOP-1.1.5.tar.gz + url: https://pypi.python.org/packages/source/s/simuPOP/simuPOP-1.1.5.tar.gz md5: # patches: # List any patch files here @@ -29,11 +29,9 @@ build: - python - setuptools - - distribute run: - python - - distribute test: # Python imports This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-23 17:58:53
|
Revision: 4969 http://sourceforge.net/p/simupop/code/4969 Author: bpeng2000 Date: 2015-04-23 17:58:46 +0000 (Thu, 23 Apr 2015) Log Message: ----------- automatic checkin on Thu Apr 23 12:58:44 2015 Modified Paths: -------------- trunk/development/release.py trunk/doc/refManual.lyx trunk/doc/userGuide.lyx trunk/simuPOP_version.py Modified: trunk/development/release.py =================================================================== --- trunk/development/release.py 2015-04-23 17:57:35 UTC (rev 4968) +++ trunk/development/release.py 2015-04-23 17:58:46 UTC (rev 4969) @@ -335,7 +335,10 @@ def condaRelease(): '''Build conda binary''' + d = os.getcwd() + os.chdir('development') run_command('conda build conda') + os.chdir(d) def tagRelease(release): ''' if there are changes, commit it ''' Modified: trunk/doc/refManual.lyx =================================================================== --- trunk/doc/refManual.lyx 2015-04-23 17:57:35 UTC (rev 4968) +++ trunk/doc/refManual.lyx 2015-04-23 17:58:46 UTC (rev 4969) @@ -5,7 +5,7 @@ \textclass manual \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4967})} +\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4968})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/doc/userGuide.lyx =================================================================== --- trunk/doc/userGuide.lyx 2015-04-23 17:57:35 UTC (rev 4968) +++ trunk/doc/userGuide.lyx 2015-04-23 17:58:46 UTC (rev 4969) @@ -6,7 +6,7 @@ \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4967})} +\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4968})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/simuPOP_version.py =================================================================== --- trunk/simuPOP_version.py 2015-04-23 17:57:35 UTC (rev 4968) +++ trunk/simuPOP_version.py 2015-04-23 17:58:46 UTC (rev 4969) @@ -1,2 +1,2 @@ SIMUPOP_VER="1.1.5" -SIMUPOP_REV="4967" +SIMUPOP_REV="4968" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-23 17:57:37
|
Revision: 4968 http://sourceforge.net/p/simupop/code/4968 Author: bpeng2000 Date: 2015-04-23 17:57:35 +0000 (Thu, 23 Apr 2015) Log Message: ----------- automatic checkin on Thu Apr 23 12:57:33 2015 Modified Paths: -------------- trunk/development/release.py trunk/doc/refManual.lyx trunk/doc/userGuide.lyx trunk/simuPOP_version.py Modified: trunk/development/release.py =================================================================== --- trunk/development/release.py 2015-04-23 17:56:44 UTC (rev 4967) +++ trunk/development/release.py 2015-04-23 17:57:35 UTC (rev 4968) @@ -333,7 +333,7 @@ .format(dmg, ver, dest, pyver)) -def condaRelease(release): +def condaRelease(): '''Build conda binary''' run_command('conda build conda') Modified: trunk/doc/refManual.lyx =================================================================== --- trunk/doc/refManual.lyx 2015-04-23 17:56:44 UTC (rev 4967) +++ trunk/doc/refManual.lyx 2015-04-23 17:57:35 UTC (rev 4968) @@ -5,7 +5,7 @@ \textclass manual \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4963})} +\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4967})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/doc/userGuide.lyx =================================================================== --- trunk/doc/userGuide.lyx 2015-04-23 17:56:44 UTC (rev 4967) +++ trunk/doc/userGuide.lyx 2015-04-23 17:57:35 UTC (rev 4968) @@ -6,7 +6,7 @@ \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4963})} +\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4967})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/simuPOP_version.py =================================================================== --- trunk/simuPOP_version.py 2015-04-23 17:56:44 UTC (rev 4967) +++ trunk/simuPOP_version.py 2015-04-23 17:57:35 UTC (rev 4968) @@ -1,2 +1,2 @@ SIMUPOP_VER="1.1.5" -SIMUPOP_REV="4963" +SIMUPOP_REV="4967" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-23 17:56:52
|
Revision: 4967 http://sourceforge.net/p/simupop/code/4967 Author: bpeng2000 Date: 2015-04-23 17:56:44 +0000 (Thu, 23 Apr 2015) Log Message: ----------- automatic checkin on Thu Apr 23 12:56:38 2015 Modified Paths: -------------- trunk/ChangeLog trunk/development/release.py trunk/doc/refManual.lyx trunk/doc/refManual.pdf trunk/doc/userGuide.lyx trunk/doc/userGuide.pdf trunk/simuPOP_version.py trunk/src/simuPOP_doc.i Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2015-04-22 18:13:46 UTC (rev 4966) +++ trunk/ChangeLog 2015-04-23 17:56:44 UTC (rev 4967) @@ -4,8 +4,30 @@ - BUG: simuPOP does not respond well to Ctrl-C under windows. - BUG: Textbox in Tkinter help dialog does not resize. +1. Version 1.1.5 -- Not released -Version 1.1.3 -- Not released +BUG FIX: +* Fix a memory leak bug (caused by circular reference) that was incorrectly fixed in 1.1.2. + +NEW FEATURE: +* support installation through command pip (pypi) +* create binary distributions for conda. +* Add parameter allowSelfing to CombinedParentsChooser +* Add HermaphroditicMating +* Allow the use of parameter infoFields to specify which information fields to output for operator Dumper and function dump. +* Add parameter reverse=false to function Population.sortIndividuals() to allow sorting individuals in reverse order. + +Version 1.1.4 -- Rev 4951 (Oct, 15, 2014) + +NEW FEATURES: +* Expose type defdict so that users can use this type directly. +* Add event based demographic models. + +BUG FIXES: +* Fix a bug with MultiStageModel when the population does not start from generation 0. + + +Version 1.1.3 -- Rev 4915 (July 29, 2014) MAJOR NEW FEATURES: * Add a new mating scheme [[http://simupop.sourceforge.net/manual_svn/build/refManual_ch2_sec3.html#class-conditionalmating|ConditionalMating]] to apply different matings schemes to populations with different properties. ([[http://simupop.sourceforge.net/manual_svn/build/userGuide_ch6_sec1.html#conditional-mating-schemes|Example]] Modified: trunk/development/release.py =================================================================== --- trunk/development/release.py 2015-04-22 18:13:46 UTC (rev 4966) +++ trunk/development/release.py 2015-04-23 17:56:44 UTC (rev 4967) @@ -171,6 +171,7 @@ def uploadDocuments(ver, rev): d = os.getcwd() os.chdir('doc') + run_command('make pdf') run_command('make dist_release') os.chdir(d) @@ -373,6 +374,7 @@ if 'build' in args.actions: prepareEnvironment() generateSWIGWrappers() + # documents need to be generated before simuPOP is built generateDocuments(ver, rev) buildSimuPOP() if 'src' in args.actions: Modified: trunk/doc/refManual.lyx =================================================================== --- trunk/doc/refManual.lyx 2015-04-22 18:13:46 UTC (rev 4966) +++ trunk/doc/refManual.lyx 2015-04-23 17:56:44 UTC (rev 4967) @@ -5,7 +5,7 @@ \textclass manual \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.4 (\mbox{Rev: 4950})} +\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4963})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/doc/refManual.pdf =================================================================== (Binary files differ) Modified: trunk/doc/userGuide.lyx =================================================================== --- trunk/doc/userGuide.lyx 2015-04-22 18:13:46 UTC (rev 4966) +++ trunk/doc/userGuide.lyx 2015-04-23 17:56:44 UTC (rev 4967) @@ -6,7 +6,7 @@ \begin_preamble \renewcommand{\py@ptsize}{12pt} -\setreleaseinfo{Release 1.1.4 (\mbox{Rev: 4950})} +\setreleaseinfo{Release 1.1.5 (\mbox{Rev: 4963})} % file revision $Rev: 3372$ \authoraddress{ {\bf Department of Epidemiology, U.T. M.D. Anderson Cancer Center}\\ Modified: trunk/doc/userGuide.pdf =================================================================== (Binary files differ) Modified: trunk/simuPOP_version.py =================================================================== --- trunk/simuPOP_version.py 2015-04-22 18:13:46 UTC (rev 4966) +++ trunk/simuPOP_version.py 2015-04-23 17:56:44 UTC (rev 4967) @@ -1,2 +1,2 @@ -SIMUPOP_VER="1.1.4" -SIMUPOP_REV="4950" +SIMUPOP_VER="1.1.5" +SIMUPOP_REV="4963" Modified: trunk/src/simuPOP_doc.i =================================================================== --- trunk/src/simuPOP_doc.i 2015-04-22 18:13:46 UTC (rev 4966) +++ trunk/src/simuPOP_doc.i 2015-04-23 17:56:44 UTC (rev 4967) @@ -7333,6 +7333,14 @@ "; +%feature("docstring") simuPOP::pyFunc::~pyFunc " + +Usage: + + x.~pyFunc() + +"; + %feature("docstring") simuPOP::pyFunc::numArgs " Description: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bpe...@us...> - 2015-04-22 18:13:54
|
Revision: 4966 http://sourceforge.net/p/simupop/code/4966 Author: bpeng2000 Date: 2015-04-22 18:13:46 +0000 (Wed, 22 Apr 2015) Log Message: ----------- Check if a different type of simuPOP module has already imported in function simuOpt.setOptions Modified Paths: -------------- trunk/simuOpt.py Modified: trunk/simuOpt.py =================================================================== --- trunk/simuOpt.py 2015-04-21 21:37:40 UTC (rev 4965) +++ trunk/simuOpt.py 2015-04-22 18:13:46 UTC (rev 4966) @@ -97,7 +97,6 @@ ] import os, sys, re, time, textwrap - # # simuOptions that will be checked when simuPOP is loaded. This structure # can be changed by function setOptions @@ -228,16 +227,40 @@ threads will be set to 1, or a value set by environmental variable ``OMP_NUM_THREADS``. ''' - # Optimized - if optimized in [True, False]: - simuOptions['Optimized'] = optimized - elif optimized is not None: - raise TypeError('Parameter optimized can be either True or False.') + # if the module has already been imported, check which module + # was imported + try: + _imported = sys.modules['simuPOP'].moduleInfo() + except Exception as e: + _imported = {} # Allele type if alleleType in ['long', 'binary', 'short', 'mutant', 'lineage']: + # if simuPOP has been imported and re-imported with a different module name + # the existing module will be used so moduleInfo() will return a different + # module type from what is specified in simuOptions. + if _imported and _imported['alleleType'] != alleleType: + raise ImportError(('simuPOP has already been imported with allele type %s (%s) and cannot be ' + 're-imported with allele type %s. Please make sure you import module simuOpt before ' + 'any simuPOP module is imported.') % ( + _imported['alleleType'], ('optimized' if _imported['optimized'] else 'standard'), + alleleType)) simuOptions['AlleleType'] = alleleType elif alleleType is not None: raise TypeError('Parameter alleleType can be either short, long, binary, mutant or lineage.') + # Optimized + if optimized in [True, False]: + # if simuPOP has been imported and re-imported with a different module name + # the existing module will be used so moduleInfo() will return a different + # module type from what is specified in simuOptions. + if _imported and _imported['optimized'] != optimized: + raise ImportError(('simuPOP has already been imported with allele type %s (%s) and cannot be ' + 're-imported in %s mode. Please make sure you import module simuOpt before ' + 'any simuPOP module is imported.') % ( + _imported['alleleType'], ('optimized' if _imported['optimized'] else 'standard'), + 'optimized' if optimized else 'standard')) + simuOptions['Optimized'] = optimized + elif optimized is not None: + raise TypeError('Parameter optimized can be either True or False.') # Graphical toolkit if gui in [True, False, 'wxPython', 'Tkinter', 'batch']: simuOptions['GUI'] = gui This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |