Skip to content

Commit 0ef0ec3

Browse files
committed
add trig functions
1 parent 42edd61 commit 0ef0ec3

File tree

2 files changed

+44
-20
lines changed

2 files changed

+44
-20
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Stack is a Haskell build tool, which allows for cross-platform, reproducible bui
1515
The build toolchain of this project depends on `stack`, so please follow the installation
1616
instructions as [outlined here](http://docs.haskellstack.org/en/stable/README/#how-to-install)
1717

18-
### [SymEngine](), the library that this package provides a Haskell interface for
18+
### SymEngine, the library that this package provides a Haskell interface for
1919

2020
Please go through the `SymEngine` installation instructions, and make sure that the header files
2121
as well as the libraries

src/Symengine.hs

+43-19
Original file line numberDiff line numberDiff line change
@@ -134,18 +134,6 @@ basic_unaryop f a = unsafePerformIO $ do
134134
return s
135135

136136

137-
basic_add :: BasicSym -> BasicSym -> BasicSym
138-
basic_add = basic_binaryop basic_add_ffi
139-
140-
basic_sub :: BasicSym -> BasicSym -> BasicSym
141-
basic_sub = basic_binaryop basic_sub_ffi
142-
143-
basic_mul :: BasicSym -> BasicSym -> BasicSym
144-
basic_mul = basic_binaryop basic_mul_ffi
145-
146-
basic_div :: BasicSym -> BasicSym -> BasicSym
147-
basic_div = basic_binaryop basic_div_ffi
148-
149137
basic_pow :: BasicSym -> BasicSym -> BasicSym
150138
basic_pow = basic_binaryop basic_pow_ffi
151139

@@ -167,19 +155,39 @@ basic_rational_set_signed i j = unsafePerformIO $ do
167155

168156

169157
instance Num BasicSym where
170-
(+) = basic_add
171-
(-) = basic_sub
172-
(*) = basic_mul
173-
negate = basic_neg
174-
abs = basic_abs
158+
(+) = basic_binaryop basic_add_ffi
159+
(-) = basic_binaryop basic_sub_ffi
160+
(*) = basic_binaryop basic_mul_ffi
161+
negate = basic_unaryop basic_neg_ffi
162+
abs = basic_unaryop basic_abs_ffi
175163
signum = undefined
176164
fromInteger = basic_from_integer
177165

178166
instance Fractional BasicSym where
179-
(/) = basic_div
167+
(/) = basic_binaryop basic_div_ffi
180168
fromRational (num :% denom) = basic_rational_set_signed num denom
181169
recip r = basic_const_one / r
182170

171+
instance Floating BasicSym where
172+
pi = basic_const_pi
173+
--exp :: basic_binaryop basic_pow_ffi
174+
log = undefined
175+
sqrt x = basic_pow x 0.5
176+
(**) = basic_pow
177+
logBase = undefined
178+
sin = basic_unaryop basic_sin_ffi
179+
cos = basic_unaryop basic_cos_ffi
180+
tan = basic_unaryop basic_tan_ffi
181+
asin = basic_unaryop basic_asin_ffi
182+
acos = basic_unaryop basic_acos_ffi
183+
atan = basic_unaryop basic_atan_ffi
184+
sinh = basic_unaryop basic_sinh_ffi
185+
cosh = basic_unaryop basic_cosh_ffi
186+
tanh = basic_unaryop basic_tanh_ffi
187+
asinh = basic_unaryop basic_asinh_ffi
188+
acosh = basic_unaryop basic_acosh_ffi
189+
atanh = basic_unaryop basic_atanh_ffi
190+
183191
foreign import ccall "symengine/cwrapper.h ascii_art_str" ascii_art_str_ffi :: IO CString
184192
foreign import ccall "symengine/cwrapper.h basic_new_heap" basic_new_heap_ffi :: Ptr BasicStruct -> IO ()
185193
foreign import ccall "symengine/cwrapper.h &basic_free_heap" ptr_basic_free_heap_ffi :: FunPtr(Ptr BasicStruct -> IO ())
@@ -205,4 +213,20 @@ foreign import ccall "symengine/cwrapper.h basic_mul" basic_mul_ffi :: Ptr Basic
205213
foreign import ccall "symengine/cwrapper.h basic_div" basic_div_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> Ptr BasicStruct -> IO ()
206214
foreign import ccall "symengine/cwrapper.h basic_pow" basic_pow_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> Ptr BasicStruct -> IO ()
207215
foreign import ccall "symengine/cwrapper.h basic_neg" basic_neg_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
208-
foreign import ccall "symengine/cwrapper.h basic_abs" basic_abs_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
216+
foreign import ccall "symengine/cwrapper.h basic_abs" basic_abs_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
217+
218+
foreign import ccall "symengine/cwrapper.h basic_sin" basic_sin_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
219+
foreign import ccall "symengine/cwrapper.h basic_cos" basic_cos_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
220+
foreign import ccall "symengine/cwrapper.h basic_tan" basic_tan_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
221+
222+
foreign import ccall "symengine/cwrapper.h basic_asin" basic_asin_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
223+
foreign import ccall "symengine/cwrapper.h basic_acos" basic_acos_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
224+
foreign import ccall "symengine/cwrapper.h basic_atan" basic_atan_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
225+
226+
foreign import ccall "symengine/cwrapper.h basic_sinh" basic_sinh_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
227+
foreign import ccall "symengine/cwrapper.h basic_cosh" basic_cosh_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
228+
foreign import ccall "symengine/cwrapper.h basic_tanh" basic_tanh_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
229+
230+
foreign import ccall "symengine/cwrapper.h basic_asinh" basic_asinh_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
231+
foreign import ccall "symengine/cwrapper.h basic_acosh" basic_acosh_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()
232+
foreign import ccall "symengine/cwrapper.h basic_atanh" basic_atanh_ffi :: Ptr BasicStruct -> Ptr BasicStruct -> IO ()

0 commit comments

Comments
 (0)