No, no parsers are needed. Just a tree traversal for-loop. It's already 
implemented:


   - iterator 
   
<https://github.com/sympy/sympy/blob/94305f1976f84473f87d1b19d66ed9031b0c7e1f/sympy/utilities/matchpy_connector.py#L90>
   - iterator size 
   
<https://github.com/sympy/sympy/blob/94305f1976f84473f87d1b19d66ed9031b0c7e1f/sympy/utilities/matchpy_connector.py#L99>

As you see, in the current implementation we need to use 
@op_iter.register... because "op_iter" is a MatchPy function that does not 
exist in SymPy... With @op_iter.register we can extend it to a SymPy 
object. The problem is:

   1. @op_iter.register is an almost hackish way to do it, it messes up 
   with the class inheritance. We need something easier to use.
   2. The .register method defines the iterator on a class. We may have 
   cases in which we would like to have different iterators for the same 
   class... so it shouldn't be a class method.
   

On Monday, March 18, 2024 at 11:20:10 p.m. UTC+1 samithkar...@gmail.com 
wrote:

> I think, I understood the point you are making. If we are going to 
> redefine the tree structure in matchpy using overridable methods, does that 
> mean we have to use a parser to translate the sympy object type to matchpy 
> or are there any better way to handle the situation.  
> On Saturday, March 16, 2024 at 8:32:03 PM UTC+5:30 Francesco Bonazzi wrote:
>
>> I suggest to start the unit tests of MatchPy in debug mode and follow the 
>> tree traversal to get some more insight. Indeed, the code is quite 
>> complicated, but the debugger may help. MatchPy also provides a tool to 
>> dump the state into a GraphViz dot file.
>>
>> The idea is that matchpy_connector should not use all those ".register( 
>> )" methods, it should not have objects subclassing MatchPy objects 
>> (currently there is Wildcard).
>>
>> On Saturday, March 16, 2024 at 1:52:55 p.m. UTC+1 samithkar...@gmail.com 
>> wrote:
>>
>>> Hi,
>>> Still I am in the process of understanding the matchpy code base.
>>> at the moment I understand that, 
>>>
>>>    - Isinstance logic should replace to overridable method or any 
>>>    preferred way ( wrappers around classes new classes also possible 
>>> without 
>>>    changing the existing code). 
>>>    - __iter__ logic should change due to the tree traversal must change 
>>>    accordingly, because it is rely on the inheritance. 
>>>    - replace method in the matchpy connector should change because it 
>>>    is replication of same code twice.
>>>    - Enhance the capability of matchpy_connector, because still does 
>>>    not have the capability of solving calculus, matrices and more advanced 
>>>    problems.
>>>
>>> what are the other things that might affect if we add overridable method 
>>> to Expressions? any suggestions for me to refer.
>>> On Wednesday, March 13, 2024 at 2:04:20 PM UTC+5:30 Francesco Bonazzi 
>>> wrote:
>>>
>>>> On Wednesday, March 13, 2024 at 8:13:27 a.m. UTC+1 Aaron Meurer wrote:
>>>>
>>>> As far as we can tell, SymPy is the only thing that uses MatchPy, 
>>>> outside of the specific research software from that research group 
>>>> that it was developed for. 
>>>>
>>>>
>>>> Indeed, MatchPy is probably very underappreciated. Its developers 
>>>> haven't really advertised it enough.
>>>>  
>>>>
>>>> If making MatchPy more SymPy specific eases 
>>>> the development burden, we should do that, especially if we are going 
>>>> to fork it anyway. I think the core of it does need to remain 
>>>> independent of SymPy's types, especially if we want to try to write a 
>>>> Rust backend. 
>>>>
>>>>
>>>> I would still make an attempt at keeping it generic. The main issue is 
>>>> removing all "isinstance( ... )" and "__iter__" statements in the 
>>>> expression tree traversal algorithms of MatchPy and replace them with more 
>>>> generalizable statements. I'm confident this can be done and that we can 
>>>> still keep MatchPy generalizable to other libraries.
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/ed1fb5d0-e0d7-4cd4-a24c-68a12fc37c96n%40googlegroups.com.

Reply via email to