Lo primero que veo es que el error de sintaxis está causado en la línea 21 porque el condicional está separado:
factor=[0.5,1.0,1.5,2.0,-1][factor]
if !norecalc
Esto debería ser así:
factor=[0.5,1.0,1.5,2.0,-1][factor] if !norecalc
Eso debería hacer que el error vuelva a ser el de "to...