Hyeonseo commited on
Commit
0259f08
β€’
1 Parent(s): e54bae7

init: Upload PA source code and enviroment seting

Browse files
Files changed (3) hide show
  1. app.py +264 -0
  2. env_set.py +17 -0
  3. requirements.txt +426 -0
app.py ADDED
@@ -0,0 +1,264 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import env_set
2
+ env_set.env_set()
3
+
4
+ import streamlit as st
5
+ import time
6
+ import numpy as np
7
+ import pandas as pd
8
+ from sklearn import datasets
9
+ from sklearn.ensemble import RandomForestClassifier
10
+ import PyPDF2
11
+ import openai
12
+ import subprocess
13
+
14
+
15
+ # text2ppt ν”„λ‘¬ν”„νŠΈ 생성 ν•¨μˆ˜
16
+ def generate_text2ppt_input_prompt(input_type, input_value, input_pages):
17
+ header = """
18
+ λ„ˆκ°€ Marp λ¬Έλ²•μœΌλ‘œ PPTλ₯Ό μ œμž‘ν•˜λŠ” λ””μžμ΄λ„ˆλΌκ³  κ°€μ •ν•˜κ³ , %sμž₯의 PPTλ₯Ό μž‘μ„±ν•΄.
19
+ +++ μ•„λž˜ λ‚΄μš© λ˜λŠ” 링크λ₯Ό μš”μ•½ν•΄μ„œ λ§ˆν¬λ‹€μš΄ μ–Έμ–΄λ‘œ μž‘μ„±ν•˜λŠ”λ°, === μ•„λž˜ κ·œμΉ™κ³Ό 지킀고, ~~~ μ•„λž˜ μŠ¬λΌμ΄λ“œ μ˜ˆμ‹œλ₯Ό μ°Έκ³ ν•΄.
20
+
21
+ +++
22
+ """ % input_pages
23
+
24
+ summary_value = ""
25
+
26
+ if input_type == "링크":
27
+ summary_value += input_value
28
+ summary_value += "ν…μŠ€νŠΈ"
29
+ elif input_type == "text":
30
+ summary_value += input_value
31
+ summary_value += "\n"
32
+ elif input_type == "PDF":
33
+ with open(input_value, 'rb') as pdf_file:
34
+ pdf_reader = PyPDF2.PdfReader(pdf_file)
35
+ num_pages = len(pdf_reader.pages)
36
+
37
+ # 각 νŽ˜μ΄μ§€μ˜ λ‚΄μš©μ„ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
38
+ text = ""
39
+ for page_num in range(num_pages):
40
+ page = pdf_reader.pages[page_num]
41
+ text += page.extract_text()
42
+ summary_value += text
43
+ summary_value += "\n"
44
+ else:
45
+ print("ERROR: 잘λͺ»λœ μž…λ ₯")
46
+
47
+ rule_value = """
48
+ ===
49
+ - μ œμ‹œν•œ λ‚΄μš© λ˜λŠ” 링크의 λ‚΄μš©μ— λŒ€ν•΄μ„œλ§Œ μ‚¬μ‹€μ μœΌλ‘œ μž‘μ„±ν•΄μ€˜.
50
+ - μŠ¬λΌμ΄λ“œ κ΅¬λΆ„μžλ‘œ ---λ₯Ό 무쑰건 μ‚¬μš©ν•΄μ€˜.
51
+ - μ£Όμ œμ— μ μ ˆν•œ λ„ν˜•, 이미지(![이미지](이미지링크), https://unsplash.com/ko/images/stock/non-copyrighted μ—μ„œ μ‹€μ œλ‘œ μ‚¬μš© κ°€λŠ₯ν•œ), ν‘œ(|-|), 인용(>), κ°•μ‘°(bold, ``), 이λͺ¨μ§€(https://kr.piliapp.com/twitter-symbols/), μ•„μ΄μ½˜ (https://kr.piliapp.com/symbol/#popular) 등이 λ‹€μ–‘ν•˜κ²Œ μŠ¬λΌμ΄λ“œλ₯Ό λ””μžμΈν•˜κ³  λ°°μΉ˜ν•΄μ€˜.
52
+ - 이λͺ¨μ§€λŠ” μ΅œλŒ€ 2 νŽ˜μ΄μ§€μ— ν•œ 번만 μ‚¬μš©ν•˜κ³ , λ‹€λ₯Έ λ””μžμΈμ„ λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©ν•΄μ€˜.
53
+ - 이미지와 ν‘œλ₯Ό μ‚¬μš©ν•  λ•Œ, νŽ˜μ΄μ§€ 크기와 κ³ λ €ν•΄μ„œ κΈ€ λ‚΄μš©μ΄ λͺ¨λ‘ λ‚˜νƒ€λ‚˜λ„λ‘ 크기λ₯Ό μ§€μ •ν•΄μ€˜.
54
+ - Slide 1λ₯Ό 제λͺ©μœΌλ‘œ ν•΄μ„œ 총 %sμž₯이야.
55
+ - PPT의 λ‚΄μš©μ„ ν’λΆ€ν•˜κ²Œ λ§ˆν¬λ‹€μš΄μœΌλ‘œ μž‘μ„±ν•΄μ€˜.
56
+ - μŠ¬λΌμ΄λ“œ λ³„λ‘œ μ„€λͺ…ν•˜μ§€λ§κ³ , μ½”λ“œλ§Œ μž‘μ„±ν•΄μ€˜.
57
+ - μ˜ˆμ‹œμ˜ λ‚΄μš©μ„ μ‚¬μš©ν•΄μ„œ μž‘μ„±ν•˜μ§€λ§κ³ , ν˜•μ‹λ§Œ μ°Έκ³ ν•΄.
58
+
59
+ ~~~
60
+ <!-- Slide 0. μŠ¬λΌμ΄λ“œ 주제 -->
61
+ # μŠ¬λΌμ΄λ“œ 제λͺ©
62
+ ![이미지링크](https://huggingface.co/datasets/huggingface/brand-assets/resolve/main/hf-logo-with-title.png)
63
+ - ChatGPTλ₯Ό ν™œμš©ν•œ πŸ€—**TEXT2PPT μ„œλΉ„μŠ€ PA!**μž…λ‹ˆλ‹€.
64
+ - `링크`,`ν…μŠ€νŠΈ`, `PDF`λ₯Ό μž…λ ₯ λ˜λŠ” μ—…λ‘œλ“œν•˜λ©΄, PPT둜 λ³€ν™˜ν•©λ‹ˆλ‹€.
65
+ """ % input_pages
66
+
67
+ return header + summary_value + rule_value
68
+
69
+
70
+ # text2ppt μ‹€ν–‰ ν•¨μˆ˜
71
+ def text2ppt(token_key, input_prompt, input_theme):
72
+ openai.api_key = token_key
73
+
74
+ messages = [
75
+ {"role": "system", "content": "You are a kind helpful PPT designer."},
76
+ ]
77
+
78
+ message = input_prompt
79
+
80
+ if message:
81
+ messages.append(
82
+ {"role": "user", "content": message},
83
+ )
84
+ chat = openai.ChatCompletion.create(
85
+ model="gpt-3.5-turbo-0301", messages=messages
86
+ )
87
+
88
+ reply = chat.choices[0].message.content
89
+ messages.append({"role": "assistant", "content": reply})
90
+
91
+ revised_reply = reply[4:] if reply[:3] == "---" else reply
92
+
93
+ ppt_theme = input_theme
94
+
95
+ marp_header = """---
96
+ marp: true
97
+ theme: %s
98
+ footer: 'PA!(Presentation Assistant)'
99
+ paginate: true
100
+ ---
101
+ """ % input_theme
102
+
103
+ md_text = marp_header + revised_reply
104
+
105
+ md_text_list = md_text.split('\n')
106
+
107
+ # writedata.py
108
+ f = open("text2ppt_test.md", 'w')
109
+ for i in range(0, len(md_text_list)):
110
+ data = md_text_list[i] + "\n"
111
+ f.write(data)
112
+ f.close()
113
+
114
+ subprocess.run(
115
+ f"npx @marp-team/marp-cli@latest --pdf-fonts-dir=/usr/share/fonts/truetype/nanum --pdf-default-font=NanumGothic -o output.pdf text2ppt_test.md --chrome-path=/usr/bin/google-chrome-stable",
116
+ shell=True)
117
+
118
+
119
+ def ppt2script(token_key, input_file, input_type):
120
+ openai.api_key = token_key
121
+
122
+ with open(input_file, 'rb') as pdf_file:
123
+ pdf_reader = PyPDF2.PdfReader(pdf_file)
124
+ num_pages = len(pdf_reader.pages)
125
+
126
+ # 각 νŽ˜μ΄μ§€μ˜ λ‚΄μš©μ„ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
127
+ text = ""
128
+ for page_num in range(num_pages):
129
+ page = pdf_reader.pages[page_num]
130
+ text += "[PAGE_NUM " + str(page_num + 1) + "]"
131
+ text += page.extract_text()
132
+
133
+ header = """
134
+ λ„ˆλŠ”λŠ” PPT λ°œν‘œμ— 도움을 μ£ΌλŠ” μ‘°λ ₯μžμ•Ό.
135
+ ~~~μ•„λž˜ κ·œμΉ™μ„ 지킀고, --- μ•„λž˜ PPT λ‚΄μš©μ— λŒ€ν•΄ λ°œν‘œ 슀크립트λ₯Ό ν•œκΈ€λ‘œ μž‘μ„±ν•΄.
136
+
137
+ ~~~
138
+ - [PAGE_NUM 1] 일 λ•Œ, μ—¬κΈ°μ„œ 1은 νŽ˜μ΄μ§€ 번호인데, νŽ˜μ΄μ§€ λ²ˆν˜Έλ§ˆλ‹€ λ°œν‘œ 슀크립트λ₯Ό μž‘μ„±ν•΄.
139
+ - λ§ˆν¬λ‹€μš΄ μ–Έμ–΄λ₯Ό μ“°μ§€μ•Šκ³ , ν…μŠ€νŠΈλ‘œλ§Œ μž‘μ„±ν•΄.
140
+ - PPT λ‚΄μš©μ— 좔가적인 μ„€λͺ…μ΄λ‚˜ 사둀λ₯Ό λ§λΆ™μ—¬μ€˜.
141
+
142
+ ---
143
+ """
144
+
145
+ input_prompt = header + text
146
+
147
+ messages = [
148
+ {"role": "system", "content": "You are a kind helpful PPT Assistant."},
149
+ ]
150
+
151
+ message = input_prompt
152
+
153
+ if message:
154
+ messages.append(
155
+ {"role": "user", "content": message},
156
+ )
157
+ chat = openai.ChatCompletion.create(
158
+ model="gpt-3.5-turbo-0301", messages=messages
159
+ )
160
+
161
+ reply = chat.choices[0].message.content
162
+ messages.append({"role": "assistant", "content": reply})
163
+
164
+ return reply
165
+
166
+
167
+ ####### ν™”λ©΄ μ‹œμž‘ ########
168
+ tab1, tab2, tab3 = st.tabs(['PA!λž€?', 'Text2PPT', 'PPT2Script'])
169
+
170
+ with tab1:
171
+ st.header('μ†Œκ°œ')
172
+ st.title('PA!(Presentation Assistant):sparkles:')
173
+ contents = """
174
+ : μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ‚΄μš©μ„ 기반으둜 PPTλ₯Ό :blue[μžλ™ μ œμž‘]ν•˜κ³ ,
175
+
176
+ ν”„λ ˆμ  ν…Œμ΄μ…˜ :red[슀크립트λ₯Ό 제곡]ν•˜μ—¬ ν”„λ ˆμ  ν…Œμ΄μ…˜ μ—­λŸ‰μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€!"""
177
+ st.markdown(contents)
178
+ st.markdown('-------------------------')
179
+ st.header('μ‚¬μš©λ²•')
180
+ st.subheader('Text2PPT')
181
+ contents = """
182
+ : μ‚¬μš©μžμ—κ²Œ λ§ν¬λ‚˜ νŒŒμΌμ„ μ „λ‹¬λ°›μœΌλ©΄ κ·Έ λ‚΄μš©μœΌλ‘œ :blue[λ°œν‘œ 자료λ₯Ό μ œμž‘]ν•΄ λ“œλ¦½λ‹ˆλ‹€!
183
+
184
+ μ‚¬μš©μžλŠ” μ›ν•˜λŠ” ν…Œλ§ˆ(ν…œν”Œλ¦Ώ) μ’…λ₯˜μ™€ νŽ˜μ΄μ§€ 수만 μ„ νƒν•˜μ„Έμš”!"""
185
+ st.markdown(contents)
186
+ st.subheader('PPT2Script')
187
+ contents = """
188
+ : ppt λ˜λŠ” pdf λ°œν‘œ 자료λ₯Ό μ‚¬μš©μžλ‘œλΆ€ν„° μ œκ³΅λ°›μœΌλ©΄ μžλ™μœΌλ‘œ :blue[λ°œν‘œ λŒ€λ³Έ]을 λ§Œλ“€μ–΄λ“œλ¦½λ‹ˆλ‹€!"""
189
+ st.markdown(contents)
190
+
191
+ with tab2:
192
+ st.header('Text2PPT')
193
+ gpt_token = st.text_input('μ±— gpt토큰을 μž…λ ₯ν•΄ μ£Όμ„Έμš”.', key="<Text2PPT_token>")
194
+ st.markdown('-------------------------')
195
+
196
+ st.subheader(':computer:λ¬Έμ„œ ppt μžλ™ 생성기:computer:')
197
+
198
+ thema_select = st.selectbox(
199
+ 'μ›ν•˜λŠ” ν…Œλ§ˆλ₯Ό μ„ νƒν•˜μ„Έμš”',
200
+ ['default', 'gaia', 'uncover'])
201
+
202
+ st.markdown('-------------------------')
203
+
204
+ page_choice = st.slider('ppt νŽ˜μ΄μ§€ μž₯수', min_value=2, max_value=10, step=1, value=5)
205
+
206
+ st.markdown('-------------------------')
207
+
208
+ my_order = ['ν…μŠ€νŠΈ', '링크', 'PDF']
209
+ status = st.radio('파일 μ’…λ₯˜λ₯Ό μ„ νƒν•˜κ³  λ‚΄μš©μ„ μž…λ ₯ν•˜μ„Έμš”! :smile: ', my_order)
210
+
211
+ # 첫번째 방법
212
+ if status == my_order[0]:
213
+ input_text = st.text_area('textλ₯Ό μž…λ ₯ν•˜μ„Έμš”', height=5)
214
+
215
+ elif status == my_order[1]:
216
+ input_text = st.text_area('urlλ₯Ό μž…λ ₯ν•˜μ„Έμš”', height=5)
217
+
218
+ elif status == my_order[2]:
219
+ input_text = st.file_uploader('νŒŒμΌμ„ μ—…λ‘œλ“œ ν•˜μ„Έμš”', type=['pdf'])
220
+
221
+ input_text_check = st.button('확인', key="<Text2PPT_start>") # 이 λ²„νŠΌ λˆ„λ₯΄λ©΄ μž…λ ₯ν…μŠ€νŠΈκ°€ λ„˜μ–΄κ°€κ²Œ 해야함
222
+
223
+ st.markdown('-------------------------')
224
+
225
+ if input_text_check == True:
226
+ with st.spinner('Wait for it...'):
227
+ text2ppt(gpt_token, generate_text2ppt_input_prompt(status, input_text, page_choice), thema_select)
228
+ with open("output.pdf", "rb") as pdf_file:
229
+ PDFbyte = pdf_file.read()
230
+ st.success('Done!')
231
+ st.download_button(label="Download PPT",
232
+ data=PDFbyte,
233
+ file_name="export_output.pdf",
234
+ mime='application/octet-stream', key="<Text2PPT_download>")
235
+
236
+ with tab3:
237
+ st.header('PPT2Script')
238
+ gpt_token = st.text_input('μ±—gpt토큰을 μž…λ ₯ν•΄μ£Όμ„Έμš”.', key="<PPT2Script_token>")
239
+ st.markdown('-------------------------')
240
+
241
+ st.subheader(':bookmark_tabs:λ°œν‘œ λŒ€λ³Έ 생성기')
242
+
243
+ file_order = ['PDF', 'PPT']
244
+ choose = st.radio('λ°œν‘œ 자료의 파일 ν˜•μ‹μ„ 선택해 μ£Όμ„Έμš”', file_order)
245
+
246
+ if choose == file_order[0]:
247
+ uploaded_file = st.file_uploader('Choose File!', type='pdf')
248
+ elif choose == file_order[1]:
249
+ uploaded_file = st.file_uploader('Choose File!', type='pptx')
250
+
251
+ input_file_check = st.button('확인', key="<PPT2Script_start>") # 이 λ²„νŠΌ λˆ„λ₯΄λ©΄ μž…λ ₯ 파일이 λ„˜μ–΄κ°€κ²Œ 해야함
252
+ st.markdown('-------------------------')
253
+
254
+ if input_file_check == True:
255
+ with st.spinner('Wait for it...'):
256
+ with open(uploaded_file.name, mode='wb') as w:
257
+ w.write(uploaded_file.getvalue())
258
+
259
+ script = ppt2script(gpt_token, uploaded_file.name, choose)
260
+
261
+ st.success('Done!')
262
+ st.download_button('Download Script',
263
+ data=script, file_name="script_output.txt", key="<PPT2Script_download>")
264
+
env_set.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+
3
+ def env_set():
4
+ subprocess.run(f"pip install streamlit", shell=True)
5
+ subprocess.run(f"pip install pyngrok", shell=True)
6
+ subprocess.run(f"pip install -q openai", shell=True)
7
+ subprocess.run(f"pip install PyPDF2", shell=True)
8
+ subprocess.run(f"pip install python-pptx==0.6.18", shell=True)
9
+ subprocess.run(f"sudo apt-get install -f", shell=True)
10
+ subprocess.run(f"sudo apt-get install -y fonts-nanum", shell=True)
11
+ subprocess.run(f"sudo fc-cache -fv", shell=True)
12
+ subprocess.run(f"rm ~/.cache/matplotlib -rf", shell=True)
13
+ subprocess.run(f"curl https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -o chrome.deb", shell=True)
14
+ subprocess.run(f"curl https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -o chrome.deb", shell=True)
15
+ subprocess.run(f"dpkg --install chrome.deb", shell=True)
16
+ subprocess.run(f"apt-get install --fix-broken --assume-yes", shell=True)
17
+
requirements.txt ADDED
@@ -0,0 +1,426 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ absl-py==1.4.0
2
+ aiohttp==3.8.4
3
+ aiosignal==1.3.1
4
+ alabaster==0.7.13
5
+ albumentations==1.2.1
6
+ altair==4.2.2
7
+ anyio==3.6.2
8
+ appdirs==1.4.4
9
+ argon2-cffi==21.3.0
10
+ argon2-cffi-bindings==21.2.0
11
+ arviz==0.15.1
12
+ astropy==5.2.2
13
+ astunparse==1.6.3
14
+ async-timeout==4.0.2
15
+ attrs==22.2.0
16
+ audioread==3.0.0
17
+ autograd==1.5
18
+ Babel==2.12.1
19
+ backcall==0.2.0
20
+ beautifulsoup4==4.11.2
21
+ bleach==6.0.0
22
+ blinker==1.6.2
23
+ blis==0.7.9
24
+ blosc2==2.0.0
25
+ bokeh==2.4.3
26
+ branca==0.6.0
27
+ CacheControl==0.12.11
28
+ cached-property==1.5.2
29
+ cachetools==5.3.0
30
+ catalogue==2.0.8
31
+ certifi==2022.12.7
32
+ cffi==1.15.1
33
+ chardet==4.0.0
34
+ charset-normalizer==2.0.12
35
+ chex==0.1.7
36
+ click==8.1.3
37
+ cloudpickle==2.2.1
38
+ cmake==3.25.2
39
+ cmdstanpy==1.1.0
40
+ colorcet==3.0.1
41
+ colorlover==0.3.0
42
+ community==1.0.0b1
43
+ confection==0.0.4
44
+ cons==0.4.5
45
+ contextlib2==0.6.0.post1
46
+ contourpy==1.0.7
47
+ convertdate==2.4.0
48
+ cryptography==40.0.1
49
+ cufflinks==0.17.3
50
+ cvxopt==1.3.0
51
+ cvxpy==1.3.1
52
+ cycler==0.11.0
53
+ cymem==2.0.7
54
+ Cython==0.29.34
55
+ dask==2022.12.1
56
+ datascience==0.17.6
57
+ db-dtypes==1.1.1
58
+ dbus-python==1.2.16
59
+ debugpy==1.6.6
60
+ decorator==4.4.2
61
+ defusedxml==0.7.1
62
+ distributed==2022.12.1
63
+ dlib==19.24.1
64
+ dm-tree==0.1.8
65
+ docutils==0.16
66
+ dopamine-rl==4.0.6
67
+ earthengine-api==0.1.348
68
+ easydict==1.10
69
+ ecos==2.0.12
70
+ editdistance==0.6.2
71
+ en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.5.0/en_core_web_sm-3.5.0-py3-none-any.whl
72
+ entrypoints==0.4
73
+ ephem==4.1.4
74
+ et-xmlfile==1.1.0
75
+ etils==1.2.0
76
+ etuples==0.3.8
77
+ exceptiongroup==1.1.1
78
+ fastai==2.7.12
79
+ fastcore==1.5.29
80
+ fastdownload==0.0.7
81
+ fastjsonschema==2.16.3
82
+ fastprogress==1.0.3
83
+ fastrlock==0.8.1
84
+ filelock==3.11.0
85
+ firebase-admin==5.3.0
86
+ Flask==2.2.3
87
+ flatbuffers==23.3.3
88
+ flax==0.6.8
89
+ folium==0.14.0
90
+ fonttools==4.39.3
91
+ frozendict==2.3.7
92
+ frozenlist==1.3.3
93
+ fsspec==2023.4.0
94
+ future==0.18.3
95
+ gast==0.4.0
96
+ GDAL==3.3.2
97
+ gdown==4.6.6
98
+ gensim==4.3.1
99
+ geographiclib==2.0
100
+ geopy==2.3.0
101
+ gin-config==0.5.0
102
+ gitdb==4.0.10
103
+ GitPython==3.1.31
104
+ glob2==0.7
105
+ google==2.0.3
106
+ google-api-core==2.11.0
107
+ google-api-python-client==2.84.0
108
+ google-auth==2.17.2
109
+ google-auth-httplib2==0.1.0
110
+ google-auth-oauthlib==1.0.0
111
+ google-cloud-bigquery==3.9.0
112
+ google-cloud-bigquery-storage==2.19.1
113
+ google-cloud-core==2.3.2
114
+ google-cloud-datastore==2.15.1
115
+ google-cloud-firestore==2.11.0
116
+ google-cloud-language==2.9.1
117
+ google-cloud-storage==2.8.0
118
+ google-cloud-translate==3.11.1
119
+ google-colab @ file:///colabtools/dist/google-colab-1.0.0.tar.gz
120
+ google-crc32c==1.5.0
121
+ google-pasta==0.2.0
122
+ google-resumable-media==2.4.1
123
+ googleapis-common-protos==1.59.0
124
+ googledrivedownloader==0.4
125
+ graphviz==0.20.1
126
+ greenlet==2.0.2
127
+ grpcio==1.53.0
128
+ grpcio-status==1.48.2
129
+ gspread==3.4.2
130
+ gspread-dataframe==3.0.8
131
+ gym==0.25.2
132
+ gym-notices==0.0.8
133
+ h5netcdf==1.1.0
134
+ h5py==3.8.0
135
+ HeapDict==1.0.1
136
+ hijri-converter==2.2.4
137
+ holidays==0.22
138
+ holoviews==1.15.4
139
+ html5lib==1.1
140
+ httpimport==1.3.0
141
+ httplib2==0.21.0
142
+ humanize==4.6.0
143
+ hyperopt==0.2.7
144
+ idna==3.4
145
+ imageio==2.25.1
146
+ imageio-ffmpeg==0.4.8
147
+ imagesize==1.4.1
148
+ imbalanced-learn==0.10.1
149
+ imgaug==0.4.0
150
+ importlib-metadata==6.3.0
151
+ importlib-resources==5.12.0
152
+ imutils==0.5.4
153
+ inflect==6.0.4
154
+ iniconfig==2.0.0
155
+ intel-openmp==2023.1.0
156
+ ipykernel==5.5.6
157
+ ipython==7.34.0
158
+ ipython-genutils==0.2.0
159
+ ipython-sql==0.4.1
160
+ ipywidgets==7.7.1
161
+ itsdangerous==2.1.2
162
+ jax==0.4.8
163
+ jaxlib @ https://storage.googleapis.com/jax-releases/cuda11/jaxlib-0.4.7+cuda11.cudnn86-cp39-cp39-manylinux2014_x86_64.whl
164
+ jieba==0.42.1
165
+ Jinja2==3.1.2
166
+ joblib==1.2.0
167
+ jsonpickle==3.0.1
168
+ jsonschema==4.3.3
169
+ jupyter-client==6.1.12
170
+ jupyter-console==6.1.0
171
+ jupyter-server==1.23.6
172
+ jupyter_core==5.3.0
173
+ jupyterlab-pygments==0.2.2
174
+ jupyterlab-widgets==3.0.7
175
+ kaggle==1.5.13
176
+ keras==2.12.0
177
+ keras-vis==0.4.1
178
+ kiwisolver==1.4.4
179
+ korean-lunar-calendar==0.3.1
180
+ langcodes==3.3.0
181
+ lazy_loader==0.2
182
+ libclang==16.0.0
183
+ librosa==0.10.0.post2
184
+ lightgbm==3.3.5
185
+ lit==16.0.1
186
+ llvmlite==0.39.1
187
+ locket==1.0.0
188
+ logical-unification==0.4.5
189
+ LunarCalendar==0.0.9
190
+ lxml==4.9.2
191
+ Markdown==3.4.3
192
+ markdown-it-py==2.2.0
193
+ MarkupSafe==2.1.2
194
+ matplotlib==3.7.1
195
+ matplotlib-inline==0.1.6
196
+ matplotlib-venn==0.11.9
197
+ mdurl==0.1.2
198
+ miniKanren==1.0.3
199
+ missingno==0.5.2
200
+ mistune==0.8.4
201
+ mizani==0.8.1
202
+ mkl==2019.0
203
+ ml-dtypes==0.0.4
204
+ mlxtend==0.14.0
205
+ more-itertools==9.1.0
206
+ moviepy==1.0.3
207
+ mpmath==1.3.0
208
+ msgpack==1.0.5
209
+ multidict==6.0.4
210
+ multipledispatch==0.6.0
211
+ multitasking==0.0.11
212
+ murmurhash==1.0.9
213
+ music21==8.1.0
214
+ natsort==8.3.1
215
+ nbclient==0.7.3
216
+ nbconvert==6.5.4
217
+ nbformat==5.8.0
218
+ nest-asyncio==1.5.6
219
+ networkx==3.1
220
+ nibabel==3.0.2
221
+ nltk==3.8.1
222
+ notebook==6.4.8
223
+ numba==0.56.4
224
+ numexpr==2.8.4
225
+ numpy==1.22.4
226
+ oauth2client==4.1.3
227
+ oauthlib==3.2.2
228
+ openai==0.27.4
229
+ opencv-contrib-python==4.7.0.72
230
+ opencv-python==4.7.0.72
231
+ opencv-python-headless==4.7.0.72
232
+ openpyxl==3.0.10
233
+ opt-einsum==3.3.0
234
+ optax==0.1.4
235
+ orbax==0.1.7
236
+ osqp==0.6.2.post0
237
+ packaging==23.0
238
+ palettable==3.3.1
239
+ pandas==1.5.3
240
+ pandas-datareader==0.10.0
241
+ pandas-gbq==0.17.9
242
+ pandocfilters==1.5.0
243
+ panel==0.14.4
244
+ param==1.13.0
245
+ parso==0.8.3
246
+ partd==1.3.0
247
+ pathlib==1.0.1
248
+ pathy==0.10.1
249
+ patsy==0.5.3
250
+ pep517==0.13.0
251
+ pexpect==4.8.0
252
+ pickleshare==0.7.5
253
+ Pillow==8.4.0
254
+ pip-tools==6.6.2
255
+ platformdirs==3.2.0
256
+ plotly==5.13.1
257
+ plotnine==0.10.1
258
+ pluggy==1.0.0
259
+ pooch==1.6.0
260
+ portpicker==1.3.9
261
+ prefetch-generator==1.0.3
262
+ preshed==3.0.8
263
+ prettytable==0.7.2
264
+ proglog==0.1.10
265
+ progressbar2==4.2.0
266
+ prometheus-client==0.16.0
267
+ promise==2.3
268
+ prompt-toolkit==3.0.38
269
+ prophet==1.1.2
270
+ proto-plus==1.22.2
271
+ protobuf==3.20.3
272
+ psutil==5.9.4
273
+ psycopg2==2.9.6
274
+ ptyprocess==0.7.0
275
+ py-cpuinfo==9.0.0
276
+ py4j==0.10.9.7
277
+ pyarrow==9.0.0
278
+ pyasn1==0.4.8
279
+ pyasn1-modules==0.2.8
280
+ pycocotools==2.0.6
281
+ pycparser==2.21
282
+ pyct==0.5.0
283
+ pydantic==1.10.7
284
+ pydata-google-auth==1.7.0
285
+ pydeck==0.8.1b0
286
+ pydot==1.4.2
287
+ pydot-ng==2.0.0
288
+ pydotplus==2.0.2
289
+ PyDrive==1.3.1
290
+ pyerfa==2.0.0.3
291
+ pygame==2.3.0
292
+ Pygments==2.14.0
293
+ PyGObject==3.36.0
294
+ pymc==5.1.2
295
+ PyMeeus==0.5.12
296
+ Pympler==1.0.1
297
+ pymystem3==0.2.0
298
+ pyngrok==6.0.0
299
+ PyOpenGL==3.1.6
300
+ pyparsing==3.0.9
301
+ PyPDF2==3.0.1
302
+ pyrsistent==0.19.3
303
+ PySocks==1.7.1
304
+ pytensor==2.10.1
305
+ pytest==7.2.2
306
+ python-apt==0.0.0
307
+ python-dateutil==2.8.2
308
+ python-louvain==0.16
309
+ python-pptx==0.6.18
310
+ python-slugify==8.0.1
311
+ python-utils==3.5.2
312
+ pytz==2022.7.1
313
+ pytz-deprecation-shim==0.1.0.post0
314
+ pyviz-comms==2.2.1
315
+ PyWavelets==1.4.1
316
+ PyYAML==6.0
317
+ pyzmq==23.2.1
318
+ qdldl==0.1.7
319
+ qudida==0.0.4
320
+ regex==2022.10.31
321
+ requests==2.27.1
322
+ requests-oauthlib==1.3.1
323
+ requests-unixsocket==0.2.0
324
+ rich==13.3.3
325
+ rpy2==3.5.5
326
+ rsa==4.9
327
+ scikit-image==0.19.3
328
+ scikit-learn==1.2.2
329
+ scipy==1.10.1
330
+ scs==3.2.3
331
+ seaborn==0.12.2
332
+ Send2Trash==1.8.0
333
+ shapely==2.0.1
334
+ six==1.16.0
335
+ sklearn-pandas==2.2.0
336
+ smart-open==6.3.0
337
+ smmap==5.0.0
338
+ sniffio==1.3.0
339
+ snowballstemmer==2.2.0
340
+ sortedcontainers==2.4.0
341
+ soundfile==0.12.1
342
+ soupsieve==2.4
343
+ soxr==0.3.5
344
+ spacy==3.5.1
345
+ spacy-legacy==3.0.12
346
+ spacy-loggers==1.0.4
347
+ Sphinx==3.5.4
348
+ sphinxcontrib-applehelp==1.0.4
349
+ sphinxcontrib-devhelp==1.0.2
350
+ sphinxcontrib-htmlhelp==2.0.1
351
+ sphinxcontrib-jsmath==1.0.1
352
+ sphinxcontrib-qthelp==1.0.3
353
+ sphinxcontrib-serializinghtml==1.1.5
354
+ SQLAlchemy==2.0.9
355
+ sqlparse==0.4.3
356
+ srsly==2.4.6
357
+ statsmodels==0.13.5
358
+ streamlit==1.21.0
359
+ sympy==1.11.1
360
+ tables==3.8.0
361
+ tabulate==0.8.10
362
+ tblib==1.7.0
363
+ tenacity==8.2.2
364
+ tensorboard==2.12.1
365
+ tensorboard-data-server==0.7.0
366
+ tensorboard-plugin-wit==1.8.1
367
+ tensorflow==2.12.0
368
+ tensorflow-datasets==4.8.3
369
+ tensorflow-estimator==2.12.0
370
+ tensorflow-gcs-config==2.12.0
371
+ tensorflow-hub==0.13.0
372
+ tensorflow-io-gcs-filesystem==0.32.0
373
+ tensorflow-metadata==1.13.0
374
+ tensorflow-probability==0.19.0
375
+ tensorstore==0.1.35
376
+ termcolor==2.2.0
377
+ terminado==0.17.1
378
+ text-unidecode==1.3
379
+ textblob==0.17.1
380
+ tf-slim==1.1.0
381
+ thinc==8.1.9
382
+ threadpoolctl==3.1.0
383
+ tifffile==2023.3.21
384
+ tinycss2==1.2.1
385
+ toml==0.10.2
386
+ tomli==2.0.1
387
+ toolz==0.12.0
388
+ torch @ https://download.pytorch.org/whl/cu118/torch-2.0.0%2Bcu118-cp39-cp39-linux_x86_64.whl
389
+ torchaudio @ https://download.pytorch.org/whl/cu118/torchaudio-2.0.1%2Bcu118-cp39-cp39-linux_x86_64.whl
390
+ torchdata==0.6.0
391
+ torchsummary==1.5.1
392
+ torchtext==0.15.1
393
+ torchvision @ https://download.pytorch.org/whl/cu118/torchvision-0.15.1%2Bcu118-cp39-cp39-linux_x86_64.whl
394
+ tornado==6.2
395
+ tqdm==4.65.0
396
+ traitlets==5.7.1
397
+ triton==2.0.0
398
+ tweepy==4.13.0
399
+ typer==0.7.0
400
+ typing_extensions==4.5.0
401
+ tzdata==2023.3
402
+ tzlocal==4.3
403
+ uritemplate==4.1.1
404
+ urllib3==1.26.15
405
+ validators==0.20.0
406
+ vega-datasets==0.9.0
407
+ wasabi==1.1.1
408
+ watchdog==3.0.0
409
+ wcwidth==0.2.6
410
+ webcolors==1.13
411
+ webencodings==0.5.1
412
+ websocket-client==1.5.1
413
+ Werkzeug==2.2.3
414
+ widgetsnbextension==3.6.4
415
+ wordcloud==1.8.2.2
416
+ wrapt==1.14.1
417
+ xarray==2022.12.0
418
+ xarray-einstats==0.5.1
419
+ xgboost==1.7.5
420
+ xlrd==2.0.1
421
+ XlsxWriter==3.1.0
422
+ yarl==1.8.2
423
+ yellowbrick==1.5
424
+ yfinance==0.2.17
425
+ zict==2.2.0
426
+ zipp==3.15.0