Spaces:
Running
Running
from langchain_core.tools import tool | |
from io import StringIO | |
import pandas as pd | |
def add_numbers_in_list(numbers: list[float]) -> float: | |
"""Add all numbers in a list. | |
Always use this tool for summing numerical values, instead of doing math directly in the response. | |
Args: | |
numbers (list[float]): A list of numbers to add. | |
Returns: | |
str: The sum of the numbers in the list. | |
""" | |
return sum(numbers) | |
def check_commutativity(table_str: str) -> str: | |
""" | |
Given a binary operation table (in markdown format), returns the subset of elements | |
involved in counter-examples to commutativity, sorted alphabetically. | |
Args: | |
table_str (str): Markdown table defining the operation * on a finite set. | |
Returns: | |
str: Comma-separated list of elements in the counter-example set, alphabetically sorted. | |
""" | |
# Read the table using pandas | |
df = pd.read_csv(StringIO(table_str), sep="|", skipinitialspace=True, engine='python') | |
# Drop empty columns due to leading/trailing pipes | |
df = df.dropna(axis=1, how="all") | |
df.columns = [c.strip() for c in df.columns] | |
df = df.dropna(axis=0, how="all") | |
# Extract header and values | |
elements = df.columns[1:] | |
df.index = df[df.columns[0]] | |
df = df.drop(df.columns[0], axis=1) | |
# Check commutativity: a*b == b*a | |
counterexample_elements = set() | |
for x in elements: | |
for y in elements: | |
if df.loc[x, y] != df.loc[y, x]: | |
counterexample_elements.add(x) | |
counterexample_elements.add(y) | |
return ", ".join(sorted(counterexample_elements)) |