def _multiply_basis( self, left, right ): # TODO: factor out this code for all bases (as is done for coercions) """ Returns the product of ``left`` and ``right``. INPUT: - ``self`` -- a Schur symmetric function basis - ``left``, ``right`` -- partitions OUPUT: - an element of the Schur basis, the product of ``left`` and ``right`` TESTS:: sage: s = SymmetricFunctions(QQ).s() sage: a = s([2,1]) + 1; a s[] + s[2, 1] sage: a^2 # indirect doctest s[] + 2*s[2, 1] + s[2, 2, 1, 1] + s[2, 2, 2] + s[3, 1, 1, 1] + 2*s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2] Examples failing with three different messages in symmetrica:: sage: s[123,1]*s[1,1] s[123, 1, 1, 1] + s[123, 2, 1] + s[124, 1, 1] + s[124, 2] sage: s[123]*s[2,1] s[123, 2, 1] + s[124, 1, 1] + s[124, 2] + s[125, 1] sage: s[125]*s[3] s[125, 3] + s[126, 2] + s[127, 1] + s[128] :: sage: QQx.<x> = QQ[] sage: s = SymmetricFunctions(QQx).s() sage: a = x^2*s([2,1]) + 2*x; a 2*x*s[] + x^2*s[2, 1] sage: a^2 4*x^2*s[] + 4*x^3*s[2, 1] + x^4*s[2, 2, 1, 1] + x^4*s[2, 2, 2] + x^4*s[3, 1, 1, 1] + 2*x^4*s[3, 2, 1] + x^4*s[3, 3] + x^4*s[4, 1, 1] + x^4*s[4, 2] :: sage: 0*s([2,1]) 0 """ import sage.libs.lrcalc.lrcalc as lrcalc return lrcalc.mult(left, right)
def _multiply_basis(self, left, right): # TODO: factor out this code for all bases (as is done for coercions) """ Returns the product of ``left`` and ``right``. INPUT: - ``self`` -- a Schur symmetric function basis - ``left``, ``right`` -- partitions OUPUT: - an element of the Schur basis, the product of ``left`` and ``right`` TESTS:: sage: s = SymmetricFunctions(QQ).s() sage: a = s([2,1]) + 1; a s[] + s[2, 1] sage: a^2 # indirect doctest s[] + 2*s[2, 1] + s[2, 2, 1, 1] + s[2, 2, 2] + s[3, 1, 1, 1] + 2*s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2] Examples failing with three different messages in symmetrica:: sage: s[123,1]*s[1,1] s[123, 1, 1, 1] + s[123, 2, 1] + s[124, 1, 1] + s[124, 2] sage: s[123]*s[2,1] s[123, 2, 1] + s[124, 1, 1] + s[124, 2] + s[125, 1] sage: s[125]*s[3] s[125, 3] + s[126, 2] + s[127, 1] + s[128] :: sage: QQx.<x> = QQ[] sage: s = SymmetricFunctions(QQx).s() sage: a = x^2*s([2,1]) + 2*x; a 2*x*s[] + x^2*s[2, 1] sage: a^2 4*x^2*s[] + 4*x^3*s[2, 1] + x^4*s[2, 2, 1, 1] + x^4*s[2, 2, 2] + x^4*s[3, 1, 1, 1] + 2*x^4*s[3, 2, 1] + x^4*s[3, 3] + x^4*s[4, 1, 1] + x^4*s[4, 2] :: sage: 0*s([2,1]) 0 """ import sage.libs.lrcalc.lrcalc as lrcalc return lrcalc.mult(left, right)
def product_on_basis(self, left, right): """ Return the product of ``left`` and ``right``. INPUT: - ``self`` -- a Schur symmetric function basis - ``left``, ``right`` -- partitions OUTPUT: - an element of the Schur basis, the product of ``left`` and ``right`` TESTS:: sage: s = SymmetricFunctions(QQ).s() sage: a = s([2,1]) + 1; a s[] + s[2, 1] sage: a^2 # indirect doctest s[] + 2*s[2, 1] + s[2, 2, 1, 1] + s[2, 2, 2] + s[3, 1, 1, 1] + 2*s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2] Examples failing with three different messages in symmetrica:: sage: s[123,1]*s[1,1] s[123, 1, 1, 1] + s[123, 2, 1] + s[124, 1, 1] + s[124, 2] sage: s[123]*s[2,1] s[123, 2, 1] + s[124, 1, 1] + s[124, 2] + s[125, 1] sage: s[125]*s[3] s[125, 3] + s[126, 2] + s[127, 1] + s[128] :: sage: QQx.<x> = QQ[] sage: s = SymmetricFunctions(QQx).s() sage: a = x^2*s([2,1]) + 2*x; a 2*x*s[] + x^2*s[2, 1] sage: a^2 4*x^2*s[] + 4*x^3*s[2, 1] + x^4*s[2, 2, 1, 1] + x^4*s[2, 2, 2] + x^4*s[3, 1, 1, 1] + 2*x^4*s[3, 2, 1] + x^4*s[3, 3] + x^4*s[4, 1, 1] + x^4*s[4, 2] :: sage: 0*s([2,1]) 0 """ return self._from_dict(lrcalc.mult(left, right))