Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 22:23
    asmeurer commented #21739
  • 22:17
    asmeurer commented #22899
  • 22:17
    asmeurer commented #22899
  • 21:46
    GeoffCope opened #22899
  • 21:28
    asmeurer commented #20678
  • 21:27
    asmeurer commented #20678
  • 20:58
    asmeurer commented #16504
  • 20:54
    asmeurer commented #22445
  • 20:53
    asmeurer commented #22445
  • 20:40
    asmeurer commented #20015
  • 18:46
    smichr commented #22866
  • 18:34
    github-actions[bot] commented #22872
  • 17:31
    me-t1me synchronize #22872
  • 17:05
    oscarbenjamin commented #22889
  • 16:20
    NikhilSDate commented #22866
  • 16:18
    smichr commented #22866
  • 16:11
    smichr commented #22889
  • 16:09
    NikhilSDate commented #22866
  • 16:05
    banana59 commented #22895
  • 16:00

    Upabjojr on master

    Conversion of array to matrix: … add type annotation Merge pull request #22897 from … (compare)

Sidharth Mundhra
@0sidharth
I think you have to go into sympy directory and do pip install -e . in the virtual environment
Ayush Bisht
@ayushbisht2001
Thanks @0sidharth , Now it's working fine ..
Harshit Yadav
@hyadav2k
Is there some way to return two equations in the same Piecewise condition, like Piecewise(((a, b), Eq(n, 0)), (nan, True)), though writing as Tuple doesn't work? Thanks.
laolux
@laolux:wolkendienst.dynv6.net
[m]
Minor point I just noticed: I don't think you need to check if a<=2, because it is checked already that a<b. But I think this detail also depends on sympy style guides, so somebody else should comment on that
Benoit Martin
@metabsd
Hi, How can I evaluate this in sympy ?
image.png
almighty123789
@almighty123789
@metabsd
b1, b2 = symbols('b1 b2')
f = (5b1 - 3b2)**2
@metabsd
f.expand()
stuzenz
@stuzenz

Hi, I am using sympy to help my daughter go through some IGCSE math (while exposing her to some coding) and I am trying to understand, is there a way to have the below expression displayed versus simplified/calculated out.

2**5

Craig Russell
@ctr26
sympify ("2**5", evaluate=False)
Pow(2,5, evaluate=False) also works
stuzenz
@stuzenz
Excellent - thank you. I had tried a few different things - just not the right combination.
Love the sympy library by the way - I am getting more familiar for the library - this group has some useful information which I have also been reading.
stuzenz
@stuzenz

sympify ("2**5", evaluate=False)

Interesting, simplify("2**5",evaluate=False) didn't work for me, but the Pow function did work with evaluate set to False.

Craig Russell
@ctr26
Sympify vs simplify
stuzenz
@stuzenz
Thanks Craig - that did work
almighty123789
@almighty123789
while running some tests, my code is getting some infinte recursion errors, is there a way t o exactly find which statement/test leads to the infinte recursion error?
Sidharth Mundhra
@0sidharth
The tests generally print the traceback, from where you can see the recurring statements
Bjorn Madsen
@root-11

Hi - I'm learning and am looking for a hint for setting up an equation.
The problem is naturally expressed as:

# maximize:
#   z = 100*x_1 + 60*x_2 + 70*x_3 + 15*x_4 + 15*x_5

# subject to limits:
#   52*x_1 + 23*x_2 + 35*x_3 + 15*x_4 + 7*x_5 <= 60
#      X_1                                    in {0,1}
#               x_2                           in {0,1}
#                        x_3                  in {0,1}
#                                 x_4         in {0,1}
#                                         x_5 in {0,1}

But I can't find a way to express "x_1 in the set containing {0,1}

It's a knapsack problem.

My personal preference is to use the matrix representation

m = Matrix((
    [52,23,35,15,7,-60],
    [1,0,0,0,0,0],
    [0,1,0,0,0,0],
    [0,0,1,0,0,0],
    [0,0,0,1,0,0],
    [0,0,0,0,1,0]

))

...but I'm not sure how to package the variables for the nonlinsolve function.

Bjorn Madsen
@root-11
Sorry if this is a dumb question. I'm just overwhelmed by the amount of documentation.
Bjorn Madsen
@root-11
Whilst reading on I'm drifting towards the conclusion that sympy isn't hot on Linear Programming / Simplex method type problems on its own.
Bjorn Madsen
@root-11
Ok. Nobody is burning my statements. PuLP seems to be what I need.
Sayandip Halder
@sayandip18
>>> solveset(tan(x), x)
Union(ImageSet(Lambda(_n, 2*_n*pi + pi), Integers), ImageSet(Lambda(_n, 2*_n*pi), Integers))
Shouldn't the answer be simply ImageSet(Lambda(_n, _n*pi))?
Sayandip Halder
@sayandip18

Also,

>>> solveset(sin(cos(x)), x)
ConditionSet(x, Eq(sin(cos(x)), 0), Complexes)

The answer should be something like ImageSet(Lambda(_n, 2*(n-1)*pi))

I guess this is an issue of improving solveset
Aaron Meurer
@asmeurer
@root-11 yeah, SymPy currently doesn't have algorithms to solve that sort of problem. Anyway, if you are looking for a numerical solution rather than an exact analytic one, then SymPy is generally not your best choice.
Bjorn Madsen
@root-11
Thanks Aaron.
Benoit Martin
@metabsd
Hi, I'm trying to find a way to convert a float/decimal to a fraction. As an example if I decimal(-7/3) I got -2.333333333333333481363069950020872056484222412109375 I increased the decimal precision. Now I want to convert back to a fraction but each time I got something else that -7/3. Any advice ?
Isuru Fernando
@isuruf
@metabsd, once you do,-7/3 you've already lost precision. Decimal(-7)/3
can you share what you want to do exactly
your question is unclear
Sidharth Mundhra
@0sidharth
Currently sympy returns Order(oo) as O(1). Would a better alternative be returning oo (no order term)?
Aaron Meurer
@asmeurer
You can try nsimplify with the rational_conversion='base10' which tries to guess what short fraction a float came from.
Constantin Mateescu
@costica1234_twitter

Using x' as a variable inside parse_expr(...) (https://docs.sympy.org/latest/modules/parsing.html?highlight=transformations#sympy.parsing.sympy_parser.parse_expr) doesn't seem to work:

>>> from sympy import Symbol
>>> from sympy.parsing.sympy_parser import (parse_expr, standard_transformations, implicit_multiplication_application, convert_xor)
>>> 
>>> def parse_plain_text(e, local_dict=None):
...     return parse_expr(
...         e,
...         local_dict=local_dict,
...         transformations=(standard_transformations + (implicit_multiplication_application, convert_xor)),
...         evaluate=False)
... 
>>> parse_plain_text("x_", {"x_": Symbol("x_")})
x_
>>> parse_plain_text("x'", {"x'": Symbol("x'")})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in parse_plain_text
  File "REDACTED/sympy/sympy/parsing/sympy_parser.py", line 1005, in parse_expr
    code = compile(evaluateFalse(code), '<string>', 'eval')
  File "REDACTED/sympy/sympy/parsing/sympy_parser.py", line 1014, in evaluateFalse
    node = ast.parse(s)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ast.py", line 47, in parse
    return compile(source, filename, mode, flags,
  File "<unknown>", line 1
    Symbol ('x' )'
                 ^
SyntaxError: EOL while scanning string literal

I could remap this variable to something like x_ (which doesn't throw an error), but is there a way to avoid this workaround?

Aaron Meurer
@asmeurer
You would need to define a transformation that enables this and pass it to the transformations keyword
The transformers aren't really documented. We should fix that. You can look in sympy/parsing/sympy_parser.py to see how they are defined. Basically you need to mutate the tokens from tokenize
In this case, you probably want to take auto_symbol and modify it so that it allows NAME + ' tokens.
It looks like the extra quote is tokenized as an ERRORTOKEN
>>> list(tokenize.tokenize(io.BytesIO(b"x'").readline))
[TokenInfo(type=57 (ENCODING), string='utf-8', start=(0, 0), end=(0, 0), line=''), TokenInfo(type=1 (NAME), string='x', start=(1, 0), end=(1, 1), line="x'"), TokenInfo(type=54 (ERRORTOKEN), string="'", start=(1, 1), end=(1, 2), line="x'"), TokenInfo(type=4 (NEWLINE), string='', start=(1, 2), end=(1, 3), line=''), TokenInfo(type=0 (ENDMARKER), string='', start=(2, 0), end=(2, 0), line='')]
Constantin Mateescu
@costica1234_twitter
Thanks a lot for the detailed response! Will take a closer look at those transformations and see if I can define one that suits my needs.
Aradhana Kund
@aradhana72
Hello, I am Aradhana Kund from ETC-2nd year IIIT Bhubaneswar, India. I am interested into contributing to this organization . It would be a great help if I am guided for the same. I am very efficient in data structure and algorithms in C,C++.Also I am efficient in Python and mathematics also and wish to collaborate with this community to contribute and resolve the issues.
Looking forward for further interaction.
Suryam Arnav Kalra
@suryam35
Hi @aradhana72 , you can start with https://github.com/sympy/sympy/wiki/Introduction-to-contributing for starters, and then you can refer to the docs https://docs.sympy.org/latest/index.html. For the later part, refer to https://github.com/sympy/sympy/wiki/Development-workflow.
Aradhana Kund
@aradhana72
Thank you so much @suryam35 for guiding me.Will definitely look into the resources given by you and get back. Want to contribute for GSoC'21 with sympy . Looking forward to collaborating with this organization and the mentors. Please do guide for the same.
stuzenz
@stuzenz

Hi, this is similar to a question of mine last week. I am using sympy as a peripheral tool to teach my daughters some math. I have noticed that with some expressions such as the below one that sympy will still simplify

sympify ("(sqrt(9))/(sqrt(16))", evaluate=False)

where the result is

3/4

Is it possible to have sympy do something more like this library? If not, I will just import the second library. Still, before I go there I thought I should understand if it is possible in sympy first.

https://github.com/connorferster/handcalcs

handcalcs is a library to render Python calculation code automatically in Latex, but in a manner that mimics how one might format their calculation if it were written with a pencil: write the symbolic formula, followed by numeric substitutions, and then the result.

Because handcalcs shows the numeric substitution, the calculations become significantly easier to check and verify by hand.

stuzenz
@stuzenz
as a side note, @ctr26 was helpful last week in showing me that in the example that I presented then (which was for fractions) was achievable with the above syntax. It just doesn't seem to work universally (square roots for a perfect square counterpart being one example)
Benoit Martin
@metabsd
Hi, There a way to get the negative representation of a matrix ? Example m1 = Matrix([[2, -1], [3, 12], [1.3, -2]]) applying a function that result to Matrix([[-2, 1], [-3, -12], [-1.3, 2]]) Thx in advance!
stuzenz
@stuzenz

Hi, There a way to get the negative representation of a matrix ? Example m1 = Matrix([[2, -1], [3, 12], [1.3, -2]]) applying a function that result to Matrix([[-2, 1], [-3, -12], [-1.3, 2]]) Thx in advance!

This will get the result

m = Matrix([[1, 2], [3, 4]])
m = -m
m
stuzenz
@stuzenz

Hi, There a way to get the negative representation of a matrix ? Example m1 = Matrix([[2, -1], [3, 12], [1.3, -2]]) applying a function that result to Matrix([[-2, 1], [-3, -12], [-1.3, 2]]) Thx in advance!

not sure if you need it as a function - but if you do - something like the below will get you there

def invert_function(matrix):
    result = -matrix
    print(str(result))
invert_function(Matrix([[1, 2], [3, 4]]))
# Returns Matrix([[-1, -2], [-3, -4]])