Files
df-research/tech.ml.dataset/test/tech/v3/dataset/math_test.clj
2026-02-08 11:20:43 -10:00

69 lines
2.8 KiB
Clojure
Vendored

(ns tech.v3.dataset.math-test
(:require [tech.v3.dataset :as ds]
[tech.v3.dataset.math :as ds-math]
[tech.v3.dataset.tensor :as ds-tens]
[tech.v3.datatype :as dtype]
[tech.v3.datatype.datetime :as dtype-dt]
[tech.v3.datatype.functional :as dfn]
[tech.v3.tensor :as dtt]
[clojure.test :refer [deftest is]]))
(deftest basic-interp
(let [interp-ds (-> (ds/->dataset "test/data/stocks.csv")
(ds/filter-column "symbol" "MSFT")
;;The interpolate requires a sorted dataset
(ds/sort-by-column "date")
(ds-math/interpolate-loess "date" "price"
{:result-name "price-loess"}))]
(is (not (nil? (:interpolator (meta (interp-ds "price-loess"))))))))
(deftest fill-range-replace
(let [ds (-> (ds/->dataset {:a [1 5 10 15 20]
:b [2 2 nil 4 8]})
(ds-math/fill-range-replace :a 2))]
(is (dfn/equals
[1.0 3.0 5.0 6.66 8.33 10.0
11.66 13.33 15.0 16.66 18.33 20.0]
(vec (ds :a))
0.1))
(is (= [2 2 2 2 2 2 2 2 4 4 4 8]
(vec (ds :b)))))
(let [ds (-> (ds/->dataset {:a [1 5 10 15 20]
:b [2 2 nil 4 8]})
(ds-math/fill-range-replace :a 2 nil))]
(is (= [2 nil 2 nil nil nil nil nil 4 nil nil 8]
(vec (ds :b)))))
(let [ds (-> (ds/->dataset {:a [1 5 10 15 20]
:b [2 2 nil 4 8]})
(ds-math/fill-range-replace :a 2 :value 20))]
(is (= [2 20 2 20 20 20 20 20 4 20 20 8]
(vec (ds :b)))))
(let [ds (-> (ds/->dataset {:a (dtype-dt/plus-temporal-amount
(dtype-dt/local-date)
[1 5 10 15 20]
:days)
:b [2 2 nil 4 8]})
(ds-math/fill-range-replace :a (* 2 dtype-dt/milliseconds-in-day)
:value 20))]
(is (= [2 20 2 20 20 20 20 20 4 20 20 8]
(vec (ds :b))))))
(comment
(def test-ds (ds/->dataset {:a [7 4 6 8 8 7 5 9 7 8]
:b [4 1 3 6 5 2 3 5 4 2]
:c [3 8 5 1 7 9 3 8 5 2]}))
(def test-data (dtt/->tensor [[10 8 6 20 9]
[11 21 23 18 4]
[12 7 5 13 19]
[ 3 14 15 22 17]
[24 1 2 0 16]] :datatype :float64))
(def test-data (dtt/transpose (dtt/->tensor [[7 4 6 8 8 7 5 9 7 8]
[4 1 3 6 5 2 3 5 4 2]
[3 8 5 1 7 9 3 8 5 2]] :datatype :float64)
[1 0]))
)