rsm-roguchi commited on
Commit
24e0afd
·
1 Parent(s): 69a41e0

a bunch of stuff?

Browse files
build/lib/server/__init__.py ADDED
File without changes
build/lib/server/blog.py ADDED
@@ -0,0 +1,306 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from shiny import reactive, render, ui
2
+ import os, sys
3
+ from bs4 import BeautifulSoup
4
+ from pytrends.request import TrendReq
5
+ from playwright.async_api import async_playwright
6
+ import requests
7
+ import re, ast
8
+ import time
9
+
10
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "code")))
11
+ from llm_connect import get_response
12
+
13
+ from dotenv import load_dotenv
14
+ load_dotenv()
15
+
16
+ SHOPIFY_STORE = "ultima-supply.myshopify.com"
17
+ SHOPIFY_TOKEN = os.getenv("SHOPIFY_TOKEN")
18
+ SHOPIFY_API_VERSION = "2024-04"
19
+ BLOG_ID = "73667707064"
20
+
21
+ # === Async JS-rendered scraping ===
22
+ async def scrape_div_content_from_url(url: str) -> str:
23
+ try:
24
+ async with async_playwright() as p:
25
+ browser = await p.chromium.launch(headless=True)
26
+ page = await browser.new_page()
27
+ await page.goto(url, wait_until="networkidle")
28
+ html = await page.content()
29
+ await browser.close()
30
+
31
+ soup = BeautifulSoup(html, "html.parser")
32
+ divs = soup.find_all("div", class_="article-body")
33
+ if not divs:
34
+ print("[WARN] No <div class='article-body'> found.")
35
+ return ""
36
+
37
+ texts = [div.get_text(separator=" ", strip=True) for div in divs]
38
+ return "\n\n".join(texts)
39
+ except Exception as e:
40
+ print(f"[ERROR] Failed to render or scrape: {e}")
41
+ return ""
42
+
43
+ # === Async keyword + scrape + fallback logic ===
44
+ async def get_keywords_and_content(url: str, top_n=5, llm_n=25):
45
+ scraped_text = await scrape_div_content_from_url(url)
46
+ if not scraped_text:
47
+ print("[ERROR] No scraped content. Cannot proceed.")
48
+ return [], ""
49
+
50
+ # === Step 1: Extract condensed topic keywords ===
51
+ try:
52
+ condensed_prompt = (
53
+ "From the content below, extract 5 to 7 mid-specific Google search phrases that reflect real user intent. "
54
+ "They should describe product types, use cases, or collector topics — not brand names alone. "
55
+ "Avoid single-word topics and overly broad terms like 'pokemon'. Each phrase should be 2–5 words, lowercase, and ASCII only.\n\n"
56
+ "You MUST return ONLY a valid Python list of strings. Do not use bullet points, newlines, or any explanation. "
57
+ "Your response must look exactly like this format:\n"
58
+ "['phrase one', 'phrase two', 'phrase three']\n\n"
59
+ f"Content:\n{scraped_text}"
60
+ )
61
+
62
+ condensed_topic_raw = get_response(
63
+ input=condensed_prompt,
64
+ template=lambda x: x.strip(),
65
+ llm="gemini",
66
+ md=False,
67
+ temperature=0.6,
68
+ max_tokens=100,
69
+ model_name="gemini-2.0-flash-lite"
70
+ )
71
+ print(condensed_topic_raw)
72
+
73
+ match = re.search(r"\[.*?\]", condensed_topic_raw, re.DOTALL)
74
+ condensed_topic = ast.literal_eval(match.group(0)) if match else []
75
+ if not condensed_topic:
76
+ condensed_topic = ["trading cards"]
77
+
78
+ print(f"[INFO] Condensed topic keywords: {condensed_topic}")
79
+ except Exception as e:
80
+ print(f"[WARN] Could not infer topics: {e}")
81
+ condensed_topic = ["trading cards"]
82
+
83
+ # === Step 2: Pull suggestions from PyTrends ===
84
+ all_suggestions = set()
85
+ try:
86
+ pytrends = TrendReq(hl="en-US", tz=360, timeout=10)
87
+ for topic in condensed_topic:
88
+ time.sleep(5)
89
+ suggestions = pytrends.suggestions(keyword=topic)
90
+ if suggestions:
91
+ titles = [s["title"] for s in suggestions]
92
+ all_suggestions.update(titles)
93
+ print(f"[INFO] Suggestions for '{topic}': {titles[:3]}")
94
+ except Exception as e:
95
+ print(f"[WARN] PyTrends suggestions failed: {e}")
96
+
97
+ all_suggestions = list(all_suggestions)
98
+
99
+ # === Step 3: Let Gemini filter suggestions for relevance ===
100
+ filtered_keywords = []
101
+ if all_suggestions:
102
+ filter_prompt = (
103
+ f"The following article was scraped:\n\n{scraped_text[:1500]}\n\n"
104
+ f"Here is a list of keyword suggestions:\n{all_suggestions}\n\n"
105
+ "Return only the keywords that are clearly relevant to the article topic. "
106
+ "Return a valid Python list of strings only. No explanation, bullets, or formatting."
107
+ )
108
+
109
+ raw_filtered = get_response(
110
+ input=filter_prompt,
111
+ template=lambda x: x.strip(),
112
+ llm="gemini",
113
+ md=False,
114
+ temperature=0.3,
115
+ max_tokens=200
116
+ )
117
+
118
+ match = re.search(r"\[.*?\]", raw_filtered)
119
+ if match:
120
+ try:
121
+ filtered_keywords = ast.literal_eval(match.group(0))
122
+ except:
123
+ filtered_keywords = []
124
+
125
+ # === Step 4: Fallback to Gemini keyword generation if needed ===
126
+ if not filtered_keywords:
127
+ fallback_prompt = (
128
+ f"You are an SEO expert. Generate {llm_n} niche-relevant SEO keywords "
129
+ f"based on this content:\n\n{scraped_text}\n\n"
130
+ "Return a comma-separated list of lowercase 2–5 word search phrases. No formatting."
131
+ )
132
+ fallback_keywords_raw = get_response(
133
+ input=fallback_prompt,
134
+ template=lambda x: x.strip(),
135
+ llm="gemini",
136
+ md=False,
137
+ temperature=0.7,
138
+ max_tokens=400
139
+ )
140
+ filtered_keywords = [kw.strip() for kw in fallback_keywords_raw.split(",") if kw.strip()]
141
+ print(f"[INFO] Fallback keywords used: {filtered_keywords[:top_n]}")
142
+
143
+ # === Step 5: Enforce minimum of 30 keywords ===
144
+ combined_keywords = list(dict.fromkeys(filtered_keywords)) # remove duplicates
145
+ if len(combined_keywords) < 30:
146
+ needed = 30 - len(combined_keywords)
147
+ print(f"[INFO] Need {needed} more keywords to reach 30. Using Gemini to pad.")
148
+
149
+ pad_prompt = (
150
+ f"The following article content is missing SEO keyword coverage:\n\n"
151
+ f"{scraped_text}\n\n"
152
+ f"Generate exactly {needed} additional SEO keyword phrases. "
153
+ "Each keyword must be:\n"
154
+ "- 2 to 5 words long\n"
155
+ "- lowercase only\n"
156
+ "- written in ASCII (no symbols or accents)\n"
157
+ "- clearly relevant to the article\n"
158
+ "- not overlapping with any common generic terms like 'pokemon'\n\n"
159
+ "You MUST return a valid Python list of strings. DO NOT include any explanation, extra text, markdown, or formatting.\n"
160
+ "Format example:\n"
161
+ "['keyword one', 'keyword two', 'keyword three']"
162
+ )
163
+
164
+
165
+ pad_raw = get_response(
166
+ input=pad_prompt,
167
+ template=lambda x: x.strip(),
168
+ llm="gemini",
169
+ md=False,
170
+ temperature=0.7,
171
+ max_tokens=200
172
+ )
173
+
174
+ pad_keywords = []
175
+
176
+ pad_match = re.search(r"\[[^\]]+\]", pad_raw) # greedy, non-linebreaking
177
+ if pad_match:
178
+ try:
179
+ pad_keywords = ast.literal_eval(pad_match.group(0))
180
+ except Exception as e:
181
+ print(f"[WARN] ast.literal_eval failed: {e}")
182
+ pad_keywords = []
183
+
184
+ combined_keywords = list(dict.fromkeys(combined_keywords + pad_keywords))
185
+ print(f"[INFO] Padded {len(pad_keywords)} keywords:", pad_keywords)
186
+
187
+
188
+ return combined_keywords[:30], scraped_text
189
+
190
+
191
+
192
+ # === Shopify publisher ===
193
+ def publish_blog_post(title: str, html_body: str, blog_id: str = BLOG_ID):
194
+ url = f"https://{SHOPIFY_STORE}/admin/api/{SHOPIFY_API_VERSION}/blogs/{blog_id}/articles.json"
195
+ headers = {
196
+ "X-Shopify-Access-Token": SHOPIFY_TOKEN,
197
+ "Content-Type": "application/json"
198
+ }
199
+ data = {
200
+ "article": {
201
+ "title": title,
202
+ "body_html": html_body
203
+ }
204
+ }
205
+
206
+ response = requests.post(url, json=data, headers=headers)
207
+ if response.status_code == 201:
208
+ return True, response.json()
209
+ else:
210
+ return False, response.text
211
+
212
+ # === SHINY SERVER ===
213
+ def server(input, output, session):
214
+ related_keywords = reactive.Value([])
215
+ generated_blog = reactive.Value(("", "")) # (title, html_content)
216
+
217
+ @output
218
+ @render.ui
219
+ @reactive.event(input.generate_btn)
220
+ async def blog_result():
221
+ url = input.url()
222
+ if not url:
223
+ return ui.HTML("<p><strong>⚠️ Please enter a URL.</strong></p>")
224
+
225
+ keywords, scraped = await get_keywords_and_content(url)
226
+ related_keywords.set(keywords)
227
+ keyword_str = ", ".join(keywords)
228
+
229
+ # Title generation from scraped text
230
+ infer_topic_prompt = (
231
+ f"Based on the following article content:\n\n{scraped[:2000]}\n\n"
232
+ f"Return a short, descriptive blog post title (max 70 characters)."
233
+ f"Return ONLY the TITLE"
234
+ )
235
+ seo_title = get_response(
236
+ input=infer_topic_prompt,
237
+ template=lambda x: x.strip().replace('"', ''),
238
+ llm="gemini",
239
+ md=False,
240
+ temperature=0.5,
241
+ max_tokens=20
242
+ )
243
+
244
+ # Blog generation with injected SEO
245
+ prompt = (
246
+ f"You are a content writer for a collectibles brand called 'Ultima Supply'.\n"
247
+ f"Given the following scraped content:\n\n{scraped}\n\n"
248
+ f"Adapt this into an engaging, original, and heavily detailed SEO-optimized blog post.\n"
249
+ f"Inject the following SEO keywords naturally and organically throughout the content:\n{keyword_str}\n\n"
250
+ f"Use proper HTML structure: <h1> for the title, <h2> for section headers, and <p> for all paragraphs.\n"
251
+ f"Do NOT include any markdown, code blocks, or triple backticks. Do NOT use ```html or any formatting fences.\n"
252
+ f"Just return the raw HTML.\n\n"
253
+ f"DO NOT include any hyperlinks or images inside the body of the blog post.\n"
254
+ f"At the very end, add a single call-to-action in a new <p> tag:\n"
255
+ f"Visit <a href='https://ultima-supply.myshopify.com'>Ultima Supply</a> to explore more collectibles."
256
+ )
257
+
258
+ blog_html = get_response(
259
+ input=prompt,
260
+ template=lambda x: x.strip(),
261
+ llm="gemini",
262
+ md=False,
263
+ temperature=0.9,
264
+ max_tokens=5000
265
+ )
266
+
267
+ blog_html = re.sub(r"```[a-zA-Z]*\n?", "", blog_html).strip()
268
+ blog_html = blog_html.replace("```", "").strip()
269
+
270
+
271
+ generated_blog.set((seo_title, blog_html))
272
+
273
+ return ui.HTML(
274
+ f"<p><strong>✅ Blog generated with title:</strong> {seo_title}</p>"
275
+ f"<p>Click 'Post to Shopify' to publish.</p>{blog_html}"
276
+ )
277
+
278
+ @output
279
+ @render.ui
280
+ def keywords_used():
281
+ kws = related_keywords()
282
+ if not kws:
283
+ return ui.HTML("<p><strong>No SEO keywords retrieved yet.</strong></p>")
284
+
285
+ return ui.HTML(
286
+ f"<p><strong>✅ SEO Keywords Injected ({len(kws)}):</strong></p><ul>"
287
+ + "".join(f"<li>{kw}</li>" for kw in kws) +
288
+ "</ul>"
289
+ )
290
+
291
+
292
+ @reactive.effect
293
+ @reactive.event(input.post_btn)
294
+ def post_to_shopify():
295
+ seo_title, html = generated_blog()
296
+
297
+ if not html:
298
+ ui.notification_show("⚠️ No blog generated yet.", type="warning")
299
+ return
300
+
301
+ success, response = publish_blog_post(title=seo_title, html_body=html)
302
+
303
+ if success:
304
+ ui.notification_show("✅ Blog posted to Shopify successfully!", type="message")
305
+ else:
306
+ ui.notification_show(f"❌ Failed to publish: {response}", type="error")
build/lib/server/meta.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from shiny import reactive, render, ui
2
+ import os
3
+ import requests
4
+ from dotenv import load_dotenv
5
+ from llm_connect import get_response # your existing function
6
+
7
+ load_dotenv()
8
+
9
+ PAGE_ID = os.getenv("FB_PAGE_ID")
10
+ ACCESS_TOKEN = os.getenv("FB_PAGE_ACCESS_TOKEN")
11
+
12
+ generated_fb_post = reactive.Value("")
13
+
14
+ def generate_facebook_post(topic: str) -> str:
15
+ prompt = (
16
+ f"You are a social media manager for a hobby e-commerce company called 'Ultima Supply'.\n"
17
+ f"Write a short, engaging Facebook post (max 500 characters) about: '{topic}'.\n"
18
+ f"Use casual and friendly tone. Include emojis and 3-5 relevant hashtags."
19
+ )
20
+ return get_response(
21
+ input=prompt,
22
+ template=lambda x: x,
23
+ llm="gemini",
24
+ md=False,
25
+ temperature=0.9,
26
+ max_tokens=500
27
+ )
28
+
29
+ def post_to_facebook(message: str) -> str:
30
+ url = f"https://graph.facebook.com/{PAGE_ID}/feed"
31
+ payload = {
32
+ "message": message,
33
+ "access_token": ACCESS_TOKEN
34
+ }
35
+
36
+ response = requests.post(url, data=payload)
37
+ if response.status_code != 200:
38
+ return f"❌ Facebook post failed: {response.status_code} - {response.text}"
39
+
40
+ post_id = response.json().get("id", "Unknown")
41
+ return f"✅ Post successful! Facebook Post ID: {post_id}"
42
+
43
+ def server(input, output, session):
44
+ post_status = reactive.Value("")
45
+
46
+ @output
47
+ @render.ui
48
+ @reactive.event(input.gen_btn_fb)
49
+ def fb_post_draft():
50
+ topic = input.fb_topic()
51
+ if not topic.strip():
52
+ return ui.HTML("<p><strong>⚠️ Enter a topic first.</strong></p>")
53
+ post = generate_facebook_post(topic)
54
+ generated_fb_post.set(post)
55
+ return ui.HTML(f"<p><strong>Generated Facebook Post:</strong><br>{post}</p>")
56
+
57
+ @output
58
+ @render.text
59
+ def fb_post_status():
60
+ return post_status()
61
+
62
+ @reactive.effect
63
+ @reactive.event(input.post_btn_fb)
64
+ def _():
65
+ post = generated_fb_post()
66
+ if not post:
67
+ post_status.set("⚠️ No post generated yet.")
68
+ else:
69
+ result = post_to_facebook(post)
70
+ post_status.set(result)
build/lib/server/price_matching.py ADDED
File without changes
build/lib/server/twitter.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from shiny import reactive, render, ui
2
+ import os
3
+ import tweepy
4
+ from dotenv import load_dotenv
5
+ from llm_connect import get_response # your existing function
6
+
7
+ load_dotenv()
8
+
9
+ # Twitter API v2 credentials
10
+ BEARER_TOKEN = os.getenv("TWITTER_BEARER_TOKEN")
11
+ API_KEY = os.getenv("TWITTER_ACC_API_KEY")
12
+ API_SECRET = os.getenv("TWITTER_ACC_API_SECRET")
13
+ ACCESS_TOKEN = os.getenv("TWITTER_ACC_ACCESS_TOKEN")
14
+ ACCESS_TOKEN_SECRET = os.getenv("TWITTER_ACC_ACCESS_TOKEN_SECRET")
15
+
16
+ client = tweepy.Client(
17
+ bearer_token=BEARER_TOKEN,
18
+ consumer_key=API_KEY,
19
+ consumer_secret=API_SECRET,
20
+ access_token=ACCESS_TOKEN,
21
+ access_token_secret=ACCESS_TOKEN_SECRET
22
+ )
23
+
24
+ generated_tweet = reactive.Value("")
25
+
26
+ def generate_tweet_from_topic(topic: str) -> str:
27
+ prompt = (
28
+ f"You are a social media manager for a hobby e-commerce company called 'Ultima Supply'.\n"
29
+ f"Write a short, engaging Twitter post (max 500 characters) about: '{topic}'.\n"
30
+ f"Include emojis or 3-5 SEO relevant hashtags. Use casual, fun language."
31
+ )
32
+ return get_response(
33
+ input=prompt,
34
+ template=lambda x: x,
35
+ llm='gemini',
36
+ md=False,
37
+ temperature=0.9,
38
+ max_tokens=500
39
+ )
40
+
41
+ def post_tweet(text: str) -> str:
42
+ try:
43
+ response = client.create_tweet(text=text)
44
+ return f"✅ Tweet posted (ID: {response.data['id']})"
45
+ except Exception as e:
46
+ return f"❌ Failed to post tweet: {e}"
47
+
48
+ def server(input, output, session):
49
+ post_status = reactive.Value("")
50
+
51
+ @output
52
+ @render.ui
53
+ @reactive.event(input.gen_btn_twt)
54
+ def tweet_draft():
55
+ topic = input.tweet_topic()
56
+ if not topic.strip():
57
+ return ui.HTML("<p><strong>⚠️ Enter a topic first.</strong></p>")
58
+ tweet = generate_tweet_from_topic(topic)
59
+ generated_tweet.set(tweet)
60
+ return ui.HTML(f"<p><strong>Generated Tweet:</strong><br>{tweet}</p>")
61
+
62
+ @output
63
+ @render.text
64
+ def tweet_post_status():
65
+ return post_status()
66
+
67
+ @reactive.effect
68
+ @reactive.event(input.post_btn_twt)
69
+ def _():
70
+ tweet = generated_tweet()
71
+ if not tweet:
72
+ post_status.set("⚠️ No tweet generated yet.")
73
+ else:
74
+ result = post_tweet(tweet)
75
+ post_status.set(result)
pyproject.toml CHANGED
@@ -25,3 +25,6 @@ dependencies = [
25
  "bs4>=0.0.2",
26
  "playwright>=1.53.0",
27
  ]
 
 
 
 
25
  "bs4>=0.0.2",
26
  "playwright>=1.53.0",
27
  ]
28
+
29
+ [tool.setuptools]
30
+ packages = ["server"]
requirements.txt CHANGED
@@ -1,202 +1,35 @@
1
  aiofiles==23.2.1
2
- alembic @ file:///home/conda/feedstock_root/build_artifacts/alembic_1727122811080/work
3
- altair @ file:///home/conda/feedstock_root/build_artifacts/altair-split_1727892028500/work
4
- annotated-types @ file:///home/conda/feedstock_root/build_artifacts/annotated-types_1716290248287/work
5
- anyio @ file:///home/conda/feedstock_root/build_artifacts/anyio_1728935693959/work
6
  anywidget==0.9.13
7
  appdirs==1.4.4
8
- archspec @ file:///home/conda/feedstock_root/build_artifacts/archspec_1708969572489/work
9
- argon2-cffi @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi_1692818318753/work
10
- argon2-cffi-bindings @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi-bindings_1725356585055/work
11
- arrow @ file:///home/conda/feedstock_root/build_artifacts/arrow_1696128962909/work
12
  asgiref==3.8.1
13
- astor @ file:///home/conda/feedstock_root/build_artifacts/astor_1733838630785/work
14
- asttokens @ file:///home/conda/feedstock_root/build_artifacts/asttokens_1698341106958/work
15
- async-lru @ file:///home/conda/feedstock_root/build_artifacts/async-lru_1690563019058/work
16
- async_generator @ file:///home/conda/feedstock_root/build_artifacts/async_generator_1722652753231/work
17
- attrs @ file:///home/conda/feedstock_root/build_artifacts/attrs_1722977137225/work
18
- awscli @ file:///home/conda/feedstock_root/build_artifacts/awscli_1739865871727/work
19
- Babel @ file:///home/conda/feedstock_root/build_artifacts/babel_1702422572539/work
20
  backoff==2.2.1
21
- bash_kernel @ file:///home/conda/feedstock_root/build_artifacts/bash_kernel_1736166576131/work
22
- beautifulsoup4 @ file:///home/conda/feedstock_root/build_artifacts/beautifulsoup4_1705564648255/work
23
- black @ file:///home/conda/feedstock_root/build_artifacts/black-recipe_1738616016765/work
24
- bleach @ file:///home/conda/feedstock_root/build_artifacts/bleach_1696630167146/work
25
- blinker @ file:///home/conda/feedstock_root/build_artifacts/blinker_1715091184126/work
26
- blis @ file:///home/conda/feedstock_root/build_artifacts/cython-blis_1729663829405/work
27
- bokeh @ file:///home/conda/feedstock_root/build_artifacts/bokeh_1728932480540/work
28
- boltons @ file:///home/conda/feedstock_root/build_artifacts/boltons_1711936407380/work
29
- botocore @ file:///home/conda/feedstock_root/build_artifacts/botocore_1739845302597/work
30
- Bottleneck @ file:///home/conda/feedstock_root/build_artifacts/bottleneck_1729268868751/work
31
- Brotli @ file:///home/conda/feedstock_root/build_artifacts/brotli-split_1725267488082/work
32
- cached-property @ file:///home/conda/feedstock_root/build_artifacts/cached_property_1615209429212/work
33
- cachetools @ file:///home/conda/feedstock_root/build_artifacts/cachetools_1737517575301/work
34
- catalogue @ file:///home/conda/feedstock_root/build_artifacts/catalogue_1736092420971/work
35
  causal-learn==0.1.4.0
36
- certifi @ file:///home/conda/feedstock_root/build_artifacts/certifi_1739515848642/work/certifi
37
- certipy @ file:///home/conda/feedstock_root/build_artifacts/certipy_1726467183730/work
38
- cffi @ file:///home/conda/feedstock_root/build_artifacts/cffi_1725560558132/work
39
- charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1728479282467/work
40
  clarabel==0.10.0
41
- click @ file:///home/conda/feedstock_root/build_artifacts/click_1692311806742/work
42
- cloudpathlib @ file:///home/conda/feedstock_root/build_artifacts/cloudpathlib-meta_1729359055183/work
43
- cloudpickle @ file:///home/conda/feedstock_root/build_artifacts/cloudpickle_1729059237860/work
44
- colorama @ file:///home/conda/feedstock_root/build_artifacts/colorama_1666700638685/work
45
- comm @ file:///home/conda/feedstock_root/build_artifacts/comm_1710320294760/work
46
- conda @ file:///home/conda/feedstock_root/build_artifacts/conda_1738241127085/work
47
- conda-libmamba-solver @ file:///home/conda/feedstock_root/build_artifacts/conda-libmamba-solver_1737800978214/work/src
48
- conda-package-handling @ file:///home/conda/feedstock_root/build_artifacts/conda-package-handling_1729006966809/work
49
- conda_package_streaming @ file:///home/conda/feedstock_root/build_artifacts/conda-package-streaming_1729004031731/work
50
- confection @ file:///home/conda/feedstock_root/build_artifacts/confection_1701179097401/work
51
  connectorx==0.3.3
52
- contourpy @ file:///home/conda/feedstock_root/build_artifacts/contourpy_1727293529029/work
53
- cryptography @ file:///home/conda/feedstock_root/build_artifacts/cryptography-split_1729286672586/work
54
  cvxpy==1.6.0
55
- cycler @ file:///home/conda/feedstock_root/build_artifacts/cycler_1696677705766/work
56
- cymem @ file:///home/conda/feedstock_root/build_artifacts/cymem_1737125888380/work
57
  Cython==0.29.37
58
- cytoolz @ file:///home/conda/feedstock_root/build_artifacts/cytoolz_1728335000602/work
59
- dask @ file:///home/conda/feedstock_root/build_artifacts/dask-core_1729174050417/work
60
- dask-expr @ file:///home/conda/feedstock_root/build_artifacts/dask-expr_1729200954651/work
61
- debugpy @ file:///home/conda/feedstock_root/build_artifacts/debugpy_1728594098955/work
62
- decorator @ file:///home/conda/feedstock_root/build_artifacts/decorator_1641555617451/work
63
- defusedxml @ file:///home/conda/feedstock_root/build_artifacts/defusedxml_1615232257335/work
64
- dill @ file:///home/conda/feedstock_root/build_artifacts/dill_1727594984357/work
65
- distributed @ file:///home/conda/feedstock_root/build_artifacts/distributed_1729197350190/work
66
- distro @ file:///home/conda/feedstock_root/build_artifacts/distro_1704321475663/work
67
- docutils @ file:///home/conda/feedstock_root/build_artifacts/docutils_1728488675683/work
68
  dowhy==0.12
69
- duckdb @ file:///home/conda/feedstock_root/build_artifacts/python-duckdb-split_1739479592999/work/tools/pythonpkg
70
- duckdb_engine @ file:///home/conda/feedstock_root/build_artifacts/duckdb-engine_1737017790760/work
71
  econml==0.15.1
72
- entrypoints @ file:///home/conda/feedstock_root/build_artifacts/entrypoints_1643888246732/work
73
- et_xmlfile @ file:///home/conda/feedstock_root/build_artifacts/et_xmlfile_1729892939528/work
74
- exceptiongroup @ file:///home/conda/feedstock_root/build_artifacts/exceptiongroup_1720869315914/work
75
- executing @ file:///home/conda/feedstock_root/build_artifacts/executing_1725214404607/work
76
  faicons==0.2.2
77
  fastapi==0.115.8
78
  fastexcel==0.12.1
79
- fastjsonschema @ file:///home/conda/feedstock_root/build_artifacts/python-fastjsonschema_1718477020893/work/dist
80
  ffmpy==0.5.0
81
  filelock==3.17.0
82
- filetype @ file:///home/conda/feedstock_root/build_artifacts/filetype_1667445778563/work
83
- findspark @ file:///home/conda/feedstock_root/build_artifacts/findspark_1735921127722/work
84
- fonttools @ file:///home/conda/feedstock_root/build_artifacts/fonttools_1729530372367/work
85
- formulaic @ file:///home/conda/feedstock_root/build_artifacts/formulaic_1734816457952/work
86
- fqdn @ file:///home/conda/feedstock_root/build_artifacts/fqdn_1638810296540/work/dist
87
- frozendict @ file:///home/conda/feedstock_root/build_artifacts/frozendict_1728841327252/work
88
- fsspec @ file:///home/conda/feedstock_root/build_artifacts/fsspec_1729608855534/work
89
- fst-pso @ file:///home/conda/feedstock_root/build_artifacts/fst-pso_1674508369029/work
90
- funcy @ file:///home/conda/feedstock_root/build_artifacts/funcy_1734381131891/work
91
- future @ file:///home/conda/feedstock_root/build_artifacts/future_1738926421307/work
92
- FuzzyTM @ file:///home/conda/feedstock_root/build_artifacts/fuzzytm_1674510610147/work
93
- gensim @ file:///home/conda/feedstock_root/build_artifacts/gensim_1707360327203/work
94
- gitdb @ file:///home/conda/feedstock_root/build_artifacts/gitdb_1697791558612/work
95
- GitPython @ file:///home/conda/feedstock_root/build_artifacts/gitpython_1711991025291/work
96
- gmpy2 @ file:///home/conda/feedstock_root/build_artifacts/gmpy2_1725379832114/work
97
- googleapis-common-protos @ file:///home/conda/feedstock_root/build_artifacts/googleapis-common-protos-feedstock_1724834223554/work
98
  gradio==5.16.1
99
  gradio_client==1.7.0
100
- graphlib-backport @ file:///home/conda/feedstock_root/build_artifacts/graphlib-backport_1635566048409/work
101
  graphviz==0.20.3
102
- greenlet @ file:///home/conda/feedstock_root/build_artifacts/greenlet_1726922184666/work
103
- grpcio @ file:///home/conda/feedstock_root/build_artifacts/grpc-split_1730233386122/work
104
- grpcio-status @ file:///home/conda/feedstock_root/build_artifacts/grpcio-status_1727244689671/work
105
- h11 @ file:///home/conda/feedstock_root/build_artifacts/h11_1664132893548/work
106
- h2 @ file:///home/conda/feedstock_root/build_artifacts/h2_1634280454336/work
107
- h5py @ file:///home/conda/feedstock_root/build_artifacts/h5py_1729617657254/work
108
  hpack==4.0.0
109
  htmltools==0.6.0
110
- httpcore @ file:///home/conda/feedstock_root/build_artifacts/httpcore_1727820890233/work
111
- httpx @ file:///home/conda/feedstock_root/build_artifacts/httpx_1724778349782/work
112
  huggingface-hub==0.28.1
113
- hyperframe @ file:///home/conda/feedstock_root/build_artifacts/hyperframe_1619110129307/work
114
- idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1726459485162/work
115
- imagecodecs @ file:///home/conda/feedstock_root/build_artifacts/imagecodecs_1734411441407/work
116
- imageio @ file:///home/conda/feedstock_root/build_artifacts/imageio_1729190692267/work
117
- importlib_metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1726082825846/work
118
- importlib_resources @ file:///home/conda/feedstock_root/build_artifacts/importlib_resources_1725921340658/work
119
- interface_meta @ file:///home/conda/feedstock_root/build_artifacts/interface_meta_1734284382083/work
120
- ipykernel @ file:///home/conda/feedstock_root/build_artifacts/ipykernel_1719845459717/work
121
- ipympl @ file:///home/conda/feedstock_root/build_artifacts/ipympl_1713251546026/work
122
- ipython @ file:///home/conda/feedstock_root/build_artifacts/ipython_1729866374957/work
123
- ipython-sql @ file:///home/conda/feedstock_root/build_artifacts/ipython-sql_1636816912182/work
124
- ipython_genutils @ file:///home/conda/feedstock_root/build_artifacts/ipython_genutils_1716278396992/work
125
- ipywidgets @ file:///home/conda/feedstock_root/build_artifacts/ipywidgets_1724334859652/work
126
- isoduration @ file:///home/conda/feedstock_root/build_artifacts/isoduration_1638811571363/work/dist
127
- isort @ file:///home/conda/feedstock_root/build_artifacts/isort_1738061237894/work
128
- jedi @ file:///home/conda/feedstock_root/build_artifacts/jedi_1696326070614/work
129
- Jinja2 @ file:///home/conda/feedstock_root/build_artifacts/jinja2_1715127149914/work
130
- jmespath @ file:///home/conda/feedstock_root/build_artifacts/jmespath_1733229141657/work
131
- joblib @ file:///home/conda/feedstock_root/build_artifacts/joblib_1714665484399/work
132
- json5 @ file:///home/conda/feedstock_root/build_artifacts/json5_1712986206667/work
133
- jsonpatch @ file:///home/conda/feedstock_root/build_artifacts/jsonpatch_1695536281965/work
134
- jsonpointer @ file:///home/conda/feedstock_root/build_artifacts/jsonpointer_1725302935093/work
135
- jsonschema @ file:///home/conda/feedstock_root/build_artifacts/jsonschema_1720529478715/work
136
- jsonschema-specifications @ file:///tmp/tmpvslgxhz5/src
137
  jupysql==0.10.17
138
  jupysql-plugin==0.4.5
139
- jupyter-events @ file:///home/conda/feedstock_root/build_artifacts/jupyter_events_1710805637316/work
140
- jupyter-lsp @ file:///home/conda/feedstock_root/build_artifacts/jupyter-lsp-meta_1712707420468/work/jupyter-lsp
141
- jupyter-server-mathjax @ file:///home/conda/feedstock_root/build_artifacts/jupyter-server-mathjax_1672324512570/work
142
- jupyter_client @ file:///home/conda/feedstock_root/build_artifacts/jupyter_client_1726610684920/work
143
- jupyter_core @ file:///home/conda/feedstock_root/build_artifacts/jupyter_core_1727163409502/work
144
- jupyter_server @ file:///home/conda/feedstock_root/build_artifacts/jupyter_server_1720816649297/work
145
- jupyter_server_terminals @ file:///home/conda/feedstock_root/build_artifacts/jupyter_server_terminals_1710262634903/work
146
- jupyterhub @ file:///home/conda/feedstock_root/build_artifacts/jupyterhub-feedstock_1729524405642/work
147
- jupyterlab @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_1724745148804/work
148
- jupyterlab_git @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab-git_1720358782306/work
149
- jupyterlab_pygments @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_pygments_1707149102966/work
150
- jupyterlab_server @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_server-split_1721163288448/work
151
- jupyterlab_widgets @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_widgets_1724331334887/work
152
- jupytext @ file:///home/conda/feedstock_root/build_artifacts/jupytext_1739264996936/work
153
- kiwisolver @ file:///home/conda/feedstock_root/build_artifacts/kiwisolver_1725459266942/work
154
- langcodes @ file:///home/conda/feedstock_root/build_artifacts/langcodes_1734376437639/work
155
- language_data @ file:///home/conda/feedstock_root/build_artifacts/language-data_1732032415021/work
156
- lazy_loader @ file:///home/conda/feedstock_root/build_artifacts/lazy-loader_1723774329602/work
157
- libmambapy @ file:///home/conda/feedstock_root/build_artifacts/mamba-split_1730842684690/work/libmambapy
158
- lightgbm @ file:///home/conda/feedstock_root/build_artifacts/liblightgbm_1737912911005/work
159
- lime @ file:///home/conda/feedstock_root/build_artifacts/lime_1734777765833/work
160
- linearmodels @ file:///home/conda/feedstock_root/build_artifacts/linearmodels_1727187098966/work
161
  linkify-it-py==2.0.3
162
  llvmlite==0.43.0
163
- locket @ file:///home/conda/feedstock_root/build_artifacts/locket_1650660393415/work
164
- lz4 @ file:///home/conda/feedstock_root/build_artifacts/lz4_1733474241180/work
165
- Mako @ file:///home/conda/feedstock_root/build_artifacts/mako_1715711344987/work
166
- marisa-trie @ file:///home/conda/feedstock_root/build_artifacts/marisa-trie_1736178990851/work
167
- Markdown @ file:///home/conda/feedstock_root/build_artifacts/markdown_1710435156458/work
168
- markdown-it-py @ file:///home/conda/feedstock_root/build_artifacts/markdown-it-py_1733250460757/work
169
  MarkupSafe==2.1.5
170
  matplotlib==3.9.2
171
- matplotlib-inline @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-inline_1713250518406/work
172
- mdit-py-plugins @ file:///home/conda/feedstock_root/build_artifacts/mdit-py-plugins_1733854715505/work
173
- mdurl @ file:///home/conda/feedstock_root/build_artifacts/mdurl_1733255585584/work
174
- menuinst @ file:///home/conda/feedstock_root/build_artifacts/menuinst_1725359038078/work
175
- miniful @ file:///home/conda/feedstock_root/build_artifacts/miniful_1738578852010/work
176
- mistune @ file:///home/conda/feedstock_root/build_artifacts/mistune_1698947099619/work
177
- mizani @ file:///home/conda/feedstock_root/build_artifacts/mizani_1733850081884/work
178
- mlxtend @ file:///home/conda/feedstock_root/build_artifacts/mlxtend_1737927625693/work
179
  momentchi2==0.1.8
180
  monotonic==1.6
181
- mpmath @ file:///home/conda/feedstock_root/build_artifacts/mpmath_1678228039184/work
182
- msgpack @ file:///home/conda/feedstock_root/build_artifacts/msgpack-python_1725975016068/work
183
  munkres==1.1.4
184
- murmurhash @ file:///home/conda/feedstock_root/build_artifacts/murmurhash_1728932916716/work
185
- mypy_extensions @ file:///home/conda/feedstock_root/build_artifacts/mypy_extensions_1733230897951/work
186
- narwhals @ file:///home/conda/feedstock_root/build_artifacts/narwhals_1739851660861/work
187
- nbclassic @ file:///home/conda/feedstock_root/build_artifacts/nbclassic_1716838762700/work
188
- nbclient @ file:///home/conda/feedstock_root/build_artifacts/nbclient_1710317608672/work
189
- nbconvert @ file:///home/conda/feedstock_root/build_artifacts/nbconvert-meta_1718135430380/work
190
- nbdime @ file:///home/conda/feedstock_root/build_artifacts/nbdime_1725627669057/work
191
- nbformat @ file:///home/conda/feedstock_root/build_artifacts/nbformat_1712238998817/work
192
- nest_asyncio @ file:///home/conda/feedstock_root/build_artifacts/nest-asyncio_1705850609492/work
193
- networkx @ file:///home/conda/feedstock_root/build_artifacts/networkx_1729530778722/work
194
- nltk @ file:///home/conda/feedstock_root/build_artifacts/nltk_1734309924703/work
195
- notebook @ file:///home/conda/feedstock_root/build_artifacts/notebook_1724861303656/work
196
- notebook_shim @ file:///home/conda/feedstock_root/build_artifacts/notebook-shim_1707957777232/work
197
- numba @ file:///home/conda/feedstock_root/build_artifacts/numba_1718888016245/work
198
- numexpr @ file:///home/conda/feedstock_root/build_artifacts/numexpr_1729662221511/work
199
- numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1707225359967/work/dist/numpy-1.26.4-cp312-cp312-linux_x86_64.whl#sha256=031b7d6b2e5e604d9e21fc21be713ebf28ce133ec872dce6de006742d5e49bab
200
  nvidia-cublas-cu12==12.6.4.1
201
  nvidia-cuda-cupti-cu12==12.6.80
202
  nvidia-cuda-nvrtc-cu12==12.6.77
@@ -210,181 +43,56 @@ nvidia-cusparselt-cu12==0.6.3
210
  nvidia-nccl-cu12==2.21.5
211
  nvidia-nvjitlink-cu12==12.6.85
212
  nvidia-nvtx-cu12==12.6.77
213
- oauthlib @ file:///home/conda/feedstock_root/build_artifacts/oauthlib_1666056362788/work
214
- openpyxl @ file:///home/conda/feedstock_root/build_artifacts/openpyxl_1725460884078/work
215
  orjson==3.10.15
216
  osqp==0.6.7.post3
217
- outcome @ file:///home/conda/feedstock_root/build_artifacts/outcome_1733406188332/work
218
- overrides @ file:///home/conda/feedstock_root/build_artifacts/overrides_1706394519472/work
219
- packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1718189413536/work
220
- pamela @ file:///home/conda/feedstock_root/build_artifacts/pamela_1723212587578/work
221
  pandas==2.2.3
222
- pandocfilters @ file:///home/conda/feedstock_root/build_artifacts/pandocfilters_1631603243851/work
223
- parso @ file:///home/conda/feedstock_root/build_artifacts/parso_1712320355065/work
224
- partd @ file:///home/conda/feedstock_root/build_artifacts/partd_1715026491486/work
225
- pathspec @ file:///home/conda/feedstock_root/build_artifacts/pathspec_1733233363808/work
226
- patsy @ file:///home/conda/feedstock_root/build_artifacts/patsy_1704469236901/work
227
- pexpect @ file:///home/conda/feedstock_root/build_artifacts/pexpect_1706113125309/work
228
- pickleshare @ file:///home/conda/feedstock_root/build_artifacts/pickleshare_1602536217715/work
229
- pillow @ file:///home/conda/feedstock_root/build_artifacts/pillow_1729065636207/work
230
- pkgutil_resolve_name @ file:///home/conda/feedstock_root/build_artifacts/pkgutil-resolve-name_1694617248815/work
231
- platformdirs @ file:///home/conda/feedstock_root/build_artifacts/platformdirs_1726613481435/work
232
  ploomber-core==0.2.26
233
- plotly @ file:///home/conda/feedstock_root/build_artifacts/plotly_1738287743623/work
234
- plotnine @ file:///home/conda/feedstock_root/build_artifacts/plotnine_1735816953568/work
235
- pluggy @ file:///home/conda/feedstock_root/build_artifacts/pluggy_1713667077545/work
236
  polars==1.22.0
237
  posthog==3.14.1
238
- preshed @ file:///home/conda/feedstock_root/build_artifacts/preshed_1728945652685/work
239
- prettytable @ file:///home/conda/feedstock_root/build_artifacts/prettytable_1738401694108/work
240
- prometheus_client @ file:///home/conda/feedstock_root/build_artifacts/prometheus_client_1726901976720/work
241
- prompt_toolkit @ file:///home/conda/feedstock_root/build_artifacts/prompt-toolkit_1727341649933/work
242
- protobuf @ file:///home/conda/feedstock_root/build_artifacts/protobuf_1728668314281/work/bazel-bin/python/dist/protobuf-5.28.2-cp312-abi3-linux_x86_64.whl#sha256=f103c8b99ca0a96e2feeaa5c5589b37c02b05bd901d908f7825153340c69de0a
243
- psutil @ file:///home/conda/feedstock_root/build_artifacts/psutil_1729847057810/work
244
- psycopg2 @ file:///home/conda/feedstock_root/build_artifacts/psycopg2-split_1727892814430/work
245
  psygnal==0.12.0
246
- ptyprocess @ file:///home/conda/feedstock_root/build_artifacts/ptyprocess_1609419310487/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl
247
- pure_eval @ file:///home/conda/feedstock_root/build_artifacts/pure_eval_1721585709575/work
248
- py-cpuinfo @ file:///home/conda/feedstock_root/build_artifacts/py-cpuinfo_1666774466606/work
249
  py4j==0.10.9.7
250
  pyarrow==17.0.0
251
- pyasn1 @ file:///home/conda/feedstock_root/build_artifacts/pyasn1_1733217608156/work
252
- pycosat @ file:///home/conda/feedstock_root/build_artifacts/pycosat_1696355774225/work
253
- pycparser @ file:///home/conda/feedstock_root/build_artifacts/pycparser_1711811537435/work
254
- pycurl @ file:///home/conda/feedstock_root/build_artifacts/pycurl_1725361476421/work
255
- pydantic @ file:///home/conda/feedstock_root/build_artifacts/pydantic_1726601062926/work
256
- pydantic_core @ file:///home/conda/feedstock_root/build_artifacts/pydantic-core_1726524971346/work
257
- pydeck @ file:///home/conda/feedstock_root/build_artifacts/pydeck_1667589451974/work
258
  pydot==3.0.4
259
- pydotplus @ file:///home/conda/feedstock_root/build_artifacts/pydotplus_1734535704590/work
260
  pydub==0.25.1
261
- pyFUME @ file:///home/conda/feedstock_root/build_artifacts/pyfume_1674509566653/work
262
- Pygments @ file:///home/conda/feedstock_root/build_artifacts/pygments_1714846767233/work
263
- pyhdfe @ file:///home/conda/feedstock_root/build_artifacts/pyhdfe_1735397688053/work
264
- PyJWT @ file:///home/conda/feedstock_root/build_artifacts/pyjwt_1722701264352/work
265
- pyLDAvis @ file:///home/conda/feedstock_root/build_artifacts/pyldavis_1736887884723/work
266
- pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1728880423364/work
267
  pyrsm==1.2.0
268
- PySocks @ file:///home/conda/feedstock_root/build_artifacts/pysocks_1661604839144/work
269
  pyspark==4.0.0.dev2
270
- python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1709299778482/work
271
- python-dotenv @ file:///home/conda/feedstock_root/build_artifacts/python-dotenv_1733243180666/work
272
- python-json-logger @ file:///home/conda/feedstock_root/build_artifacts/python-json-logger_1677079630776/work
273
  python-multipart==0.0.20
274
- pytz @ file:///home/conda/feedstock_root/build_artifacts/pytz_1706886791323/work
275
  PyWavelets==1.7.0
276
- PyYAML @ file:///home/conda/feedstock_root/build_artifacts/pyyaml_1725456134219/work
277
- pyzmq @ file:///home/conda/feedstock_root/build_artifacts/pyzmq_1728642254015/work
278
  qdldl==0.1.7.post5
279
  questionary==2.1.0
280
  radian==0.6.13
281
  rchitect==0.4.7
282
- referencing @ file:///home/conda/feedstock_root/build_artifacts/referencing_1714619483868/work
283
- regex @ file:///home/conda/feedstock_root/build_artifacts/regex_1730952243530/work
284
- requests @ file:///home/conda/feedstock_root/build_artifacts/requests_1717057054362/work
285
- rfc3339-validator @ file:///home/conda/feedstock_root/build_artifacts/rfc3339-validator_1638811747357/work
286
- rfc3986-validator @ file:///home/conda/feedstock_root/build_artifacts/rfc3986-validator_1598024191506/work
287
- rich @ file:///home/conda/feedstock_root/build_artifacts/rich_1733342254348/work/dist
288
- rpds-py @ file:///home/conda/feedstock_root/build_artifacts/rpds-py_1725327050544/work
289
- rsa @ file:///home/conda/feedstock_root/build_artifacts/rsa_1614171254180/work
290
- ruamel.yaml @ file:///home/conda/feedstock_root/build_artifacts/ruamel.yaml_1728764986945/work
291
- ruamel.yaml.clib @ file:///home/conda/feedstock_root/build_artifacts/ruamel.yaml.clib_1728724466132/work
292
  ruff==0.9.6
293
- s3transfer @ file:///home/conda/feedstock_root/build_artifacts/s3transfer_1737737761316/work
294
  safehttpx==0.1.6
295
  safetensors==0.5.2
296
- scikit-image @ file:///home/conda/feedstock_root/build_artifacts/scikit-image_1729813832871/work/dist/scikit_image-0.24.0-cp312-cp312-linux_x86_64.whl#sha256=c02226adc1bbc3cff0787d5d2c2ef3ff92d050487b0086107059af19dc29b97d
297
- scikit-learn @ file:///home/conda/feedstock_root/build_artifacts/scikit-learn_1726082671867/work/dist/scikit_learn-1.5.2-cp312-cp312-linux_x86_64.whl#sha256=7788ecb5f833925f336ead218eb6aff84070ef8d4c6457fe66e41ed104ed2600
298
- scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy-split_1706041474046/work/dist/scipy-1.12.0-cp312-cp312-linux_x86_64.whl#sha256=455585fb13f602615d4e6633d9becf631347243101f5b6983e5718c2dd364888
299
  scs==3.2.7.post2
300
- seaborn @ file:///home/conda/feedstock_root/build_artifacts/seaborn-split_1714494649443/work
301
- selenium @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_selenium_1737667202/work
302
  semantic-version==2.10.0
303
- Send2Trash @ file:///home/conda/feedstock_root/build_artifacts/send2trash_1712584999685/work
304
  setuptools==75.1.0
305
  shap==0.43.0
306
- shellingham @ file:///home/conda/feedstock_root/build_artifacts/shellingham_1733300899265/work
307
  shiny==1.2.1
308
  shinyswatch==0.8.0
309
  shinywidgets==0.5.1
310
- simpful @ file:///home/conda/feedstock_root/build_artifacts/simpful_1738578860095/work
311
- simpy @ file:///home/conda/feedstock_root/build_artifacts/simpy_1735073919790/work
312
- six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
313
  slicer==0.0.7
314
- smart_open @ file:///home/conda/feedstock_root/build_artifacts/smart_open_1734485076778/work/dist
315
- smmap @ file:///home/conda/feedstock_root/build_artifacts/smmap_1634310307496/work
316
- sniffio @ file:///home/conda/feedstock_root/build_artifacts/sniffio_1708952932303/work
317
- sortedcontainers @ file:///home/conda/feedstock_root/build_artifacts/sortedcontainers_1621217038088/work
318
- soupsieve @ file:///home/conda/feedstock_root/build_artifacts/soupsieve_1693929250441/work
319
- spacy @ file:///home/conda/feedstock_root/build_artifacts/spacy_1732449874682/work
320
- spacy-legacy @ file:///home/conda/feedstock_root/build_artifacts/spacy-legacy_1674550301837/work
321
- spacy-loggers @ file:///home/conda/feedstock_root/build_artifacts/spacy-loggers_1694527114282/work
322
  sparse==0.15.5
323
- SQLAlchemy @ file:///home/conda/feedstock_root/build_artifacts/sqlalchemy_1729066352888/work
324
  sqlglot==26.6.0
325
- sqlparse @ file:///home/conda/feedstock_root/build_artifacts/sqlparse_1734007102193/work
326
- srsly @ file:///home/conda/feedstock_root/build_artifacts/srsly_1737143183180/work
327
- stack-data @ file:///home/conda/feedstock_root/build_artifacts/stack_data_1669632077133/work
328
  starlette==0.45.3
329
- statsmodels @ file:///home/conda/feedstock_root/build_artifacts/statsmodels_1727986688191/work
330
- streamlit @ file:///home/conda/feedstock_root/build_artifacts/streamlit_1739846950093/work
331
  sympy==1.13.1
332
- tables @ file:///home/conda/feedstock_root/build_artifacts/pytables_1724161041994/work
333
- tblib @ file:///home/conda/feedstock_root/build_artifacts/tblib_1702066284995/work
334
- tenacity @ file:///home/conda/feedstock_root/build_artifacts/tenacity_1733649050774/work
335
- terminado @ file:///home/conda/feedstock_root/build_artifacts/terminado_1710262609923/work
336
  textblob==0.19.0
337
- thinc @ file:///home/conda/feedstock_root/build_artifacts/thinc_1733202756977/work
338
- threadpoolctl @ file:///home/conda/feedstock_root/build_artifacts/threadpoolctl_1714400101435/work
339
- tifffile @ file:///home/conda/feedstock_root/build_artifacts/tifffile_1727250434425/work
340
- tinycss2 @ file:///home/conda/feedstock_root/build_artifacts/tinycss2_1729802851396/work
341
  tokenizers==0.21.0
342
- toml @ file:///home/conda/feedstock_root/build_artifacts/toml_1734091811753/work
343
- tomli @ file:///home/conda/feedstock_root/build_artifacts/tomli_1727974628237/work
344
  tomlkit==0.13.2
345
- toolz @ file:///home/conda/feedstock_root/build_artifacts/toolz_1728059506884/work
346
  torch==2.6.0+cu126
347
  torchaudio==2.6.0+cu126
348
  torchvision==0.21.0+cu126
349
- tornado @ file:///home/conda/feedstock_root/build_artifacts/tornado_1724956131631/work
350
- tqdm @ file:///home/conda/feedstock_root/build_artifacts/tqdm_1722737464726/work
351
- traitlets @ file:///home/conda/feedstock_root/build_artifacts/traitlets_1713535121073/work
352
  transformers==4.49.0
353
- trio @ file:///home/conda/feedstock_root/build_artifacts/trio_1739529641377/work
354
- trio-websocket @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_trio-websocket_1739800863/work
355
  triton==3.2.0
356
- truststore @ file:///home/conda/feedstock_root/build_artifacts/truststore_1729762363021/work
357
  typer==0.15.1
358
  typer-slim==0.15.1
359
- types-python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/types-python-dateutil_1727940235703/work
360
- typing-utils @ file:///home/conda/feedstock_root/build_artifacts/typing_utils_1622899189314/work
361
- typing_extensions @ file:///home/conda/feedstock_root/build_artifacts/typing_extensions_1717802530399/work
362
- tzdata @ file:///home/conda/feedstock_root/build_artifacts/python-tzdata_1727140567071/work
363
- tzlocal @ file:///home/conda/feedstock_root/build_artifacts/tzlocal_1739471997586/work
364
  uc-micro-py==1.0.3
365
- unicodedata2 @ file:///home/conda/feedstock_root/build_artifacts/unicodedata2_1729704561929/work
366
- uri-template @ file:///home/conda/feedstock_root/build_artifacts/uri-template_1688655812972/work/dist
367
- urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1726496430923/work
368
  uv==0.6.1
369
  uvicorn==0.34.0
370
  vaderSentiment==3.3.2
371
- wasabi @ file:///home/conda/feedstock_root/build_artifacts/wasabi_1715409665169/work
372
- watchdog @ file:///home/conda/feedstock_root/build_artifacts/watchdog_1730492891215/work
373
  watchfiles==1.0.4
374
- wcwidth @ file:///home/conda/feedstock_root/build_artifacts/wcwidth_1704731205417/work
375
- weasel @ file:///home/conda/feedstock_root/build_artifacts/weasel_1734270156651/work
376
- webcolors @ file:///home/conda/feedstock_root/build_artifacts/webcolors_1723294704277/work
377
- webencodings @ file:///home/conda/feedstock_root/build_artifacts/webencodings_1694681268211/work
378
- websocket-client @ file:///home/conda/feedstock_root/build_artifacts/websocket-client_1713923384721/work
379
  websockets==14.2
380
  wheel==0.44.0
381
- widgetsnbextension @ file:///home/conda/feedstock_root/build_artifacts/widgetsnbextension_1724331337528/work
382
- wrapt @ file:///home/conda/feedstock_root/build_artifacts/wrapt_1736869451908/work
383
- wsproto @ file:///home/conda/feedstock_root/build_artifacts/wsproto_1733060193308/work
384
- xgboost @ file:///home/conda/feedstock_root/build_artifacts/xgboost-split_1738880198843/work/python-package
385
- xlrd @ file:///home/conda/feedstock_root/build_artifacts/xlrd_1610224409810/work
386
  xlsx2csv==0.8.4
387
- xyzservices @ file:///home/conda/feedstock_root/build_artifacts/xyzservices_1725366347586/work
388
- zict @ file:///home/conda/feedstock_root/build_artifacts/zict_1681770155528/work
389
- zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1726248574750/work
390
  zstandard==0.23.0
 
1
  aiofiles==23.2.1
 
 
 
 
2
  anywidget==0.9.13
3
  appdirs==1.4.4
 
 
 
 
4
  asgiref==3.8.1
 
 
 
 
 
 
 
5
  backoff==2.2.1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  causal-learn==0.1.4.0
 
 
 
 
7
  clarabel==0.10.0
 
 
 
 
 
 
 
 
 
 
8
  connectorx==0.3.3
 
 
9
  cvxpy==1.6.0
 
 
10
  Cython==0.29.37
 
 
 
 
 
 
 
 
 
 
11
  dowhy==0.12
 
 
12
  econml==0.15.1
 
 
 
 
13
  faicons==0.2.2
14
  fastapi==0.115.8
15
  fastexcel==0.12.1
 
16
  ffmpy==0.5.0
17
  filelock==3.17.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  gradio==5.16.1
19
  gradio_client==1.7.0
 
20
  graphviz==0.20.3
 
 
 
 
 
 
21
  hpack==4.0.0
22
  htmltools==0.6.0
 
 
23
  huggingface-hub==0.28.1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  jupysql==0.10.17
25
  jupysql-plugin==0.4.5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  linkify-it-py==2.0.3
27
  llvmlite==0.43.0
 
 
 
 
 
 
28
  MarkupSafe==2.1.5
29
  matplotlib==3.9.2
 
 
 
 
 
 
 
 
30
  momentchi2==0.1.8
31
  monotonic==1.6
 
 
32
  munkres==1.1.4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  nvidia-cublas-cu12==12.6.4.1
34
  nvidia-cuda-cupti-cu12==12.6.80
35
  nvidia-cuda-nvrtc-cu12==12.6.77
 
43
  nvidia-nccl-cu12==2.21.5
44
  nvidia-nvjitlink-cu12==12.6.85
45
  nvidia-nvtx-cu12==12.6.77
 
 
46
  orjson==3.10.15
47
  osqp==0.6.7.post3
 
 
 
 
48
  pandas==2.2.3
 
 
 
 
 
 
 
 
 
 
49
  ploomber-core==0.2.26
 
 
 
50
  polars==1.22.0
51
  posthog==3.14.1
 
 
 
 
 
 
 
52
  psygnal==0.12.0
 
 
 
53
  py4j==0.10.9.7
54
  pyarrow==17.0.0
 
 
 
 
 
 
 
55
  pydot==3.0.4
 
56
  pydub==0.25.1
 
 
 
 
 
 
57
  pyrsm==1.2.0
 
58
  pyspark==4.0.0.dev2
 
 
 
59
  python-multipart==0.0.20
 
60
  PyWavelets==1.7.0
 
 
61
  qdldl==0.1.7.post5
62
  questionary==2.1.0
63
  radian==0.6.13
64
  rchitect==0.4.7
 
 
 
 
 
 
 
 
 
 
65
  ruff==0.9.6
 
66
  safehttpx==0.1.6
67
  safetensors==0.5.2
 
 
 
68
  scs==3.2.7.post2
 
 
69
  semantic-version==2.10.0
 
70
  setuptools==75.1.0
71
  shap==0.43.0
 
72
  shiny==1.2.1
73
  shinyswatch==0.8.0
74
  shinywidgets==0.5.1
 
 
 
75
  slicer==0.0.7
 
 
 
 
 
 
 
 
76
  sparse==0.15.5
 
77
  sqlglot==26.6.0
 
 
 
78
  starlette==0.45.3
 
 
79
  sympy==1.13.1
 
 
 
 
80
  textblob==0.19.0
 
 
 
 
81
  tokenizers==0.21.0
 
 
82
  tomlkit==0.13.2
 
83
  torch==2.6.0+cu126
84
  torchaudio==2.6.0+cu126
85
  torchvision==0.21.0+cu126
 
 
 
86
  transformers==4.49.0
 
 
87
  triton==3.2.0
 
88
  typer==0.15.1
89
  typer-slim==0.15.1
 
 
 
 
 
90
  uc-micro-py==1.0.3
 
 
 
91
  uv==0.6.1
92
  uvicorn==0.34.0
93
  vaderSentiment==3.3.2
 
 
94
  watchfiles==1.0.4
 
 
 
 
 
95
  websockets==14.2
96
  wheel==0.44.0
 
 
 
 
 
97
  xlsx2csv==0.8.4
 
 
 
98
  zstandard==0.23.0
ultima_seo.egg-info/PKG-INFO ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: ultima-seo
3
+ Version: 0.1.0
4
+ Summary: Add your description here
5
+ Requires-Python: >=3.12
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: scipy==1.11.4
8
+ Requires-Dist: anthropic>=0.55.0
9
+ Requires-Dist: google-generativeai>=0.8.5
10
+ Requires-Dist: ipywidgets>=8.1.7
11
+ Requires-Dist: langchain>=0.3.26
12
+ Requires-Dist: langchain-anthropic>=0.3.16
13
+ Requires-Dist: langchain-community>=0.0.28
14
+ Requires-Dist: langchain-google-genai>=2.0.10
15
+ Requires-Dist: langchain-openai>=0.3.27
16
+ Requires-Dist: openai>=1.93.0
17
+ Requires-Dist: pydantic>=2.11.7
18
+ Requires-Dist: pydantic-ai>=0.3.5
19
+ Requires-Dist: pyrsm>=1.6.0
20
+ Requires-Dist: python-dotenv>=1.1.1
21
+ Requires-Dist: pytrends>=4.9.2
22
+ Requires-Dist: requests>=2.32.4
23
+ Requires-Dist: tweepy>=4.16.0
24
+ Requires-Dist: bs4>=0.0.2
25
+ Requires-Dist: playwright>=1.53.0
26
+
27
+ ---
28
+ title: Ultima Seo
29
+ emoji: 🌍
30
+ colorFrom: yellow
31
+ colorTo: indigo
32
+ sdk: docker
33
+ pinned: false
34
+ license: mit
35
+ short_description: SEO Optimization AI Tool
36
+ ---
37
+
38
+ This is a templated Space for [Shiny for Python](https://shiny.rstudio.com/py/).
39
+
40
+
41
+ To get started with a new app do the following:
42
+
43
+ 1) Install Shiny with `pip install shiny`
44
+ 2) Create a new app with `shiny create`
45
+ 3) Then run the app with `shiny run --reload`
46
+
47
+ To learn more about this framework please see the [Documentation](https://shiny.rstudio.com/py/docs/overview.html).
ultima_seo.egg-info/SOURCES.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ README.md
2
+ pyproject.toml
3
+ server/__init__.py
4
+ server/blog.py
5
+ server/meta.py
6
+ server/price_matching.py
7
+ server/twitter.py
8
+ ultima_seo.egg-info/PKG-INFO
9
+ ultima_seo.egg-info/SOURCES.txt
10
+ ultima_seo.egg-info/dependency_links.txt
11
+ ultima_seo.egg-info/requires.txt
12
+ ultima_seo.egg-info/top_level.txt
ultima_seo.egg-info/dependency_links.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
ultima_seo.egg-info/requires.txt ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ scipy==1.11.4
2
+ anthropic>=0.55.0
3
+ google-generativeai>=0.8.5
4
+ ipywidgets>=8.1.7
5
+ langchain>=0.3.26
6
+ langchain-anthropic>=0.3.16
7
+ langchain-community>=0.0.28
8
+ langchain-google-genai>=2.0.10
9
+ langchain-openai>=0.3.27
10
+ openai>=1.93.0
11
+ pydantic>=2.11.7
12
+ pydantic-ai>=0.3.5
13
+ pyrsm>=1.6.0
14
+ python-dotenv>=1.1.1
15
+ pytrends>=4.9.2
16
+ requests>=2.32.4
17
+ tweepy>=4.16.0
18
+ bs4>=0.0.2
19
+ playwright>=1.53.0
ultima_seo.egg-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ server