Opened 3 years ago
Closed 3 years ago
#19795 closed defect (fixed)
GAP3 does not have IsIdenticalObject
Reported by:  vbraun  Owned by:  

Priority:  major  Milestone:  sage7.0 
Component:  packages: standard  Keywords:  gap 
Cc:  jaanos, tscrim, aschilling  Merged in:  
Authors:  Travis Scrimshaw, Janoš Vidali  Reviewers:  Anne Schilling 
Report Upstream:  N/A  Work issues:  
Branch:  efdffd5 (Commits)  Commit:  efdffd54d63ab56936a143481cd5b47086b1200a 
Dependencies:  Stopgaps: 
Description
Looks like a regression introduced in #19585. Reported at https://groups.google.com/d/msg/sagedevel/MrXp43v3WP4/ju2LwTuvBAAJ
sage: gap=Gap3('/Applications/gap3r4p4/bin/gap') sage: gap.RequirePackage('"specht"')  RuntimeError Traceback (most recent call last) <ipythoninput22c539883f0214> in <module>() > 1 gap.RequirePackage('"specht"') /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/interface.pyc in __call__(self, *args, **kwds) 605 606 def __call__(self, *args, **kwds): > 607 return self._parent.function_call(self._name, list(args), kwds) 608 609 def _sage_doc_(self): /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/gap.pyc in function_call(self, function, args, kwds) 919 self.eval(marker) 920 res = self.eval(cmd) > 921 if self.eval('IsIdenticalObj(last,__SAGE_LAST__)') != 'true': 922 return self.new('last2;') 923 else: /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/gap.pyc in eval(self, x, newlines, strip, split_lines, **kwds) 567 if not input_line.endswith(';'): 568 input_line += ';' > 569 result = Expect.eval(self, input_line, **kwds) 570 if not newlines: 571 result = result.replace("\\\n","") /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/expect.pyc in eval(self, code, strip, synchronize, locals, allow_use_file, split_lines, **kwds) 1237 elif split_lines: 1238 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) > 1239 for L in code.split('\n') if L != '']) 1240 else: 1241 return self._eval_line(code, allow_use_file=allow_use_file, **kwds) /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/gap.pyc in _eval_line(self, line, allow_use_file, wait_for_prompt, restart_if_needed) 765 return '' 766 else: > 767 raise RuntimeError(message) 768 769 except KeyboardInterrupt: RuntimeError: Gap3 produced error output Error, Variable: 'IsIdenticalObj' must have a value executing IsIdenticalObj(last,__SAGE_LAST__);
Change History (13)
comment:1 Changed 3 years ago by
 Cc aschilling added
comment:2 followup: ↓ 3 Changed 3 years ago by
comment:3 in reply to: ↑ 2 ; followup: ↓ 4 Changed 3 years ago by
Hi!
 a subclass of the GAP interpreter for backwards compatibility with GAP3 which just has the one difference in
function_call()
,
There already is a separate class for GAP3 which inherits from Gap_generic
. The cleanest solution IMO would be to have a method _identical_function
in Gap_generic
(parallel to _equality_symbol
etc.), say:
def _identical_function(self): return "IsIdenticalObj"
and then have it overridden in Gap3
.
comment:4 in reply to: ↑ 3 ; followup: ↓ 5 Changed 3 years ago by
 Branch set to public/interfaces/fix_gap319795
 Commit set to 8ff1fe8c5e9a3c1a3eaff48c4ef6b38333d5a82d
 Status changed from new to needs_review
Replying to jaanos:
 a subclass of the GAP interpreter for backwards compatibility with GAP3 which just has the one difference in
function_call()
,There already is a separate class for GAP3 which inherits from
Gap_generic
.
Good; let us use that.
The cleanest solution IMO would be to have a method
_identical_function
inGap_generic
(parallel to_equality_symbol
etc.), say:def _identical_function(self): return "IsIdenticalObj"and then have it overridden in
Gap3
.
I think it should be a classlevel attribute instead of a method because it speed cost and a method is IMO somewhat overkill (because no work is done).
Anne, can you check to see if this works?
New commits:
8ff1fe8  Adding an identical function class attribute.

comment:5 in reply to: ↑ 4 Changed 3 years ago by
Replying to tscrim:
Replying to jaanos:
 a subclass of the GAP interpreter for backwards compatibility with GAP3 which just has the one difference in
function_call()
,There already is a separate class for GAP3 which inherits from
Gap_generic
.Good; let us use that.
The cleanest solution IMO would be to have a method
_identical_function
inGap_generic
(parallel to_equality_symbol
etc.), say:def _identical_function(self): return "IsIdenticalObj"and then have it overridden in
Gap3
.I think it should be a classlevel attribute instead of a method because it speed cost and a method is IMO somewhat overkill (because no work is done).
Anne, can you check to see if this works?
New commits:
8ff1fe8 Adding an identical function class attribute.
With this branch applied, I still get an error
sage: gap=Gap3('/Applications/gap3r4p4/bin/gap') sage: gap.RequirePackage('"specht"')  RuntimeError Traceback (most recent call last) <ipythoninput2c539883f0214> in <module>() > 1 gap.RequirePackage('"specht"') /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/interface.pyc in __call__(self, *args, **kwds) 605 606 def __call__(self, *args, **kwds): > 607 return self._parent.function_call(self._name, list(args), kwds) 608 609 def _sage_doc_(self): /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/gap.pyc in function_call(self, function, args, kwds) 920 self.eval(marker) 921 res = self.eval(cmd) > 922 if self.eval(self._identical_function + '(last,__SAGE_LAST__)') != 'true': 923 return self.new('last2;') 924 else: /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/gap.pyc in eval(self, x, newlines, strip, split_lines, **kwds) 568 if not input_line.endswith(';'): 569 input_line += ';' > 570 result = Expect.eval(self, input_line, **kwds) 571 if not newlines: 572 result = result.replace("\\\n","") /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/expect.pyc in eval(self, code, strip, synchronize, locals, allow_use_file, split_lines, **kwds) 1237 elif split_lines: 1238 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) > 1239 for L in code.split('\n') if L != '']) 1240 else: 1241 return self._eval_line(code, allow_use_file=allow_use_file, **kwds) /Applications/sage/local/lib/python2.7/sitepackages/sage/interfaces/gap.pyc in _eval_line(self, line, allow_use_file, wait_for_prompt, restart_if_needed) 766 return '' 767 else: > 768 raise RuntimeError(message) 769 770 except KeyboardInterrupt: RuntimeError: Gap3 produced error output Error, Variable: 'IsIdenticalObj' must have a value executing IsIdenticalObj(last,__SAGE_LAST__);
I will be traveling for at least 15 hours now and won't have any internet on the plane ....
comment:6 Changed 3 years ago by
 Commit changed from 8ff1fe8c5e9a3c1a3eaff48c4ef6b38333d5a82d to efdffd54d63ab56936a143481cd5b47086b1200a
Branch pushed to git repo; I updated commit sha1. New commits:
efdffd5  Putting the class attribute in the correct place.

comment:7 followup: ↓ 8 Changed 3 years ago by
Whoops. I put it in the wrong place. Try it now.
Have a great flight!
comment:8 in reply to: ↑ 7 Changed 3 years ago by
Replying to tscrim:
Whoops. I put it in the wrong place. Try it now.
Yes, now it works!
sage: gap=Gap3('/Applications/gap3r4p4/bin/gap') sage: gap.RequirePackage('"specht"')  SPECHT 3.1  development edition A package for calculating decomposition numbers of Hecke algebras of the symmetric groups and qSchur algebras. This is an unofficial release of SPECHT. There are a significant number of *undocumented* functions in this version. Fewer old bugs, and more new bugs are also included. (C) Andrew Mathas mathas@maths.usyd.edu.au Sydney 
comment:9 followup: ↓ 12 Changed 3 years ago by
Can we consider that a positive review then?
comment:10 Changed 3 years ago by
 Reviewers set to Anne Schilling
 Status changed from needs_review to positive_review
comment:11 Changed 3 years ago by
 Keywords gap added
comment:12 in reply to: ↑ 9 Changed 3 years ago by
Replying to tscrim:
Can we consider that a positive review then?
Thank you for fixing this! Happy New Year!
comment:13 Changed 3 years ago by
 Branch changed from public/interfaces/fix_gap319795 to efdffd54d63ab56936a143481cd5b47086b1200a
 Resolution set to fixed
 Status changed from positive_review to closed
So GAP3 has
IsIdentical
, which was changed toIsIdenticalObj
in GAP4b3. I think what we need to do is either:function_call()
,__init__
and set some private attribute which gets used infunction_call()
, orif
statement infunction_call()
.@aschilling For now you should be able to make that one line change mentioned above to
sage.interfaces.gap.function_call
(but I haven't tested it).