# 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,<3"
    ]

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,<3",
    "pandas>=2.0,<2.3; python_version < '3.13'",
    "pandas>=2.3.3; python_version >= '3.13'",
    "pyarrow>=16.0,<18; python_version<'3.10'",
    "pyarrow>=18.0,<20; python_version>='3.10' and python_version<'3.14'",
    "pyarrow>=22.0,<24; 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/**/*"
]
