[project] name = "misata" version = "0.9.6.59" description = "Outcome-conformant synthetic data: realistic multi-table test data that hits the revenue curves, rates, and aggregates you declare, exactly. From a sentence, YAML, or your database. No ML model, no real data. MCP server for AI agents." authors = [ {name = "Muhammed Rasin", email = "rasin@misata.studio"} ] readme = "README.md" license = {text = "MIT"} requires-python = ">=3.10" keywords = [ "synthetic-data", "synthetic-data-python", "python-synthetic-data", "data-generation", "fake-data", "test-data-generator", "database-seeding", "mock-data", "tabular-data", "multi-table", "relational-data", "referential-integrity", "outcome-conformant", "data-conformance", "scenario-simulation", "pytest-fixtures", "dbt", "machine-learning", "testing", "mcp", "mcp-server", "llm", "ai", "ai-agents", "database", ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Testing", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: Database", "Topic :: Software Development :: Testing :: Mocking", "Topic :: Utilities", "Natural Language :: English", ] dependencies = [ "pandas>=2.0.0", "numpy>=1.24.0", "pydantic>=2.0.0", "click>=8.1.0", "pyyaml>=6.0", "rich>=13.0.0", "scipy>=1.10.0", "networkx>=3.0", "jinja2>=3.1.0", "faker>=20.0.0", ] [project.urls] Homepage = "https://misata.studio" Studio = "https://misata.studio" Documentation = "https://misata.studio/docs" Repository = "https://github.com/rasinmuhammed/misata" Issues = "https://github.com/rasinmuhammed/misata/issues" Changelog = "https://github.com/rasinmuhammed/misata/blob/main/CHANGELOG.md" [project.optional-dependencies] dev = [ "pytest>=7.4.0", "pytest-cov>=4.0.0", "pytest-benchmark>=4.0.0", "black>=23.0.0", "ruff>=0.1.0", "mypy>=1.5.0", "simpleeval>=0.9.0", # formula columns used in HR domain tests "jsonschema>=4.0.0", # YAML validation tests "scikit-learn>=1.0.0", # ML-efficacy (TSTR) path in fidelity_report "hypothesis>=6.100", # property-based fuzzing of the dict-schema contract "duckdb>=0.9.0", # evalpack verification tests # Upper bound is deliberate: the MCP server targets FastMCP as it exists # in the 1.x line. mcp 2.0.0 removed `mcp.server.fastmcp`, which took CI # down on all four interpreters the day it shipped. Lift the bound when # the server is ported, not before. "mcp>=1.0.0,<2.0.0", # seed_database guardrail tests (the only tool that writes to a DB) ] db = [ "psycopg[binary]>=3.1.0", ] orm = [ "sqlalchemy>=2.0.0", ] llm = [ "groq>=0.4.0", "openai>=1.0.0", ] bedrock = [ # >=1.39 so the simple Bedrock API key (AWS_BEARER_TOKEN_BEDROCK) is honoured, # not just IAM access keys. Converse API (Claude), server-funded LLM path. "boto3>=1.39.0", ] formulas = [ "simpleeval>=0.9.0", ] api = [ "fastapi>=0.109.0", "uvicorn>=0.27.0", "python-multipart>=0.0.6", ] studio = [ "streamlit>=1.30.0", "plotly>=5.0.0", "openpyxl>=3.0.0", ] # Advanced features for world-class generation advanced = [ "sdv>=1.0.0", # Copula-based quality generation "langgraph>=0.2.0", # Multi-agent pipeline "z3-solver>=4.12.0", # Constraint satisfaction ] documents = [ "weasyprint>=60.0", # HTML → PDF conversion ] docs = [ "mkdocs-material>=9.5.0", ] mcp = [ "mcp>=1.0.0,<2.0.0", # Model Context Protocol, exposes Misata to AI agents (FastMCP is 1.x-only) "jsonschema>=4.0.0", # YAML validation tool ] kaggle = [ "kaggle>=1.0.0", # Kaggle API for vocabulary enrichment from real datasets ] fidelity = [ "scikit-learn>=1.0.0", # ML-efficacy (TSTR) scoring in fidelity_report ] spark = [ "pyspark>=3.3.0", # Apache Spark + Delta Lake integration (write_delta, from_catalog_schema, etc.) ] evalpack = [ "duckdb>=0.9.0", # Independent SQL verification of evalpack answer keys ] all = [ "misata[dev,db,orm,llm,formulas,api,studio,advanced,documents,mcp,kaggle,spark,fidelity,evalpack]", ] [project.scripts] misata = "misata.cli:main" misata-studio = "misata.studio:launch" misata-mcp = "misata.mcp.server:main" [build-system] requires = ["setuptools>=68.0.0", "wheel"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] include = ["misata*"] exclude = ["web*", "tests*"] [tool.setuptools.package-data] misata = ["py.typed", "_schemas/*.json", "capsules_registry/*.json"] [tool.black] line-length = 100 target-version = ['py310'] [tool.ruff] line-length = 100 target-version = "py310" # Honest configuration: the public API is typed and py.typed ships, but the # internals do not pass disallow_untyped_defs today (~500 unannotated defs). # Strictness is tightened module by module rather than claimed globally. # See LIMITATIONS.md. [tool.mypy] python_version = "3.10" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = false ignore_missing_imports = true [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] markers = [ "slow: marks tests as slow (run with -m slow)", ]