ginipick commited on
Commit
5b26d99
ยท
verified ยท
1 Parent(s): ec07646

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +127 -2
app.py CHANGED
@@ -173,6 +173,130 @@ async def try_openai_api(openai_messages):
173
  raise e
174
 
175
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  def analyze_code(code: str) -> str:
177
  """์ฝ”๋“œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ HTML ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜"""
178
  analysis = []
@@ -195,13 +319,14 @@ def analyze_code(code: str) -> str:
195
  for line in code.split('\n'):
196
  if line.startswith('import ') or line.startswith('from '):
197
  imports.append(line.strip())
198
- # ํŒจํ‚ค์ง€ ์ด๋ฆ„ ์ถ”์ถœ
199
  if line.startswith('import '):
200
  package = line.split('import ')[1].split()[0].split('.')[0]
201
  else:
202
  package = line.split('from ')[1].split()[0].split('.')[0]
203
- required_packages.add(package)
204
 
 
205
  if imports:
206
  analysis.append("<h2>๐Ÿ“š ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ</h2>")
207
  analysis.append("<ul>")
 
173
  raise e
174
 
175
 
176
+ # Import to Package Name Mapping Dictionary
177
+ IMPORT_TO_PACKAGE = {
178
+ 'PIL': 'pillow',
179
+ 'cv2': 'opencv-python',
180
+ 'sklearn': 'scikit-learn',
181
+ 'bs4': 'beautifulsoup4',
182
+ 'yaml': 'pyyaml',
183
+ 'tensorflow': 'tensorflow-cpu',
184
+ 'tf': 'tensorflow-cpu',
185
+ 'wx': 'wxPython',
186
+ 'cairo': 'pycairo',
187
+ 'MySQLdb': 'mysqlclient',
188
+ 'psycopg2': 'psycopg2-binary',
189
+ 'magic': 'python-magic',
190
+ 'Image': 'pillow',
191
+ 'skimage': 'scikit-image',
192
+ 'matplotlib.pyplot': 'matplotlib',
193
+ 'plt': 'matplotlib',
194
+ 'np': 'numpy',
195
+ 'pd': 'pandas',
196
+ 'torch': 'pytorch',
197
+ 'transformers': 'transformers',
198
+ 'librosa': 'librosa',
199
+ 'nltk': 'nltk',
200
+ 'spacy': 'spacy',
201
+ 'requests': 'requests',
202
+ 'flask': 'flask',
203
+ 'fastapi': 'fastapi',
204
+ 'aiohttp': 'aiohttp',
205
+ 'imageio': 'imageio',
206
+ 'moviepy': 'moviepy',
207
+ 'networkx': 'networkx',
208
+ 'statsmodels': 'statsmodels',
209
+ 'seaborn': 'seaborn',
210
+ 'bokeh': 'bokeh',
211
+ 'plotly': 'plotly',
212
+ 'dash': 'dash',
213
+ 'streamlit': 'streamlit',
214
+ 'altair': 'altair',
215
+ 'geopandas': 'geopandas',
216
+ 'folium': 'folium',
217
+ 'shapely': 'shapely',
218
+ 'fiona': 'fiona',
219
+ 'rasterio': 'rasterio',
220
+ 'gdal': 'gdal',
221
+ 'pyproj': 'pyproj',
222
+ 'rtree': 'rtree',
223
+ 'cartopy': 'cartopy',
224
+ 'geoplot': 'geoplot',
225
+ 'descartes': 'descartes',
226
+ 'pysal': 'pysal',
227
+ 'geopy': 'geopy',
228
+ 'osmnx': 'osmnx',
229
+ 'contextily': 'contextily',
230
+ 'xarray': 'xarray',
231
+ 'netCDF4': 'netCDF4',
232
+ 'h5py': 'h5py',
233
+ 'tables': 'pytables',
234
+ 'zarr': 'zarr',
235
+ 'dask': 'dask',
236
+ 'numba': 'numba',
237
+ 'sympy': 'sympy',
238
+ 'scipy': 'scipy',
239
+ 'scikit-image': 'scikit-image',
240
+ 'scikit-learn': 'scikit-learn',
241
+ 'keras': 'keras',
242
+ 'theano': 'theano',
243
+ 'caffe': 'caffe',
244
+ 'mxnet': 'mxnet',
245
+ 'chainer': 'chainer',
246
+ 'pytorch': 'torch',
247
+ 'tensorflow-gpu': 'tensorflow-gpu',
248
+ 'cupy': 'cupy',
249
+ 'pycuda': 'pycuda',
250
+ 'pyopencl': 'pyopencl',
251
+ 'pyvista': 'pyvista',
252
+ 'mayavi': 'mayavi',
253
+ 'vtk': 'vtk',
254
+ 'trimesh': 'trimesh',
255
+ 'open3d': 'open3d-python',
256
+ 'pyqt5': 'PyQt5',
257
+ 'pyside2': 'PySide2',
258
+ 'tkinter': 'tk',
259
+ 'kivy': 'kivy',
260
+ 'pygame': 'pygame',
261
+ 'arcade': 'arcade',
262
+ 'pyglet': 'pyglet',
263
+ 'panda3d': 'panda3d',
264
+ 'ursina': 'ursina',
265
+ 'moderngl': 'moderngl',
266
+ 'glfw': 'glfw',
267
+ 'pyopengl': 'PyOpenGL',
268
+ 'pysdl2': 'PySDL2',
269
+ 'pybullet': 'pybullet',
270
+ 'box2d': 'box2d-py',
271
+ 'pymunk': 'pymunk',
272
+ 'pyode': 'pyode',
273
+ 'pyrr': 'pyrr',
274
+ 'noise': 'noise',
275
+ 'wave': 'wave',
276
+ 'sounddevice': 'sounddevice',
277
+ 'pyaudio': 'PyAudio',
278
+ 'simpleaudio': 'simpleaudio',
279
+ 'pygame.mixer': 'pygame',
280
+ 'pydub': 'pydub',
281
+ 'aubio': 'aubio',
282
+ 'music21': 'music21',
283
+ 'pretty_midi': 'pretty_midi',
284
+ 'mido': 'mido',
285
+ 'fluidsynth': 'fluidsynth',
286
+ 'mingus': 'mingus',
287
+ 'pyfluidsynth': 'pyfluidsynth',
288
+ 'python-rtmidi': 'python-rtmidi',
289
+ 'pygame.midi': 'pygame',
290
+ 'soundfile': 'soundfile',
291
+ 'resampy': 'resampy'
292
+ }
293
+
294
+ def get_package_name(import_name):
295
+ """์ž„ํฌํŠธ๋ช…์œผ๋กœ๋ถ€ํ„ฐ ์‹ค์ œ ํŒจํ‚ค์ง€๋ช…์„ ๋ฐ˜ํ™˜"""
296
+ # ์ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ฒซ ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉ (์˜ˆ: matplotlib.pyplot -> matplotlib)
297
+ base_import = import_name.split('.')[0]
298
+ return IMPORT_TO_PACKAGE.get(base_import, base_import)
299
+
300
  def analyze_code(code: str) -> str:
301
  """์ฝ”๋“œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ HTML ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜"""
302
  analysis = []
 
319
  for line in code.split('\n'):
320
  if line.startswith('import ') or line.startswith('from '):
321
  imports.append(line.strip())
322
+ # ํŒจํ‚ค์ง€ ์ด๋ฆ„ ์ถ”์ถœ ๋ฐ ๋ณ€ํ™˜
323
  if line.startswith('import '):
324
  package = line.split('import ')[1].split()[0].split('.')[0]
325
  else:
326
  package = line.split('from ')[1].split()[0].split('.')[0]
327
+ required_packages.add(get_package_name(package))
328
 
329
+
330
  if imports:
331
  analysis.append("<h2>๐Ÿ“š ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ</h2>")
332
  analysis.append("<ul>")