GithubHelp home page GithubHelp logo

Comments (5)

mforets avatar mforets commented on May 28, 2024 1

For the record, now SymEngine exports the convert methods:

julia> expr = convert(Basic, "2x + y")
2*x + y

julia> expr = convert(Basic, :(2x+y))
2*x + y

from symengine.jl.

isuruf avatar isuruf commented on May 28, 2024

I'm not sure this is the best way, but here goes.

syms = [:x, :y, :z]
ex = :(x * y  - x * z)

using SymEngine
symengine_syms = map(symbols, syms)

d = Dict(zip(syms, symengine_syms))

function Basic(s::Symbol, d::Dict{Symbol,SymEngine.Basic})
   if haskey(d, s)
       get(d, s, 0)
   else
       s
   end
end

function Basic(ex::Expr, d::Dict{Symbol,SymEngine.Basic})
   s = copy(ex)
   for i in 1:length(s.args)
       s.args[i] = Basic(s.args[i], d)
   end
   eval(s)
end

Basic(ex, d)

from symengine.jl.

jverzani avatar jverzani commented on May 28, 2024

This is reminiscent of the @vars macro. Something like this may also be of interest:

using SymEngine

ss = [:x, :y, :z]
ex = :(x * y + x * z)


function evaluate_expression(ex, vars)
    q=Expr(:block)
    for s in ss
        push!(q.args, Expr(:(=), s, Expr(:call, :(SymEngine._symbol), Expr(:quote, s))))
    end
    push!(q.args, Expr(:tuple, vars...))
    eval(Main, q)

    eval(ex)
end

evaluate_expression(ex, ss)

This uses SymEngine to generate a Basic expression from the expression and the variables which seems a bit more direct.

from symengine.jl.

isuruf avatar isuruf commented on May 28, 2024

With the latest SymEngine master, you can even do,

function basic_parse(s::String)
    a = Basic()
    ccall((:basic_parse, :libsymengine), Void, (Ptr{Basic}, Ptr{Int8}), &a, s)
    return a
end

basic_parse(string(ex))

from symengine.jl.

sglyon avatar sglyon commented on May 28, 2024

@isuruf that's exactly what I was looking for! Thank you for that.

from symengine.jl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.