content: [build-system]
  requires = ["setuptools>=64", "setuptools-scm>=8.0", "wheel"]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "MEDS_transforms"
  dynamic = ["version"]
  authors = [
    { name="Matthew McDermott", email="mattmcdermott8@gmail.com" },
  ]
  description = "A framework for compiling simple, mapreduce style pipelines over MEDS datasets."
  readme = "README.md"
  requires-python = ">=3.11"
  classifiers = [
      "Programming Language :: Python :: 3",
      "License :: OSI Approved :: MIT License",
      "Operating System :: OS Independent",
  ]
  dependencies = [
    "polars~=1.30.0",
    "pyarrow",
    "hydra-core",
    "numpy",
    "meds~=0.4.0",
    "filelock",
    "pytest",
    "meds_testing_helpers~=0.3.0",
    "pretty-print-directory>=0.1.3",
  ]
  
  [tool.setuptools_scm]
  
  [project.optional-dependencies]
  dev = ["pre-commit<4", "ruff"]
  tests = ["pytest-cov"]
  local_parallelism = ["hydra-joblib-launcher"]
  slurm_parallelism = ["hydra-submitit-launcher"]
  docs = [
    "mkdocs==1.6.1", "mkdocs-material==9.6.7", "mkdocstrings[python,shell]==0.28.2", "mkdocs-gen-files==0.5.0",
    "mkdocs-literate-nav==0.6.1", "mkdocs-section-index==0.3.9", "mkdocs-git-authors-plugin==0.9.2",
    "mkdocs-git-revision-date-localized-plugin==1.3.0", "markdown-callouts"
  ]
  
  [project.scripts]
  # Stages
  MEDS_transform-stage = "MEDS_transforms.__main__:run_stage"
  
  # Runner
  MEDS_transform-pipeline = "MEDS_transforms.runner:main"
  
  [project.entry-points."MEDS_transforms.stages"]
  aggregate_code_metadata = "MEDS_transforms.stages:aggregate_code_metadata"
  fit_vocabulary_indices = "MEDS_transforms.stages:fit_vocabulary_indices"
  reshard_to_split = "MEDS_transforms.stages:reshard_to_split"
  filter_measurements = "MEDS_transforms.stages:filter_measurements"
  filter_subjects = "MEDS_transforms.stages:filter_subjects"
  reorder_measurements = "MEDS_transforms.stages:reorder_measurements"
  add_time_derived_measurements = "MEDS_transforms.stages:add_time_derived_measurements"
  extract_values = "MEDS_transforms.stages:extract_values"
  normalization = "MEDS_transforms.stages:normalization"
  bin_numeric_values = "MEDS_transforms.stages:bin_numeric_values"
  occlude_outliers = "MEDS_transforms.stages:occlude_outliers"
  
  [project.urls]
  Homepage = "https://github.com/mmcdermott/MEDS_transforms"
  Issues = "https://github.com/mmcdermott/MEDS_transforms/issues"
  
  [tool.pytest.ini_options]
  addopts = [
    "--color=yes",
    "--doctest-modules",
    "--ignore=docs",
    "--ignore=example/simple_example_pkg/tests",
    "--doctest-glob=*.md",
  ]
  python_classes = "!TestEnv"
  doctest_optionflags = ["NORMALIZE_WHITESPACE", "ELLIPSIS"]
  markers = [
    "parallelized: mark test as parallelized, requiring hydra-joblib-launcher",
  ]
  
  [tool.coverage.report]
  exclude_also = [
      "logger\\.debug",
      "except ImportError:",
      "if TYPE_CHECKING:",
  ]
  omit = ["example/*"]
  
  [project.entry-points.pytest11]
  MEDS_transforms = "MEDS_transforms.pytest_plugin"
  
  [tool.ruff]
  target-version = "py311"
  line-length = 110
  extend-exclude = ["docs/index.md", "example/data/metadata", "example/data/data", "example/output_data"]
  
  # Enable linters
  [tool.ruff.lint]
  select = [
      "E",   # pycodestyle
      "F",   # pyflakes
      "I",   # isort
      "UP",  # pyupgrade
      "B",   # flake8-bugbear
      "C4",  # flake8-comprehensions
      "DTZ", # flake8-datetimez
      "RUF", # Ruff-specific rules
      "SIM", # flake8-simplify
      "TCH", # flake8-type-checking
      "N",   # pep8-naming
  ]
  
  [tool.ruff.lint.per-file-ignores]
  "__init__.py" = ["F401"]  # Unused imports in __init__ files
  
  [tool.ruff.lint.pep8-naming]
  extend-ignore-names = ["*MEDS*"]  # Ignore MEDS in variable names
  