Page 5 of 7

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 18:47
by Adriweb
Ouai, il faut que je m'aligne sur la coding style de TI, du coup ca serait plutot eval_expr et call_func.
Mais je fais quoi pour l'alias ? (cf. mes questions dans mon post d'avant et/ou ma proposition de modification de comportement de eval_expr)

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 18:58
by parisse
Du coup ce n'est peut-etre pas un alias qu'il faut, mais un evalnative qui teste le nombre d'arguments et ne rajoute pas () s'il n'y a pas d'arguments.
Je ne sais pas s'il faut mettre un _, c'est un peu penible a taper sur la calculatrice.

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 19:04
by Adriweb
En fait toutes les fonctions de ti utilisent ca.
Pour obtenir _ c'est juste Ctrl-Espace.

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 19:08
by parisse
Ok, je conserve caseval chez moi et je mets eval_native pour l'alias.

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 19:31
by Adriweb
eval_expr, plutôt, alors.

(apres, ya aussi expr() en natif ti-basic, mais bref).
Le pendant Nspire-lua c'est math.eval et math.evalStr pour ne pas avoir de conversion de type.

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 19:36
by parisse
J'ai mis eval_native, parce que ce n'est pas forcement une expression, c'est vraiment un appel a l'evaluateur natif. Et puis, j'ai deja tout recompile, ca prend du temps.

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 19:43
by parisse
En plus eval_native ca sous-entend qu'on va voir ailleurs que dans Python, ce qui n'est pas le cas de eval_expr.

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 19:45
by Adriweb
Je rajouterai un alias de compat, un de plus, on n'est plus à ca pret :P

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 28 Sep 2020, 21:06
by parisse
Ok, j'ai modifie le nom de commande (caseval -> eval_native) dans le menu rapide et dans la doc.

Re: importer module python (pour transformées de Laplace)

Unread postPosted: 29 Sep 2020, 00:37
by Adriweb
Nouvelle version
avec les TODO mentionnés avant corrigés, puis support de remplacement de certains symboles (sqrt, pi, e, i complexe), auto str->num, eval python optionnelle...



Code: Select all
from math import sqrt, pi, e

def _return_number_if_possible(s):
  try:
    f = float(s)
    return int(f) if int(f) == f else f
  except ValueError:
    return s

def _return_evaled_if_possible(thing):
  try:
    return eval("("+str(thing)+")")
  except:
    return thing

def _cleanstr(res):
  res = res[1:-1]  # to remove the quotes
  res = res.replace("*\uf02f", "j")  # complex i
  res = res.replace("\uf02f", "j")  # complex i
  res = res.replace("\u221a", "sqrt")
  res = res.replace("\u03c0", "pi")
  res = res.replace("\uf03f", "e")
  res = _return_number_if_possible(res)  # auto type...
  return res

def eval_expr(expr, trypyeval=False):
  from ti_system import writeST, readST
  writeST("tmppy_", 'strsub(string('+str(expr)+'),"/","$%$")')  # eval and store
  res = readST("tmppy_")  # retrieve stored value
  res = res.replace("$%$", "/")  # magic replacement
  res = _cleanstr(res)
  if trypyeval == True:
    res = _return_evaled_if_possible(res)
  return res

def call_func(funcname, *pyargs):
  fargs = ','.join(map(str, pyargs))
  expr = funcname + '(' + fargs + ')'
  res = eval_expr(expr)
  return res if res != expr else None

# Aliases for compat with other stuff
caseval = eval_expr
eval_native = eval_expr


Merci de tester :)