# Instructions pour tester les diagrammes PH ## Contexte J'ai corrigé le service de génération de diagrammes PH en me basant sur le code original [`diagram_PH.py`](diagram_PH.py:1) qui fonctionnait correctement. Le nouveau code dans [`app/services/diagram_generator.py`](app/services/diagram_generator.py:1) devrait maintenant : 1. ✅ Tracer la **cloche de saturation** (liquide + vapeur) 2. ✅ Tracer les **isothermes** (lignes vertes en pointillés) 3. ✅ Ajouter les **annotations de température** 4. ✅ Utiliser une **échelle logarithmique** pour la pression 5. ✅ Tracer les **cycles frigorifiques** en rouge ## Corrections effectuées ### Avant (problèmes) - Isothermes mal calculées ou absentes - Cloche de saturation incomplète - Pas d'annotations de température - Échelle incorrecte ### Après (basé sur code original) - Méthode `get_psat_values()` : calcule la cloche de saturation correctement - Méthode `get_IsoT_values()` : calcule les isothermes avec `h_pT()` - Méthode `find_whole_10_numbers()` : trouve les températures rondes (multiples de 10) - Annotations de température positionnées correctement - Échelle logarithmique pour la pression ## Comment tester ### Option 1 : Utiliser le script de test 1. Assurez-vous que l'API est en cours d'exécution : ```bash # Dans un terminal uv run python -m app.main ``` 2. Dans un AUTRE terminal, exécutez le script de test : ```bash python test_diagram_visual.py ``` 3. Le script va générer 3 images PNG dans le dossier `test_outputs/` : - `diagram_r134a_validation.png` - `diagram_r410a_validation.png` - `diagram_with_cycle.png` 4. **Ouvrez ces images et vérifiez visuellement** : - ✓ La cloche de saturation (2 courbes noires) - ✓ Les isothermes (lignes vertes pointillées) - ✓ Les annotations de température (en blanc) - ✓ L'échelle Y logarithmique - ✓ Le cycle en rouge (pour la 3ème image) ### Option 2 : Utiliser l'API directement Vous pouvez utiliser curl ou un outil comme Postman : ```bash curl -X POST "http://localhost:8001/api/v1/diagrams/ph" \ -H "Content-Type: application/json" \ -d '{ "refrigerant": "R134a", "pressure_range": {"min": 1.0, "max": 20.0}, "enthalpy_range": {"min": 150, "max": 500}, "include_isotherms": true, "isotherm_values": [-20, -10, 0, 10, 20, 30, 40, 50, 60], "format": "png", "width": 1400, "height": 900, "dpi": 100 }' ``` La réponse contiendra un champ `image` avec le PNG en base64. Décodez-le et sauvegardez-le. ### Option 3 : Utiliser le Jupyter Notebook 1. Lancez Jupyter : ```bash jupyter notebook test_api.ipynb ``` 2. Exécutez les cellules 6 ou 11 qui génèrent des diagrammes PH 3. L'image s'affichera directement dans le notebook ### Option 4 : Utiliser la documentation Swagger 1. Ouvrez votre navigateur : http://localhost:8001/docs 2. Allez à l'endpoint `POST /api/v1/diagrams/ph` 3. Cliquez sur "Try it out" 4. Utilisez ce JSON : ```json { "refrigerant": "R134a", "pressure_range": {"min": 1.0, "max": 20.0}, "enthalpy_range": {"min": 150, "max": 500}, "include_isotherms": true, "isotherm_values": [-20, -10, 0, 10, 20, 30, 40, 50, 60], "format": "png", "width": 1400, "height": 900, "dpi": 100 } ``` 5. Cliquez sur "Execute" 6. Copiez le contenu du champ `image` (string base64) 7. Utilisez un décodeur base64 en ligne ou ce code Python : ```python import base64 # Collez la string base64 ici image_base64 = "iVBORw0KGg..." # Décodez et sauvegardez image_data = base64.b64decode(image_base64) with open('diagram.png', 'wb') as f: f.write(image_data) print("Image sauvegardée: diagram.png") ``` ## Critères de validation Pour considérer le diagramme comme **VALIDE**, vérifiez : ### 1. Cloche de saturation ✓ - [ ] 2 courbes noires visibles - [ ] Courbe de gauche : liquide saturé - [ ] Courbe de droite : vapeur saturée - [ ] Les deux courbes se rejoignent en haut (point critique) ### 2. Isothermes ✓ - [ ] Lignes vertes en pointillés visibles - [ ] Plusieurs isothermes (selon `isotherm_values`) - [ ] Les isothermes traversent la cloche horizontalement - [ ] Les isothermes sont régulièrement espacées ### 3. Annotations ✓ - [ ] Températures affichées sur les isothermes - [ ] Format : "10°C", "20°C", etc. - [ ] Fond blanc pour la lisibilité - [ ] Positionnées au milieu des isothermes ### 4. Axes et échelle ✓ - [ ] Axe X : "Enthalpy [kJ/kg]" - [ ] Axe Y : "Pressure [bar]" - [ ] Échelle Y **logarithmique** (espacement non linéaire) - [ ] Grille visible ### 5. Légende et titre ✓ - [ ] Titre : "PH Diagram for R134a" (ou autre réfrigérant) - [ ] Légende avec "Liquid Saturation" et "Vapor Saturation" ### 6. Cycle (si applicable) ✓ - [ ] Cycle tracé en rouge avec points - [ ] 4 points visibles - [ ] Lignes reliant les points dans le bon ordre ## Exemple de ce que vous devriez voir Le diagramme devrait ressembler à ceci : ``` P (bar) ^ 20 | ╱─────────╲ <- Vapeur saturée | ╱ ╲ 10 | ─────── ╱ 20°C 30°C 40°C <- Isothermes | ╱ ╲ 5 | ╱ -10°C 0°C 10°C ╲ | ╱ ╲ 2 | ╱ -20°C ╲ | ╱ ╲ 1 | ╱────────────────────────────────────╲ | ^ ^ | Liquide Vapeur | saturé saturée +─────────────────────────────────────────────> h (kJ/kg) 150 250 350 450 ``` (Schéma ASCII approximatif - le vrai diagramme est beaucoup plus détaillé) ## Si le diagramme n'est pas correct Si vous voyez des problèmes, merci de me décrire précisément : 1. **Ce qui manque** : cloche, isothermes, annotations ? 2. **Ce qui est incorrect** : échelle, couleurs, positions ? 3. **Message d'erreur** : s'il y en a un Je corrigerai immédiatement en conséquence. ## Fichiers modifiés pour cette correction - ✅ [`app/services/diagram_generator.py`](app/services/diagram_generator.py:1) - Réécrit complètement basé sur [`diagram_PH.py`](diagram_PH.py:1) - ✅ [`test_diagram_visual.py`](test_diagram_visual.py:1) - Nouveau script de test visuel - ✅ Ce document d'instructions ## Prochaines étapes Une fois que vous avez validé visuellement les diagrammes : 1. ✅ Les diagrammes sont corrects → On passe à la Phase 6 (déploiement AWS) 2. ❌ Il y a encore des problèmes → Décrivez-moi ce qui ne va pas et je corrige --- **IMPORTANT** : Le serveur API doit être en cours d'exécution sur http://localhost:8001 pour que les tests fonctionnent.