ai-data-science-team 0.0.0.9012__py3-none-any.whl → 0.0.0.9013__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ai_data_science_team/_version.py +1 -1
- ai_data_science_team/agents/data_loader_tools_agent.py +11 -0
- ai_data_science_team/ds_agents/eda_tools_agent.py +13 -0
- ai_data_science_team/ml_agents/mlflow_tools_agent.py +10 -0
- ai_data_science_team/tools/dataframe.py +6 -1
- ai_data_science_team/tools/eda.py +75 -16
- ai_data_science_team/utils/messages.py +27 -0
- {ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/METADATA +6 -2
- {ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/RECORD +12 -11
- {ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/LICENSE +0 -0
- {ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/WHEEL +0 -0
- {ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/top_level.txt +0 -0
ai_data_science_team/_version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.0.0.
|
1
|
+
__version__ = "0.0.0.9013"
|
@@ -25,6 +25,7 @@ from ai_data_science_team.tools.data_loader import (
|
|
25
25
|
get_file_info,
|
26
26
|
search_files_by_pattern,
|
27
27
|
)
|
28
|
+
from ai_data_science_team.utils.messages import get_tool_call_names
|
28
29
|
|
29
30
|
AGENT_NAME = "data_loader_tools_agent"
|
30
31
|
|
@@ -174,6 +175,12 @@ class DataLoaderToolsAgent(BaseAgent):
|
|
174
175
|
return Markdown(self.response["messages"][0].content)
|
175
176
|
else:
|
176
177
|
return self.response["messages"][0].content
|
178
|
+
|
179
|
+
def get_tool_calls(self):
|
180
|
+
"""
|
181
|
+
Returns the tool calls made by the agent.
|
182
|
+
"""
|
183
|
+
return self.response["tool_calls"]
|
177
184
|
|
178
185
|
|
179
186
|
|
@@ -204,6 +211,7 @@ def make_data_loader_tools_agent(
|
|
204
211
|
internal_messages: Annotated[Sequence[BaseMessage], operator.add]
|
205
212
|
user_instructions: str
|
206
213
|
data_loader_artifacts: dict
|
214
|
+
tool_calls: List[str]
|
207
215
|
|
208
216
|
def data_loader_agent(state):
|
209
217
|
|
@@ -253,10 +261,13 @@ def make_data_loader_tools_agent(
|
|
253
261
|
elif isinstance(last_message, dict) and "artifact" in last_message:
|
254
262
|
last_tool_artifact = last_message["artifact"]
|
255
263
|
|
264
|
+
tool_calls = get_tool_call_names(internal_messages)
|
265
|
+
|
256
266
|
return {
|
257
267
|
"messages": [last_ai_message],
|
258
268
|
"internal_messages": internal_messages,
|
259
269
|
"data_loader_artifacts": last_tool_artifact,
|
270
|
+
"tool_calls": tool_calls,
|
260
271
|
}
|
261
272
|
|
262
273
|
workflow = StateGraph(GraphState)
|
@@ -19,17 +19,20 @@ from ai_data_science_team.templates import BaseAgent
|
|
19
19
|
from ai_data_science_team.utils.regex import format_agent_name
|
20
20
|
|
21
21
|
from ai_data_science_team.tools.eda import (
|
22
|
+
explain_data,
|
22
23
|
describe_dataset,
|
23
24
|
visualize_missing,
|
24
25
|
correlation_funnel,
|
25
26
|
generate_sweetviz_report,
|
26
27
|
)
|
28
|
+
from ai_data_science_team.utils.messages import get_tool_call_names
|
27
29
|
|
28
30
|
|
29
31
|
AGENT_NAME = "exploratory_data_analyst_agent"
|
30
32
|
|
31
33
|
# Updated tool list for EDA
|
32
34
|
EDA_TOOLS = [
|
35
|
+
explain_data,
|
33
36
|
describe_dataset,
|
34
37
|
visualize_missing,
|
35
38
|
correlation_funnel,
|
@@ -162,6 +165,12 @@ class EDAToolsAgent(BaseAgent):
|
|
162
165
|
return Markdown(self.response["messages"][0].content)
|
163
166
|
else:
|
164
167
|
return self.response["messages"][0].content
|
168
|
+
|
169
|
+
def get_tool_calls(self):
|
170
|
+
"""
|
171
|
+
Returns the tool calls made by the agent.
|
172
|
+
"""
|
173
|
+
return self.response["tool_calls"]
|
165
174
|
|
166
175
|
def make_eda_tools_agent(
|
167
176
|
model: Any,
|
@@ -191,6 +200,7 @@ def make_eda_tools_agent(
|
|
191
200
|
user_instructions: str
|
192
201
|
data_raw: dict
|
193
202
|
eda_artifacts: dict
|
203
|
+
tool_calls: list
|
194
204
|
|
195
205
|
def exploratory_agent(state):
|
196
206
|
print(format_agent_name(AGENT_NAME))
|
@@ -229,11 +239,14 @@ def make_eda_tools_agent(
|
|
229
239
|
last_tool_artifact = last_message.artifact
|
230
240
|
elif isinstance(last_message, dict) and "artifact" in last_message:
|
231
241
|
last_tool_artifact = last_message["artifact"]
|
242
|
+
|
243
|
+
tool_calls = get_tool_call_names(internal_messages)
|
232
244
|
|
233
245
|
return {
|
234
246
|
"messages": [last_ai_message],
|
235
247
|
"internal_messages": internal_messages,
|
236
248
|
"eda_artifacts": last_tool_artifact,
|
249
|
+
"tool_calls": tool_calls,
|
237
250
|
}
|
238
251
|
|
239
252
|
workflow = StateGraph(GraphState)
|
@@ -27,6 +27,7 @@ from ai_data_science_team.tools.mlflow import (
|
|
27
27
|
mlflow_search_registered_models,
|
28
28
|
mlflow_get_model_version_details,
|
29
29
|
)
|
30
|
+
from ai_data_science_team.utils.messages import get_tool_call_names
|
30
31
|
|
31
32
|
AGENT_NAME = "mlflow_tools_agent"
|
32
33
|
|
@@ -228,6 +229,12 @@ class MLflowToolsAgent(BaseAgent):
|
|
228
229
|
return Markdown(self.response["messages"][0].content)
|
229
230
|
else:
|
230
231
|
return self.response["messages"][0].content
|
232
|
+
|
233
|
+
def get_tool_calls(self):
|
234
|
+
"""
|
235
|
+
Returns the tool calls made by the agent.
|
236
|
+
"""
|
237
|
+
return self.response["tool_calls"]
|
231
238
|
|
232
239
|
|
233
240
|
|
@@ -330,10 +337,13 @@ def make_mlflow_tools_agent(
|
|
330
337
|
elif isinstance(last_message, dict) and "artifact" in last_message:
|
331
338
|
last_tool_artifact = last_message["artifact"]
|
332
339
|
|
340
|
+
tool_calls = get_tool_call_names(internal_messages)
|
341
|
+
|
333
342
|
return {
|
334
343
|
"messages": [last_ai_message],
|
335
344
|
"internal_messages": internal_messages,
|
336
345
|
"mlflow_artifacts": last_tool_artifact,
|
346
|
+
"tool_calls": tool_calls,
|
337
347
|
}
|
338
348
|
|
339
349
|
|
@@ -74,7 +74,12 @@ def get_dataframe_summary(
|
|
74
74
|
return summaries
|
75
75
|
|
76
76
|
|
77
|
-
def _summarize_dataframe(
|
77
|
+
def _summarize_dataframe(
|
78
|
+
df: pd.DataFrame,
|
79
|
+
dataset_name: str,
|
80
|
+
n_sample=30,
|
81
|
+
skip_stats=False
|
82
|
+
) -> str:
|
78
83
|
"""Generate a summary string for a single DataFrame."""
|
79
84
|
# 1. Convert dictionary-type cells to strings
|
80
85
|
# This prevents unhashable dict errors during df.nunique().
|
@@ -2,11 +2,44 @@
|
|
2
2
|
from typing import Annotated, Dict, Tuple, Union
|
3
3
|
|
4
4
|
import os
|
5
|
+
import tempfile
|
5
6
|
|
6
7
|
from langchain.tools import tool
|
7
8
|
|
8
9
|
from langgraph.prebuilt import InjectedState
|
9
10
|
|
11
|
+
from ai_data_science_team.tools.dataframe import get_dataframe_summary
|
12
|
+
|
13
|
+
|
14
|
+
@tool(response_format='content')
|
15
|
+
def explain_data(
|
16
|
+
data_raw: Annotated[dict, InjectedState("data_raw")],
|
17
|
+
n_sample: int = 30,
|
18
|
+
skip_stats: bool = False,
|
19
|
+
):
|
20
|
+
"""
|
21
|
+
Tool: explain_data
|
22
|
+
Description:
|
23
|
+
Provides an extensive, narrative summary of a DataFrame including its shape, column types,
|
24
|
+
missing value percentages, unique counts, sample rows, and (if not skipped) descriptive stats/info.
|
25
|
+
|
26
|
+
Parameters:
|
27
|
+
data_raw (dict): Raw data.
|
28
|
+
n_sample (int, default=30): Number of rows to display.
|
29
|
+
skip_stats (bool, default=False): If True, omit descriptive stats/info.
|
30
|
+
|
31
|
+
LLM Guidance:
|
32
|
+
Use when a detailed, human-readable explanation is needed—i.e., a full overview is preferred over a concise numerical summary.
|
33
|
+
|
34
|
+
Returns:
|
35
|
+
str: Detailed DataFrame summary.
|
36
|
+
"""
|
37
|
+
print(" * Tool: explain_data")
|
38
|
+
import pandas as pd
|
39
|
+
|
40
|
+
result = get_dataframe_summary(pd.DataFrame(data_raw), n_sample=n_sample, skip_stats=skip_stats)
|
41
|
+
|
42
|
+
return result
|
10
43
|
|
11
44
|
@tool(response_format='content_and_artifact')
|
12
45
|
def describe_dataset(
|
@@ -15,21 +48,33 @@ def describe_dataset(
|
|
15
48
|
"""
|
16
49
|
Tool: describe_dataset
|
17
50
|
Description:
|
18
|
-
|
19
|
-
|
20
|
-
|
51
|
+
Compute and return summary statistics for the dataset using pandas' describe() method.
|
52
|
+
The tool provides both a textual summary and a structured artifact (a dictionary) for further processing.
|
53
|
+
|
54
|
+
Parameters:
|
55
|
+
-----------
|
56
|
+
data_raw : dict
|
57
|
+
The raw data in dictionary format.
|
58
|
+
|
59
|
+
LLM Selection Guidance:
|
60
|
+
------------------------
|
61
|
+
Use this tool when:
|
62
|
+
- The request emphasizes numerical descriptive statistics (e.g., count, mean, std, min, quartiles, max).
|
63
|
+
- The user needs a concise statistical snapshot rather than a detailed narrative.
|
64
|
+
- Both a brief text explanation and a structured data artifact (for downstream tasks) are required.
|
65
|
+
|
21
66
|
Returns:
|
22
67
|
-------
|
23
68
|
Tuple[str, Dict]:
|
24
|
-
content: A textual summary
|
25
|
-
artifact: A dictionary (from DataFrame.describe())
|
69
|
+
- content: A textual summary indicating that summary statistics have been computed.
|
70
|
+
- artifact: A dictionary (derived from DataFrame.describe()) containing detailed statistical measures.
|
26
71
|
"""
|
27
72
|
print(" * Tool: describe_dataset")
|
28
73
|
import pandas as pd
|
29
74
|
df = pd.DataFrame(data_raw)
|
30
75
|
description_df = df.describe(include='all')
|
31
76
|
content = "Summary statistics computed using pandas describe()."
|
32
|
-
artifact = description_df.to_dict()
|
77
|
+
artifact = {'describe_df': description_df.to_dict()}
|
33
78
|
return content, artifact
|
34
79
|
|
35
80
|
|
@@ -226,8 +271,8 @@ def generate_sweetviz_report(
|
|
226
271
|
data_raw: Annotated[dict, InjectedState("data_raw")],
|
227
272
|
target: str = None,
|
228
273
|
report_name: str = "sweetviz_report.html",
|
229
|
-
report_directory: str =
|
230
|
-
open_browser: bool =
|
274
|
+
report_directory: str = None, # <-- Default to None
|
275
|
+
open_browser: bool = False,
|
231
276
|
) -> Tuple[str, Dict]:
|
232
277
|
"""
|
233
278
|
Tool: generate_sweetviz_report
|
@@ -243,9 +288,10 @@ def generate_sweetviz_report(
|
|
243
288
|
report_name : str, optional
|
244
289
|
The file name to save the Sweetviz HTML report. Default is "sweetviz_report.html".
|
245
290
|
report_directory : str, optional
|
246
|
-
The directory where the report should be saved.
|
291
|
+
The directory where the report should be saved.
|
292
|
+
If None, a temporary directory is created and used.
|
247
293
|
open_browser : bool, optional
|
248
|
-
Whether to open the report in a web browser. Default is
|
294
|
+
Whether to open the report in a web browser. Default is False.
|
249
295
|
|
250
296
|
Returns:
|
251
297
|
--------
|
@@ -254,28 +300,37 @@ def generate_sweetviz_report(
|
|
254
300
|
artifact: A dictionary with the report file path and optionally the report's HTML content.
|
255
301
|
"""
|
256
302
|
print(" * Tool: generate_sweetviz_report")
|
303
|
+
|
304
|
+
# Import sweetviz
|
257
305
|
try:
|
258
306
|
import sweetviz as sv
|
259
307
|
except ImportError:
|
260
308
|
raise ImportError("Please install the 'sweetviz' package to use this tool. Run: pip install sweetviz")
|
309
|
+
|
261
310
|
import pandas as pd
|
311
|
+
|
262
312
|
# Convert injected raw data to a DataFrame.
|
263
313
|
df = pd.DataFrame(data_raw)
|
264
314
|
|
315
|
+
# If no directory is specified, use a temporary directory.
|
316
|
+
if not report_directory:
|
317
|
+
report_directory = tempfile.mkdtemp()
|
318
|
+
print(f" * Using temporary directory: {report_directory}")
|
319
|
+
else:
|
320
|
+
# Ensure user-specified directory exists.
|
321
|
+
if not os.path.exists(report_directory):
|
322
|
+
os.makedirs(report_directory)
|
323
|
+
|
265
324
|
# Create the Sweetviz report.
|
266
325
|
report = sv.analyze(df, target_feat=target)
|
267
326
|
|
268
|
-
# Ensure the directory exists; default is os.getcwd()/reports
|
269
|
-
if not os.path.exists(report_directory):
|
270
|
-
os.makedirs(report_directory)
|
271
|
-
|
272
327
|
# Determine the full path for the report.
|
273
328
|
full_report_path = os.path.join(report_directory, report_name)
|
274
329
|
|
275
330
|
# Save the report to the specified HTML file.
|
276
331
|
report.show_html(
|
277
332
|
filepath=full_report_path,
|
278
|
-
open_browser=
|
333
|
+
open_browser=open_browser,
|
279
334
|
)
|
280
335
|
|
281
336
|
# Optionally, read the HTML content (if desired to pass along in the artifact).
|
@@ -285,9 +340,13 @@ def generate_sweetviz_report(
|
|
285
340
|
except Exception:
|
286
341
|
html_content = None
|
287
342
|
|
288
|
-
content =
|
343
|
+
content = (
|
344
|
+
f"Sweetviz EDA report generated and saved as '{os.path.abspath(full_report_path)}'. "
|
345
|
+
f"{'This was saved in a temporary directory.' if 'tmp' in report_directory else ''}"
|
346
|
+
)
|
289
347
|
artifact = {
|
290
348
|
"report_file": os.path.abspath(full_report_path),
|
291
349
|
"report_html": html_content,
|
292
350
|
}
|
293
351
|
return content, artifact
|
352
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
def get_tool_call_names(messages):
|
5
|
+
"""
|
6
|
+
Method to extract the tool call names from a list of LangChain messages.
|
7
|
+
|
8
|
+
Parameters:
|
9
|
+
----------
|
10
|
+
messages : list
|
11
|
+
A list of LangChain messages.
|
12
|
+
|
13
|
+
Returns:
|
14
|
+
-------
|
15
|
+
tool_calls : list
|
16
|
+
A list of tool call names.
|
17
|
+
|
18
|
+
"""
|
19
|
+
tool_calls = []
|
20
|
+
for message in messages:
|
21
|
+
try:
|
22
|
+
if "tool_call_id" in list(dict(message).keys()):
|
23
|
+
tool_calls.append(message.name)
|
24
|
+
except:
|
25
|
+
pass
|
26
|
+
return tool_calls
|
27
|
+
|
{ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: ai-data-science-team
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.9013
|
4
4
|
Summary: Build and run an AI-powered data science team.
|
5
5
|
Home-page: https://github.com/business-science/ai-data-science-team
|
6
6
|
Author: Matt Dancho
|
@@ -152,7 +152,11 @@ This is a top secret project I'm working on. It's a multi-agent data science app
|
|
152
152
|
|
153
153
|
#### 🔥 Agentic Applications
|
154
154
|
|
155
|
-
1. **
|
155
|
+
1. **NEW Exploratory Data Copilot**: An AI-powered data science app that performs automated exploratory data analysis (EDA) with EDA Reporting, Missing Data Analysis, Correlation Analysis, and more. [See Application](/apps/exploratory-copilot-app/)
|
156
|
+
|
157
|
+

|
158
|
+
|
159
|
+
2. **SQL Database Agent App:** Connects any SQL Database, generates SQL queries from natural language, and returns data as a downloadable table. [See Application](/apps/sql-database-agent-app/)
|
156
160
|
|
157
161
|
### Agents Available Now
|
158
162
|
|
{ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/RECORD
RENAMED
@@ -1,20 +1,20 @@
|
|
1
1
|
ai_data_science_team/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
ai_data_science_team/_version.py,sha256=
|
2
|
+
ai_data_science_team/_version.py,sha256=8mQbNYWB914j3xlCMQYaR14g26vq-2SV31Xf8uer_L0,26
|
3
3
|
ai_data_science_team/orchestration.py,sha256=xiIFOsrLwPdkSmtme7wNCCGv8XopnMTNElNzlZokL-4,303
|
4
4
|
ai_data_science_team/agents/__init__.py,sha256=Gnotza9SKr_0IxuaX8k1nsZK48wXkkeZcGcrR1EqNks,668
|
5
5
|
ai_data_science_team/agents/data_cleaning_agent.py,sha256=V5tJMwGJK0JwrF_H-7r3S0E8UkAY6ci4BGxqjhZiGBI,27352
|
6
|
-
ai_data_science_team/agents/data_loader_tools_agent.py,sha256=
|
6
|
+
ai_data_science_team/agents/data_loader_tools_agent.py,sha256=23Uuqt-oaJfj3CFRKT7NErNkodXpraXl0HOWvXjMcJs,8802
|
7
7
|
ai_data_science_team/agents/data_visualization_agent.py,sha256=tJy9Ehnh9mvAu6H--TXI8esSHmK1RW_L1RDAdn7Xek4,28821
|
8
8
|
ai_data_science_team/agents/data_wrangling_agent.py,sha256=LxzphH-TmrFG0GjejGOjulhPq4SsWFo5Y9tk4WEuN4M,32347
|
9
9
|
ai_data_science_team/agents/feature_engineering_agent.py,sha256=KmPBkj7WUBz6LFUlDDfQHMi7ujXwsH5P9LWRS-F4tdM,31026
|
10
10
|
ai_data_science_team/agents/sql_database_agent.py,sha256=1K2o3NiuKgGKdbMz_Tq9IeQ8xhXjpfGOxx9lArZh1yE,31173
|
11
11
|
ai_data_science_team/ds_agents/__init__.py,sha256=dnuagUTebTDHhGXbCt-hZIilzXMSUwyHaEI7sOxhvoE,95
|
12
|
-
ai_data_science_team/ds_agents/eda_tools_agent.py,sha256=
|
12
|
+
ai_data_science_team/ds_agents/eda_tools_agent.py,sha256=VJkqyQCNxoV0kvUTpUZh8SXTTZ0K1tUlg3jq6LDnpPQ,8009
|
13
13
|
ai_data_science_team/ds_agents/modeling_tools_agent.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
14
|
ai_data_science_team/ml_agents/__init__.py,sha256=qq3UlDCRV_z4FHQ1jj3YR6zPbA6kuCvYCisj_bHYfO4,190
|
15
15
|
ai_data_science_team/ml_agents/h2o_ml_agent.py,sha256=DamR72agrTKfdcdhablmP2mpbj0CqtMonP-QU8p7o9w,33394
|
16
16
|
ai_data_science_team/ml_agents/h2o_ml_tools_agent.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
-
ai_data_science_team/ml_agents/mlflow_tools_agent.py,sha256=
|
17
|
+
ai_data_science_team/ml_agents/mlflow_tools_agent.py,sha256=bRTT53_pHV0qAYl07iZcwUEYffGH_ZfJICdrLeOUPn4,11394
|
18
18
|
ai_data_science_team/multiagents/__init__.py,sha256=aI4GztEwmkexZKT5XHcH3cAjO-xYUhncb3yfPJQDqTA,99
|
19
19
|
ai_data_science_team/multiagents/sql_data_analyst.py,sha256=kmmED3gLf5STWWY6ZVJYd7_Pt8NMl6SHyBocuQzRDGk,14193
|
20
20
|
ai_data_science_team/multiagents/supervised_data_analyst.py,sha256=uduCYpicga-UCf9nPQktQggW96-HDlqvioYmEdWejtI,158
|
@@ -24,8 +24,8 @@ ai_data_science_team/templates/__init__.py,sha256=_IcyFUu_mM8dFtttz95h0csJZ-XWDP
|
|
24
24
|
ai_data_science_team/templates/agent_templates.py,sha256=Lezp0ugtIP3m5WUOmjLwghNnjjyQVQecysONeIHWwi0,29133
|
25
25
|
ai_data_science_team/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
26
|
ai_data_science_team/tools/data_loader.py,sha256=ITs_6UAJ0m9h68R9_LruiaJSElv9l7SxTQYryI7YZPY,14702
|
27
|
-
ai_data_science_team/tools/dataframe.py,sha256=
|
28
|
-
ai_data_science_team/tools/eda.py,sha256=
|
27
|
+
ai_data_science_team/tools/dataframe.py,sha256=cckplDWu9SsA_PRo89pYsyVCmBE0PoDIwMv6tuLunT4,4572
|
28
|
+
ai_data_science_team/tools/eda.py,sha256=KoryXso_5zOPDq7jwcUAMEXV-AIzpWb62zzbUHVtgtM,12687
|
29
29
|
ai_data_science_team/tools/h2o.py,sha256=gSK0f2FULfAfipFTTjDMUS6DjHwFFvvl4jxshr6QpS0,38997
|
30
30
|
ai_data_science_team/tools/mlflow.py,sha256=8NTkSOvbTk01GOmwFaMkLBRse80w9Kk7Ypi6Fv4kTII,29475
|
31
31
|
ai_data_science_team/tools/sql.py,sha256=vvz_CiOg6GqXo2_mlF4kq5IS6if79dpaizAgLR9sRyg,4784
|
@@ -33,10 +33,11 @@ ai_data_science_team/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
33
33
|
ai_data_science_team/utils/html.py,sha256=1MBcjNyATi3FPOyVdqf6-_QYCJmDVQWmVPIInUr50dk,628
|
34
34
|
ai_data_science_team/utils/logging.py,sha256=7wFOv6GGhXR_RPbh-8p0GyrS608XOnZtiaGK2IbDl_s,2081
|
35
35
|
ai_data_science_team/utils/matplotlib.py,sha256=d6DZfCXvZ5Kocxtsp92etIymKW2cRBcUG9GmCOMtgJo,1145
|
36
|
+
ai_data_science_team/utils/messages.py,sha256=feWIPGsv8ly9jpNnS97SoPsn1feaY1Km0VCbHTbRpI8,549
|
36
37
|
ai_data_science_team/utils/plotly.py,sha256=nST-NG0oizKVHhH6HsjHUpTUumq9bCccBdxjuaJWnVQ,504
|
37
38
|
ai_data_science_team/utils/regex.py,sha256=lwarbLqTA2VfNQSyqKCl-PBlH_0WH3zXZvYGBYGUiu4,5144
|
38
|
-
ai_data_science_team-0.0.0.
|
39
|
-
ai_data_science_team-0.0.0.
|
40
|
-
ai_data_science_team-0.0.0.
|
41
|
-
ai_data_science_team-0.0.0.
|
42
|
-
ai_data_science_team-0.0.0.
|
39
|
+
ai_data_science_team-0.0.0.9013.dist-info/LICENSE,sha256=Xif0IRLdd2HGLATxV2EVp91aSY6KOuacRr_6BorKGzA,1084
|
40
|
+
ai_data_science_team-0.0.0.9013.dist-info/METADATA,sha256=z18MmCwNdEgovskYmYmd4CS1I4WKTvh_mSnmzKOaHZs,13021
|
41
|
+
ai_data_science_team-0.0.0.9013.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
42
|
+
ai_data_science_team-0.0.0.9013.dist-info/top_level.txt,sha256=CnoMgOphCoAdGTLueWdCVByVyjwOubaGiTB1lchdy4M,21
|
43
|
+
ai_data_science_team-0.0.0.9013.dist-info/RECORD,,
|
{ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/LICENSE
RENAMED
File without changes
|
{ai_data_science_team-0.0.0.9012.dist-info → ai_data_science_team-0.0.0.9013.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|