Correction d'une faute d'orthographe
[memoirecycle.git] / TODO
blob2681f5be22d79daf1474ebfc3c60841359fd37b3
1 +++TODO+++
2 HYPOTHESE : UN CYCLE PAR FRAME !
3 ##########
4 #GAUTHIER#
5 ##########
6 getRefProp : les fluides ne finissent pas tous par .FLD, donc quand on les reutilisent il faut utiliser la bonne extension !
8 +++++++++++++++++++++++++++
9 -> partie perso de Gauthier
10 +++++++++++++++++++++++++++
11         GUI : sélection d'un élément quand c'est OnLeftUp et pas OnLeftDown (pas prioritaire)
12         GUI : si selection d'une connection (pas prioritaire)   
13         GUI : avoir taille de page pour le status panel infini (pas prioritaire)
14         GUI :   ResumePanelTransfo, onvaluechange, remettre la bonne page.(pas prioritaire)
15         GUI : Si jamais on souhaite mettre deux elements a la suite, il n'y a pas d'equations qui les relies ... Donc a INTERDIRE !!!!
17          => piechart
18         equa: phs, faire en sorte qu'il fonctionne pour les echangeurs ! pas faire avec I1 par defaut.  
19         gui 325 : faire terminer les lignes au milieu des connections
21         GUI : onmousemove, mettre le focus sur le panel qui a la souris.(a tester)
22         a verifier : pump et rendement polytropique
24         element : supprimer les fraction flow et consor, supprimer les equations avec elles, et ajouter un delta de debit dans l'échangeur
27 ++++++++++++++++++++++++++++++++++++++++++++
28 -> partie de ce que Manon demande à Gauthier
29 ++++++++++++++++++++++++++++++++++++++++++++
32 #######
33 #MANON#
34 #######
35 ++++++++++++++++++++++++++++
36 -> partie perso de Manon
37 ++++++++++++++++++++++++++++
38         commentaires:
39         watchedConnectionVariable
40         #ce sont les variables qui se font influences par les transformations
41         #normalement ces variables sont automatiques pour un type de transfo, il doit juste les recuperer dans le state qui le suis et le precede
42         #ca se fait lors de la connection, qui fait appele a connectionChanged, et donc on doit le faire dans connectionChanged !
44         #attention, ce n'est pas self.doNotify meme si l'element est un notifier. C'est le projet qui doit notifier                                             qu'il a changer, car c'est lui qui contient la liste des gens qui doivent etre prevenus.
46         1> kind dans create project - probleme pour open project -- faire un dictionnaire
47         2> les connections  --> le nom des connection est celui qu'on veut puisqu'on connnecte par interface graphique -- 
48         3> bug pour open project
49         3bis> bug pour link dans open project
50         4> bug pour nouveau project
51         5> ajouter les erreurs pour new, save, save as
52         8> comment on impose qu'un object ne peut pas changer dans les property?
53         10> faire la doc pour les namedic dans addconn
54         11>#a = collections.OrderedDict() # mettre python 2.7
55         12> dirname
56         > enlever minigui du notifi quand il quit --overriding close? 
57         > faire le save proprement I1 et O1
58         > comment on override Onclose?
59         3> j'arrive pas à overrider le close ou onquit du minigui, je dois miss un little something, t'as une idée?
61 Gauth :http://memoirecycle.forumgratuit.fr/t68-python-interface#128   va voir wxCloseEvent, si cela ne fonctionne pas prévient moi :)
62 ++++++++++++++++++++++++++++++++++++++++++++
63 -> partie de ce que Gauthier demande à Manon
64 ++++++++++++++++++++++++++++++++++++++++++++
65 11/08/2011
66         -bug : creer un elem, le supprimer et ouvrir un fichier qui contenais deja un elem de ce type =>> resolution dans le save: enregistrer avec dautre numero et dans le open creer des nouveaux elements
67 31/07/2011
68         - Verifier le bug du status panel
69         - Verifier la vitesse (onidle)
70 19/07/2011
71         - Le save doit aussi enregistrer les valeurs de properties qui ont ete imposees !!!!!
72 12/07/2011
73 07/07/2011
74 06/07/2011
75 05/07/2011
76 04/07/2011
77         - Tu as toujours besoin du miniGUI ? Sinon supprime le stp.
79 03/07/2011
80         -Il y a des redites de fonction dans le connect de element : self.connectionChanged() et la ligne 67 de connection.py : self.elem.connectionChanged() # the 4
82         ---> MANON: pas faux, je pense qu'on utilise le link de connection que dans connect, mais je c pas si c bien ou pas de faire deux fois, genre en cas de pb ailleur
83         GAUTH : j'aurais dis qu'on ne le fasse qu'une fois, et dans les connections. Comme ca quand tu est dans element tu ne dois plus t'en soucier.
86 ###########################
87 #PARTIE POUR DES QUESTIONS#
88 ###########################
89 YVES
90         1> Est-ce qu'il faut free la mémoire, supprimer les dict qu'on utilise plus, ...? -- project.clear()
91 #####################
92 #TRUCS A PAS OUBLIER#
93 #####################
94 GUI
95         GUI : discussion en cas de plusieurs ecrans (VERY NOT PRIOR)
96         on doit pouvoir changer les trucs tellé mais il faudra prévenir par qui ils sont imposés patati patata
98 EQUATION
99         def evaluation(self):
100         #TO CHANGE if some properties must not be acceded (because different fluid like water and combustible)
101         #TO CHANGE if more string like value other than fluid need to spread.
102 GLADE
103         attention ajouter dans le .py après avoir fait des changements dans wxglade
104         # a rajouter apres wxg -> parent = None dans les parametre de frame.__init__()
105         # a rajouter apres wxg --> app dans parametre de l'init de MyFrame
106         # a rajouter apres wxg ---> self.app = app, self.project = self.app.project
108         ATTENTION - toujours vérifier l'output path
115 ###############
116 #SOLVED ISSUES#
117 ###############
118 30/07/2011
119 '''SI ON VEUX REVENIR A CET VERSION : 30 Jul 2011 10:39:17, il faut changer cette fonction ainsi que les variables de reference (sauf celle booleenne), et reecrire les equations.
120 J'ai essayer de faire en sorte qu'on utilise une nouvelle variable refVar. Je suis revenu a l'ancien systeme a cause d'un probleme lorsqu'on evalue les variables.
121 Exemple avec l'autre system , on obtient les equations suivantes :
122 I) T = Tref
123 II) Tref = T
124 Le probleme vient lors de l'evaluation. Avec I), il est possible de regarder ce qui se passe lors de l'evaluation de la variable reference. C'est a dire qu'il est possible de voir si la property reference state est bien true. Dans ce cas l'equation peut etre utilisee.
125 Avec II) si on evalue T comme d'habitude, on peut chercher a savoir si la variable reference state est True. Le probleme c'est du coup dans le cas des evaluations des autres equations, ou on s'en fiche completement. Le probleme vient du fait qu'on ne sait pas qu'elle variable on evalue (donc qui est le cote gauche de l'equation) => FAUX on sait qui est le terme de gauche avec le variable qui se ballade dans les evaluation(element,variable)
128 class CheckRef(equationElement):
129         #Add equation for the 3 reference variable, and check if state is reference.
130         def __init__(self,in1,entropy,temperature):
131                 #in1 should be enthalpy reference when checkRef is created. When use in evidence in1 is the three variable.
132                 self._in1 = in1
133                 self._entropy = entropy
134                 self._temperature = temperature
136         def evidence(self,equalTo, equation):
137                 #Reference Variable
138                 equation.equationList.append((self._in1,CheckRef(self._in1,None,None)))
139                 equation.equationList.append((self._entropy,CheckRef(self._entropy,None,None)))
140                 equation.equationList.append((self._temperature,CheckRef(self._temperature,None,None)))
141                 #Normal Variable
142                 equation.equationList.append((selfVar(self._in1.name[10:]),CheckRef(selfVar(self._in1.name[10:]),None,None)))
143                 equation.equationList.append((selfVar(self._entropy.name[10:]),CheckRef(selfVar(self._entropy.name[10:]),None,None)))
144                 equation.equationList.append((selfVar(self._temperature.name[10:]),CheckRef(selfVar(self._temperature.name[10:]),None,None)))
146         def evaluation(self,element,variable):
147                 if variable.name[0:9] == 'reference':#When reference will be computed thank to normal value
148                         refvar = matchProperties(element,self._in1.name) #reference variable that we want to compute
149                         var = matchProperties(element,self._in1.name[10:]) # normal variable that will give it's value if reference state == True
150                         refstate = element.properties['reference state'] #boolean variable of the reference state
151                         if refstate.value == True:
152                                 variable.whoHelp.add(var)
153                                 variable.whoHelp.add(refstate)
154                                 return var.value
155                         else:
156                                 return None
157                 else : #When normal value will be computed thank to reference
158                         refvar = matchProperties(element,'reference '+self._in1.name) #normal variable that we want to compute
159                         var = matchProperties(element,self._in1.name) # reference variable that will give it's value if reference state == True
160                         refstate = element.properties['reference state'] #boolean variable of the reference state
161                         if refstate.value == True:
162                                 variable.whoHelp.add(refvar)
163                                 variable.whoHelp.add(refstate)
164                                 return refvar.value
165                         else:
166                                 return None
168 07/07/2011
169         - Tu as mis que l'update des etats ne devaient pas tell(), et plutot faire un flash. Mais tu as certaine equation qui n'ont rien a voir avec le flash et qui doivent quand meme etre tell. Exemple : la fluide d'entree = fluide de sortie, le debit d'entree = debit de sortie. Enfin de nouveau tout depend de ce qu'on affiche comme properiete dans les transo. Mais je pense que c'est propriete seront utile pour des calcul futur de puissance et autre.
170         Par contre pour ces proprietes on peut eventuellement envisager une propagation manuelle.
171         UPDATE : bon bah vive les conventions:
172                                         physiquement parlant 
173                                         c'est la transformation qui fait des opérations sur le fluide 
174                                         un état, ce n'est "rien"
175                                         un était ne fait "rien"
177         - j'ai un soucis pour la propagation d'une propriété de type string ,genre le fluide. A cause des assert dans le tell() la propagation ne se fait pas, par contre si on vire les assert ca passe et on a bien le fluide a l'etat suivant. UPDATE : je sais pourquoi ca fonctionne pas, c'est car on peuple pas les theydependoneme et idependonthem quand on fait le tell, c'est a dire dans l'update :)
178         GAUTH : arrange, mis a jour du equation.py pour renvoyer aussi les element qui ont aidee. Ceux-ci sont donc utilises ensuite pour peuple les dependance.
180 06/07/2011
181         1> Bon, je reste là dessus mais, ya pas besoin que les proprietes contiennent leur éléments, j'ai été voir ton code, et vu que tu fais les équations dans ton élément, tu pourras utiliser le self à cet endroit
182 gauth : c'est enleve
184         -j'ai ajoute le isTell dans les prop, par contre je sais pas ce qui doit etre fait dans le cas ou val == self._value et que cette valeur n'est pas imposee.
186         ---> MANON:  si il y a une valeur et qu'elle n'est pas imposée, alors c'est qu'elle a été tell
187         GAUTH: Donc pas besoin de mettre un isTell = True a cet endroit, car elle est normalement deja imposee ? Normalement NON
189         -question :     doit on mettre le fluide dans les properietes des transformations ? car ca va compliquer serieusement la propagation :S
190                         pour le moment elle agit comme ceci : element - transformation (avec des equations) - element
191                         lorsqu'on impose une valeur d'une property d'un elem, l'update se passe sur la transformation
192                 GAUTH: oui il faut la mettre, a nous de nous debrouiller
194 05/07/2011
195         -pour le bug dans connection, ce que tu fais : 
196                                 conn.__link.__link = None 
197                                 self.__link.__link = None 
199         dans cet ordre tu fais maconnection.lien(=contient le lien de la connection d'en face).lien(=contient le lien de MA connection) = None
200         Donc a la premiere ligne tu supprime ton lien. De ce fait la ligne suivante tu tente justement d'acceder à ce que tu viens de supprimer. Donc il te renvoit que le None que tu viens de lui fournir n'a pas d'attribut du doux nom de link. Le resultat est le suivant :
201         maconnection.lien(= contient None).lien(Impossible car None n'a pas de lien :) )
203         Une solution c'est de passer par le oldLink
205         En esperant avoir ete clair, si tu veux que je change dis le moi :)
206 -       -->MANON:  ouai t'as été clair, ce que je pige pas est pourquoi le bug ne s'affiche que quand on ouvre un projet, je regarderai demain l'esprit frais
207 mais je veux bien que tu changes, pcq j'avoue que j'ai vraiment du mal avec ce truc 
208         GAUTH : Test si ca bug tjs comme ca
211         -utilité du connectionChanged dans element.py ? car il ne correspond qu'a une ligne de code... => Rien dis , il est utilise dans le connection.py
213         - Stuut en vue avec la todo list, dans projet on a :
214                 self.todoList = set()    # dans la todoList, il y a des property.wantNotif (= des set)  
215         Elle contient donc les properties qui veulent etre notifiee. or dans ton app tu as ceci : 
216                 if self.project.todoList != set() :
217                         a = self.project.todoList.pop()
218                         a.update()
219         Donc au final on fait une update des properties. Mais aucune properties ne contient de methode update :) Ou alors j'ai pas compris :p
220         Du coup la methode update dans les elements n'est utilise nul part. C'etait peut etre celle la que tu souhaitais appele ? =>REGLE: ON APPELLE DES UPDATE SUR DES ELEMENTS , voir fonctionnement.
222 ------>MANON: gné? mais ça marche, la preuve c que la propagation ça marche et ça passe par update... on fait update sur des éléments
224         - Petite question a propos de la todolist de la class projet. Tu y a mis un set pour eviter les doublons. Mais si jamais on demande x par exemple (mais qu'on obtient rien car on a pas assez d'info), puis on pose  y. Une fois que y est posee, on sait avoir x de nouveau. Mais si tu as un set, il ne fera jamais la deuxieme fois et on restera avec un None non ? En raccourcis la todolist la voila : a b c d e .... X (qui la va renvoyer NONE) Y X (mais celui-ci ne sera pas dedans car le processeur est lent et tu as toujours l'ancien X) => au final tu as X = None et Y = ce que tu veux, mais normalement tu aurais du avoir Y = valeur et X = valeur
225 Ou alors y a un truc qui m'echappe :) => REGLE : on aura jamais normalement une property qui tell une autre qui retell celle-ci
227 ------>MANON: ya un truc qui t'échappe, essaie encore xD. Y a pas de pb avec les doublons, si ton X est supprimé alors qu'il est changé ailleur, ben il sera rajouté, donc il sera recalculé
230 04/07/2011
231         -proprietes => dans le prop plutot que dans element => faire des sous classes   : Ca n'avait pas deja ete fait ca ?
232 ------>MANON: bah si, d'ou tu sors ces trucs? Moi j'ai juste recopié le dernier todo et ce qui me concernait pas ou plus je l'ai mis chez toi au cas ou tu l'avais gardé pour une raison
234         -Implementer les connectionChanged : tu me demande de faire ca mais dans element.py, pour les transfo ca a l'air detre fait. Par contre pour les etat y a pas grand chose a part une notification d'update, qui engendre un self.project.OnNotif qui n'existe pas. C'est ca que je dois changer ?
236 ----->MANON: ya rien à changer dans ConnectionChanged ni dans State ni dans Transfo :s  GAUTH:en effet j'avais oublie  comment fonctionnait le systeme de notification
238 03/07/2011
239         - GROS BUG IMPOSSIBLE DE METTRE LES ELEMENTS DEPUIS LINTERFACE (pas de soucis avec le mode exemple, heureusement sinon j'aurais pas pu bosser today :S) : 
241         "  File "project.py", line 100, in createElem
242             assert args[0] in self.app.type2id
243         AssertionError
244         "
245         Merci de le corriger pour que je puisse continuer :)
247         ---> MANON: c'est pas un bug ! C'est jusque que j'ai pas mis ni pompe ni les autres trucs que state et transfo dans les objets qu'on peut construire 'yaka' les mettre, si t'as pas vu ça, c'est que t'as même pas cherché à voir le bug tssss !!!!!! C'est pas digne de la tribu des rastas 
248 Gauth :Normal tu m'avais parler d'un truc qui était pas completement implemente :p
250         - Previens moi si jamais tu change le mode d'enregistrement des connections, des proprietes Merci (car ca me ferait enormement de changement a faire...)  
251         ----> MANON: ok, j'espère que t'as été lire convenablement comment ça se passait maintenant (cad hier!! car j'ai changé des trucs samedi!!) Normalement, ca ne devrait plus trop bouger
253         -J'ai ajouter aux properties, l'element qui les contient.
255         ---> j'ai répondu à ton mail, va le lire :p, j'ai essayé de trouver OU tu avais besoin de properties.elem, mais j'ai pas trouvé :s
256 Gauth :Repondu par mail
257         -reorganiser le todo ^^
259         ---> MANON: fait, tu me diras ce que t'en pense
260 Gauth : Nice l'agenda :) il faudrait juste qu'on vide le todo de temps en temps 
262 -fromElem : qui vient d'un element donc c'est OUT (tu as fait l'inverse :p)
264         ---> MANON: Non, fromElem, ça veut dire que ça vient d'un élément donc c'est IN ... on en a déjà parlé pendant 3 heures de ce truc et on s'était mis d'accord sur le fait que on parlait "pour self". "moi l'élément" j'ai une connection 'fromElem' ( = originaire d'un autre élément = IN), "moi l'élément" j'ai une connection 'toElem' ( = en direction d'un autre élément = OUT).  ->fromElem->self->toElem->   ---> IN - self - OUT , c'est ce qu'on a dit depuis la dernière fois qu'on s'est engueulé et je suis TOTALEMENT CONTRE qu'on change encore cette convention!
266         -toElem : qui va vers un elem donc c'est IN (j'ai corrigé, enfin deux changement a faire dans element rapide, donc si tu es pas d'accord tu sais ou cest :)
268         ---> MANON: toElem,ça va vers un autre elem  A PARTIR DE SELF (rappelle toi de ça petit padawan !!!, toujours penser à partir du self) donc c'est OUT
269 Gauth :Ah ouais je me souviens, mais si ca m'est denouveau apparu totalement pas logique et que je me suis dis que tu avais fait une faute c'est que c'est pas dans ma logique :p je vais retenir qu'une chose en fait ->fromElem->self->toElem->   ---> IN - self - OUT  et le copier coller partout :p
287 REUNION AVEC YVES : 
288 Compte rendu de la réunion avec Yves
290 ENTROPIE : kJ/(kg*K) ENTHALPIE: kJ/kg
293 MVC :
294 Le contrôleur change les données, la notification n'est pas un contrôleur ! =>modification du chapitre 4.4.1 à faire.
295 Thermoptim ne travail clairement pas en MVC, car parfois l'ouverture d'une boite ou on peut changer un valeur, ne change en fait rien du tout.
296 L'implémentation du contrôle Z se fera aisément avec un vrai MVC
297 Un vrai MVC comprendra normalement pas plus de 3 actions : modification d'une propriété, ajout et suppression d'un élément.
298 Schéma du MVC : vue => utilisateur => contrôleur =>modèle =>vue
300 Type de programmation:
301 Le MVC est un architectural pattern, et on fait un design pattern de type observeur (on utilise les notifications)
302 Le programme est interactif = événementiel+réactif
304 XSteam
305 Vérification du XSteam
307 Système de log:
308 logger.info devrait être un appelle d'une de nos propres méthode, au cas ou on ne souhaiterait plus utiliser le système, il suffirait de faire un pass de cette méthode. Ou éventuellement faire son propre système (:S)
310 Transformation:
311 faire une transfo qui contient que des delta
312 le mixer impose que Tin Pin et titre soient tous les mêmes
314 Prop.py:
315 Changer les floatproperty en stringproperty, l'impose prend un string et analyse ce qui doit en ressortir. C'est pas le boulot du GUI
317 Nom de cycle:
318 A faire
320 RegisterElem:
321 A faire dans element.py et pas dans le projet
322 parcourir le dictionnaire d'un module =>doc python __dict__
324 Dépendance:
325 iDependOnThem : utilisé en cas de conflit (si jamais on a un valeur qu'on sait pas calculer mais qui vaut 5 , et qu'on impose un truc qui calcul a 4, qui ensuite la calcul par un autre moyen, on a un conflit)
326 theyDependOnMe:sert à relacherquand on change une valeur ou qu'on supprime un élément, il permet de mettre les valeurs à zéro
328 UpDate:
329 parcourir les équations et recalculer et voir si conflit
331 Tell:
332 la précision avec une nouvelle méthode spécifique à chaque type de variable
334 Flash:
335 Fais un tell à soi même, dépend du fluide, faire des équations dans les états.
337 Equation:
338 paire qui peut tournée : PHS
339 H_PS est une operation à trois argument : fluide p et s qui fait appelle à fluide.h_ps(P4,S3) dans l'évaluation.
340 réécrire pour avoir variable IN OUT ou variable MYSELF , et surtout mettre en instance de classe les équations
341 réécrire pour tenir compte des states.
342 exemple : dans l'écriture des equations : il faut mettre le TYPE de connections et après seulement quand on fait une évaluation, on dis sur quel objet on agit.
344 Fluide:
345 utilité: ne pas s'ennuyer avec les saturations
346 classe mère : fluide avec des méthodes tel que h_pT = none si p ou T = none =>si jamais le titre, fluide choisis quel méthode utiliser (sauf si refrpop et xsteam c'est PAS le même combat)
347 classe fille : XSteam (singleton) refprop(plusieurs instances, un pour chaque type de fluide)
350 Au démarage : nom unique pour chaque fluide : RP eau ou XS eau (pour savoir qui utiliser) => permet la création d'une bibli de fluide
352 Titre:
353 Dans le calcul du titre il y a None et NaN
355 Etat:
356 remplacer par une flèche une fois que l'état est connecté
358 Questions:
359 Y a t il un palier de pression lors d'un changement de phase ?
360 H_TS et S_TH possible ?
362 Mémoire:
363 écrire les pistes d'avenir ,les explications des boites fleches+position ...
364 détail des choses possibles à faire (les bases y sont)
367 Calculable:
368 P : hs,tx*
369 T : px,ph,ps,hs
370 x : pt*,ph
371 s : ptx,ph,(th?)
372 h : ptx,ps,(ts?)