Source code for spynnaker8.utilities.version_util
# Copyright (c) 2017-2019 The University of Manchester
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from distutils.version import StrictVersion
from six import raise_from
from pyNN import __version__ as pynn_version
from neo import __version__ as neo_version
_SUPPORTED_MSG = (
"pyNN version {} and neo version {} are not supported together.\n"
"Tested combinations are:\n"
"\tpyNN 0.8.3 and neo 0.4.0, or\n"
"\tpyNN 0.8.3 and neo 0.4.1, or\n"
"\tpyNN 0.9.1 and neo 0.5.2, or\n"
"\tpyNN 0.9.2 and neo 0.6.1")
[docs]def detect_supported_configuration(pynn_version, neo_version):
""" Check if the version configuration of PyNN and Neo is one we support.
.. note::
We strongly encourage the use of PyNN 0.9 and Neo 0.6.
:return: True if we're using old PyNN 0.8 syntax
:raises ImportError: If a truly unsupported system is present or if we\
cannot parse the version numbers (shouldn't happen)
"""
try:
pynn = StrictVersion(pynn_version)
except Exception as e:
raise_from(ImportError("couldn't parse pyNN version number"), e)
try:
neo = StrictVersion(neo_version)
except Exception as e:
raise_from(ImportError("couldn't parse neo version number"), e)
if pynn >= "0.9":
if neo < "0.5":
raise ImportError(_SUPPORTED_MSG.format(pynn, neo))
return False
elif pynn >= "0.8":
if neo < "0.3" or neo >= "0.5":
raise ImportError(_SUPPORTED_MSG.format(pynn, neo))
print("WARNING: PyNN 0.8 is deprecated at the request of the PyNN "
"team.")
print("Please upgrade your PyNN and Neo installations to at least "
"PyNN 0.9.2 and Neo 0.5.2")
print("If you specifically need PyNN 0.8 please contact us *URGENTLY* "
"otherwise PyNN 0.8 will be removed with the next sub-release "
"(i.e., before PyNN 0.7 support is removed).")
return True
else:
# Really old version of PyNN?! How...
raise ImportError(_SUPPORTED_MSG.format(pynn, neo))
print("Detected PyNN version {} and Neo version {}".format(
pynn_version, neo_version))
pynn8_syntax = detect_supported_configuration(pynn_version, neo_version)