Review Request: Stollmeier #27

Closed
wants to merge 6 commits into
from

Conversation

@Fjanks

Fjanks commented Feb 22, 2017

AUTHOR

Dear @ReScience/editors,

I request a review for the following replication:

Original article

Title: A simple rule for the evolution of cooperation on graphs and social networks
Author(s): H. Ohtsuki, C. Hauert, E. Lieberman and M.A. Nowak
Journal (or Conference): Nature
Year: 2006
DOI: 10.1038/nature04605
PDF: http://projects.iq.harvard.edu/files/ped/files/nature06a_0.pdf (SI: http://www.nature.com/nature/journal/v441/n7092/extref/nature04605-s1.pdf)

Replication

Author(s): F. Stollmeier (ORCID: 0000-0003-4858-0895)
Repository: https://github.com/Fjanks/ReScience-submission/tree/STOLLMEIER-2017
PDF: https://github.com/Fjanks/ReScience-submission/blob/STOLLMEIER-2017/article/stollmeier-2017.pdf
Keywords: Evolutionary Game Theory, Networks
Language: English
Domain:

Results

  • Article has been fully replicated
  • Article has been partially replicated
  • Article has not been replicated

EDITOR

  • Editor acknowledgement (@ctb) February 24, 2017
  • Reviewer 1 (@AdamRTomkins) February 27, 2017
  • Reviewer 2 (@anyaevostinar) February 28, 2017
  • Reviewer 3 (@KamilSJaron) June 15, 2017
  • Review 1 decision [accept] April 19, 2017
  • Review 2 decision [accept] July 1, 2017
  • Editor decision [accept] July 4, 2017
@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Feb 23, 2017

Member

Thanks for your submission, we'll assign an editor soon and will proceed with review.
Don't hesitate to ask for update.

Member

rougier commented Feb 23, 2017

Thanks for your submission, we'll assign an editor soon and will proceed with review.
Don't hesitate to ask for update.

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Feb 23, 2017

Member

@Fjanks By the way, do you have a link to a free PDF of the original article ?

Member

rougier commented Feb 23, 2017

@Fjanks By the way, do you have a link to a free PDF of the original article ?

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Feb 23, 2017

Member

@ctb Could you edit this submission ?

Member

rougier commented Feb 23, 2017

@ctb Could you edit this submission ?

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Feb 23, 2017

Member

@Fjanks And I forgot, can you add your ORCID id ? (you should be able to update your first post)

Member

rougier commented Feb 23, 2017

@Fjanks And I forgot, can you add your ORCID id ? (you should be able to update your first post)

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Feb 24, 2017

@rougier
I replaced the link to the original article with a link to a free pdf and also added a link to the supplementary.
I put the ORCID id after my name in the first post. Is that ok or is there somewhere a field for the ORCID id which I didn't see?

Fjanks commented Feb 24, 2017

@rougier
I replaced the link to the original article with a link to a free pdf and also added a link to the supplementary.
I put the ORCID id after my name in the first post. Is that ok or is there somewhere a field for the ORCID id which I didn't see?

@ctb

This comment has been minimized.

Show comment
Hide comment
@ctb

ctb Feb 24, 2017

@rougier I can edit!

ctb commented Feb 24, 2017

@rougier I can edit!

@AdamRTomkins

This comment has been minimized.

Show comment
Hide comment
@AdamRTomkins

AdamRTomkins Feb 24, 2017

I would happily act as a reviewer for this submission.

I would happily act as a reviewer for this submission.

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Feb 24, 2017

Member

@Fjanks perfect !

Member

rougier commented Feb 24, 2017

@Fjanks perfect !

@rougier

This comment has been minimized.

Show comment
Hide comment
Member

rougier commented Feb 24, 2017

@AdamRTomkins thanks !

@ctb

This comment has been minimized.

Show comment
Hide comment
@ctb

ctb Feb 27, 2017

@AdamRTomkins please go ahead! I'm looking for another reviewer now, but there's no reason not to start :).

For your reference, here are reviewer guidelines: https://github.com/ReScience/ReScience/blob/master/reviewer-guidelines.md

ctb commented Feb 27, 2017

@AdamRTomkins please go ahead! I'm looking for another reviewer now, but there's no reason not to start :).

For your reference, here are reviewer guidelines: https://github.com/ReScience/ReScience/blob/master/reviewer-guidelines.md

@ctb

This comment has been minimized.

Show comment
Hide comment
@ctb

ctb Feb 28, 2017

@anyaevostinar has also agreed to review! @rougier do you need to do anything to give her perms? her ORCID is orcid.org/0000-0001-7216-5283 - thanks, Anya!

ctb commented Feb 28, 2017

@anyaevostinar has also agreed to review! @rougier do you need to do anything to give her perms? her ORCID is orcid.org/0000-0001-7216-5283 - thanks, Anya!

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Mar 1, 2017

Member

@ctb @anyaevostinar Simplest would be to register as reviewer here

@ctb Don't forget to update PR labels and information at the start of the htread (reviewer names and date)

Member

rougier commented Mar 1, 2017

@ctb @anyaevostinar Simplest would be to register as reviewer here

@ctb Don't forget to update PR labels and information at the start of the htread (reviewer names and date)

@anyaevostinar

This comment has been minimized.

Show comment
Hide comment

@ctb @rougier registered

@rougier rougier added the 02 - Review label Mar 1, 2017

@ctb ctb removed the 01 - Request label Mar 2, 2017

@anyaevostinar

This comment has been minimized.

Show comment
Hide comment
@anyaevostinar

anyaevostinar Mar 9, 2017

I'm having some problems getting "Preparations" to run. I assumed I should enter: jupyter notebook on the command line and then click replication.ipynb and then start executing. I've installed all the packages it looks like I need, but am getting:

---------------------------------------------------------------------------
DistutilsExecError                        Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/unixccompiler.py in _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    115             self.spawn(compiler_so + cc_args + [src, '-o', obj] +
--> 116                        extra_postargs)
    117         except DistutilsExecError as msg:

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/ccompiler.py in spawn(self, cmd)
    908     def spawn(self, cmd):
--> 909         spawn(cmd, dry_run=self.dry_run)
    910 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/spawn.py in spawn(cmd, search_path, verbose, dry_run)
     35     if os.name == 'posix':
---> 36         _spawn_posix(cmd, search_path, dry_run=dry_run)
     37     elif os.name == 'nt':

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/spawn.py in _spawn_posix(cmd, search_path, verbose, dry_run)
    161                           "command %r failed with exit status %d"
--> 162                           % (cmd, exit_status))
    163             elif os.WIFSTOPPED(status):

DistutilsExecError: command 'gcc-4.2' failed with exit status 1

I'm having some problems getting "Preparations" to run. I assumed I should enter: jupyter notebook on the command line and then click replication.ipynb and then start executing. I've installed all the packages it looks like I need, but am getting:

---------------------------------------------------------------------------
DistutilsExecError                        Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/unixccompiler.py in _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    115             self.spawn(compiler_so + cc_args + [src, '-o', obj] +
--> 116                        extra_postargs)
    117         except DistutilsExecError as msg:

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/ccompiler.py in spawn(self, cmd)
    908     def spawn(self, cmd):
--> 909         spawn(cmd, dry_run=self.dry_run)
    910 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/spawn.py in spawn(cmd, search_path, verbose, dry_run)
     35     if os.name == 'posix':
---> 36         _spawn_posix(cmd, search_path, dry_run=dry_run)
     37     elif os.name == 'nt':

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/spawn.py in _spawn_posix(cmd, search_path, verbose, dry_run)
    161                           "command %r failed with exit status %d"
--> 162                           % (cmd, exit_status))
    163             elif os.WIFSTOPPED(status):

DistutilsExecError: command 'gcc-4.2' failed with exit status 1
@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Mar 10, 2017

That looks like the compilation of the cython code fails. Did you check whether cython in general works? You could test it with the examples on http://docs.cython.org/en/latest/src/quickstart/build.html.

By the way, I saw in the error message that you use python 3. That reminded me that I totally forgot to make the code compatible with python 3, which I did some minutes ago.

Fjanks commented Mar 10, 2017

That looks like the compilation of the cython code fails. Did you check whether cython in general works? You could test it with the examples on http://docs.cython.org/en/latest/src/quickstart/build.html.

By the way, I saw in the error message that you use python 3. That reminded me that I totally forgot to make the code compatible with python 3, which I did some minutes ago.

@anyaevostinar

This comment has been minimized.

Show comment
Hide comment
@anyaevostinar

anyaevostinar Mar 17, 2017

@Fjanks I have gone through the hello world example and the jupyter example in the cython docs and that all works as expected. I've tried again with Python3 and am getting the same:

---------------------------------------------------------------------------
DistutilsExecError                        Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/unixccompiler.py in _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    115             self.spawn(compiler_so + cc_args + [src, '-o', obj] +
--> 116                        extra_postargs)
    117         except DistutilsExecError as msg:

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/ccompiler.py in spawn(self, cmd)
    908     def spawn(self, cmd):
--> 909         spawn(cmd, dry_run=self.dry_run)
    910 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/spawn.py in spawn(cmd, search_path, verbose, dry_run)
     35     if os.name == 'posix':
---> 36         _spawn_posix(cmd, search_path, dry_run=dry_run)
     37     elif os.name == 'nt':

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/spawn.py in _spawn_posix(cmd, search_path, verbose, dry_run)
    161                           "command %r failed with exit status %d"
--> 162                           % (cmd, exit_status))
    163             elif os.WIFSTOPPED(status):

DistutilsExecError: command 'gcc-4.2' failed with exit status 1

During handling of the above exception, another exception occurred:

CompileError                              Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pyximport/pyximport.py in load_module(name, pyxfilename, pyxbuild_dir, is_package, build_inplace, language_level, so_path)
    215             so_path = build_module(module_name, pyxfilename, pyxbuild_dir,
--> 216                                    inplace=build_inplace, language_level=language_level)
    217         mod = imp.load_dynamic(name, so_path)

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pyximport/pyximport.py in build_module(name, pyxfilename, pyxbuild_dir, inplace, language_level)
    191                                   inplace=inplace,
--> 192                                   reload_support=pyxargs.reload_support)
    193     assert os.path.exists(so_path), "Cannot find: %s" % so_path

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pyximport/pyxbuild.py in pyx_to_dll(filename, ext, force_rebuild, build_in_temp, pyxbuild_dir, setup_args, reload_support, inplace)
    101         obj_build_ext = dist.get_command_obj("build_ext")
--> 102         dist.run_commands()
    103         so_path = obj_build_ext.get_outputs()[0]

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/dist.py in run_commands(self)
    954         for cmd in self.commands:
--> 955             self.run_command(cmd)
    956 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/dist.py in run_command(self, command)
    973         cmd_obj.ensure_finalized()
--> 974         cmd_obj.run()
    975         self.have_run[command] = 1

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Cython/Distutils/old_build_ext.py in run(self)
    184 
--> 185         _build_ext.build_ext.run(self)
    186 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/command/build_ext.py in run(self)
    338         # Now actually compile and link everything.
--> 339         self.build_extensions()
    340 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Cython/Distutils/old_build_ext.py in build_extensions(self)
    192             ext.sources = self.cython_sources(ext.sources, ext)
--> 193             self.build_extension(ext)
    194 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/command/build_ext.py in build_extension(self, ext)
    502                                          extra_postargs=extra_args,
--> 503                                          depends=ext.depends)
    504 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/ccompiler.py in compile(self, sources, output_dir, macros, include_dirs, debug, extra_preargs, extra_postargs, depends)
    573                 continue
--> 574             self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
    575 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/unixccompiler.py in _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    117         except DistutilsExecError as msg:
--> 118             raise CompileError(msg)
    119 

CompileError: command 'gcc-4.2' failed with exit status 1

@Fjanks I have gone through the hello world example and the jupyter example in the cython docs and that all works as expected. I've tried again with Python3 and am getting the same:

---------------------------------------------------------------------------
DistutilsExecError                        Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/unixccompiler.py in _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    115             self.spawn(compiler_so + cc_args + [src, '-o', obj] +
--> 116                        extra_postargs)
    117         except DistutilsExecError as msg:

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/ccompiler.py in spawn(self, cmd)
    908     def spawn(self, cmd):
--> 909         spawn(cmd, dry_run=self.dry_run)
    910 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/spawn.py in spawn(cmd, search_path, verbose, dry_run)
     35     if os.name == 'posix':
---> 36         _spawn_posix(cmd, search_path, dry_run=dry_run)
     37     elif os.name == 'nt':

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/spawn.py in _spawn_posix(cmd, search_path, verbose, dry_run)
    161                           "command %r failed with exit status %d"
--> 162                           % (cmd, exit_status))
    163             elif os.WIFSTOPPED(status):

DistutilsExecError: command 'gcc-4.2' failed with exit status 1

During handling of the above exception, another exception occurred:

CompileError                              Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pyximport/pyximport.py in load_module(name, pyxfilename, pyxbuild_dir, is_package, build_inplace, language_level, so_path)
    215             so_path = build_module(module_name, pyxfilename, pyxbuild_dir,
--> 216                                    inplace=build_inplace, language_level=language_level)
    217         mod = imp.load_dynamic(name, so_path)

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pyximport/pyximport.py in build_module(name, pyxfilename, pyxbuild_dir, inplace, language_level)
    191                                   inplace=inplace,
--> 192                                   reload_support=pyxargs.reload_support)
    193     assert os.path.exists(so_path), "Cannot find: %s" % so_path

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pyximport/pyxbuild.py in pyx_to_dll(filename, ext, force_rebuild, build_in_temp, pyxbuild_dir, setup_args, reload_support, inplace)
    101         obj_build_ext = dist.get_command_obj("build_ext")
--> 102         dist.run_commands()
    103         so_path = obj_build_ext.get_outputs()[0]

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/dist.py in run_commands(self)
    954         for cmd in self.commands:
--> 955             self.run_command(cmd)
    956 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/dist.py in run_command(self, command)
    973         cmd_obj.ensure_finalized()
--> 974         cmd_obj.run()
    975         self.have_run[command] = 1

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Cython/Distutils/old_build_ext.py in run(self)
    184 
--> 185         _build_ext.build_ext.run(self)
    186 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/command/build_ext.py in run(self)
    338         # Now actually compile and link everything.
--> 339         self.build_extensions()
    340 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Cython/Distutils/old_build_ext.py in build_extensions(self)
    192             ext.sources = self.cython_sources(ext.sources, ext)
--> 193             self.build_extension(ext)
    194 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/command/build_ext.py in build_extension(self, ext)
    502                                          extra_postargs=extra_args,
--> 503                                          depends=ext.depends)
    504 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/ccompiler.py in compile(self, sources, output_dir, macros, include_dirs, debug, extra_preargs, extra_postargs, depends)
    573                 continue
--> 574             self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
    575 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/unixccompiler.py in _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts)
    117         except DistutilsExecError as msg:
--> 118             raise CompileError(msg)
    119 

CompileError: command 'gcc-4.2' failed with exit status 1
@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Mar 17, 2017

Member

@anyaevostinar My 2 cents but do you have gcc-4.2 installed ?

Member

rougier commented Mar 17, 2017

@anyaevostinar My 2 cents but do you have gcc-4.2 installed ?

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Mar 20, 2017

If the examples in the cython docs work then I guess that pyximport
is the problem. To test this you could use the hello.pyx from the examples and try to import it in python with

import pyximport; pyximport.install()
import hello

If that fails maybe it helps to reinstall pyximport. As an alternative, you can do it completely without pyximport, the algorithms.pyx can also be compiled with distutils in
the same way as described for the hello.pyx in the docs. Just replace the
filename 'hello.pyx' by 'algorithms.pyx' in the setup.py script. If that works
remove the line "import pyximport; pyximport.install()" in the
jupyter notebook.

Fjanks commented Mar 20, 2017

If the examples in the cython docs work then I guess that pyximport
is the problem. To test this you could use the hello.pyx from the examples and try to import it in python with

import pyximport; pyximport.install()
import hello

If that fails maybe it helps to reinstall pyximport. As an alternative, you can do it completely without pyximport, the algorithms.pyx can also be compiled with distutils in
the same way as described for the hello.pyx in the docs. Just replace the
filename 'hello.pyx' by 'algorithms.pyx' in the setup.py script. If that works
remove the line "import pyximport; pyximport.install()" in the
jupyter notebook.

@anyaevostinar

This comment has been minimized.

Show comment
Hide comment
@anyaevostinar

anyaevostinar Mar 20, 2017

@rougier Yes, though here is the full version info:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 7.0.2 (clang-700.1.81) Target: x86_64-apple-darwin14.5.0 Thread model: posix

@Fjanks That pyximport code works correctly with only 'unused function' warnings. I'll try without pyximport anyway.

@rougier Yes, though here is the full version info:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 7.0.2 (clang-700.1.81) Target: x86_64-apple-darwin14.5.0 Thread model: posix

@Fjanks That pyximport code works correctly with only 'unused function' warnings. I'll try without pyximport anyway.

@anyaevostinar

This comment has been minimized.

Show comment
Hide comment
@anyaevostinar

anyaevostinar Mar 20, 2017

When building algorithms with distutils I get:
algorithms.c:232:10: fatal error: 'numpy/arrayobject.h' file not found #include "numpy/arrayobject.h"

I can import numpy into Python fine, so I'm not sure what the problem is.

When building algorithms with distutils I get:
algorithms.c:232:10: fatal error: 'numpy/arrayobject.h' file not found #include "numpy/arrayobject.h"

I can import numpy into Python fine, so I'm not sure what the problem is.

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Mar 20, 2017

Ok, thats not what I expected, but this error message is much more informative than the one before.
It doesn't find the numpy header files automatically. The good news is that numpy itself knows where they are, it has a function numpy.get_include().
Please try this setup.py:

from distutils.core import setup
from Cython.Build import cythonize
import numpy

setup(
name = 'algorithms',
ext_modules = cythonize("algorithms.pyx", include_path = [numpy.get_include()]),
)

Fjanks commented Mar 20, 2017

Ok, thats not what I expected, but this error message is much more informative than the one before.
It doesn't find the numpy header files automatically. The good news is that numpy itself knows where they are, it has a function numpy.get_include().
Please try this setup.py:

from distutils.core import setup
from Cython.Build import cythonize
import numpy

setup(
name = 'algorithms',
ext_modules = cythonize("algorithms.pyx", include_path = [numpy.get_include()]),
)

@anyaevostinar

This comment has been minimized.

Show comment
Hide comment
@anyaevostinar

anyaevostinar Mar 24, 2017

That does not seem to fix the error, when I try with python3 I get this:

python3 setup.py build_ext --inplace running build_ext building 'algorithms' extension creating build/temp.macosx-10.6-intel-3.4 gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -c algorithms.c -o build/temp.macosx-10.6-intel-3.4/algorithms.o algorithms.c:232:31: error: numpy/arrayobject.h: No such file or directory algorithms.c:233:31: error: numpy/ufuncobject.h: No such file or directory algorithms.c:544: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__pyx_t_5numpy_int8_t’

I copied exactly the setup.py code you specify and placed it in the setup.py file in the code folder and then ran python3 setup.py build_ext --inplace as specified in the tutorial you linked earlier.

That does not seem to fix the error, when I try with python3 I get this:

python3 setup.py build_ext --inplace running build_ext building 'algorithms' extension creating build/temp.macosx-10.6-intel-3.4 gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -c algorithms.c -o build/temp.macosx-10.6-intel-3.4/algorithms.o algorithms.c:232:31: error: numpy/arrayobject.h: No such file or directory algorithms.c:233:31: error: numpy/ufuncobject.h: No such file or directory algorithms.c:544: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__pyx_t_5numpy_int8_t’

I copied exactly the setup.py code you specify and placed it in the setup.py file in the code folder and then ran python3 setup.py build_ext --inplace as specified in the tutorial you linked earlier.

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Mar 24, 2017

Do you use OS X? I've read that distutils on OS X ignores the include_path. There are workarounds, but since I have only linux systems I cannot test them. Lets try it without distutils.

First, run cython to create the C code:

cython algorithms.pyx

Second, start python3 and get the include-path of numpy:

import numpy
numpy.get_include() 

Third, compile it with the following command (replace /path/to/numpy with the result from numpy.get_include()):

gcc-4.2 -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -I/path/to/numpy -o algorithms.so algorithms.c 

Fjanks commented Mar 24, 2017

Do you use OS X? I've read that distutils on OS X ignores the include_path. There are workarounds, but since I have only linux systems I cannot test them. Lets try it without distutils.

First, run cython to create the C code:

cython algorithms.pyx

Second, start python3 and get the include-path of numpy:

import numpy
numpy.get_include() 

Third, compile it with the following command (replace /path/to/numpy with the result from numpy.get_include()):

gcc-4.2 -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -I/path/to/numpy -o algorithms.so algorithms.c 
@anyaevostinar

This comment has been minimized.

Show comment
Hide comment
@anyaevostinar

anyaevostinar Mar 29, 2017

I am using OS X. When running this code, I get:

$ gcc-4.2 -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -I/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include -o algorithms.so algorithms.c couldn't understand kern.osversion14.5.0'
In file included from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include/numpy/ndarraytypes.h:1788,
from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include/numpy/ndarrayobject.h:18,
from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include/numpy/arrayobject.h:4,
from algorithms.c:435:
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION"
algorithms.c: In function ‘__Pyx_WriteUnraisable’:
algorithms.c:25566: warning: ‘state’ may be used uninitialized in this function
ld: warning: object file (/var/folders/md/pmh2w9w924g1z0nsd4fqr7th0000gn/T//ccrJp9W5.o) was built for newer OSX version (10.10) than being linked (10.4)
Undefined symbols for architecture x86_64:
"_PyBaseObject_Type", referenced from:
...
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status`

With a lot listed in the '...'

I am using OS X. When running this code, I get:

$ gcc-4.2 -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -I/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include -o algorithms.so algorithms.c couldn't understand kern.osversion14.5.0'
In file included from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include/numpy/ndarraytypes.h:1788,
from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include/numpy/ndarrayobject.h:18,
from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include/numpy/arrayobject.h:4,
from algorithms.c:435:
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION"
algorithms.c: In function ‘__Pyx_WriteUnraisable’:
algorithms.c:25566: warning: ‘state’ may be used uninitialized in this function
ld: warning: object file (/var/folders/md/pmh2w9w924g1z0nsd4fqr7th0000gn/T//ccrJp9W5.o) was built for newer OSX version (10.10) than being linked (10.4)
Undefined symbols for architecture x86_64:
"_PyBaseObject_Type", referenced from:
...
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status`

With a lot listed in the '...'

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Mar 30, 2017

Member

You can try python3-config --cflags and python3-config --ldflags for compiler flags:

 gcc-4.2 -shared `python3-config --cflags` `python3-config --ldflags` \
         -I`python -c "import numpy; print(numpy.get_include())"` \
         -o algorithms.so algorithms.c
Member

rougier commented Mar 30, 2017

You can try python3-config --cflags and python3-config --ldflags for compiler flags:

 gcc-4.2 -shared `python3-config --cflags` `python3-config --ldflags` \
         -I`python -c "import numpy; print(numpy.get_include())"` \
         -o algorithms.so algorithms.c
@anyaevostinar

This comment has been minimized.

Show comment
Hide comment
@anyaevostinar

anyaevostinar Apr 5, 2017

@rougier That worked, running the notebook now. Thanks!

@rougier That worked, running the notebook now. Thanks!

@anyaevostinar

This comment has been minimized.

Show comment
Hide comment
@anyaevostinar

anyaevostinar Apr 5, 2017

The graphs from saved data are all working but when I try to run the simulation with reduced n_graphs and n_runs, I get: "Widget Javascript not detected. It may not be installed or enabled properly."

The graphs from saved data are all working but when I try to run the simulation with reduced n_graphs and n_runs, I get: "Widget Javascript not detected. It may not be installed or enabled properly."

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Apr 6, 2017

I'm glad it works now!
@rougier: Thank you for the suggestion!
@anyaevostinar: The only javascript widget in the notebook is the progress bar. It is nice to see how long the simulation will take, but the simulations should also run without it. You can either ignore the message or install ipywidgets and activate it:

pip install ipywidgets
jupyter nbextension enable --py --sys-prefix widgetsnbextension

Fjanks commented Apr 6, 2017

I'm glad it works now!
@rougier: Thank you for the suggestion!
@anyaevostinar: The only javascript widget in the notebook is the progress bar. It is nice to see how long the simulation will take, but the simulations should also run without it. You can either ignore the message or install ipywidgets and activate it:

pip install ipywidgets
jupyter nbextension enable --py --sys-prefix widgetsnbextension
@ctb

This comment has been minimized.

Show comment
Hide comment
@ctb

ctb Apr 16, 2017

Hello everyone, how is the review going? :)

ctb commented Apr 16, 2017

Hello everyone, how is the review going? :)

@KamilSJaron

This comment has been minimized.

Show comment
Hide comment
@KamilSJaron

KamilSJaron Jun 18, 2017

All right, the original problem was that conda was trying to use gcc from Xcode (which is just a linked clang, therefore the error message). When I installed gcc through conda to environment, it worked. Simulation is running now.

An easy and petty safe way how to reproduce sim on OS X is:

  1. install python through conda
  2. create an enviroment
  3. install cython, gcc, jupyter, (again using conda)...
  4. compile cython code (setup.py would be indeed comfortable, but I do not find it crucial. The problem I had would not be solved though setup.)
  5. run notebook

this should work regardless of what is already installed on computer. Also, note that this is not problem of the paper, but problem of OS X compiler being problematic with cython.

KamilSJaron commented Jun 18, 2017

All right, the original problem was that conda was trying to use gcc from Xcode (which is just a linked clang, therefore the error message). When I installed gcc through conda to environment, it worked. Simulation is running now.

An easy and petty safe way how to reproduce sim on OS X is:

  1. install python through conda
  2. create an enviroment
  3. install cython, gcc, jupyter, (again using conda)...
  4. compile cython code (setup.py would be indeed comfortable, but I do not find it crucial. The problem I had would not be solved though setup.)
  5. run notebook

this should work regardless of what is already installed on computer. Also, note that this is not problem of the paper, but problem of OS X compiler being problematic with cython.

@dimpase

This comment has been minimized.

Show comment
Hide comment
@dimpase

dimpase Jun 19, 2017

dimpase commented Jun 19, 2017

@ctb

This comment has been minimized.

Show comment
Hide comment
@ctb

ctb Jun 19, 2017

Thanks - this is really helpful feedback!

ctb commented Jun 19, 2017

Thanks - this is really helpful feedback!

@KamilSJaron

This comment has been minimized.

Show comment
Hide comment
@KamilSJaron

KamilSJaron Jun 19, 2017

So far, I have not been able to re-simulate the basic results shown in the manuscript (the analysis of cost), when I run commands in the jupyter notebook. Instead of nice straight lines I get this kind of spaghetti plot (I run it with original setting - N = 500, k = 10, w = 0.01, n_graphs = 1000, n_runs = 1000) :
cost_value_estimation

Now I am rerunning the sim to find out if I can replicate this unexpected behaviour. Do you have any idea @Fjanks what might gone wrong?

So far, I have not been able to re-simulate the basic results shown in the manuscript (the analysis of cost), when I run commands in the jupyter notebook. Instead of nice straight lines I get this kind of spaghetti plot (I run it with original setting - N = 500, k = 10, w = 0.01, n_graphs = 1000, n_runs = 1000) :
cost_value_estimation

Now I am rerunning the sim to find out if I can replicate this unexpected behaviour. Do you have any idea @Fjanks what might gone wrong?

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Jun 20, 2017

@KamilSJaron: I would expect a plot like that with very small values for n_graphs and n_runs. I just tried n_graphs = 10 and n_runs = 100 and the result looks similar.
Please check these parameters after the second run finished.

Fjanks commented Jun 20, 2017

@KamilSJaron: I would expect a plot like that with very small values for n_graphs and n_runs. I just tried n_graphs = 10 and n_runs = 100 and the result looks similar.
Please check these parameters after the second run finished.

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Jun 20, 2017

Regarding the compilation:
I don't mind using setup.py instead of pyximport. The reason for pyximport was just that the user could run the code immedeately. When anyaevostinar said it does not work on OS X we tried a setup.py. But as you can see above it caused the same problem, which is why we ended up with this unusual compilation.
Since I have only linux I would need your help with this. What I found out so far is that on OS X the include_dirs argument in setup(...) is ignored and should instead be passed to Extension(...) (see this issue). So I assume the following setup.py would do it:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy

extensions = [Extension("algorithms", ["algorithms.pyx"], include_dirs=[numpy.get_include()])]

setup( ext_modules = cythonize(extensions) )

Can someone confirm that this works on OS X?

Fjanks commented Jun 20, 2017

Regarding the compilation:
I don't mind using setup.py instead of pyximport. The reason for pyximport was just that the user could run the code immedeately. When anyaevostinar said it does not work on OS X we tried a setup.py. But as you can see above it caused the same problem, which is why we ended up with this unusual compilation.
Since I have only linux I would need your help with this. What I found out so far is that on OS X the include_dirs argument in setup(...) is ignored and should instead be passed to Extension(...) (see this issue). So I assume the following setup.py would do it:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy

extensions = [Extension("algorithms", ["algorithms.pyx"], include_dirs=[numpy.get_include()])]

setup( ext_modules = cythonize(extensions) )

Can someone confirm that this works on OS X?

@KamilSJaron

This comment has been minimized.

Show comment
Hide comment
@KamilSJaron

KamilSJaron Jun 20, 2017

@Fjanks I tested your setup and it works.

I need to check again how I run the sim.

@Fjanks I tested your setup and it works.

I need to check again how I run the sim.

@KamilSJaron

This comment has been minimized.

Show comment
Hide comment
@KamilSJaron

KamilSJaron Jun 22, 2017

@Fjanks The graph after rerunning still looks moreless the same and now I am sure that I executed exactly what was in the jupyter notebook without any modification (both n_graphs and n_runs were set to 1000 and computing time was on a single node more than 8 hours). Can it be something Mac-related?

cost_value_estimation

In the meantime I will try to simulate some primitive cases (like graphs of two nodes, the prob should always converge to 0.5, right?).

KamilSJaron commented Jun 22, 2017

@Fjanks The graph after rerunning still looks moreless the same and now I am sure that I executed exactly what was in the jupyter notebook without any modification (both n_graphs and n_runs were set to 1000 and computing time was on a single node more than 8 hours). Can it be something Mac-related?

cost_value_estimation

In the meantime I will try to simulate some primitive cases (like graphs of two nodes, the prob should always converge to 0.5, right?).

code/algorithms.pyx
+ Fixation probabilities as a numpy-array of the same length as benefit_to_cost_ratios.
+ '''
+ fixation_probabilities = []
+ seeds = [rand() for i in xrange(n_graphs)]

This comment has been minimized.

@KamilSJaron

KamilSJaron Jun 23, 2017

here you create a set of seeds that is then used for graphs of each bc ratio, which means that bc ratio measurements are actually not independent. I do not think it will change a lot, but if the simulation have used random number for the same things in same order it might change something.
You can just move this line inside of the for loop.

@KamilSJaron

KamilSJaron Jun 23, 2017

here you create a set of seeds that is then used for graphs of each bc ratio, which means that bc ratio measurements are actually not independent. I do not think it will change a lot, but if the simulation have used random number for the same things in same order it might change something.
You can just move this line inside of the for loop.

code/algorithms.pyx
+ cdef int C_fixations = 0
+ cdef int i = 0
+ for i in range(n_runs):
+ first_cooperator_index = int((rand() / (float(INT_MAX) + 1) * N))

This comment has been minimized.

@KamilSJaron

KamilSJaron Jun 23, 2017

I do not expect this to be a problem for the paper, but I thought it is worth of a comment that rand() is depreciated. There are other (more elegant) ways how to generate random numbers in C++ (I am not entirely sure how it would work in cython).

I found extremly useful this lecture
https://www.youtube.com/watch?v=LDPMpc-ENqY

Using Mersenne Twister algorithm for random numbers would also ensure seed-based reproducibility on different platforms / compilers.

@KamilSJaron

KamilSJaron Jun 23, 2017

I do not expect this to be a problem for the paper, but I thought it is worth of a comment that rand() is depreciated. There are other (more elegant) ways how to generate random numbers in C++ (I am not entirely sure how it would work in cython).

I found extremly useful this lecture
https://www.youtube.com/watch?v=LDPMpc-ENqY

Using Mersenne Twister algorithm for random numbers would also ensure seed-based reproducibility on different platforms / compilers.

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Jun 23, 2017

Thanks for pointing at that part of the code! I think you found the problem.
If I use always the same seed, e.g. seeds = [1 for i in xrange(n_graphs)], I get results that look very much like yours.
I have to read a bit to understand how to generate random number more reliably.

Fjanks commented Jun 23, 2017

Thanks for pointing at that part of the code! I think you found the problem.
If I use always the same seed, e.g. seeds = [1 for i in xrange(n_graphs)], I get results that look very much like yours.
I have to read a bit to understand how to generate random number more reliably.

@KamilSJaron

This comment has been minimized.

Show comment
Hide comment
@KamilSJaron

KamilSJaron Jun 23, 2017

Just to add. The code looks really good and it is very easy to tweak it, so I tried to simulate complete graphs of 2, 4 and 8 individuals with no cost and no benefit resulting in expected probabilities of fixation 0.5, 0.25, 0.125. It seems that this basic behaviour is correct.

Now I am going to wait till @Fjanks commit the change of random number generation.

Just to add. The code looks really good and it is very easy to tweak it, so I tried to simulate complete graphs of 2, 4 and 8 individuals with no cost and no benefit resulting in expected probabilities of fixation 0.5, 0.25, 0.125. It seems that this basic behaviour is correct.

Now I am going to wait till @Fjanks commit the change of random number generation.

@dimpase

This comment has been minimized.

Show comment
Hide comment
@dimpase

dimpase Jun 23, 2017

dimpase commented Jun 23, 2017

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Jun 23, 2017

@dimpase: Yes, the random graphs generated by create_connected_random_graph(N,k) are biased. I decided to use this algorithm because that is how I understand the description of the random graph generation in the supplementary of the original paper. And if I understood it correctly (their description is not very detailed) only results from this method are comparable to the results in the original paper.

Fjanks commented Jun 23, 2017

@dimpase: Yes, the random graphs generated by create_connected_random_graph(N,k) are biased. I decided to use this algorithm because that is how I understand the description of the random graph generation in the supplementary of the original paper. And if I understood it correctly (their description is not very detailed) only results from this method are comparable to the results in the original paper.

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Jun 27, 2017

Ok, I did a bit research on the issue with rand(). As KamilSJaron already mentioned, it is well known that random numbers from rand() have low quality, so I should not have chosen it in the first place. However, a small period, autocorrelation or a non-uniform distribution do not explain KamilSJaron's results, and for the effect I assume to be the root of the problem I did not find a reference. So I made a little test: On my system the first number from rand() varies with different seeds, but on the Mac of a colleague the first number from rand() was the same for different seed values. This effect results in one node of the network being more often chosen as the position of the initial cooperator than the other nodes. Consequently, the average values for the fixation probabilities would require much larger numbers of simulations to approach the expected values.
To avoid these problems I replaced rand() by Mersenne Twister. Also for Mersenne Twister it seems not so trivial to choose a good set of seed values, but it is not platform dependent and I checked that the first few numbers across the seed values are to a good approximation uniformly distributed.

I also added the setup.py and updated the compilation instructions.

Fjanks commented Jun 27, 2017

Ok, I did a bit research on the issue with rand(). As KamilSJaron already mentioned, it is well known that random numbers from rand() have low quality, so I should not have chosen it in the first place. However, a small period, autocorrelation or a non-uniform distribution do not explain KamilSJaron's results, and for the effect I assume to be the root of the problem I did not find a reference. So I made a little test: On my system the first number from rand() varies with different seeds, but on the Mac of a colleague the first number from rand() was the same for different seed values. This effect results in one node of the network being more often chosen as the position of the initial cooperator than the other nodes. Consequently, the average values for the fixation probabilities would require much larger numbers of simulations to approach the expected values.
To avoid these problems I replaced rand() by Mersenne Twister. Also for Mersenne Twister it seems not so trivial to choose a good set of seed values, but it is not platform dependent and I checked that the first few numbers across the seed values are to a good approximation uniformly distributed.

I also added the setup.py and updated the compilation instructions.

@KamilSJaron

This comment has been minimized.

Show comment
Hide comment
@KamilSJaron

KamilSJaron Jun 30, 2017

It seems that it was indeed problem of non-random seeding. The simulations look way better now. So far I simulated only few replicates of the fixation probabilities for different cost values and the graph already looks very similar to the one presented in paper (with more noise of course, but it seems that it quickly converge to the presented fixation probabilities).

Concerning random numbers, I will just have a comment. You have seeded the generator with hardcoded seed values for every possible value of n_graphs.

seeds = np.linspace(1, 2**32-1, n_graphs, dtype=np.uint32)

The good practise is to allow a seed specified in an argument of the simulator's wrapper and if it is not specified you can generate it using time (not optimal either) or non-seedable generators (like random_device). However, the current solution is totally fine for reproduction of the results from the original paper.

I will get back once I will re-simulate at least couple of the different graphs.

It seems that it was indeed problem of non-random seeding. The simulations look way better now. So far I simulated only few replicates of the fixation probabilities for different cost values and the graph already looks very similar to the one presented in paper (with more noise of course, but it seems that it quickly converge to the presented fixation probabilities).

Concerning random numbers, I will just have a comment. You have seeded the generator with hardcoded seed values for every possible value of n_graphs.

seeds = np.linspace(1, 2**32-1, n_graphs, dtype=np.uint32)

The good practise is to allow a seed specified in an argument of the simulator's wrapper and if it is not specified you can generate it using time (not optimal either) or non-seedable generators (like random_device). However, the current solution is totally fine for reproduction of the results from the original paper.

I will get back once I will re-simulate at least couple of the different graphs.

@KamilSJaron

This comment has been minimized.

Show comment
Hide comment
@KamilSJaron

KamilSJaron Jul 1, 2017

I managed to reproduce results of @Fjanks (the simulations of 100 individuals). Therefore I believe that @Fjanks successfully reproduced simulations presented in the original paper "A reference implementation of A simple rule for the evolution of cooperation on graphs and social networks.".

@ctb I suggest to accept the manuscript. My objections were incorporated already.

I managed to reproduce results of @Fjanks (the simulations of 100 individuals). Therefore I believe that @Fjanks successfully reproduced simulations presented in the original paper "A reference implementation of A simple rule for the evolution of cooperation on graphs and social networks.".

@ctb I suggest to accept the manuscript. My objections were incorporated already.

@ctb

This comment has been minimized.

Show comment
Hide comment
@ctb

ctb Jul 4, 2017

Thanks all! it looks like the new decision should be accept based on #27 (comment) - @anyaevostinar any further thoughts? If not, then I will click the magic "accept" button :)

ctb commented Jul 4, 2017

Thanks all! it looks like the new decision should be accept based on #27 (comment) - @anyaevostinar any further thoughts? If not, then I will click the magic "accept" button :)

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Jul 5, 2017

Member

@ctb Don't forget to update the post at the top with relevant dates (you'll need them later)

Member

rougier commented Jul 5, 2017

@ctb Don't forget to update the post at the top with relevant dates (you'll need them later)

@Fjanks

This comment has been minimized.

Show comment
Hide comment
@Fjanks

Fjanks Jul 13, 2017

Today, while working on another project where I use parts of this code, I discovered a bug in the function create_connected_random_graph(). As a consequence, the average degree of the connected random graphs was slightly smaller than expected.
I fixed the bug and updated the figures in the article. The differences in the three affected plots are almost invisible. Just in case someone would run the simulations with large average degrees it could make a significant difference.

Fjanks commented Jul 13, 2017

Today, while working on another project where I use parts of this code, I discovered a bug in the function create_connected_random_graph(). As a consequence, the average degree of the connected random graphs was slightly smaller than expected.
I fixed the bug and updated the figures in the article. The differences in the three affected plots are almost invisible. Just in case someone would run the simulations with large average degrees it could make a significant difference.

@ctb ctb added 03 - Accepted and removed 02 - Review labels Jul 18, 2017

@ctb

This comment has been minimized.

Show comment
Hide comment
@ctb

ctb Jul 18, 2017

Accepted! Please lock this PR @rougier as I do not have permissions?

ctb commented Jul 18, 2017

Accepted! Please lock this PR @rougier as I do not have permissions?

@ctb ctb closed this Jul 18, 2017

@ReScience ReScience locked and limited conversation to collaborators Jul 18, 2017

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Jul 18, 2017

Member

I locked it but I think you have permission.

Member

rougier commented Jul 18, 2017

I locked it but I think you have permission.

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Aug 10, 2017

Member

@ctb Can you handle the publication?

Member

rougier commented Aug 10, 2017

@ctb Can you handle the publication?

@rougier rougier requested a review from anyaevostinar Aug 10, 2017

@rougier rougier reopened this Aug 10, 2017

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Aug 22, 2017

Member

@khinsen Can you handle the publication?

Member

rougier commented Aug 22, 2017

@khinsen Can you handle the publication?

@khinsen

This comment has been minimized.

Show comment
Hide comment
@khinsen

khinsen Aug 23, 2017

@rougier This article is accepted, so "handling" just means the technicalities of publication, right? In that case, yes, I can do that.

khinsen commented Aug 23, 2017

@rougier This article is accepted, so "handling" just means the technicalities of publication, right? In that case, yes, I can do that.

@rougier

This comment has been minimized.

Show comment
Hide comment
@rougier

rougier Aug 23, 2017

Member

Yes, I think @ctb forgot to do it. It might be easier if we do it now. I'll have more time by next week so I can do it either if your prefer.

Member

rougier commented Aug 23, 2017

Yes, I think @ctb forgot to do it. It might be easier if we do it now. I'll have more time by next week so I can do it either if your prefer.

@khinsen

This comment has been minimized.

Show comment
Hide comment
@khinsen

khinsen Aug 23, 2017

EDITOR

This submission has been published and will soon appear at http://rescience.github.io/read/

DOI

khinsen commented Aug 23, 2017

EDITOR

This submission has been published and will soon appear at http://rescience.github.io/read/

DOI

@khinsen khinsen closed this Aug 23, 2017

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.