Documentation
Last update : 10/09/2004

sci_files - Comment écrire des fonctions de conversion

### Description

Pour convertir les appels à des fonctions Matlab, `mfile2sci` utilise une fonctions appelée `sci_<nom_de_la_fonction_Matlab>`. Toutes ces fonctions sont définies dans des `sci_files` dans le répertoire SCI/macros/m2sci/sci_files/. La palette de `sci_files` fournie dans Scilab ne permet pas encore de convertir les appels à toutes les fonctions Matlab. Cependant, un utilisateur Scilab peut ajouter des `sci_files` (pour des fonctions Matlab ou pour ses propres fonctions) en utilisant les conseils suivants.

Dans M2SCI, un appel à une fonction est considéré comme un "arbre" (c'est aussi le cas des instructions du fichier à convertir), représenté dans Scilab par une `tlist` avec les champs suivants :

  - name : nom de la fonction Matlab
  - lhsnb : nombre de paramètres de sortie de la fonction Matlab
  - lhs : liste des paramètres de sortie de la fonction Matlab
  - rhs : liste des paramètres d'entrée de la fonction Matlab

Une `sci_function` a un paramètre d'entrée `tree` qui est aussi la sortie de cette fonction. Une `sci_function` doit convertir cet arbre pour qu'il soit compatible avec Scilab en changeant name, lhsnb, lhs et/ou rhs. L'autre rôle de cette fonction est de gérer l'inférence. L'arbre d'entrée contient des données d'inférence dans ses rhs qui devront être mises à jour avec ce que l'on peut inférer pour les lhs de cette fonction.

Plusieurs fonctions ont été écrites pour aider à la rédaction de fonctions de conversion :

  - Funcall : créé un arbre qui représente l'appel à une fonction
  - Operation : créé un arbre qui représente une opération
  - Variable : créé un arbre qui représente une variable
  - Cste : créé un arbre qui représente une constante
  - Infer : créé un arbre qui représente les données d'inférence
  - Type : créé un arbre qui représente le type pour l'inférence
  - Equal : créé un arbre qui représente une instruction

Quelques fonctions ont été écrites pour récupérer les propriétés des opérandes/entrées. En considérant A comme une tlist utilisée dans l'arbre, vous pouvez utiliser les fonctions suivantes :

La fonction | renvoie %T si...
is_empty(A) | toutes les dimensions de A sont égales à 0
not_empty(A) | toutes les dimensions de A sont connues et au moins une dimension de A est différente de 0
is_a_scalar(A) | toutes les dimensions de A sont égales 1
not_a_scalar(A) | toutes les dimensions de A sont connues et au moins une dimension de A est différente de 1
is_a_vector(A) | toutes les dimensions de A sotn connues et toutes les dimensions de A sauf une sont égales à 1
not_a_vector(A) | toutes les dimensions de A sotn connues et au moins deux dimensions de A sont supérieures à 1
is_real(A) | A est réel
is_complex(A) | A est complexe
isdefinedvar(A) | A est une variable déjà définie dans le M-file en cours de conversion
allunknown(A) | Toutes les dimensions de A sont inconnues

D'autres fonctions ont été écrites pour des besoins spécifiques lors de l'écriture de fonctions de conversion :

  - first_non_singleton: est équivalente à `firstnonsingleton` pour une tlist M2SCI. Séquence d'appel : dim = first_non_singleton(A)
  - gettempvar: génère une variable temporaire portant une nom qui n'existe pas. Séquence d'appel : v = gettempvar()
  - insert: permet d'insérer des instruction. Séquence d'appel : insert(Equal(...),opt) avec opt~=1 pour insérer avan tl'instruction courante et opt=1 pour insérer après celle-ci.
  - getoperands: peut être utilisée pour extraire chaque opérande comme une variable. Séquence d'appel : [A,B] = getoperands(operation_tlist)
  - getrhs: peut être utilisée pour extraire chaque paramètre comme une variable. Séquence d'appel : [A,...] = getrhs(funcall_tlist)
  - convert2double: change le type de l'entrée quand ce type n'est pas implémenté pour une fonction particulière de Scilab. Séquence d'appel : A = convert2double(A)

Pour plus d'informations sur la fçon d'écrire ces fichiers, consulter le répertoire SCI/macros/m2sci/sci_files/ qui donne de nombreux exemples, des plus simples (e.g. sci_abs.sci) aux plus compliqués (e.g. sci_zeros.sci).

### See Also

`m2scideclare`, `Funcall`, `Operation`, `Variable`, `Cste`, `Infer`, `Type`, `Equal`,

### Authors

  V.C.