From 224138887c0bb40b80378e2fca17ab4308e29ae4 Mon Sep 17 00:00:00 2001 From: Andre Sailer <andre.philippe.sailer@cern.ch> Date: Fri, 20 Nov 2020 13:20:19 +0100 Subject: [PATCH] DDSim: printSteeringFile: fix exception for sorting, python3 --- DDG4/python/DDSim/DD4hepSimulation.py | 38 ++++++++++++++++----------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/DDG4/python/DDSim/DD4hepSimulation.py b/DDG4/python/DDSim/DD4hepSimulation.py index 46fd5e0c5..1bea997ef 100644 --- a/DDG4/python/DDSim/DD4hepSimulation.py +++ b/DDG4/python/DDSim/DD4hepSimulation.py @@ -610,7 +610,7 @@ SIM = DD4hepSimulation() """ optionDict = parser._option_string_actions parameters = vars(self) - for parName, parameter in sorted(list(parameters.items()), sortParameters): + for parName, parameter in sorted(list(parameters.items()), key=sortParameters): if parName.startswith("_"): continue if isinstance(parameter, ConfigHelper): @@ -619,7 +619,7 @@ SIM = DD4hepSimulation() steeringFileBase += "## %s \n" % "\n## ".join(parameter.__doc__.splitlines()) steeringFileBase += "################################################################################\n" options = parameter.getOptions() - for opt, optionsDict in sorted(six.iteritems(options), sortParameters): + for opt, optionsDict in sorted(six.iteritems(options), key=sortParameters): if opt.startswith("_"): continue parValue = optionsDict['default'] @@ -733,20 +733,26 @@ SIM = DD4hepSimulation() # MODULE FUNCTIONS GO HERE ################################################################################ -def sortParameters(parA, parB): - """sort the parameters by name: first normal parameters, then set of - parameters based on ConfigHelper objects - """ - parTypeA = parA[1] - parTypeB = parB[1] - if isinstance(parTypeA, ConfigHelper) and isinstance(parTypeB, ConfigHelper): - return 1 if str(parA[0]) > str(parB[0]) else -1 - elif isinstance(parTypeA, ConfigHelper): - return 1 - elif isinstance(parTypeB, ConfigHelper): - return -1 - else: - return 1 if str(parA[0]) > str(parB[0]) else -1 + +def sortParameters(key): + from functools import cmp_to_key + + def _sortParameters(parA, parB): + """sort the parameters by name: first normal parameters, then set of + parameters based on ConfigHelper objects + """ + parTypeA = parA[1] + parTypeB = parB[1] + if isinstance(parTypeA, ConfigHelper) and isinstance(parTypeB, ConfigHelper): + return 1 if str(parA[0]) > str(parB[0]) else -1 + elif isinstance(parTypeA, ConfigHelper): + return 1 + elif isinstance(parTypeB, ConfigHelper): + return -1 + else: + return 1 if str(parA[0]) > str(parB[0]) else -1 + + return cmp_to_key(_sortParameters)(key) def getOutputLevel(level): -- GitLab