prashant-garg commited on
Commit
4d31d09
·
1 Parent(s): 32fd3d1

model loading check

Browse files
Files changed (2) hide show
  1. app.py +7 -105
  2. requirements.txt +371 -38
app.py CHANGED
@@ -1,121 +1,23 @@
1
- """
2
- Streamlit application for real-time gender detection from audio input.
3
- Uses wav2vec2 model to analyze voice and predict speaker gender.
4
- """
5
  import streamlit as st
6
- import pyaudio
7
  import numpy as np
8
  import torch
9
  from transformers import AutoFeatureExtractor, AutoModelForAudioClassification
10
- import logging
11
-
12
- # Configure logging
13
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
14
-
15
- # Define audio stream parameters
16
- FORMAT = pyaudio.paInt16 # 16-bit resolution
17
- CHANNELS = 1 # Mono audio
18
- RATE = 16000 # 16kHz sampling rate
19
- CHUNK = 1024 # Number of frames per buffer
20
 
 
21
  @st.cache_resource
22
  def load_model():
23
  """
24
  Load the wav2vec2 model and feature extractor for gender recognition.
25
-
26
- Returns:
27
- tuple: A tuple containing the feature extractor and the model.
28
  """
29
  model_path = "alefiury/wav2vec2-large-xlsr-53-gender-recognition-librispeech"
30
- # model_path = "./local-model"
31
  feature_extractor = AutoFeatureExtractor.from_pretrained(model_path)
32
  model = AutoModelForAudioClassification.from_pretrained(model_path)
33
  model.eval()
34
- logging.info("Model loaded successfully.")
35
  return feature_extractor, model
36
 
37
- st.title("Gender Detection")
38
-
39
- # Initialize session state
40
- if 'listening' not in st.session_state:
41
- st.session_state['listening'] = False
42
- if 'prediction' not in st.session_state:
43
- st.session_state['prediction'] = ""
44
-
45
- # Function to stop listening
46
- def stop_listening():
47
- """Stop the audio stream and update session state to stop listening."""
48
- if 'stream' in st.session_state:
49
- logging.info("Stopping stream")
50
- st.session_state['stream'].stop_stream()
51
- st.session_state['stream'].close()
52
- if 'audio' in st.session_state:
53
- logging.info("Stopping audio")
54
- st.session_state['audio'].terminate()
55
- st.session_state['listening'] = False
56
- st.session_state['prediction'] = "Stopped listening, click 'Start Listening' to start again."
57
- st.rerun()
58
-
59
- def start_listening():
60
- """Start the audio stream and continuously process audio for gender detection."""
61
- placeholder = st.empty()
62
- try:
63
- placeholder.write("Loading model...")
64
- feature_extractor, model = load_model()
65
- audio = pyaudio.PyAudio()
66
- stream = audio.open(format=FORMAT,
67
- channels=CHANNELS,
68
- rate=RATE,
69
- input=True,
70
- frames_per_buffer=CHUNK)
71
-
72
- st.session_state['stream'] = stream
73
- st.session_state['audio'] = audio
74
- st.session_state['listening'] = True
75
- st.session_state['prediction'] = "Listening........................"
76
- placeholder.write("Listening for audio...")
77
-
78
- while st.session_state['listening']:
79
- audio_data = np.array([], dtype=np.float32)
80
-
81
- for _ in range(int(RATE / CHUNK * 1.5)):
82
- # Read audio chunk from the stream
83
- data = stream.read(CHUNK, exception_on_overflow=False)
84
-
85
- # Convert byte data to numpy array and normalize
86
- chunk_data = np.frombuffer(data, dtype=np.int16).astype(np.float32) / 32768.0
87
- audio_data = np.concatenate((audio_data, chunk_data))
88
-
89
- # Check if there is significant sound
90
- if np.max(np.abs(audio_data)) > 0.05: # Threshold for detecting sound
91
- # Process the audio data
92
- inputs = feature_extractor(audio_data, sampling_rate=RATE, return_tensors="pt", padding=True)
93
- # Perform inference
94
- with torch.no_grad():
95
- logits = model(**inputs).logits
96
- predicted_ids = torch.argmax(logits, dim=-1)
97
-
98
- # Map predicted IDs to labels
99
- predicted_label = model.config.id2label[predicted_ids.item()]
100
-
101
- if predicted_label != st.session_state['prediction']:
102
- st.session_state['prediction'] = predicted_label
103
- # st.write(f"Detected Gender: {predicted_label}")
104
- placeholder.write(f"Detected Gender: {predicted_label}")
105
- else:
106
- st.session_state['prediction'] = "---- No significant sound detected, skipping prediction. ----"
107
- placeholder.empty()
108
- placeholder.empty()
109
- except Exception as e:
110
- logging.error(f"An error occurred: {e}")
111
- st.error(f"An error occurred: {e}")
112
- stop_listening()
113
-
114
- # Buttons to start and stop listening
115
- col1, col2 = st.columns(2)
116
- with col1:
117
- if st.button("Start Listening"):
118
- start_listening()
119
- with col2:
120
- if st.button("Stop Listening"):
121
- stop_listening()
 
 
 
 
 
1
  import streamlit as st
 
2
  import numpy as np
3
  import torch
4
  from transformers import AutoFeatureExtractor, AutoModelForAudioClassification
5
+ from streamlit_webrtc import webrtc_streamer, AudioProcessorBase, WebRtcMode
6
+ import av
 
 
 
 
 
 
 
 
7
 
8
+ # Load Model and Feature Extractor
9
  @st.cache_resource
10
  def load_model():
11
  """
12
  Load the wav2vec2 model and feature extractor for gender recognition.
 
 
 
13
  """
14
  model_path = "alefiury/wav2vec2-large-xlsr-53-gender-recognition-librispeech"
 
15
  feature_extractor = AutoFeatureExtractor.from_pretrained(model_path)
16
  model = AutoModelForAudioClassification.from_pretrained(model_path)
17
  model.eval()
 
18
  return feature_extractor, model
19
 
20
+ placeholder = st.empty()
21
+ placeholder.text("Loading model...")
22
+ feature_extractor, model = load_model()
23
+ placeholder.text("Model loaded!")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
requirements.txt CHANGED
@@ -1,66 +1,399 @@
 
 
 
1
  aioice==0.9.0
 
2
  aiortc==1.10.1
 
 
 
3
  altair==5.5.0
4
- attrs==25.1.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  av==13.1.0
 
 
 
 
 
 
 
 
 
 
6
  blinker==1.9.0
 
 
 
 
 
7
  cachetools==5.5.1
8
- certifi==2025.1.31
9
- cffi==1.17.1
10
- charset-normalizer==3.4.1
11
- click==8.1.8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  cryptography==44.0.1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  dnspython==2.7.0
14
- filelock==3.17.0
15
- fsspec==2025.2.0
 
 
 
 
 
 
 
 
 
 
 
 
16
  gitdb==4.0.12
17
  GitPython==3.1.44
 
 
18
  google-crc32c==1.6.0
19
- huggingface-hub==0.28.1
20
- idna==3.10
 
 
 
 
 
 
 
 
 
21
  ifaddr==0.2.0
22
- Jinja2==3.1.5
23
- jsonschema==4.23.0
24
- jsonschema-specifications==2024.10.1
25
- markdown-it-py==3.0.0
26
- MarkupSafe==3.0.2
27
- mdurl==0.1.2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  mpmath==1.3.0
 
 
 
 
 
 
29
  narwhals==1.26.0
30
- networkx==3.4.2
31
- numpy==2.2.3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  packaging==24.2
33
- pandas==2.2.3
34
- pillow==11.1.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  protobuf==5.29.3
36
- pyarrow==19.0.0
37
- pycparser==2.22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  pydeck==0.9.1
 
 
39
  pyee==12.1.1
40
- Pygments==2.19.1
 
 
 
41
  pylibsrtp==0.11.0
 
 
 
 
 
 
 
 
42
  pyOpenSSL==25.0.0
43
- python-dateutil==2.9.0.post0
44
- pytz==2025.1
45
- PyYAML==6.0.2
46
- referencing==0.36.2
47
- regex==2024.11.6
48
- requests==2.32.3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  rich==13.9.4
50
- rpds-py==0.22.3
51
- safetensors==0.5.2
52
- six==1.17.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  smmap==5.0.2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  streamlit==1.42.0
55
  streamlit-webrtc==0.47.9
56
  sympy==1.13.1
57
- tenacity==9.0.0
58
- tokenizers==0.21.0
 
 
 
 
 
 
 
 
 
 
 
59
  toml==0.10.2
 
 
60
  torch==2.6.0
61
- tornado==6.4.2
62
- tqdm==4.67.1
63
- transformers==4.48.3
 
 
64
  typing_extensions==4.12.2
65
- tzdata==2025.1
66
- urllib3==2.3.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ aiobotocore==2.5.0
2
+ aiofiles==22.1.0
3
+ aiohttp==3.8.5
4
  aioice==0.9.0
5
+ aioitertools==0.7.1
6
  aiortc==1.10.1
7
+ aiosignal==1.2.0
8
+ aiosqlite==0.18.0
9
+ alabaster==0.7.12
10
  altair==5.5.0
11
+ anaconda-anon-usage==0.4.2
12
+ anaconda-catalogs==0.2.0
13
+ anaconda-client==1.12.1
14
+ anaconda-cloud-auth==0.1.3
15
+ anaconda-navigator==2.5.0
16
+ anaconda-project==0.11.1
17
+ annotated-types==0.7.0
18
+ anyio==3.5.0
19
+ appdirs==1.4.4
20
+ applaunchservices==0.3.0
21
+ appnope==0.1.2
22
+ appscript==1.1.2
23
+ argon2-cffi==21.3.0
24
+ argon2-cffi-bindings==21.2.0
25
+ arrow==1.2.3
26
+ astroid==2.14.2
27
+ astropy==5.1
28
+ asttokens==2.0.5
29
+ async-timeout==4.0.2
30
+ atomicwrites==1.4.0
31
+ attrs==22.1.0
32
+ Automat==20.2.0
33
+ autopep8==1.6.0
34
  av==13.1.0
35
+ Babel==2.11.0
36
+ backcall==0.2.0
37
+ backports.functools-lru-cache==1.6.4
38
+ backports.tempfile==1.0
39
+ backports.weakref==1.0.post1
40
+ bcrypt==3.2.0
41
+ beautifulsoup4==4.12.2
42
+ binaryornot==0.4.4
43
+ black==0.0
44
+ bleach==4.1.0
45
  blinker==1.9.0
46
+ bokeh==3.2.1
47
+ boltons==23.0.0
48
+ botocore==1.29.76
49
+ Bottleneck==1.3.5
50
+ brotlipy==0.7.0
51
  cachetools==5.5.1
52
+ certifi==2023.7.22
53
+ cffi==1.15.1
54
+ chardet==4.0.0
55
+ charset-normalizer==2.0.4
56
+ click==8.0.4
57
+ cloudpickle==2.2.1
58
+ clyent==1.2.2
59
+ colorama==0.4.6
60
+ colorcet==3.0.1
61
+ comm==0.1.2
62
+ conda==23.7.4
63
+ conda-build==3.26.1
64
+ conda-content-trust==0.2.0
65
+ conda_index==0.3.0
66
+ conda-libmamba-solver==23.7.0
67
+ conda-pack==0.6.0
68
+ conda-package-handling==2.2.0
69
+ conda_package_streaming==0.9.0
70
+ conda-repo-cli==1.0.75
71
+ conda-token==0.4.0
72
+ conda-verify==3.4.2
73
+ constantly==15.1.0
74
+ contourpy==1.0.5
75
+ cookiecutter==1.7.3
76
  cryptography==44.0.1
77
+ cssselect==1.1.0
78
+ cycler==0.11.0
79
+ cytoolz==0.12.0
80
+ dask==2023.6.0
81
+ datasets==2.12.0
82
+ datashader==0.15.2
83
+ datashape==0.5.4
84
+ debugpy==1.6.7
85
+ decorator==5.1.1
86
+ defusedxml==0.7.1
87
+ diff-match-patch==20200713
88
+ dill==0.3.6
89
+ distributed==2023.6.0
90
+ distro==1.9.0
91
  dnspython==2.7.0
92
+ docstring-to-markdown==0.11
93
+ docutils==0.18.1
94
+ entrypoints==0.4
95
+ et-xmlfile==1.1.0
96
+ executing==0.8.3
97
+ fastjsonschema==2.16.2
98
+ filelock==3.9.0
99
+ flake8==6.0.0
100
+ Flask==2.2.2
101
+ fonttools==4.25.0
102
+ frozenlist==1.3.3
103
+ fsspec==2023.4.0
104
+ future==0.18.3
105
+ gensim==4.3.0
106
  gitdb==4.0.12
107
  GitPython==3.1.44
108
+ glob2==0.7
109
+ gmpy2==2.1.2
110
  google-crc32c==1.6.0
111
+ greenlet==2.0.1
112
+ h11==0.14.0
113
+ h5py==3.9.0
114
+ HeapDict==1.0.1
115
+ holoviews==1.17.1
116
+ httpcore==1.0.7
117
+ httpx==0.28.0
118
+ huggingface-hub==0.15.1
119
+ hvplot==0.8.4
120
+ hyperlink==21.0.0
121
+ idna==3.4
122
  ifaddr==0.2.0
123
+ imagecodecs==2023.1.23
124
+ imageio==2.31.1
125
+ imagesize==1.4.1
126
+ imbalanced-learn==0.10.1
127
+ importlib-metadata==6.0.0
128
+ incremental==21.3.0
129
+ inflection==0.5.1
130
+ iniconfig==1.1.1
131
+ intake==0.6.8
132
+ intervaltree==3.1.0
133
+ ipykernel==6.25.0
134
+ ipython==8.15.0
135
+ ipython-genutils==0.2.0
136
+ ipywidgets==8.0.4
137
+ isort==5.9.3
138
+ itemadapter==0.3.0
139
+ itemloaders==1.0.4
140
+ itsdangerous==2.0.1
141
+ jaraco.classes==3.2.1
142
+ jedi==0.18.1
143
+ jellyfish==1.0.1
144
+ Jinja2==3.1.2
145
+ jinja2-time==0.2.0
146
+ jiter==0.8.0
147
+ jmespath==0.10.0
148
+ joblib==1.2.0
149
+ json5==0.9.6
150
+ jsonpatch==1.33
151
+ jsonpointer==2.1
152
+ jsonschema==4.17.3
153
+ jupyter==1.0.0
154
+ jupyter_client==7.4.9
155
+ jupyter-console==6.6.3
156
+ jupyter_core==5.3.0
157
+ jupyter-events==0.6.3
158
+ jupyter-server==1.23.4
159
+ jupyter_server_fileid==0.9.0
160
+ jupyter_server_ydoc==0.8.0
161
+ jupyter-ydoc==0.2.4
162
+ jupyterlab==3.6.3
163
+ jupyterlab-pygments==0.1.2
164
+ jupyterlab_server==2.22.0
165
+ jupyterlab-widgets==3.0.5
166
+ kaleido==0.2.1
167
+ keyring==23.13.1
168
+ kiwisolver==1.4.4
169
+ langchain==0.3.9
170
+ langchain-core==0.3.21
171
+ langchain-text-splitters==0.3.2
172
+ langsmith==0.1.147
173
+ lazy_loader==0.2
174
+ lazy-object-proxy==1.6.0
175
+ libarchive-c==2.9
176
+ libmambapy==1.5.1
177
+ linkify-it-py==2.0.0
178
+ llvmlite==0.40.0
179
+ lmdb==1.4.1
180
+ locket==1.0.0
181
+ lxml==4.9.3
182
+ lz4==4.3.2
183
+ Markdown==3.4.1
184
+ markdown-it-py==2.2.0
185
+ MarkupSafe==2.1.1
186
+ matplotlib==3.7.2
187
+ matplotlib-inline==0.1.6
188
+ mccabe==0.7.0
189
+ mdit-py-plugins==0.3.0
190
+ mdurl==0.1.0
191
+ mistune==0.8.4
192
+ more-itertools==8.12.0
193
  mpmath==1.3.0
194
+ msgpack==1.0.3
195
+ multidict==6.0.2
196
+ multipledispatch==0.6.0
197
+ multiprocess==0.70.14
198
+ munkres==1.1.4
199
+ mypy-extensions==1.0.0
200
  narwhals==1.26.0
201
+ navigator-updater==0.4.0
202
+ nbclassic==0.5.5
203
+ nbclient==0.5.13
204
+ nbconvert==6.5.4
205
+ nbformat==5.9.2
206
+ nest-asyncio==1.5.6
207
+ networkx==3.1
208
+ nltk==3.8.1
209
+ notebook==6.5.4
210
+ notebook_shim==0.2.2
211
+ numba==0.57.1
212
+ numexpr==2.8.4
213
+ numpy==1.24.3
214
+ numpydoc==1.5.0
215
+ openai==1.55.3
216
+ openpyxl==3.0.10
217
+ orjson==3.10.12
218
  packaging==24.2
219
+ pandas==2.0.3
220
+ pandocfilters==1.5.0
221
+ panel==1.2.3
222
+ param==1.13.0
223
+ parsel==1.6.0
224
+ parso==0.8.3
225
+ partd==1.4.0
226
+ pathlib==1.0.1
227
+ pathspec==0.10.3
228
+ patsy==0.5.3
229
+ pep8==1.7.1
230
+ pexpect==4.8.0
231
+ pickleshare==0.7.5
232
+ Pillow==9.4.0
233
+ pip==23.2.1
234
+ pkce==1.0.3
235
+ pkginfo==1.9.6
236
+ platformdirs==3.10.0
237
+ plotly==5.9.0
238
+ pluggy==1.0.0
239
+ ply==3.11
240
+ poyo==0.5.0
241
+ prometheus-client==0.14.1
242
+ prompt-toolkit==3.0.36
243
+ Protego==0.1.16
244
  protobuf==5.29.3
245
+ psutil==5.9.0
246
+ psycopg2==2.9.9
247
+ ptyprocess==0.7.0
248
+ pure-eval==0.2.2
249
+ py-cpuinfo==8.0.0
250
+ pyarrow==11.0.0
251
+ pyasn1==0.4.8
252
+ pyasn1-modules==0.2.8
253
+ PyAudio==0.2.14
254
+ pycodestyle==2.10.0
255
+ pycosat==0.6.4
256
+ pycparser==2.21
257
+ pyct==0.5.0
258
+ pycurl==7.45.2
259
+ pydantic==2.10.2
260
+ pydantic_core==2.27.1
261
  pydeck==0.9.1
262
+ PyDispatcher==2.0.5
263
+ pydocstyle==6.3.0
264
  pyee==12.1.1
265
+ pyerfa==2.0.0
266
+ pyflakes==3.0.1
267
+ Pygments==2.15.1
268
+ PyJWT==2.4.0
269
  pylibsrtp==0.11.0
270
+ pylint==2.16.2
271
+ pylint-venv==2.3.0
272
+ pyls-spyder==0.4.0
273
+ pyobjc-core==9.0
274
+ pyobjc-framework-Cocoa==9.0
275
+ pyobjc-framework-CoreServices==9.0
276
+ pyobjc-framework-FSEvents==9.0
277
+ pyodbc==4.0.34
278
  pyOpenSSL==25.0.0
279
+ pyparsing==3.0.9
280
+ PyQt5-sip==12.11.0
281
+ pyrsistent==0.18.0
282
+ PySocks==1.7.1
283
+ pytest==7.4.0
284
+ python-dateutil==2.8.2
285
+ python-dotenv==0.21.0
286
+ python-json-logger==2.0.7
287
+ python-lsp-black==1.2.1
288
+ python-lsp-jsonrpc==1.0.0
289
+ python-lsp-server==1.7.2
290
+ python-slugify==5.0.2
291
+ python-snappy==0.6.1
292
+ pytoolconfig==1.2.5
293
+ pytz==2023.3.post1
294
+ pyviz-comms==2.3.0
295
+ PyWavelets==1.4.1
296
+ PyYAML==6.0
297
+ pyzmq==23.2.0
298
+ QDarkStyle==3.0.2
299
+ qstylizer==0.2.2
300
+ QtAwesome==1.2.2
301
+ qtconsole==5.4.2
302
+ QtPy==2.2.0
303
+ queuelib==1.5.0
304
+ regex==2022.7.9
305
+ requests==2.31.0
306
+ requests-file==1.5.1
307
+ requests-toolbelt==1.0.0
308
+ responses==0.13.3
309
+ rfc3339-validator==0.1.4
310
+ rfc3986-validator==0.1.1
311
  rich==13.9.4
312
+ rope==1.7.0
313
+ Rtree==1.0.1
314
+ ruamel.yaml==0.17.21
315
+ ruamel-yaml-conda==0.17.21
316
+ s3fs==2023.4.0
317
+ safetensors==0.3.2
318
+ scikit-image==0.20.0
319
+ scikit-learn==1.3.0
320
+ scipy==1.11.1
321
+ Scrapy==2.8.0
322
+ seaborn==0.12.2
323
+ Send2Trash==1.8.0
324
+ service-identity==18.1.0
325
+ setuptools==68.0.0
326
+ sip==6.6.2
327
+ six==1.16.0
328
+ smart-open==5.2.1
329
  smmap==5.0.2
330
+ sniffio==1.2.0
331
+ snowballstemmer==2.2.0
332
+ sortedcontainers==2.4.0
333
+ soupsieve==2.4
334
+ Sphinx==5.0.2
335
+ sphinxcontrib-applehelp==1.0.2
336
+ sphinxcontrib-devhelp==1.0.2
337
+ sphinxcontrib-htmlhelp==2.0.0
338
+ sphinxcontrib-jsmath==1.0.1
339
+ sphinxcontrib-qthelp==1.0.3
340
+ sphinxcontrib-serializinghtml==1.1.5
341
+ spyder==5.4.3
342
+ spyder-kernels==2.4.4
343
+ SQLAlchemy==1.4.39
344
+ stack-data==0.2.0
345
+ statsmodels==0.14.0
346
  streamlit==1.42.0
347
  streamlit-webrtc==0.47.9
348
  sympy==1.13.1
349
+ tables==3.8.0
350
+ tabulate==0.8.10
351
+ tblib==1.7.0
352
+ tenacity==8.2.2
353
+ terminado==0.17.1
354
+ text-unidecode==1.3
355
+ textdistance==4.2.1
356
+ threadpoolctl==2.2.0
357
+ three-merge==0.1.1
358
+ tifffile==2023.4.12
359
+ tinycss2==1.2.1
360
+ tldextract==3.2.0
361
+ tokenizers==0.13.2
362
  toml==0.10.2
363
+ tomlkit==0.11.1
364
+ toolz==0.12.0
365
  torch==2.6.0
366
+ tornado==6.3.2
367
+ tqdm==4.65.0
368
+ traitlets==5.7.1
369
+ transformers==4.32.1
370
+ Twisted==22.10.0
371
  typing_extensions==4.12.2
372
+ tzdata==2023.3
373
+ uc-micro-py==1.0.1
374
+ ujson==5.4.0
375
+ Unidecode==1.2.0
376
+ urllib3==1.26.16
377
+ w3lib==1.21.0
378
+ watchdog==2.1.6
379
+ wcwidth==0.2.5
380
+ webencodings==0.5.1
381
+ websocket-client==0.58.0
382
+ Werkzeug==2.2.3
383
+ whatthepatch==1.0.2
384
+ wheel==0.38.4
385
+ widgetsnbextension==4.0.5
386
+ wrapt==1.14.1
387
+ wurlitzer==3.0.2
388
+ xarray==2023.6.0
389
+ xlwings==0.29.1
390
+ xxhash==2.0.2
391
+ xyzservices==2022.9.0
392
+ y-py==0.5.9
393
+ yapf==0.31.0
394
+ yarl==1.8.1
395
+ ypy-websocket==0.8.2
396
+ zict==2.2.0
397
+ zipp==3.11.0
398
+ zope.interface==5.4.0
399
+ zstandard==0.19.0