Gauthier76 commited on
Commit
4df6bad
·
verified ·
1 Parent(s): a6e892c

Upload 27 files

Browse files
.gitattributes CHANGED
@@ -1,35 +1,36 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ picture_1.jpeg filter=lfs diff=lfs merge=lfs -text
.githubworkflows/deploy-huggingface.yml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Deploy to Hugging Face Spaces
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main # Déclencher le workflow lors d'un push sur la branche 'main'
7
+
8
+ jobs:
9
+ deploy:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: Checkout repository
14
+ uses: actions/checkout@v2 # Vérifie le code dans le dépôt
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v2
18
+ with:
19
+ python-version: '3.8' # Tu peux choisir la version de Python selon tes besoins
20
+
21
+ - name: Install dependencies
22
+ run: |
23
+ pip install --upgrade pip
24
+ pip install gradio # Installe les dépendances nécessaires (ajoute d'autres dépendances si nécessaire)
25
+
26
+ - name: Push to Hugging Face
27
+ run: |
28
+ git remote add hf https://huggingface.co/spaces//Gauthier76/test1 # Configure Hugging Face comme remote
29
+ git config --global user.name "GitHub Actions" # Configurer un nom pour les commits
30
+ git config --global user.email "actions@github.com" # Configurer un email pour les commits
31
+ git add . # Ajouter les fichiers modifiés
32
+ git commit -m "Deploy updated code to Hugging Face" # Commit des changements
33
+ git push hf main # Push vers Hugging Face
34
+ env:
35
+ HF_TOKEN: ${{ secrets.HUGGINGFACE_TOKEN }} # Utilisation de ton token Hugging Face stocké dans les secrets
.gradio/flagged/dataset1.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Poids (kg),Taille (cm),output,timestamp
2
+ 3,0,,2025-03-11 11:43:51.681028
3
+ 86,185,<p style='color:orange; font-size:18px;'>IMC : 25.13 - Surpoids</p>,2025-03-11 11:44:08.515396
.gradio/flagged/dataset2.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Système de chauffage,Matériau du cadre,output,timestamp
2
+ ,,,2025-03-11 21:27:26.392806
3
+ Pac COPA 5.3,Cadre bois métal,Pas de croisement: réutilisation du cadre préférable.,2025-03-11 21:28:28.754525
.idea/.gitignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Datasource local storage ignored files
7
+ /dataSources/
8
+ /dataSources.local.xml
.idea/.name ADDED
@@ -0,0 +1 @@
 
 
1
+ app.py
.idea/encodings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Encoding">
4
+ <file url="file://$PROJECT_DIR$/output1.csv" charset="windows-1252" />
5
+ </component>
6
+ </project>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/misc.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Black">
4
+ <option name="sdkName" value="Python 3.11" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (pixi-tool)" project-jdk-type="Python SDK" />
7
+ </project>
.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/pixi-tool.iml" filepath="$PROJECT_DIR$/.idea/pixi-tool.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
.idea/pixi-tool.iml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="jdk" jdkName="Python 3.11 (pixi-tool)" jdkType="Python SDK" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ </module>
.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="" vcs="Git" />
5
+ </component>
6
+ </project>
.idea/workspace.xml ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="AutoImportSettings">
4
+ <option name="autoReloadType" value="SELECTIVE" />
5
+ </component>
6
+ <component name="ChangeListManager">
7
+ <list default="true" id="0d15fb2a-452e-4262-b008-79dc4ffadd2f" name="Changes" comment="v1">
8
+ <change beforePath="$PROJECT_DIR$/.idea/.name" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.name" afterDir="false" />
9
+ </list>
10
+ <option name="SHOW_DIALOG" value="false" />
11
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
12
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
13
+ <option name="LAST_RESOLUTION" value="IGNORE" />
14
+ </component>
15
+ <component name="FileTemplateManagerImpl">
16
+ <option name="RECENT_TEMPLATES">
17
+ <list>
18
+ <option value="Jupyter Notebook" />
19
+ <option value="package.json" />
20
+ <option value="HTML File" />
21
+ <option value="CSS File" />
22
+ <option value="Python Script" />
23
+ </list>
24
+ </option>
25
+ </component>
26
+ <component name="FlaskConsoleOptions" custom-start-script="import sys&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;from flask.cli import ScriptInfo&#10;locals().update(ScriptInfo(create_app=None).load_app().make_shell_context())&#10;print(&quot;Python %s on %s\nApp: %s [%s]\nInstance: %s&quot; % (sys.version, sys.platform, app.import_name, app.env, app.instance_path))">
27
+ <envs>
28
+ <env key="FLASK_APP" value="app" />
29
+ </envs>
30
+ <option name="myCustomStartScript" value="import sys&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;from flask.cli import ScriptInfo&#10;locals().update(ScriptInfo(create_app=None).load_app().make_shell_context())&#10;print(&quot;Python %s on %s\nApp: %s [%s]\nInstance: %s&quot; % (sys.version, sys.platform, app.import_name, app.env, app.instance_path))" />
31
+ <option name="myEnvs">
32
+ <map>
33
+ <entry key="FLASK_APP" value="app" />
34
+ </map>
35
+ </option>
36
+ </component>
37
+ <component name="Git.Settings">
38
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
39
+ </component>
40
+ <component name="GitHubPullRequestSearchHistory">{
41
+ &quot;lastFilter&quot;: {
42
+ &quot;state&quot;: &quot;OPEN&quot;,
43
+ &quot;assignee&quot;: &quot;GauthierDemonchy&quot;
44
+ }
45
+ }</component>
46
+ <component name="GithubPullRequestsUISettings">{
47
+ &quot;selectedUrlAndAccountId&quot;: {
48
+ &quot;url&quot;: &quot;https://github.com/GauthierDemonchy/pixi-tool.git&quot;,
49
+ &quot;accountId&quot;: &quot;68bbe785-101f-417f-8143-be7f921aef67&quot;
50
+ }
51
+ }</component>
52
+ <component name="ProjectColorInfo">{
53
+ &quot;associatedIndex&quot;: 6
54
+ }</component>
55
+ <component name="ProjectId" id="2u7NmoGXqlUYdIwgDnsqChgBBTY" />
56
+ <component name="ProjectViewState">
57
+ <option name="hideEmptyMiddlePackages" value="true" />
58
+ <option name="showLibraryContents" value="true" />
59
+ </component>
60
+ <component name="PropertiesComponent"><![CDATA[{
61
+ "keyToString": {
62
+ "DefaultHtmlFileTemplate": "HTML File",
63
+ "Python.app.executor": "Run",
64
+ "Python.calculs.executor": "Run",
65
+ "Python.data.executor": "Run",
66
+ "RunOnceActivity.ShowReadmeOnStart": "true",
67
+ "git-widget-placeholder": "main",
68
+ "last_opened_file_path": "C:/Users/gauthier.demonchy/pixi-tool",
69
+ "list.type.of.created.stylesheet": "CSS",
70
+ "node.js.detected.package.eslint": "true",
71
+ "node.js.detected.package.tslint": "true",
72
+ "node.js.selected.package.eslint": "(autodetect)",
73
+ "node.js.selected.package.tslint": "(autodetect)",
74
+ "nodejs_package_manager_path": "npm",
75
+ "settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable",
76
+ "vue.rearranger.settings.migration": "true"
77
+ }
78
+ }]]></component>
79
+ <component name="RunAnythingCache">
80
+ <option name="myCommands">
81
+ <command value="pip install numpy matplotlib scikit-learn pillow" />
82
+ </option>
83
+ </component>
84
+ <component name="RunManager" selected="Python.app">
85
+ <configuration name="app" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
86
+ <module name="pixi-tool" />
87
+ <option name="ENV_FILES" value="" />
88
+ <option name="INTERPRETER_OPTIONS" value="" />
89
+ <option name="PARENT_ENVS" value="true" />
90
+ <envs>
91
+ <env name="PYTHONUNBUFFERED" value="1" />
92
+ </envs>
93
+ <option name="SDK_HOME" value="" />
94
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
95
+ <option name="IS_MODULE_SDK" value="true" />
96
+ <option name="ADD_CONTENT_ROOTS" value="true" />
97
+ <option name="ADD_SOURCE_ROOTS" value="true" />
98
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
99
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/app.py" />
100
+ <option name="PARAMETERS" value="" />
101
+ <option name="SHOW_COMMAND_LINE" value="false" />
102
+ <option name="EMULATE_TERMINAL" value="false" />
103
+ <option name="MODULE_MODE" value="false" />
104
+ <option name="REDIRECT_INPUT" value="false" />
105
+ <option name="INPUT_FILE" value="" />
106
+ <method v="2" />
107
+ </configuration>
108
+ <configuration name="calculs" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
109
+ <module name="pixi-tool" />
110
+ <option name="ENV_FILES" value="" />
111
+ <option name="INTERPRETER_OPTIONS" value="" />
112
+ <option name="PARENT_ENVS" value="true" />
113
+ <envs>
114
+ <env name="PYTHONUNBUFFERED" value="1" />
115
+ </envs>
116
+ <option name="SDK_HOME" value="" />
117
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
118
+ <option name="IS_MODULE_SDK" value="true" />
119
+ <option name="ADD_CONTENT_ROOTS" value="true" />
120
+ <option name="ADD_SOURCE_ROOTS" value="true" />
121
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
122
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/calculs.py" />
123
+ <option name="PARAMETERS" value="" />
124
+ <option name="SHOW_COMMAND_LINE" value="false" />
125
+ <option name="EMULATE_TERMINAL" value="false" />
126
+ <option name="MODULE_MODE" value="false" />
127
+ <option name="REDIRECT_INPUT" value="false" />
128
+ <option name="INPUT_FILE" value="" />
129
+ <method v="2" />
130
+ </configuration>
131
+ <configuration name="data" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
132
+ <module name="pixi-tool" />
133
+ <option name="ENV_FILES" value="" />
134
+ <option name="INTERPRETER_OPTIONS" value="" />
135
+ <option name="PARENT_ENVS" value="true" />
136
+ <envs>
137
+ <env name="PYTHONUNBUFFERED" value="1" />
138
+ </envs>
139
+ <option name="SDK_HOME" value="" />
140
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
141
+ <option name="IS_MODULE_SDK" value="true" />
142
+ <option name="ADD_CONTENT_ROOTS" value="true" />
143
+ <option name="ADD_SOURCE_ROOTS" value="true" />
144
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
145
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/data.py" />
146
+ <option name="PARAMETERS" value="" />
147
+ <option name="SHOW_COMMAND_LINE" value="false" />
148
+ <option name="EMULATE_TERMINAL" value="false" />
149
+ <option name="MODULE_MODE" value="false" />
150
+ <option name="REDIRECT_INPUT" value="false" />
151
+ <option name="INPUT_FILE" value="" />
152
+ <method v="2" />
153
+ </configuration>
154
+ <recent_temporary>
155
+ <list>
156
+ <item itemvalue="Python.app" />
157
+ <item itemvalue="Python.data" />
158
+ <item itemvalue="Python.calculs" />
159
+ </list>
160
+ </recent_temporary>
161
+ </component>
162
+ <component name="SharedIndexes">
163
+ <attachedChunks>
164
+ <set>
165
+ <option value="bundled-js-predefined-1d06a55b98c1-0b3e54e931b4-JavaScript-PY-241.18034.82" />
166
+ <option value="bundled-python-sdk-975db3bf15a3-2767605e8bc2-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-241.18034.82" />
167
+ </set>
168
+ </attachedChunks>
169
+ </component>
170
+ <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
171
+ <component name="TaskManager">
172
+ <task active="true" id="Default" summary="Default task">
173
+ <changelist id="0d15fb2a-452e-4262-b008-79dc4ffadd2f" name="Changes" comment="" />
174
+ <created>1741595813642</created>
175
+ <option name="number" value="Default" />
176
+ <option name="presentableId" value="Default" />
177
+ <updated>1741595813642</updated>
178
+ <workItem from="1741595815218" duration="2157000" />
179
+ <workItem from="1741614786798" duration="1291000" />
180
+ <workItem from="1741689390569" duration="267000" />
181
+ <workItem from="1741692003498" duration="11844000" />
182
+ <workItem from="1741724644845" duration="4628000" />
183
+ <workItem from="1741774838678" duration="1870000" />
184
+ <workItem from="1741778078425" duration="33443000" />
185
+ <workItem from="1741947142523" duration="18138000" />
186
+ <workItem from="1742293229549" duration="521000" />
187
+ <workItem from="1742295202770" duration="2531000" />
188
+ <workItem from="1742381351336" duration="969000" />
189
+ </task>
190
+ <task id="LOCAL-00001" summary="v1">
191
+ <option name="closed" value="true" />
192
+ <created>1741596496335</created>
193
+ <option name="number" value="00001" />
194
+ <option name="presentableId" value="LOCAL-00001" />
195
+ <option name="project" value="LOCAL" />
196
+ <updated>1741596496335</updated>
197
+ </task>
198
+ <task id="LOCAL-00002" summary="v1">
199
+ <option name="closed" value="true" />
200
+ <created>1741707219139</created>
201
+ <option name="number" value="00002" />
202
+ <option name="presentableId" value="LOCAL-00002" />
203
+ <option name="project" value="LOCAL" />
204
+ <updated>1741707219139</updated>
205
+ </task>
206
+ <task id="LOCAL-00003" summary="v1">
207
+ <option name="closed" value="true" />
208
+ <created>1741708723711</created>
209
+ <option name="number" value="00003" />
210
+ <option name="presentableId" value="LOCAL-00003" />
211
+ <option name="project" value="LOCAL" />
212
+ <updated>1741708723711</updated>
213
+ </task>
214
+ <task id="LOCAL-00004" summary="v1">
215
+ <option name="closed" value="true" />
216
+ <created>1741708752198</created>
217
+ <option name="number" value="00004" />
218
+ <option name="presentableId" value="LOCAL-00004" />
219
+ <option name="project" value="LOCAL" />
220
+ <updated>1741708752198</updated>
221
+ </task>
222
+ <task id="LOCAL-00005" summary="v1">
223
+ <option name="closed" value="true" />
224
+ <created>1741709034655</created>
225
+ <option name="number" value="00005" />
226
+ <option name="presentableId" value="LOCAL-00005" />
227
+ <option name="project" value="LOCAL" />
228
+ <updated>1741709034655</updated>
229
+ </task>
230
+ <task id="LOCAL-00006" summary="v1">
231
+ <option name="closed" value="true" />
232
+ <created>1741709294467</created>
233
+ <option name="number" value="00006" />
234
+ <option name="presentableId" value="LOCAL-00006" />
235
+ <option name="project" value="LOCAL" />
236
+ <updated>1741709294467</updated>
237
+ </task>
238
+ <task id="LOCAL-00007" summary="v1">
239
+ <option name="closed" value="true" />
240
+ <created>1741869182221</created>
241
+ <option name="number" value="00007" />
242
+ <option name="presentableId" value="LOCAL-00007" />
243
+ <option name="project" value="LOCAL" />
244
+ <updated>1741869182222</updated>
245
+ </task>
246
+ <task id="LOCAL-00008" summary="v1">
247
+ <option name="closed" value="true" />
248
+ <created>1741869316876</created>
249
+ <option name="number" value="00008" />
250
+ <option name="presentableId" value="LOCAL-00008" />
251
+ <option name="project" value="LOCAL" />
252
+ <updated>1741869316876</updated>
253
+ </task>
254
+ <task id="LOCAL-00009" summary="v1">
255
+ <option name="closed" value="true" />
256
+ <created>1741883004916</created>
257
+ <option name="number" value="00009" />
258
+ <option name="presentableId" value="LOCAL-00009" />
259
+ <option name="project" value="LOCAL" />
260
+ <updated>1741883004916</updated>
261
+ </task>
262
+ <option name="localTasksCounter" value="10" />
263
+ <servers />
264
+ </component>
265
+ <component name="TypeScriptGeneratedFilesManager">
266
+ <option name="version" value="3" />
267
+ </component>
268
+ <component name="UnknownFeatures">
269
+ <option featureType="com.intellij.fileTypeFactory" implementationName="*.pem" />
270
+ </component>
271
+ <component name="Vcs.Log.Tabs.Properties">
272
+ <option name="TAB_STATES">
273
+ <map>
274
+ <entry key="MAIN">
275
+ <value>
276
+ <State />
277
+ </value>
278
+ </entry>
279
+ </map>
280
+ </option>
281
+ </component>
282
+ <component name="VcsManagerConfiguration">
283
+ <MESSAGE value="modif" />
284
+ <MESSAGE value="v1" />
285
+ <option name="LAST_COMMIT_MESSAGE" value="v1" />
286
+ </component>
287
+ <component name="com.intellij.coverage.CoverageDataManagerImpl">
288
+ <SUITE FILE_PATH="coverage/imc_gradio_ipynb$app.coverage" NAME="app Coverage Results" MODIFIED="1741708979306" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
289
+ <SUITE FILE_PATH="coverage/data_py$app.coverage" NAME="app Coverage Results" MODIFIED="1742302713551" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
290
+ <SUITE FILE_PATH="coverage/app_py$calculs.coverage" NAME="calculs Coverage Results" MODIFIED="1741872394315" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
291
+ <SUITE FILE_PATH="coverage/data_py$data.coverage" NAME="data Coverage Results" MODIFIED="1741950630194" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
292
+ <SUITE FILE_PATH="coverage/app_py$app.coverage" NAME="app Coverage Results" MODIFIED="1741946978948" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
293
+ </component>
294
+ </project>
README.md CHANGED
@@ -1,13 +1,14 @@
1
- ---
2
- title: Reuseud Frame Calc
3
- emoji: 📚
4
- colorFrom: gray
5
- colorTo: pink
6
- sdk: gradio
7
- sdk_version: 5.22.0
8
- app_file: app.py
9
- pinned: false
10
- license: mit
11
- ---
12
-
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
+ ---
2
+ title: Test1
3
+ emoji: 🏃
4
+ colorFrom: red
5
+ colorTo: green
6
+ sdk: gradio
7
+ sdk_version: 5.20.1
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ short_description: calculateur aide à la décision changement de fenêtre
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
Spacefile ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Indique que c'est une application Gradio
2
+ sdk: gradio
3
+ app_file: app.py
__pycache__/calculs.cpython-311.pyc ADDED
Binary file (6.05 kB). View file
 
__pycache__/data.cpython-311.pyc ADDED
Binary file (2.66 kB). View file
 
__pycache__/graphique.cpython-311.pyc ADDED
Binary file (2.83 kB). View file
 
app.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from calculs import calculate_and_plot, estimate_uf # Importation des fonctions
3
+
4
+ # Message explicatif
5
+ description = """
6
+ ### Ce calculateur vous aide à évaluer si le remplacement des cadres de fenêtres est optimal ou s'il est préférable de les réutiliser.
7
+
8
+ Il compare :
9
+
10
+ 🔴 **Les émissions de GES évitées** grâce à une meilleure performance thermique (chauffage)
11
+ 🔵 **Les émissions de GES dues** à la fabrication du nouveau cadre
12
+
13
+ Si le point de croisement est atteint, le remplacement des cadres est intéressant. Sinon, la réutilisation est la solution optimal sur l'aspect environnemental !
14
+
15
+ 💡 **Attention :** Uf du nouveau cadre doit être inférieur à celui de l'ancien.
16
+ """
17
+
18
+ # Définition des choix possibles
19
+ options_chauffage = {
20
+ "Pompe à chaleur": ["Pac COPA 2,7", "Pac COPA 3,2", "Pac COPA 4,4", "Pac COPA 5,3"],
21
+ "Chaudiere": ["Chaudiere gaz naturel", "Chaudiere pellet", "Chaudiere buche", "Chaudiere biogaz"]
22
+ }
23
+
24
+ # Mise à jour des options de chauffage dynamiquement
25
+ def update_heating_options(choice):
26
+ return gr.update(choices=options_chauffage[choice], value=options_chauffage[choice][0])
27
+
28
+ # Fonction de gestion des entrées utilisateur
29
+ def handle_input(heating_type, system, material, uf_known, uf_existing, year, frame_type, uf_new):
30
+ if uf_new <= 0:
31
+ return "⚠️ Veuillez entrer une valeur de Uf valide pour le nouveau cadre.", None
32
+
33
+ if uf_known == "Je connais le Uf du cadre existant":
34
+ if uf_existing is None or uf_existing <= 0:
35
+ return "⚠️ Veuillez entrer une valeur de Uf valide pour l'ancien cadre.", None
36
+ result_text, img = calculate_and_plot(system, material, uf_existing, uf_new)
37
+ return result_text, img
38
+
39
+ if uf_known == "Je ne connais pas le Uf, je connais l'année et le type de cadre":
40
+ if not year or not frame_type:
41
+ return "⚠️ Veuillez entrer l'année et le type de cadre.", None
42
+ uf_existing = estimate_uf(year, frame_type)
43
+ result_text, img = calculate_and_plot(system, material, uf_existing, uf_new)
44
+ return result_text, img
45
+
46
+ return "⚠️ Informations incomplètes. Vérifiez vos entrées.", None
47
+
48
+ # Mise à jour dynamique de la visibilité des champs
49
+ def update_visibility(uf_known):
50
+ is_known = uf_known == "Je connais le Uf du cadre existant"
51
+ return gr.update(visible=is_known), gr.update(visible=not is_known), gr.update(visible=not is_known)
52
+
53
+ # Interface Gradio
54
+ with gr.Blocks(css="""
55
+ .header-container {
56
+ display: flex;
57
+ justify-content: space-between;
58
+ align-items: center;
59
+ width: 100%;
60
+ }
61
+ """) as demo:
62
+
63
+ with gr.Row(elem_classes="header-container"):
64
+ gr.Markdown(description)
65
+ gr.Image("picture_1.jpeg", elem_id="top-right-image", show_label=False, container=False, width=250, height=250)
66
+
67
+ # Sélection du type de chauffage
68
+ with gr.Row():
69
+ heating_type = gr.Radio(["Pompe à chaleur", "Chaudiere"], label="Type de chauffage", value="Pompe à chaleur")
70
+ system = gr.Dropdown(choices=options_chauffage["Pompe à chaleur"], label="Système de chauffage")
71
+
72
+ # Mise à jour dynamique des systèmes de chauffage
73
+ heating_type.change(fn=update_heating_options, inputs=heating_type, outputs=system)
74
+
75
+ # Sélection du matériau
76
+ material = gr.Radio(["Cadre bois", "Cadre bois métal", "Cadre PVC", "Cadre alu"],
77
+ label="Matériau du nouveau cadre")
78
+
79
+ # Uf du nouveau cadre
80
+ uf_new = gr.Number(label="Uf du cadre nouveau (W/m².K)")
81
+
82
+ # Mode d'entrée du Uf
83
+ uf_known = gr.Radio(
84
+ ["Je connais le Uf du cadre existant", "Je ne connais pas le Uf, je connais l'année et le type de cadre"],
85
+ label="Comment voulez-vous entrer le Uf du cadre existant ?")
86
+
87
+ # Champs dépendants
88
+ uf_existing = gr.Number(label="Uf cadre existant (W/m².K)", visible=False)
89
+ with gr.Row():
90
+ year = gr.Number(label="Année du bâtiment", visible=False)
91
+ frame_type = gr.Radio(["Bois", "Bois-métal", "PVC", "Alu"], label="Type de cadre existant", visible=False)
92
+
93
+ # Mettre à jour la visibilité
94
+ uf_known.change(fn=update_visibility, inputs=uf_known, outputs=[uf_existing, year, frame_type])
95
+
96
+ # Bouton et résultats
97
+ submit_button = gr.Button("Calculer")
98
+ result = gr.Textbox(label="Résultat",container=False)
99
+ image_output = gr.Image(label="Graphique",container=False)
100
+
101
+ submit_button.click(fn=handle_input, inputs=[heating_type, system, material, uf_known, uf_existing, year, frame_type, uf_new],
102
+ outputs=[result, image_output])
103
+
104
+ # Lancer l'interface
105
+ demo.launch()
calculs.py ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import matplotlib.pyplot as plt
3
+ import io
4
+ from PIL import Image
5
+
6
+
7
+
8
+ # Déplacer l'importation des données dans les fonctions où elles sont nécessaires
9
+ def estimate_uf(year, frame_type):
10
+ """
11
+ Estime Uf du cadre existant en fonction de l'année et du type de cadre
12
+ via une régression linéaire entre les années 1950 et 2020.
13
+ """
14
+ from data import data # Importation à l'intérieur de la fonction pour éviter la boucle circulaire
15
+
16
+ # Années de référence
17
+ x = np.array([1960, 2020])
18
+ # Valeurs Uf correspondantes
19
+ y = np.array(data[frame_type])
20
+
21
+ # Calcul de la pente (coefficient directeur)
22
+ slope = (y[1] - y[0]) / (x[1] - x[0])
23
+ # Calcul de l'ordonnée à l'origine
24
+ intercept = y[0] - slope * x[0]
25
+
26
+ # Prédiction de Uf pour l'année donnée
27
+ return slope * year + intercept
28
+
29
+
30
+ def calculate_and_plot(system, material, uf_existing, uf_new):
31
+ from data import coefficients # Importation à l'intérieur de la fonction pour éviter la boucle circulaire
32
+
33
+ # Vérifier que Uf du nouveau cadre est inférieur à Uf de l'ancien cadre
34
+ if uf_new >= uf_existing:
35
+ return "Erreur : Uf du nouveau cadre doit être inférieur à Uf de l'ancien cadre.", None
36
+
37
+ a_system, b_system = coefficients[system]
38
+ a_material, b_material = coefficients[material]
39
+
40
+ # Calcul de Delta_Uf
41
+ delta_uf = float(uf_existing) - float(uf_new)
42
+
43
+ # Définition des valeurs de Delta_Uf pour le tracé
44
+ delta_uf_values = np.linspace(0, 1.4, 100)
45
+ ges_system = a_system * delta_uf_values + b_system
46
+ ges_material = a_material * delta_uf_values + b_material
47
+
48
+ # Trouver l'intersection entre les deux courbes (GES évités et GES émis)
49
+ def find_intersection(a1, b1, a2, b2):
50
+ if a1 != a2: # Si les pentes sont différentes, on peut calculer l'intersection
51
+ intersection_uf = (b2 - b1) / (a1 - a2)
52
+ intersection_ges = a1 * intersection_uf + b1
53
+ return intersection_uf, intersection_ges
54
+ else:
55
+ return None, None # Si les pentes sont égales, les lignes sont parallèles et n'ont pas d'intersection
56
+
57
+ intersection_uf, intersection_ges = find_intersection(a_system, b_system, a_material, b_material)
58
+
59
+ # Trouver l'intersection avec la droite verticale définie par delta_uf
60
+ def find_vertical_intersection(delta_uf, ges_system, ges_material):
61
+ ges_at_delta_uf_system = a_system * delta_uf + b_system
62
+ ges_at_delta_uf_material = a_material * delta_uf + b_material
63
+ return delta_uf, ges_at_delta_uf_system, ges_at_delta_uf_material
64
+
65
+ intersection_vertical_uf, ges_at_intersection_ges_system, ges_at_intersection_ges_material = find_vertical_intersection(delta_uf, ges_system, ges_material)
66
+
67
+ # Déterminer si le remplacement est optimal
68
+ if intersection_uf is not None:
69
+ if delta_uf >= intersection_uf:
70
+ decision = f"ΔUf = {delta_uf:.2f} entre nouveau cadre et ancien cadre, soit au-dessus du point seuil ({intersection_uf:.2f}) :\n✅ Le remplacement du cadre est optimal."
71
+ else:
72
+ decision = f"ΔUf = {delta_uf:.2f} entre nouveau cadre et ancien cadre, soit en dessous du point seuil ({intersection_uf:.2f}) :\n♻️ La réutilisation du cadre est préférable."
73
+ else:
74
+ decision = "Pas de croisement détecté : ♻️ Réutilisation préférable."
75
+
76
+ # Création du graphique
77
+ fig, ax = plt.subplots(figsize=(8, 6))
78
+ plt.subplots_adjust(bottom=0.25)
79
+
80
+ # Zone de réutilisation (bleue) - sous la courbe des GES du cadre et Zone de remplacement (rouge)
81
+ ax.fill_between(delta_uf_values, 0, ges_material, color='blue', alpha=0.2, label="Réutilisation préférable")
82
+ ax.fill_between(delta_uf_values, ges_material, max(ges_system.max(), ges_material.max()), color='red', alpha=0.2, label="Remplacement optimal")
83
+
84
+ # Tracé des courbes
85
+ ax.plot(delta_uf_values, ges_system, 'r--', label=f"GES évités Exploitation ({system})")
86
+ ax.plot(delta_uf_values, ges_material, 'b-', label=f"GES émis nouveau cadre ({material})")
87
+
88
+ # Ligne verticale pour ΔUf choisi
89
+ ax.axvline(delta_uf, color='green', linestyle=':', label=f"ΔUf = {delta_uf:.2f}")
90
+
91
+ # Affichage du point d'intersection (ancien point d'équilibre)
92
+ if intersection_uf is not None:
93
+ ax.scatter(intersection_uf, intersection_ges, color='black', zorder=3)
94
+ ax.annotate(f"Point d'équilibre\n({intersection_uf:.2f})", (intersection_uf, intersection_ges),
95
+ textcoords="offset points", xytext=(-40, 5), ha='center', fontsize=10, fontweight='bold', color="black")
96
+
97
+ # Affichage du nouveau point d'intersection avec la droite verticale
98
+ ax.scatter(intersection_vertical_uf, ges_at_intersection_ges_system, color='purple', zorder=3)
99
+ ax.annotate(f"Cas actuel\n({intersection_vertical_uf:.2f})", (intersection_vertical_uf, ges_at_intersection_ges_system),
100
+ textcoords="offset points", xytext=(+35, -25), ha='center', fontsize=10, fontweight='bold', color="purple")
101
+
102
+ # Paramètres du graphique
103
+ ax.set_xlabel("ΔUf (W/m².K)")
104
+ ax.set_ylabel("GES (kgCO₂/m²)")
105
+ ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.15), ncol=2, frameon=False)
106
+ ax.set_title("Analyse des émissions de GES en fonction de ΔUf")
107
+ ax.grid()
108
+
109
+ # Sauvegarde dans un buffer
110
+ buf = io.BytesIO()
111
+ plt.savefig(buf, format="png")
112
+ plt.close(fig)
113
+ buf.seek(0)
114
+
115
+ img = Image.open(buf)
116
+ return decision, img
data.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+
4
+ # Chargement des facteurs d'émission depuis output1.csv
5
+ file_path = "output2.txt"
6
+ factors_df = pd.read_csv(file_path, delimiter=";", names=["Producer", "Emission Factor"], dtype=str, encoding="latin1")
7
+
8
+
9
+ # Nettoyage des données
10
+ factors_df["Emission Factor"] = factors_df["Emission Factor"].str.replace(",", ".").astype(float) # Conversion des nombres
11
+
12
+ # Définition des valeurs de Qh en fonction de Delta Uf établi à partir de lesosai
13
+ q_h_values = np.array([0.000,0.250,0.500,0.750,1.000,1.250,1.472,1.722,1.972,2.222,2.472,2.722,2.944])
14
+ delta_uf_values = np.array([0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2])
15
+
16
+
17
+ # Fonction pour calculer les coefficients GES
18
+ def calculate_ges_coefficients(producer_name):
19
+ """
20
+ Calcule le coefficient GES (a) en imposant b = 0.
21
+ """
22
+ factor = factors_df.loc[factors_df["Producer"] == producer_name, "Emission Factor"].values
23
+ if len(factor) == 0:
24
+ raise ValueError(f"Facteur d'émission introuvable pour {producer_name}")
25
+
26
+ factor = factor[0]
27
+ ges_values = q_h_values * factor
28
+
29
+ # Régression linéaire sans intercept (forcée à 0)
30
+ a, _, _, _ = np.linalg.lstsq(delta_uf_values.reshape(-1, 1), ges_values, rcond=None)
31
+
32
+ return a[0], 0 # b est forcé à 0
33
+
34
+
35
+ # Calcul des coefficients pour les systèmes de chauffage
36
+ coefficients = {
37
+ "Pac COPA 2,7": calculate_ges_coefficients("Pac COPA 2,7"),
38
+ "Pac COPA 5,3": calculate_ges_coefficients("Pac COPA 5,3"),
39
+ "Chaudiere gaz naturel": calculate_ges_coefficients("Chaudiere gaz naturel"),
40
+ "Chaudiere biogaz": calculate_ges_coefficients("Chaudiere biogaz"),
41
+ "Pac COPA 4,4": calculate_ges_coefficients("Pac COPA 4,4"),
42
+ "Pac COPA 3,2": calculate_ges_coefficients("Pac COPA 3,2"),
43
+ "Chaudiere pellet": calculate_ges_coefficients("Chaudiere pellet"),
44
+ "Chaudiere buche": calculate_ges_coefficients("Chaudiere buche"),
45
+ "Cadre bois": (0.000, 0.041),
46
+ "Cadre bois métal": (0.000, 0.074),
47
+ "Cadre PVC": (0.000, 0.072),
48
+ "Cadre alu": (0.000, 0.149),
49
+ }
50
+
51
+ # Données pour la régression Uf selon le type de cadre
52
+ data = {
53
+ "Bois": [1.8, 0.9],
54
+ "Bois-métal": [1.8, 1],
55
+ "PVC": [1.8, 1.3],
56
+ "Alu": [3.6, 1.35]
57
+ }
graphique.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import matplotlib.pyplot as plt
2
+ import io
3
+ from PIL import Image
4
+
5
+
6
+ def create_graph(delta_uf_values, ges_system, ges_material, delta_uf, intersection_uf, intersection_ges):
7
+ fig, ax = plt.subplots(figsize=(8, 6))
8
+ plt.subplots_adjust(bottom=0.25)
9
+
10
+ ax.fill_between(delta_uf_values, 0, ges_material, color='blue', alpha=0.3, label="Réutilisation préférable")
11
+ ax.fill_between(delta_uf_values, ges_material, max(ges_system.max(), ges_material.max()), color='red', alpha=0.3,
12
+ label="Remplacement optimal")
13
+
14
+ ax.plot(delta_uf_values, ges_system, 'r--', label="GES évités Exploitation")
15
+ ax.plot(delta_uf_values, ges_material, 'b-', label="GES émis nouveau cadre")
16
+
17
+ ax.axvline(delta_uf, color='green', linestyle=':', label=f"ΔUf = {delta_uf:.2f}")
18
+
19
+ if intersection_uf is not None:
20
+ ax.scatter(intersection_uf, intersection_ges, color='black', zorder=3)
21
+ ax.annotate(f"Point d'équilibre\n({intersection_uf:.2f})", (intersection_uf, intersection_ges),
22
+ textcoords="offset points", xytext=(-40, 10), ha='center', fontsize=10, fontweight='bold',
23
+ color="black")
24
+
25
+ ax.set_xlabel("ΔUf (W/m².K)")
26
+ ax.set_ylabel("GES (kgCO₂/m²)")
27
+ ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.15), ncol=2, frameon=False)
28
+ ax.set_title("Analyse des émissions de GES en fonction de ΔUf")
29
+ ax.grid()
30
+
31
+ buf = io.BytesIO()
32
+ plt.savefig(buf, format="png")
33
+ plt.close(fig)
34
+ buf.seek(0)
35
+
36
+ img = Image.open(buf)
37
+ return img
output2.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ Pac COPA 2,7;0,058
2
+ Pac COPA 5,3;0,035
3
+ Pac COPA 4,4;0,040
4
+ Pac COPA 3,2;0,048
5
+ Chaudiere gaz naturel;0,234
6
+ Chaudiere biogaz;0,127
7
+ Chaudiere mazout;0,0343
8
+ Chaudiere buche;0,033
9
+ Chaudiere pellet;0,038
picture_1.jpeg ADDED

Git LFS Details

  • SHA256: ca76fbffe6e6e0288f070e5358913a5c4502b501e22647fd0f590965e89fee31
  • Pointer size: 131 Bytes
  • Size of remote file: 559 kB
readme.txt ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Analyse des Émissions de GES en Fonction de ΔUf (W/m².K)
2
+
3
+ Ce projet permet d'analyser l'impact environnemental d'un remplacement de cadre de fenêtre en fonction de l'évolution de l'indicateur thermique `ΔUf` (W/m².K). Grâce à une régression linéaire et des calculs d'émissions de gaz à effet de serre (GES), le programme aide à déterminer si le remplacement du cadre de fenêtre est optimal ou si la réutilisation du cadre existant est préférable. Le calcul et l'affichage sont accompagnés de graphiques pour une visualisation plus claire des résultats.
4
+
5
+ ## Table des matières
6
+
7
+ - [Description du projet](#description-du-projet)
8
+ - [Prérequis](#prérequis)
9
+ - [Installation](#installation)
10
+ - [Utilisation](#utilisation)
11
+ - [Exemple de graphique](#exemple-de-graphique)
12
+ - [Contributeurs](#contributeurs)
13
+ - [License](#license)
14
+
15
+ ## Description du projet
16
+
17
+ Ce programme utilise des données préexistantes sur les types de cadres de fenêtres (bois, PVC, aluminium, etc.) pour estimer la performance thermique (Uf) d'un cadre en fonction de l'année de fabrication et du matériau. Le but est de déterminer la meilleure option entre remplacer un cadre existant par un modèle plus performant ou réutiliser le cadre actuel pour minimiser l'empreinte carbone.
18
+
19
+ Les calculs sont effectués à l'aide d'une régression linéaire qui estime `Uf` pour une année donnée, et un modèle permet d'analyser les émissions de CO₂ évitées en fonction du remplacement ou de la réutilisation des cadres.
20
+
21
+ ## Prérequis
22
+
23
+ Avant de commencer, vous devez avoir Python 3 installé sur votre machine ainsi que les bibliothèques suivantes :
24
+
25
+ - `numpy` : pour les calculs numériques
26
+ - `matplotlib` : pour la création de graphiques
27
+ - `scikit-learn` : pour la régression linéaire
28
+ - `PIL` (Pillow) : pour la manipulation d'images
29
+
30
+ Vous pouvez installer ces dépendances via `pip` :
31
+
32
+ ## Utilisation
33
+
34
+ Se rendre à l'adresse suivante pour utiliser le calculateur : https://huggingface.co/spaces/Gauthier76/test1
35
+
36
+
37
+ Information sur les fonctions :
38
+
39
+ - calculate_and_plot(system, material, uf_existing, uf_new) :
40
+ Cette fonction effectue les calculs des émissions de GES en fonction de ΔUf et génère un graphique qui aide à visualiser la rentabilité du remplacement ou de la réutilisation d'un cadre.
41
+
42
+ - estimate_uf(year, frame_type) :
43
+ Cette fonction permet d'estimer Uf pour un cadre donné en fonction de l'année et du type de cadre (Bois, PVC, Alu, etc.). Les résultats sont obtenus par une régression linéaire entre les années 1950 et 2020.
44
+
45
+ ## Exemple de graphique
46
+
47
+ ![img.png](img.png)
48
+
49
+ ## Contributeur
50
+
51
+ Gauthier Demonchy - Heig-VD , Yverdon les bains Suisse
requirements.txt ADDED
Binary file (402 Bytes). View file
 
styles.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ css = """
2
+ #top-right-image {
3
+ position: absolute;
4
+ top: 10px;
5
+ right: 10px;
6
+ width: 150px; /* Ajuste la taille si besoin */
7
+ height: auto;
8
+ }
9
+ """
10
+
11
+ with gr.Blocks(css=css) as demo: