[project.urls]
"Source Code" = "https://github.com/ERGO-Code/HiGHS"
"Bug Tracker" = "https://github.com/ERGO-Code/HiGHS/issues"

[build-system]
requires = ["scikit-build-core>=0.3.3", "pybind11", "numpy"]
build-backend = "scikit_build_core.build"

[project]
name = "highspy"
version = "1.12.0"
description = "A thin set of pybind11 wrappers to HiGHS"
authors = [{ name = "HiGHS developers", email = "highsopt@gmail.com" }]
readme = "README.md"

requires-python = ">=3.8"
dependencies = ["numpy"]

classifiers = [
  # "Development Status :: 4 - Beta",
  "License :: OSI Approved :: MIT License",
  "Programming Language :: Python :: 3 :: Only",
  "Programming Language :: Python :: 3.8",
  "Programming Language :: Python :: 3.9",
  "Programming Language :: Python :: 3.10",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
  "Programming Language :: Python :: 3.13",
  "Typing :: Typed",
]

[project.optional-dependencies]
test = ["pytest", "numpy"]

[tool.scikit-build]
cmake.args = ["-DPYTHON_BUILD_SETUP=ON"]
wheel.expand-macos-universal-tags = true

# A list of packages to auto-copy into the wheel. If this is not set, it will
# default to the first of ``src/<package>``, ``python/<package>``, or
# ``<package>`` if they exist.  The prefix(s) will be stripped from the package
# name inside the wheel.
wheel.packages = ["highs/highspy"]

# Files to include in the SDist even if they are skipped by default. Supports
# gitignore syntax.
sdist.include = [
  "highs/highspy/highs.py",
  "highs/highspy/__init__.py",
  "highs/highspy/__init__.pyi",
  "highs/highspy/_core/*.pyi",
  "tests/test_highspy.py",
  "Version.txt",
  "LICENSE",
  "README.md",
  "highs/HConfig.h.in",
  "highs",
  "external",
  "cmake",
]

sdist.exclude = [
  ".github",
  ".gitattributes",
  ".gitignore",
  ".github",
  "app",
  "build",
  "check",
  "docs",
  "subprojects",
  ".coin-or",
  "build_webdemo.sh",
  ".clang-format",
  "__setup.py",
  "BUILD.bazel",
  "**meson**",
  "MODS.md",
  "WORKSPACE",
  "nuget/",
  "nuget/README.md",
  "highs/*.bazel*",
  "highs/*.meson*",
  "interfaces/*csharp*",
  "interfaces/*fortran*",
  "flake.*",
  "highs.pc.in"
]


# # Verbose printout when building.
# cmake.verbose = false

# # The build type to use when building the project. Valid options are: "Debug",
# # "Release", "RelWithDebInfo", "MinSizeRel", "", etc.
# cmake.build-type = "Release"

# # The versions of Ninja to allow. If Ninja is not present on the system or does
# # not pass this specifier, it will be downloaded via PyPI if possible. An empty
# # string will disable this check.
# ninja.version = ">=1.5"

# # If Ninja is not present on the system or is older required, it will be
# # downloaded via PyPI if possible. An empty string will disable this check.
# ninja.make-fallback = true

# # The logging level to display, "DEBUG", "INFO", "WARNING", and "ERROR" are
# # possible options.
# logging.level = "WARNING"


# # If set to True, try to build a reproducible distribution (Unix and Python 3.9+
# # recommended).  ``SOURCE_DATE_EPOCH`` will be used for timestamps, or a fixed
# # value if not set.
# sdist.reproducible = true

# # If set to True, CMake will be run before building the SDist.
# sdist.cmake = false

# # The Python tags. The default (empty string) will use the default Python
# # version. You can also set this to "cp37" to enable the CPython 3.7+ Stable ABI
# # / Limited API (only on CPython and if the version is sufficient, otherwise
# # this has no effect). Or you can set it to "py3" or "py2.py3" to ignore Python
# # ABI compatibility. The ABI tag is inferred from this tag.
# wheel.py-api = ""

# # Fill out extra tags that are not required. This adds "x86_64" and "arm64" to
# # the list of platforms when "universal2" is used, which helps older Pip's
# # (before 21.0.1) find the correct wheel.
# # wheel.expand-macos-universal-tags = false

# # The install directory for the wheel. This is relative to the platlib root. You
# # might set this to the package name. The original dir is still at
# # SKBUILD_PLATLIB_DIR (also SKBUILD_DATA_DIR, etc. are available). EXPERIMENTAL:
# # An absolute path will be one level higher than the platlib root, giving access
# # to "/platlib", "/data", "/headers", and "/scripts".
# # wheel.install-dir = ""

# # A list of license files to include in the wheel. Supports glob patterns.
# wheel.license-files = ["LICEN[CS]E*", "COPYING*", "NOTICE*", "AUTHORS*"]

# # If set to True (the default), CMake will be run before building the wheel.
# wheel.cmake = true

# # Target the platlib or the purelib. If not set, the default is to target the
# # platlib if wheel.cmake is true, and the purelib otherwise.
# # wheel.platlib = ""

# # A set of patterns to exclude from the wheel. This is additive to the SDist
# # exclude patterns. This applies to the final paths in the wheel, and can
# # exclude files from CMake output as well.  Editable installs may not respect
# # this exclusion.
# wheel.exclude = []

# # The build tag to use for the wheel. If empty, no build tag is used.
# wheel.build-tag = ""

# # If CMake is less than this value, backport a copy of FindPython. Set to 0
# # disable this, or the empty string.
# backport.find-python = "3.26.1"

# # Select the editable mode to use. Can be "redirect" (default) or "inplace".
# editable.mode = "redirect"

# # Turn on verbose output for the editable mode rebuilds.
# editable.verbose = true

# # Rebuild the project when the package is imported. The build-directory must be
# # set.
# editable.rebuild = false

# # The components to install. If empty, all default components are installed.
# install.components = []

# # Whether to strip the binaries. True for scikit-build-core 0.5+.
# install.strip = false

# # List dynamic metadata fields and hook locations in this table.
# metadata = {}

# # Strictly check all config options. If False, warnings will be printed for
# # unknown options. If True, an error will be raised.
# strict-config = true

# # Enable early previews of features not finalized yet.
# experimental = false

# # If set, this will provide a method for backward compatibility.
# # minimum-version = "0.8"  # current version

# # The build directory. Defaults to a temporary directory, but can be set.
# # build-dir = ""


[tool.pytest.ini_options]
minversion = "6.0"
addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"]
xfail_strict = true
log_cli_level = "INFO"
filterwarnings = ["error"]
testpaths = ["tests"]

[tool.cibuildwheel]
build = "*"
archs = ["auto64", "auto32"]

# Enable free-threaded support
enable = ["cpython-freethreading"]

test-command = "pytest {project}/tests"
test-extras = ["test", "numpy"]
build-verbosity = 1
