content: [project]
  name = "pamiq-core"
  version = "0.6.0"
  description = "Framework for building AI agents with real-time adaptive learning capabilities."
  license = {file = "LICENSE"}
  readme = "README.md"
  requires-python = ">=3.12"
  dependencies = [
      "httpx>=0.28.1",
      "starlette>=0.46.1",
      "prompt-toolkit>=3.0.51",
      "uvicorn>=0.34.0",
  ]
  
  keywords = [
    "AI",
    "ML",
    "Machine Learning",
    "AMI",
    "Autonomous Machine Intelligence",
    "pamiq",
    "P-AMI<Q>"
  ]
  classifiers = [
    "Development Status :: 3 - Alpha",
    "License :: OSI Approved :: MIT License",
    "Natural Language :: English",
    "Natural Language :: Japanese",
    "Intended Audience :: Developers",
    "Intended Audience :: Science/Research",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
    "Operating System :: Microsoft :: Windows",
    "Operating System :: POSIX :: Linux",
    "Operating System :: MacOS :: MacOS X"
  ]
  
  [project.scripts]
  pamiq-console = "pamiq_core.console.cui:main"
  pamiq-kbctl = "pamiq_core.console.keyboard:main"
  
  [project.urls]
  Repository = "https://github.com/MLShukai/pamiq-core"
  Issues = "https://github.com/MLShukai/pamiq-core/issues"
  
  [project.optional-dependencies]
  torch = [
      "torch>=2.0.0",
  ]
  kbctl = [
      "pynput>=1.8.1",
  ]
  gym = [
      "gymnasium>=1.1.1",
  ]
  
  [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [dependency-groups]
  dev = [
      "mkdocs>=1.6.1",
      "mkdocs-material>=9.6.12",
      "mkdocstrings>=0.29.1",
      "mkdocstrings-python>=1.16.10",
      "pamiq-core",
      "pre-commit>=4.0.1",
      "pyright>=1.1.391",
      "pytest>=8.3.4",
      "pytest-asyncio>=0.26.0",
      "pytest-cov>=6.0.0",
      "pytest-mock>=3.14.0",
      "ruff>=0.11.6",
  ]
  
  [tool.uv]
  python-preference = "only-managed"
  
  [tool.uv.sources]
  pamiq-core = { workspace = true }
  
  [tool.pytest.ini_options]
  addopts = [
    "--color=yes",
    "--durations=0",
    "--strict-markers",
    "--doctest-modules",
  ]
  filterwarnings = [
    "ignore::DeprecationWarning",
    "ignore::UserWarning",
  ]
  log_cli = true
  log_level = "INFO"
  
  minversion = "6.0"
  testpaths = "tests/"
  asyncio_default_fixture_loop_scope = "function"
  
  [tool.pyright]
  pythonVersion = "3.12"
  exclude = [
    "**/node_modules",
    "**/__pycache__",
    "**/.venv",
    "tests/"
  ]
  strict = ["./src/"]
  reportMissingTypeStubs = false
  reportImplicitOverride = true
  reportPrivateUsage = "warning"
  
  [tool.ruff]
  
  # Same as Black.
  line-length = 88
  indent-width = 4
  
  # Assume Python 3.12
  target-version = "py312"
  
  include = ["*.py"]
  
  # Exclude a variety of commonly ignored directories.
  exclude = [
      ".git",
      ".ipynb_checkpoints",
      ".pytest_cache",
      ".ruff_cache",
      ".venv",
      ".vscode",
      "build",
      "dist",
      "node_modules",
      ".venv",
  ]
  
  # Linter ignore codes
  [tool.ruff.lint]
  
  select = [
    "E",
    "F",
    "W",
    "I",
  ]
  
  ignore = [
    "E203", # Whitespace before ':' (E203)
    "E402", # Module level import not at top of file.
    "E501", # Line too long (82 &gt; 79 characters) (E501)
    "F811", # Redefinition of unused name from line n (F811)
    "E741", # Do not define classes named 'I', 'O', or 'l' (E742)
    "E266", # too many leading '#' for block comment (E266)
    "F401", # Module imported but unused,
  ]
  
  
  [tool.ruff.lint.isort]
  combine-as-imports = true
  
  [tool.ruff.format]
  # Like Black, use double quotes for strings.
  quote-style = "double"
  
  # Like Black, indent with spaces, rather than tabs.
  indent-style = "space"
  
  # Like Black, respect magic trailing commas.
  skip-magic-trailing-comma = false
  
  # Like Black, automatically detect the appropriate line ending.
  line-ending = "auto"
  
  [tool.coverage.run]
  omit = ["tests/*"]
  
  [tool.coverage.report]
  exclude_lines = [
      "pragma: no cover",
      "def __repr__",
      "raise NotImplementedError",
      "if __name__ == __main__:",
      "pass",
      "raise ImportError"
  ]
  