Forum Programmation.python accès aux fonctions iapws

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
2
10
nov.
2021

Iapws c'est International Association for Properties of Water and Steam qui fournit sous python une appli permettant d'avoir les propriétés de l'eau et vapeur à toute pression et température.C 'est une appli assez vaste qui consiste en plusieurs fichiers /scripts.Certaines fonctions sont facilement accessible à un programmeur débutant mais d'autres sont pas accessibles facilement.
Il s'agit de fonctions comprenant un double underscore(long) tel PSat_P qui quand on les appelle génèrent une erreur"stdin" no name defined.La je suis largué et je cherche de l'aide sur ce type de problème: comment appeler de telles fn?si quel qu'un à une idée ou une suggestion de formation à ce type de syntaxes python,je suis preneur.

  • # Où est le code source ?

    Posté par  (Mastodon) . Évalué à 3.

    D'une façon générale, en python, les fonctions et méthodes qui commencent par un underscore le sont pour les marquer comme "privée", même si ce concept n'existe pas dans le langage.

    "Nous sommes entre adultes consentants" IL S'AGIT DE CONVENTIONS

    Les méthodes de la forme __<name>__ sont des méthodes spéciales du langage, qui par exemple définissent le constructeur (__init__) les opérateurs (__add__)…

    Pour le cas particulier de la bibliothèque iapws, il faudrait voir le code source et la doc !

    J'ai un peu regarder le site, bah je n'ai pas trouvé grand chose d'exploitable !

    Courage !

  • # exemple script iapws97

    Posté par  (site web personnel) . Évalué à 1. Dernière modification le 11 novembre 2021 à 19:36.

    voila un exemple de la fonction dans script iapws97 ( que l'on peut pas importer par la formulation simple import iapws97 * , ca marche pas ?) l'aPPLI IAPWS comprend un folder fait de plusieurs scripts donc un "cache " ……
    voila extrait du script iapws97 con,tenat des fonctiosn non applables de facon simple ..

    def _PSat_T(T):
        """Define the saturated line, P=f(T)
    
    
        """
        # Check input parameters
        if T < 273.15 or T > Tc:
            raise NotImplementedError("Incoming out of bound")
    
        n = [0, 0.11670521452767E+04, -0.72421316703206E+06, -0.17073846940092E+02,
             0.12020824702470E+05, -0.32325550322333E+07, 0.14915108613530E+02,
             -0.48232657361591E+04, 0.40511340542057E+06, -0.23855557567849E+00,
             0.65017534844798E+03]
        tita = T+n[9]/(T-n[10])
        A = tita**2+n[1]*tita+n[2]
        B = n[3]*tita**2+n[4]*tita+n[5]
        C = n[6]*tita**2+n[7]*tita+n[8]
        return (2*C/(-B+(B**2-4*A*C)**0.5))**4
    
    
    def _TSat_P(P):
        """Define the saturated line, T=f(P)
    
               """
        # Check input parameters
        if P < 611.212677/1e6 or P > 22.064:
            raise NotImplementedError("Incoming out of bound")
    
        n = [0, 0.11670521452767E+04, -0.72421316703206E+06, -0.17073846940092E+02,
             0.12020824702470E+05, -0.32325550322333E+07, 0.14915108613530E+02,
             -0.48232657361591E+04, 0.40511340542057E+06, -0.23855557567849E+00,
             0.65017534844798E+03]
        beta = P**0.25
        E = beta**2+n[3]*beta+n[6]
        F = n[1]*beta**2+n[4]*beta+n[7]
        G = n[2]*beta**2+n[5]*beta+n[8]
        D = 2*G/(-F-(F**2-4*E*G)**0.5)
        return (n[10]+D-((n[10]+D)**2-4*(n[9]+n[10]*D))**0.5)/2
  • # Cas du double underscore en début des identifiants de méthodes de classes

    Posté par  (site web personnel) . Évalué à 4.

    On n'a pas tout le contexte, mais au cas où…

    Dans le cas de méthodes définies dans une classe, le __ (deux _) fait que l'identifiant défini est préfixé par le nom de la classe.

    class Truc:
        def __methode(self):
            

    Définit en fait une méthode: Truc._Truc__methode. C'est un moyen de protection contre la redéfinition d'une méthode dans une sous-classe.

    Pour les fonctions, le _ protège de l'import * d'un module.

    Éventuellement, si tu passes par un from iaws import *, la méthode préfixée par _ ne sera pas importée. Il faut passer par son nom de module:

    import iaws
    x = iaws.__PSat_T()

    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

  • # J'ai trouvé le code !

    Posté par  (Mastodon) . Évalué à 3.

    En fait, c'est assez simple…

    $ mkdir proj 
    $ cd proj
    $ git clone https://github.com/jjgomera/iapws.git .
    $ python3
    >>> from iapws import iapws97
    >>> foo = iapws97._PSat_P(100)
    <value>

    C'est pas plus compliqué que ça :°)

    Courage !

  • # merci pour tout ca marche

    Posté par  (site web personnel) . Évalué à 1.

    merci beaucoup , ça marche ; j'avais tout essayé avec import iapws97 * ou autres sans m'en sortir….
    Faut dire que dans la doc il y avait un "from iapws import IAPWS97" - tel que en majuscule - qui ne donne accès qu'à certaines fonctions .J'ai pas compris les raisons de tout ceci mais bon cela fonctionne ..
    Mieux vaut 1 qui sait que 100 qui cherchent.
    Bonne journée et bon code…..
    A tous ceux qui s’intéressent à la technique ( thermique ) je leur conseille de regarder cet appli iapws python ; perso je connais IAPWS depuis des lustres mais avant c’était sous excel , çà marchait aussi , mais bon les macros excel ,il faut chaque fois les recharger quand on on re-isntalle un OS (et je suis à mon 30eme linux de testé ).. En ce moment je suis MX 21 , et Arch .
    Sujet donc clos.

    • [^] # Re: merci pour tout ca marche

      Posté par  (Mastodon) . Évalué à 1. Dernière modification le 13 novembre 2021 à 14:18.

      Super que çà marche !

      La bonne méthode serait plutôt d'utiliser un virtualenv si tu veux construire une application dessus.

      Avec Jupyper, tu peux utiliser les fonctions directement dans un navigateur.

      $ mkdir proj
      $ cd proj
      $ python3 -m venv ./venv # Crée le virtualenv
      $ . venv/bin/activate    # Active de virtualenv
      (venv)$ pip install iapws
      (venv)$ pip install jupyter-notebook
      (venv)$ jupyter-notebook # Lance un processus serveur local et lance un onglet dans le navigareur

      Tu pourras alors accéder au namespace iapws (dans la page jupyter):

      >>> from iapws import iapws97
      >>> res = iapws97._Foo(200)
      >>> print(res)

      L'avantage, c'est que tu peux enregistrer le notebook, pour le ré-ouvrir plus tard…
      Tu peux évidemment construire ne app aussi !

      Courage !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.