Skip to content

Commit f3ac544

Browse files
authored
Fix series freeze impl (#166)
1 parent bd47efd commit f3ac544

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

src/emmy/series.cljc

+14-12
Original file line numberDiff line numberDiff line change
@@ -870,16 +870,18 @@
870870
(defmethod g/exact? [::series] [_] false)
871871
(defmethod g/exact? [::power-series] [_] false)
872872
(defmethod g/freeze [::power-series] [^PowerSeries s]
873-
(let [prefix (->> (g/simplify (take 4 (.-xs s)))
874-
(g/freeze)
875-
(filter (complement g/zero?))
876-
(map-indexed
877-
(fn [n a]
878-
(if (g/one? a)
879-
`(~'expt ~'_ ~n)
880-
`(~'* ~a (~'expt ~'_ ~n))))))]
881-
`(~'+ ~@prefix ~'...)))
873+
(let [prefix (->> (g/simplify (take 4 (.-xs s)))
874+
(g/freeze)
875+
(into [] (comp
876+
(map-indexed
877+
(fn [n a]
878+
(cond (g/zero? a) []
879+
(g/one? a) [(list 'expt '_ n)]
880+
:else [(list '* a (list 'expt '_ n))])))
881+
cat)))]
882+
`(~'+ ~@prefix ~'...)))
883+
882884
(defmethod g/freeze [::series] [^Series s]
883-
(let [prefix (g/freeze
884-
(g/simplify (take 4 (.-xs s))))]
885-
`(~'+ ~@prefix ~'...)))
885+
(let [prefix (g/freeze
886+
(g/simplify (take 4 (.-xs s))))]
887+
`(~'+ ~@prefix ~'...)))

test/emmy/series_test.cljc

+11-1
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,17 @@
286286
(is (= "(+ (* 4 (expt _ 0)) (* 5 (expt _ 1)) (* 6 (expt _ 2)) (* 7 (expt _ 3)) ...)"
287287
(str p)))
288288
(is (= (str s) (str (g/freeze s))))
289-
(is (= (str p) (str (g/freeze p))))))))
289+
(is (= (str p) (str (g/freeze p))))
290+
291+
(is (= "(+ (expt _ 0) (* (/ -1 2) (expt _ 2)) ...)"
292+
(str
293+
(g/freeze s/cos-series)))
294+
"cosine representation has the initial 1, drops correct zeros")
295+
296+
(is (= "(+ (expt _ 1) (* (/ -1 6) (expt _ 3)) ...)"
297+
(str
298+
(g/freeze s/sin-series)))
299+
"sine representation drops correct zeros")))))
290300

291301
(deftest series-as-fn-tests
292302
(let [f (fn [i] #(g/* %1 %2 i))

0 commit comments

Comments
 (0)