# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

[build-system]
requires = [
    "setuptools>=69",
    "wheel", 
    "Cython>=3", 
    "numpy>=1.26.4; python_version<'3.13'",
    "numpy>=2.1.0; python_version>='3.13' and python_version<'3.14'",
    "numpy>=2.3.2; python_version>='3.14'"
    ]

build-backend = "setuptools.build_meta"

[project]
name = "tsfile"
version = "2.3.2.dev"
requires-python = ">=3.9"
description = "TsFile Python"
readme = {file = "README.md", content-type = "text/markdown"}
maintainers = [
    {name = "Apache TsFile Developers", email = "dev@tsfile.apache.org"}
]
dependencies = [
    "numpy>=1.26.4; python_version<'3.13'",
    "numpy>=2.1.0; python_version>='3.13' and python_version<'3.14'",
    "numpy>=2.3.2; python_version>='3.14'",
    "pandas>=2.0.0; python_version<'3.12'",
    "pandas>=2.1.1; python_version>='3.12' and python_version<'3.13'",
    "pandas>=2.2.3; python_version>='3.13' and python_version<'3.14'",
    "pandas>=2.3.3; python_version>='3.14'",
    "pyarrow>=16.0; python_version<'3.13'",
    "pyarrow>=18.0; python_version>='3.13' and python_version<'3.14'",
    "pyarrow>=22.0; python_version>='3.14'"
]

[project.urls]
Homepage = "https://tsfile.apache.org/"
Documentation = "https://tsfile.apache.org/zh/UserGuide/latest/QuickStart/Navigating_Time_Series_Data.html"
Repository = "https://github.com/apache/tsfile"
Issues = "https://github.com/apache/tsfile/issues"

[tool.setuptools]
package-dir = {"" = "."}

[tool.setuptools.packages.find]
where = ["."]
include = ["tsfile*"]

[tool.setuptools.package-data]
tsfile = [
    "*.pxd",
    "*.pxi",
    "*.so",
    "*.so.*",
    "*.dylib",
    "*.dylib.*",
    "*.dll",
    "*.dll.a",
    "*.lib",
    "*.lib.a",
    "include/**/*"
]
