robin-sparkless 4.4.0

PySpark-like DataFrame API in Rust on Polars; no JVM.
Documentation
"""Regression test for issue #1400: numeric.pmod parity.

Scenario (from the issue, paraphrased):

    df = session.createDataFrame([(-5, 3), (5, 3), (None, 3)], ["a", "b"])
    df.select(F.pmod("a", "b").alias("out"))

Previously, Sparkless raised:

    AttributeError: module 'sparkless.sql.functions' has no attribute 'pmod'

This test locks in three expectations:
- F.pmod is available in sparkless.sql.functions.
- Value semantics match PySpark pmod:
  - pmod(-5, 3) = 1
  - pmod(5, 3) = 2
  - pmod(None, 3) = None
"""

from __future__ import annotations


def test_issue_1400_numeric_pmod_values(spark, spark_imports) -> None:
    F = spark_imports.F
    df = spark.createDataFrame(
        [(-5, 3), (5, 3), (None, 3)],
        ["a", "b"],
    )
    out = df.select(F.pmod("a", "b").alias("out"))

    rows = [r["out"] for r in out.collect()]
    assert rows == [1, 2, None]