Skip to content

Commit 7e12625

Browse files
authored
close Issue 260 (#261)
* define latex method, not exported (imported by DAEPreprocessor) * precompile issue; borrow from DAEPreprocessor * code reorg; put volatile code in separate file
1 parent 92b36b0 commit 7e12625

File tree

6 files changed

+181
-14
lines changed

6 files changed

+181
-14
lines changed

src/SymPy.jl

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
"""
32
43
`SymPy` package to interface with Python's [SymPy library](http://www.sympy.org) through `PyCall`.
@@ -145,9 +144,11 @@ function __init__()
145144

146145

147146

148-
## is this a good idea?
149-
## could leave this out
150-
import_sympy()
147+
## We *would* like to import some methods from the `sympy` module, but we can't as calling
148+
## @eval to import from a different package causes precompilation issues.
149+
## Rather, we only call `import_sympy` to print a list of commands to add to this file (as
150+
## are added below). This is done by uncommenting the `println` statements in `import_from`.
151+
#import_sympy()
151152

152153
end
153154

@@ -211,7 +212,10 @@ case, there is `SymFunction` defined for convenience.)
211212
"""
212213
function import_sympy()
213214
if mpmath != PyCall.PyNULL()
214-
import_from(mpmath)
215+
mps = _get_member_functions(mpmath, base_exclude)
216+
sps = Introspection.getmembers(sympy)
217+
imp = Tuple(Symbol.(setdiff(keys(mps), keys(sps))))
218+
import_from(mpmath, imp)
215219
end
216220
## import from
217221
## import_from(sympy)
@@ -231,4 +235,8 @@ import Base.Order: Lt
231235
Lt(x::Number, args...;kwargs...) = sympy.Lt(x, args...; kwargs...)
232236
export(Lt)
233237

238+
239+
### Add generic methods and new methods
240+
include("importexport.jl")
241+
234242
end # module

src/importexport.jl

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
### These are generated by a) uncommenting import_sympy() in __init__ b) uncomment println parts in import_from
2+
expj(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :expj)(ex, args...; kwargs...); export expj
3+
fac(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :fac)(ex, args...; kwargs...); export fac
4+
nint(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :nint)(ex, args...; kwargs...); export nint
5+
Base.ceil(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :ceil)(ex, args...; kwargs...)
6+
fib(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :fib)(ex, args...; kwargs...); export fib
7+
monitor(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :monitor)(ex, args...; kwargs...); export monitor
8+
Base.cospi(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :cospi)(ex, args...; kwargs...)
9+
bernfrac(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :bernfrac)(ex, args...; kwargs...); export bernfrac
10+
doctests(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :doctests)(ex, args...; kwargs...); export doctests
11+
ei(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :ei)(ex, args...; kwargs...); export ei
12+
Base.sinpi(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :sinpi)(ex, args...; kwargs...)
13+
timing(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :timing)(ex, args...; kwargs...); export timing
14+
rgamma(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :rgamma)(ex, args...; kwargs...); export rgamma
15+
expjpi(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :expjpi)(ex, args...; kwargs...); export expjpi
16+
ellipk(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :ellipk)(ex, args...; kwargs...); export ellipk
17+
e1(ex::SymbolicObject, args...; kwargs...)=getproperty(mpmath, :e1)(ex, args...; kwargs...); export e1
18+
SpecialFunctions.digamma(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :digamma)(ex, args...; kwargs...)
19+
Base.rem(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :rem)(ex, args...; kwargs...)
20+
Base.asin(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :asin)(ex, args...; kwargs...)
21+
Base.acosh(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :acosh)(ex, args...; kwargs...)
22+
Base.im(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :im)(ex, args...; kwargs...)
23+
Base.collect(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :collect)(ex, args...; kwargs...)
24+
Base.Function(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :Function)(ex, args...; kwargs...)
25+
SpecialFunctions.erfi(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :erfi)(ex, args...; kwargs...)
26+
Base.floor(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :floor)(ex, args...; kwargs...)
27+
Base.product(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :product)(ex, args...; kwargs...)
28+
Base.gcd(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :gcd)(ex, args...; kwargs...)
29+
Base.atan(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :atan)(ex, args...; kwargs...)
30+
Base.sqrt(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :sqrt)(ex, args...; kwargs...)
31+
Base.acsch(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :acsch)(ex, args...; kwargs...)
32+
SpecialFunctions.besselj(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :besselj)(ex, args...; kwargs...)
33+
Base.adjoint(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :adjoint)(ex, args...; kwargs...)
34+
Base.asinh(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :asinh)(ex, args...; kwargs...)
35+
SpecialFunctions.besselk(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :besselk)(ex, args...; kwargs...)
36+
Base.binomial(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :binomial)(ex, args...; kwargs...)
37+
Base.asec(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :asec)(ex, args...; kwargs...)
38+
Base.exp(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :exp)(ex, args...; kwargs...)
39+
Base.sech(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :sech)(ex, args...; kwargs...)
40+
Base.cbrt(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :cbrt)(ex, args...; kwargs...)
41+
Base.acsc(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :acsc)(ex, args...; kwargs...)
42+
Base.factorial(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :factorial)(ex, args...; kwargs...)
43+
Base.trunc(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :trunc)(ex, args...; kwargs...)
44+
Base.acos(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :acos)(ex, args...; kwargs...)
45+
SpecialFunctions.polygamma(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :polygamma)(ex, args...; kwargs...)
46+
Base.tanh(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :tanh)(ex, args...; kwargs...)
47+
SpecialFunctions.erfinv(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :erfinv)(ex, args...; kwargs...)
48+
Base.sinh(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :sinh)(ex, args...; kwargs...)
49+
SpecialFunctions.airybi(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :airybi)(ex, args...; kwargs...)
50+
Base.asech(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :asech)(ex, args...; kwargs...)
51+
SpecialFunctions.erfcinv(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :erfcinv)(ex, args...; kwargs...)
52+
SpecialFunctions.besseli(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :besseli)(ex, args...; kwargs...)
53+
Base.acot(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :acot)(ex, args...; kwargs...)
54+
Base.coth(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :coth)(ex, args...; kwargs...)
55+
SpecialFunctions.airyai(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :airyai)(ex, args...; kwargs...)
56+
SpecialFunctions.erf(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :erf)(ex, args...; kwargs...)
57+
Base.cosh(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :cosh)(ex, args...; kwargs...)
58+
LinearAlgebra.diag(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :diag)(ex, args...; kwargs...)
59+
Base.lcm(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :lcm)(ex, args...; kwargs...)
60+
Base.zeros(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :zeros)(ex, args...; kwargs...)
61+
Base.cot(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :cot)(ex, args...; kwargs...)
62+
SpecialFunctions.zeta(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :zeta)(ex, args...; kwargs...)
63+
Base.sign(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :sign)(ex, args...; kwargs...)
64+
Base.permutedims(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :permutedims)(ex, args...; kwargs...)
65+
Base.cos(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :cos)(ex, args...; kwargs...)
66+
Base.transpose(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :transpose)(ex, args...; kwargs...)
67+
Base.MathConstants.catalan(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :catalan)(ex, args...; kwargs...)
68+
SpecialFunctions.erfc(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :erfc)(ex, args...; kwargs...)
69+
SpecialFunctions.bessely(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :bessely)(ex, args...; kwargs...)
70+
Base.diff(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :diff)(ex, args...; kwargs...)
71+
Base.tan(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :tan)(ex, args...; kwargs...)
72+
Base.decompose(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :decompose)(ex, args...; kwargs...)
73+
SpecialFunctions.airyaiprime(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :airyaiprime)(ex, args...; kwargs...)
74+
Base.csch(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :csch)(ex, args...; kwargs...)
75+
Base.csc(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :csc)(ex, args...; kwargs...)
76+
Base.ones(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :ones)(ex, args...; kwargs...)
77+
SpecialFunctions.trigamma(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :trigamma)(ex, args...; kwargs...)
78+
Base.prod(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :prod)(ex, args...; kwargs...)
79+
SpecialFunctions.beta(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :beta)(ex, args...; kwargs...)
80+
Base.sec(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :sec)(ex, args...; kwargs...)
81+
Base.acoth(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :acoth)(ex, args...; kwargs...)
82+
SpecialFunctions.airybiprime(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :airybiprime)(ex, args...; kwargs...)
83+
Base.atanh(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :atanh)(ex, args...; kwargs...)
84+
LinearAlgebra.det(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :det)(ex, args...; kwargs...)
85+
SpecialFunctions.gamma(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :gamma)(ex, args...; kwargs...)
86+
Base.reshape(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :reshape)(ex, args...; kwargs...)
87+
Base.sin(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :sin)(ex, args...; kwargs...)
88+
simplify(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :simplify)(ex, args...; kwargs...); export simplify
89+
summation(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :summation)(ex, args...; kwargs...); export summation
90+
solve(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :solve)(ex, args...; kwargs...); export solve
91+
Max(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :Max)(ex, args...; kwargs...); export Max
92+
unflatten(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :unflatten)(ex, args...; kwargs...); export unflatten
93+
denom(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :denom)(ex, args...; kwargs...); export denom
94+
nonlinsolve(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :nonlinsolve)(ex, args...; kwargs...); export nonlinsolve
95+
cancel(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :cancel)(ex, args...; kwargs...); export cancel
96+
solveset(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :solveset)(ex, args...; kwargs...); export solveset
97+
DiracDelta(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :DiracDelta)(ex, args...; kwargs...); export DiracDelta
98+
Or(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :Or)(ex, args...; kwargs...); export Or
99+
conjugate(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :conjugate)(ex, args...; kwargs...); export conjugate
100+
flatten(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :flatten)(ex, args...; kwargs...); export flatten
101+
Not(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :Not)(ex, args...; kwargs...); export Not
102+
integrate(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :integrate)(ex, args...; kwargs...); export integrate
103+
roots(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :roots)(ex, args...; kwargs...); export roots
104+
factor(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :factor)(ex, args...; kwargs...); export factor
105+
pdsolve(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :pdsolve)(ex, args...; kwargs...); export pdsolve
106+
Abs(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :Abs)(ex, args...; kwargs...); export Abs
107+
Heaviside(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :Heaviside)(ex, args...; kwargs...); export Heaviside
108+
nsimplify(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :nsimplify)(ex, args...; kwargs...); export nsimplify
109+
isprime(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :isprime)(ex, args...; kwargs...); export isprime
110+
apart(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :apart)(ex, args...; kwargs...); export apart
111+
Min(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :Min)(ex, args...; kwargs...); export Min
112+
intervals(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :intervals)(ex, args...; kwargs...); export intervals
113+
intersection(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :intersection)(ex, args...; kwargs...); export intersection
114+
line_integrate(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :line_integrate)(ex, args...; kwargs...); export line_integrate
115+
real_roots(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :real_roots)(ex, args...; kwargs...); export real_roots
116+
isolate(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :isolate)(ex, args...; kwargs...); export isolate
117+
linsolve(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :linsolve)(ex, args...; kwargs...); export linsolve
118+
Xor(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :Xor)(ex, args...; kwargs...); export Xor
119+
real_root(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :real_root)(ex, args...; kwargs...); export real_root
120+
nsolve(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :nsolve)(ex, args...; kwargs...); export nsolve
121+
ln(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :ln)(ex, args...; kwargs...); export ln
122+
rsolve(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :rsolve)(ex, args...; kwargs...); export rsolve
123+
degree(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :degree)(ex, args...; kwargs...); export degree
124+
prime(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :prime)(ex, args...; kwargs...); export prime
125+
limit(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :limit)(ex, args...; kwargs...); export limit
126+
And(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :And)(ex, args...; kwargs...); export And
127+
root(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :root)(ex, args...; kwargs...); export root
128+
rootof(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :rootof)(ex, args...; kwargs...); export rootof
129+
ode_order(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :ode_order)(ex, args...; kwargs...); export ode_order
130+
multiplicity(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :multiplicity)(ex, args...; kwargs...); export multiplicity
131+
series(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :series)(ex, args...; kwargs...); export series
132+
expand(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :expand)(ex, args...; kwargs...); export expand
133+
hessian(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :hessian)(ex, args...; kwargs...); export hessian
134+
srepr(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :srepr)(ex, args...; kwargs...); export srepr
135+
nroots(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :nroots)(ex, args...; kwargs...); export nroots
136+
interpolate(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :interpolate)(ex, args...; kwargs...); export interpolate
137+
numer(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :numer)(ex, args...; kwargs...); export numer
138+
cse(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :cse)(ex, args...; kwargs...); export cse
139+
together(ex::SymbolicObject, args...; kwargs...)=getproperty(sympy, :together)(ex, args...; kwargs...); export together
140+
Equality(ex::Number, args...; kwargs...)=getproperty(sympy, :Equality)(ex, args...; kwargs...); export Equality
141+
Ne(ex::Number, args...; kwargs...)=getproperty(sympy, :Ne)(ex, args...; kwargs...); export Ne
142+
LessThan(ex::Number, args...; kwargs...)=getproperty(sympy, :LessThan)(ex, args...; kwargs...); export LessThan
143+
Gt(ex::Number, args...; kwargs...)=getproperty(sympy, :Gt)(ex, args...; kwargs...); export Gt
144+
Eq(ex::Number, args...; kwargs...)=getproperty(sympy, :Eq)(ex, args...; kwargs...); export Eq
145+
GreaterThan(ex::Number, args...; kwargs...)=getproperty(sympy, :GreaterThan)(ex, args...; kwargs...); export GreaterThan
146+
Le(ex::Number, args...; kwargs...)=getproperty(sympy, :Le)(ex, args...; kwargs...); export Le
147+
Unequality(ex::Number, args...; kwargs...)=getproperty(sympy, :Unequality)(ex, args...; kwargs...); export Unequality
148+
Ge(ex::Number, args...; kwargs...)=getproperty(sympy, :Ge)(ex, args...; kwargs...); export Ge
149+
StrictLessThan(ex::Number, args...; kwargs...)=getproperty(sympy, :StrictLessThan)(ex, args...; kwargs...); export StrictLessThan
150+
StrictGreaterThan(ex::Number, args...; kwargs...)=getproperty(sympy, :StrictGreaterThan)(ex, args...; kwargs...); export StrictGreaterThan

src/symfunction.jl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,15 @@ mutable struct SymFunction <: SymbolicObject
1212
n::Int
1313
end
1414

15-
Base.show(io::IO, u::SymFunction) = print(io, "$(string(Sym(u.x)))" * repeat("'", u.n))
16-
15+
# these are from https://github.com/OptMist-Tokyo/DAEPreprocessor.jl/blob/sympy_warning/src/symbolic.jl
16+
derivative(x::SymFunction, d::Int = 1) = SymFunction(x.x, x.n + d)
17+
Base.transpose(f::Sym) = f
18+
Base.show(io::IO, ::MIME"text/plain", u::SymFunction) = print(io, "$(string(Sym(u.x)))" * repeat("'", u.n))
19+
latex(x::SymFunction) = latex(Sym(x.x)) * repeat("'", x.n)
20+
Base.show(io::IO, ::MIME"text/latex", x::SymFunction) = print(io, "\\begin{align*}" * latex(x) * "\\end{align*}")
21+
function Base.show(io::IO, ::MIME"text/latex", x::AbstractArray{SymFunction, 1})
22+
print(io, "\\begin{align*}\\left[\\begin{array}{c}" * join(latex.(x), "\\\\") * "\\end{array}\\right]\\end{align*}")
23+
end
1724
"""
1825
1926

src/types.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ function show(io::IO, ::MIME"text/latex", d::Dict{T,S}) where {T<:SymbolicObject
103103
print(io, out)
104104
end
105105

106-
106+
latex(x::Sym) = sympy.latex(x)
107107

108108

109109

src/utils.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,24 +200,26 @@ function import_from(sm, meths=nothing;
200200
end
201201
end
202202
end
203-
204203
for (k,v) in fns
205204
meth = Symbol(k)
206205
inMs = false
207206
for M in union(base_Ms, Ms)
207+
M1 = replace("$M",r"^.*\."=>"")
208208
if isdefined(M, meth)
209-
inMs = true
210-
# @show k
209+
inMs = true
210+
## @show "import", M, k
211+
## println("$M.$k(ex::$typ, args...; kwargs...)=getproperty($(sm.__name__), :$k)(ex, args...; kwargs...)")
211212
@eval begin
212213
($M.$meth)(ex::($typ), args...; kwargs...) =
213214
getproperty($sm,$k)(ex, args...; kwargs...)
214215
end
215216
break
216-
end
217+
end
217218
end
218219
if !inMs
219220
## need to export
220-
# @show "export", k
221+
## @show "export", k
222+
## println("$k(ex::$typ, args...; kwargs...)=getproperty($(sm.__name__), :$k)(ex, args...; kwargs...); export $k")
221223
@eval begin
222224
($meth)(ex::($typ), args...; kwargs...) =
223225
getproperty($sm,$k)(ex, args...; kwargs...)

0 commit comments

Comments
 (0)