# 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.

"""Pytest configuration for doctest namespace injection."""

import datafusion as dfn
import numpy as np
import pyarrow as pa
import pytest
from datafusion import col, lit
from datafusion import functions as F


@pytest.fixture(autouse=True)
def _doctest_namespace(doctest_namespace: dict) -> None:
    """Add common imports to the doctest namespace."""
    doctest_namespace["dfn"] = dfn
    doctest_namespace["np"] = np
    doctest_namespace["pa"] = pa
    doctest_namespace["col"] = col
    doctest_namespace["lit"] = lit
    doctest_namespace["F"] = F
