Opened 9 years ago

Closed 8 years ago

# P-partition enumerators in QSym

Reported by: Owned by: darij sage-combinat minor sage-5.12 combinatorics QSym, P-partitions, posets, days45, days49 saliola sage-5.12.beta2 Darij Grinberg Frédéric Chapoton, Travis Scrimshaw N/A #14748

Or did someone already implement them?

Here's my code. Its weakest point is probably the input; instead of an actual pair of a poset and a map from its elements to {1,2,3,...}, it takes a pair of a poset and a linear order on it represented as a tuple of its elements. (See docstring for details. By the way, I'm hoping the LaTeX does work... no idea how to check that.)

Apply:

### Changed 9 years ago by darij

P-partition enumerators for QSym

### comment:3 Changed 8 years ago by chapoton

You need to choose where to put this function :

• as a method of finite posets ?
• as a method of Quasisymmetric functions ?

You need a white line after the EXAMPLES::

### comment:4 Changed 8 years ago by chapoton

here is a patch. There remains a deprecation warning that need to be taken care of.

### comment:5 Changed 8 years ago by darij

Thank you, Frédéric! What exactly is deprecated? (I'm at work now so I can't compile.)

### comment:6 Changed 8 years ago by chapoton

new patch, better doc, almost pass tests, but I have not been able to solve this deprecation problem.

It may come from the line QR=QuasiSymmetric?(R).

### comment:7 Changed 8 years ago by chapoton

I confirm that the DeprecationWarning? comes from the line

```QR = QuasiSymmetricFunctions(R)
```

But I am not able so far to understand exactly what the problem is.

### comment:8 Changed 8 years ago by darij

hg is driving me nuts...

```darij@travis-virtualbox:~/sage-5.9.rc1\$ hg qpush -v
applying trac_14136_p_partition_enumerator_v1.patch
[Errno 20] Not a directory: '/home/darij/sage-5.9.rc1/sage/combinat/posets/posets.py'
patch failed, rejects left in working dir
errors during apply, please fix and refresh trac_14136_p_partition_enumerator_v1.patch
darij@travis-virtualbox:~/sage-5.9.rc1\$
```

I was trying to install the patch on a fresh sage-5.9rc1, main branch (due to QSym being involved).

EDIT: Oh... should I just manually replace "combinat" by "sage" in the patch file?

Last edited 8 years ago by darij (previous) (diff)

### comment:9 Changed 8 years ago by chapoton

you should be in '/home/darij/sage-5.9.rc1/devel/sage-main' to use hg

### comment:10 Changed 8 years ago by chapoton

still the same failing doctest with 5.10.beta1 ..

### comment:11 Changed 8 years ago by darij

I can confirm the annoying ` doctest:201: DeprecationWarning: object.__init__() takes no parameters ` in response to ` QR = QuasiSymmetricFunctions(R) ` (unless there is some delay between the causing of the bug and the message). I'm using sage-main, so the breakage of QSym is out of question. No idea where it comes from...

Version 0, edited 8 years ago by darij (next)

### comment:12 Changed 8 years ago by tscrim

I've uploaded a small review patch which does some additional tweaks to the documentation and removes the print statements. I'm also getting the same error, and even adding this method above it:

```def test(self, R):
"""
EXAMPLES::

sage: P = Poset([[],[]])
sage: P.test(QQ)
"""
from sage.combinat.ncsf_qsym.qsym import QuasiSymmetricFunctions
return QuasiSymmetricFunctions(R)
```

the error gets pushed into this method. I'm thinking we should post something to sage-devel about this (since the error cannot be reproduced in sage), and as a possible solution, just copy the output of the doctest with a comment about it basically saying we have no idea what is happening.

Best,
Travis

### comment:13 Changed 8 years ago by chapoton

Hello, thanks for getting involved in this patch.

Have you asked the question on sage-devel ?

You have introduced a typo "parition" in your review patch.

### comment:14 Changed 8 years ago by tscrim

• Status changed from new to needs_info

Hey,

Here's the topic:

I'll fix the typo once we figure out what to do with the deprecation warning.

### comment:15 follow-up: ↓ 16 Changed 8 years ago by strogdon

Without the patches, there does appear to be deprecations associated with the `QuasiSymmetricFunctions` class that points to

```DeprecationWarning: object.__init__() takes no parameters
```

A Traceback of the warning may be obtained by converting warnings to errors, i.e.

```sage: import warnings
sage: warnings.simplefilter('error', DeprecationWarning)
sage: QuasiSymmetricFunctions(QQ)
```

which is fairly lengthy. It is curious that the patches now expose the warning. FWIW, the `SymmetricFunctions` class doesn't exhibit the warning:

```sage: import warnings
sage: warnings.simplefilter('error', DeprecationWarning)
sage: SymmetricFunctions(QQ)
Symmetric Functions over Rational Field
```

### comment:16 in reply to: ↑ 15 Changed 8 years ago by tscrim

Without the patches, there does appear to be deprecations associated with the `QuasiSymmetricFunctions` class that points to

```DeprecationWarning: object.__init__() takes no parameters
```

Where/how did you see this? In particular, was this placed in another doctest somewhere?

A Traceback of the warning may be obtained by converting warnings to errors, i.e.

```sage: import warnings
sage: warnings.simplefilter('error', DeprecationWarning)
sage: QuasiSymmetricFunctions(QQ)
```

which is fairly lengthy. It is curious that the patches now expose the warning. FWIW, the `SymmetricFunctions` class doesn't exhibit the warning:

```sage: import warnings
sage: warnings.simplefilter('error', DeprecationWarning)
sage: SymmetricFunctions(QQ)
Symmetric Functions over Rational Field
```

Hmmm, I didn't know that (kinda cool). I'll take a look at it. Thanks.

### comment:17 Changed 8 years ago by tscrim

Here's the backtrace I got:

```File "posets.py", line 3271, in sage.combinat.posets.posets.FinitePoset.p_partition_enumerator
Failed example:
FP = P.p_partition_enumerator((3,1,2,4), QQ, check=True); FP
Exception raised:
Traceback (most recent call last):
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/doctest/forker.py", line 466, in _run
self.execute(example, compiled, test.globs)
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/doctest/forker.py", line 825, in execute
exec compiled in globs
File "<doctest sage.combinat.posets.posets.FinitePoset.p_partition_enumerator[3]>", line 1, in <module>
FP = P.p_partition_enumerator((Integer(3),Integer(1),Integer(2),Integer(4)), QQ, check=True); FP
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/combinat/posets/posets.py", line 3288, in p_partition_enumerator
QR = QuasiSymmetricFunctions(R)
File "classcall_metaclass.pyx", line 330, in sage.misc.classcall_metaclass.ClasscallMetaclass.__call__ (sage/misc/classcall_metaclass.c:977)
File "cachefunc.pyx", line 992, in sage.misc.cachefunc.WeakCachedFunction.__call__ (sage/misc/cachefunc.c:5175)
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/structure/unique_representation.py", line 447, in __classcall__
instance = typecall(cls, *args, **options)
File "classcall_metaclass.pyx", line 518, in sage.misc.classcall_metaclass.typecall (sage/misc/classcall_metaclass.c:1339)
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/combinat/ncsf_qsym/qsym.py", line 427, in __init__
Parent.__init__(self, category = category.WithRealizations())
File "parent.pyx", line 339, in sage.structure.parent.Parent.__init__ (sage/structure/parent.c:4095)
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/categories/algebras.py", line 159, in __init_extra__
one = self.one()
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/categories/monoids.py", line 270, in one
return self.a_realization().one()
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/combinat/ncsf_qsym/qsym.py", line 480, in a_realization
return self.Monomial()
File "classcall_metaclass.pyx", line 429, in sage.misc.classcall_metaclass.ClasscallMetaclass.__get__ (sage/misc/classcall_metaclass.c:1106)
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/misc/bindable_class.py", line 152, in __classget__
return BoundClass(cls, instance)
File "/home/travis/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/misc/bindable_class.py", line 201, in __init__
super(BoundClass, self).__init__(*args)
DeprecationWarning: object.__init__() takes no parameters
```

It seems like the `BoundClass` (of `Monomial`) is calling up to the base `object` and at this point I don't understand why.

### comment:18 Changed 8 years ago by strogdon

There seems to be one other place in Sage where `QuasiSymmetricFunctions()` is called in the same manner as in p_partition_enumerator - in devel/sage/sage/combinat/dyck_word.py where when doctesting there is no apparent `DeprecationWarning`. However, after converting warnings to exceptions I get the following backtrace:

```File "devel/sage/sage/combinat/dyck_word.py", line 1542, in sage.combinat.dyck_word.DyckWord_complete.characteristic_symmetric_function
Failed example:
f = sum(t**D.area()*D.characteristic_symmetric_function() for D in DyckWords(3)); f
Exception raised:
Traceback (most recent call last):
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/doctest/forker.py", line 466, in _run
self.execute(example, compiled, test.globs)
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/doctest/forker.py", line 825, in execute
exec compiled in globs
File "<doctest sage.combinat.dyck_word.DyckWord_complete.characteristic_symmetric_function[2]>", line 1, in <module>
f = sum(t**D.area()*D.characteristic_symmetric_function() for D in DyckWords(Integer(3))); f
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/misc/functional.py", line 656, in symbolic_sum
return sum(expression, *args)
File "<doctest sage.combinat.dyck_word.DyckWord_complete.characteristic_symmetric_function[2]>", line 1, in <genexpr>
f = sum(t**D.area()*D.characteristic_symmetric_function() for D in DyckWords(Integer(3))); f
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/combinat/dyck_word.py", line 1556, in characteristic_symmetric_function
F = QuasiSymmetricFunctions(R).Fundamental()
File "classcall_metaclass.pyx", line 279, in sage.misc.classcall_metaclass.ClasscallMetaclass.__call__ (sage/misc/classcall_metaclass.c:932)
File "cachefunc.pyx", line 992, in sage.misc.cachefunc.WeakCachedFunction.__call__ (sage/misc/cachefunc.c:5175)
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/structure/unique_representation.py", line 447, in __classcall__
instance = typecall(cls, *args, **options)
File "classcall_metaclass.pyx", line 467, in sage.misc.classcall_metaclass.typecall (sage/misc/classcall_metaclass.c:1294)
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/combinat/ncsf_qsym/qsym.py", line 427, in __init__
Parent.__init__(self, category = category.WithRealizations())
File "parent.pyx", line 339, in sage.structure.parent.Parent.__init__ (sage/structure/parent.c:4095)
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/categories/algebras.py", line 159, in __init_extra__
one = self.one()
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/categories/monoids.py", line 270, in one
return self.a_realization().one()
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/combinat/ncsf_qsym/qsym.py", line 480, in a_realization
return self.Monomial()
File "classcall_metaclass.pyx", line 378, in sage.misc.classcall_metaclass.ClasscallMetaclass.__get__ (sage/misc/classcall_metaclass.c:1061)
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/misc/bindable_class.py", line 152, in __classget__
return BoundClass(cls, instance)
File "/storage/sage/sage-5.9.beta5/local/lib/python2.7/site-packages/sage/misc/bindable_class.py", line 201, in __init__
super(BoundClass, self).__init__(*args)
DeprecationWarning: object.__init__() takes no parameters
```

This looks very much like the above backtrace, but of course the `DeprecationWarning` does not present itself under norm doctesting. So something very subtle must be happening.

### comment:19 Changed 8 years ago by nthiery

For the records, here is where the warning comes from. The BindableClass? things uses a class BoundClass? that inherit from functools.partial. And there seems to be an issue there:

```    sage: import warnings
sage: warnings.simplefilter('error', DeprecationWarning)
sage: import functools
sage: def f(x): return x
sage: g = functools.partial(f,1)
sage: g()
1
sage: class mypartial(functools.partial):
....:     def __init__(self, f, i):
....:         functools.partial.__init__(self, f,i)
sage: g = mypartial(f,1)
Traceback (most recent call last)
...
----> 3                 functools.partial.__init__(self, f,i)
DeprecationWarning: object.__init__() takes no parameters
sage: g()
1
```

### comment:20 Changed 8 years ago by strogdon

This is somewhat non-intuitive but the following seems to work

```sage: import warnings
sage: warnings.simplefilter('error', DeprecationWarning)
sage: import functools
sage: def f(x, y): return x^y
sage: g = functools.partial(f, 2, 3)
sage: g()
8
sage: class mypartial(functools.partial):
....:     def __init__(self, f, i, j):
....:         functools.partial.__init__(self)
....:
sage: g = mypartial(f, 2, 3)
sage: g()
8
```

or

```sage: class mynewpartial(functools.partial):
....:     def __init__(self, f, i, j):
....:         super(mynewpartial, self).__init__()
....:
sage: g = mynewpartial(f, 2, 3)
sage: g()
8
```

This perhaps suggests the `__init__` method of the `BoundClass` should be

```    def __init__(self, *args):
super(BoundClass, self).__init__()
self.__doc__ = self.func.__doc__
```

```        super(BoundClass, self).__init__(*args)
```

I don't know whether this breaks anything?

### comment:21 follow-up: ↓ 22 Changed 8 years ago by chapoton

maybe this should be tried and solved in another ticket ? the purpose of the present one is only to introduce something new related to posets and quasi-symmetric functions ?

### comment:22 in reply to: ↑ 21 Changed 8 years ago by strogdon

maybe this should be tried and solved in another ticket ? the purpose of the present one is only to introduce something new related to posets and quasi-symmetric functions ?

You're right. This is now ticket #14748

### comment:23 Changed 8 years ago by tscrim

• Authors changed from darij to Darij Grinberg
• Dependencies set to #14748
• Reviewers set to Frederic Chapoton, Travis Scrimshaw
• Status changed from needs_info to needs_review

Since the problem has been isolated to #14748 (I've added it as a dependency), I'm thinking we should set this to positive review. Any objections?

### comment:24 Changed 8 years ago by darij

• Description modified (diff)

### comment:25 Changed 8 years ago by chapoton

• Description modified (diff)

the review patch introduces a typo "parition", that needs to be corrected

### comment:26 Changed 8 years ago by darij

• Description modified (diff)

### Changed 8 years ago by darij

folded with Travis's review

### comment:27 Changed 8 years ago by chapoton

it was not necessary to fold. The typo is still there

### comment:28 Changed 8 years ago by darij

Chapoton: thanks, done (edited the folded version).

### comment:29 Changed 8 years ago by tscrim

• Milestone changed from sage-5.11 to sage-pending
• Status changed from needs_review to positive_review

I don't see the typo in the folded patch, so I'm going to set this to positive review.

Apply: trac_14136-p_partition_enumerator_folded.patch

### comment:31 Changed 8 years ago by darij

Frédéric and Travis: thank you!

### comment:32 Changed 8 years ago by jdemeyer

• Milestone changed from sage-pending to sage-5.12

### comment:33 Changed 8 years ago by jdemeyer

• Merged in set to sage-5.12.beta2
• Resolution set to fixed
• Status changed from positive_review to closed

### comment:34 Changed 4 years ago by chapoton

• Reviewers changed from Frederic Chapoton, Travis Scrimshaw to Frédéric Chapoton, Travis Scrimshaw

missing accents

Note: See TracTickets for help on using tickets.