diff options
Diffstat (limited to 'sagemath-lrcalc2.patch')
-rw-r--r-- | sagemath-lrcalc2.patch | 685 |
1 files changed, 0 insertions, 685 deletions
diff --git a/sagemath-lrcalc2.patch b/sagemath-lrcalc2.patch deleted file mode 100644 index 47e06450608d..000000000000 --- a/sagemath-lrcalc2.patch +++ /dev/null @@ -1,685 +0,0 @@ -diff --git a/build/pkgs/lrcalc/checksums.ini b/build/pkgs/lrcalc/checksums.ini -index 7a0e6a1b96..8b8620ba52 100644 ---- a/build/pkgs/lrcalc/checksums.ini -+++ b/build/pkgs/lrcalc/checksums.ini -@@ -1,4 +1,5 @@ --tarball=lrcalc-VERSION.tar.gz --sha1=89c288875bc3e3e2919876cb645bdfd7316b5965 --md5=6bba16c0cca9debccd0af847bd3d4a23 --cksum=3738483656 -+tarball=liblrcalc-VERSION.tar.gz -+sha1=2a98661eb39c7ef526c932f7886fc3142fd639ab -+md5=7cfa8f67287f2b70a15a833b94bc24b6 -+cksum=2250996027 -+upstream_url=https://sites.math.rutgers.edu/~asbuch/lrcalc/lrcalc-VERSION.tar.gz -diff --git a/build/pkgs/lrcalc/package-version.txt b/build/pkgs/lrcalc/package-version.txt -index 92ab3427e8..879b416e60 100644 ---- a/build/pkgs/lrcalc/package-version.txt -+++ b/build/pkgs/lrcalc/package-version.txt -@@ -1 +1 @@ --1.2.p1 -+2.1 -diff --git a/build/pkgs/lrcalc/patches/includes.patch b/build/pkgs/lrcalc/patches/includes.patch -deleted file mode 100644 -index 707da176a6..0000000000 ---- a/build/pkgs/lrcalc/patches/includes.patch -+++ /dev/null -@@ -1,90 +0,0 @@ --From 4a5e1c8c3c11efdb1cbb4239825a6bf4bf1c52f8 Mon Sep 17 00:00:00 2001 --From: Anders Skovsted Buch <asbuch@math.rutgers.edu> --Date: Sun, 29 Nov 2015 16:25:56 -0500 --Subject: [PATCH] Patch by Jeroen Demeyer to change include <vector.h> to -- "vector.h", plus similar cases. -- ----- -- src/lrcalc.c | 2 +- -- src/maple.c | 4 ++-- -- src/schublib.h | 2 +- -- src/symfcn.c | 6 +++--- -- src/symfcn.h | 4 ++-- -- 5 files changed, 9 insertions(+), 9 deletions(-) -- --diff --git a/src/lrcalc.c b/src/lrcalc.c --index aff3f75..60df49e 100644 ----- a/src/lrcalc.c --+++ b/src/lrcalc.c --@@ -8,7 +8,7 @@ -- #include <stdlib.h> -- extern char *optarg; -- ---#include <vectarg.h> --+#include "vectarg.h" -- -- #include "symfcn.h" -- #include "maple.h" --diff --git a/src/maple.c b/src/maple.c --index fdc0768..a5f4d14 100644 ----- a/src/maple.c --+++ b/src/maple.c --@@ -4,8 +4,8 @@ -- */ -- -- #include <stdio.h> ---#include <vector.h> ---#include <hashtab.h> --+#include "vector.h" --+#include "hashtab.h" -- #include "maple.h" -- -- --diff --git a/src/schublib.h b/src/schublib.h --index a8e8511..864850c 100644 ----- a/src/schublib.h --+++ b/src/schublib.h --@@ -1,7 +1,7 @@ -- #ifndef _SCHUBLIB_H -- #define _SCHUBLIB_H -- ---#include <hashtab.h> --+#include "hashtab.h" -- -- hashtab *trans(vector *w, int vars, hashtab *res); -- hashtab *monk(int i, hashtab *slc, int rank); --diff --git a/src/symfcn.c b/src/symfcn.c --index 4ffbe4b..fd5df5d 100644 ----- a/src/symfcn.c --+++ b/src/symfcn.c --@@ -5,9 +5,9 @@ -- -- #include <stdio.h> -- ---#include <alloc.h> ---#include <vector.h> ---#include <hashtab.h> --+#include "alloc.h" --+#include "vector.h" --+#include "hashtab.h" -- -- #include "symfcn.h" -- --diff --git a/src/symfcn.h b/src/symfcn.h --index b8543b1..29bb00d 100644 ----- a/src/symfcn.h --+++ b/src/symfcn.h --@@ -1,8 +1,8 @@ -- #ifndef _SYMFCN_H -- #define _SYMFCN_H -- ---#include <hashtab.h> ---#include <vector.h> --+#include "hashtab.h" --+#include "vector.h" -- -- int part_itr_sz(vector *part); -- int part_itr_sub(vector *part, vector *outer); ---- --2.1.1.1.g1fb337f -- -diff --git a/build/pkgs/lrcalc/spkg-configure.m4 b/build/pkgs/lrcalc/spkg-configure.m4 -index f2f8b74f8f..b8171ce23f 100644 ---- a/build/pkgs/lrcalc/spkg-configure.m4 -+++ b/build/pkgs/lrcalc/spkg-configure.m4 -@@ -1,9 +1,10 @@ - SAGE_SPKG_CONFIGURE([lrcalc], [ -- AC_CHECK_HEADERS([lrcalc/schublib.h], [ -+ AC_LANG_PUSH([C]) -+ AC_CHECK_HEADERS([lrcalc/schublib.h] [lrcalc/lrcoef.h], [ - AC_SEARCH_LIBS([mult_poly_schubert], [lrcalc], [], [sage_spkg_install_lrcalc=yes]) - ], [sage_spkg_install_lrcalc=yes], -- [[#ifndef _HASHTAB_H -- #include <lrcalc/hashtab.h> -- #include <lrcalc/vector.h> -+ [[#ifndef _IVECTOR_H -+ #include <lrcalc/ivector.h> - #endif]]) -+ AC_LANG_POP - ]) -diff --git a/build/pkgs/lrcalc/spkg-install.in b/build/pkgs/lrcalc/spkg-install.in -index d6665bfb42..a863950189 100644 ---- a/build/pkgs/lrcalc/spkg-install.in -+++ b/build/pkgs/lrcalc/spkg-install.in -@@ -1,9 +1,5 @@ - cd src - --# Use newer version of config.guess and config.sub (see Trac #19725) --cp "$SAGE_ROOT"/config/config.guess . --cp "$SAGE_ROOT"/config/config.sub . -- - sdh_configure - sdh_make - sdh_make_install -diff --git a/build/pkgs/lrcalc_python/SPKG.rst b/build/pkgs/lrcalc_python/SPKG.rst -new file mode 100644 -index 0000000000..3a98d556ca ---- /dev/null -+++ b/build/pkgs/lrcalc_python/SPKG.rst -@@ -0,0 +1,22 @@ -+lrcalc_python: Littlewood-Richardson calculator -+=============================================== -+ -+Description -+----------- -+ -+Python bindings for the Littlewood-Richardson Calculator -+ -+http://sites.math.rutgers.edu/~asbuch/lrcalc/ -+ -+License -+------- -+ -+GNU General Public License V3 -+ -+ -+Upstream Contact -+---------------- -+ -+Anders S. Buch (asbuch@math.rutgers.edu) -+ -+https://bitbucket.org/asbuch/lrcalc -diff --git a/build/pkgs/lrcalc_python/checksums.ini b/build/pkgs/lrcalc_python/checksums.ini -new file mode 100644 -index 0000000000..bdfef8711e ---- /dev/null -+++ b/build/pkgs/lrcalc_python/checksums.ini -@@ -0,0 +1,5 @@ -+tarball=lrcalc-VERSION.tar.gz -+sha1=3e9366d9e8b8beccec70b07d174b8f6683c01574 -+md5=4ae444d12ed8e0dd770594ea3ef4a208 -+cksum=2741305196 -+upstream_url=https://pypi.io/packages/source/l/lrcalc/lrcalc-VERSION.tar.gz -diff --git a/build/pkgs/lrcalc_python/dependencies b/build/pkgs/lrcalc_python/dependencies -new file mode 100644 -index 0000000000..63e5177ae0 ---- /dev/null -+++ b/build/pkgs/lrcalc_python/dependencies -@@ -0,0 +1,5 @@ -+$(PYTHON) lrcalc | $(PYTHON_TOOLCHAIN) cython -+ -+---------- -+All lines of this file are ignored except the first. -+It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile. -diff --git a/build/pkgs/lrcalc_python/install-requires.txt b/build/pkgs/lrcalc_python/install-requires.txt -new file mode 100644 -index 0000000000..8b44d97f4b ---- /dev/null -+++ b/build/pkgs/lrcalc_python/install-requires.txt -@@ -0,0 +1 @@ -+lrcalc ~=2.1 -diff --git a/build/pkgs/lrcalc_python/package-version.txt b/build/pkgs/lrcalc_python/package-version.txt -new file mode 100644 -index 0000000000..879b416e60 ---- /dev/null -+++ b/build/pkgs/lrcalc_python/package-version.txt -@@ -0,0 +1 @@ -+2.1 -diff --git a/build/pkgs/lrcalc_python/spkg-install.in b/build/pkgs/lrcalc_python/spkg-install.in -new file mode 100644 -index 0000000000..deba1bb42b ---- /dev/null -+++ b/build/pkgs/lrcalc_python/spkg-install.in -@@ -0,0 +1 @@ -+cd src && sdh_pip_install . -diff --git a/build/pkgs/lrcalc_python/type b/build/pkgs/lrcalc_python/type -new file mode 100644 -index 0000000000..a6a7b9cd72 ---- /dev/null -+++ b/build/pkgs/lrcalc_python/type -@@ -0,0 +1 @@ -+standard -diff --git a/build/pkgs/sagelib/dependencies b/build/pkgs/sagelib/dependencies -index 9c7797b1f4..3369d4d905 100644 ---- a/build/pkgs/sagelib/dependencies -+++ b/build/pkgs/sagelib/dependencies -@@ -1,4 +1,4 @@ --FORCE $(SCRIPTS) arb boost_cropped $(BLAS) brial cliquer cypari cysignals cython ecl eclib ecm flint libgd gap giac givaro glpk gmpy2 gsl iml jinja2 jupyter_core lcalc lrcalc libbraiding libhomfly libpng linbox m4ri m4rie memory_allocator mpc mpfi mpfr $(MP_LIBRARY) ntl numpy pari pip pkgconfig planarity ppl pplpy primesieve primecount primecountpy pycygwin $(PYTHON) ratpoints requests rw sage_conf singular symmetrica zn_poly $(PCFILES) | $(PYTHON_TOOLCHAIN) sage_setup -+FORCE $(SCRIPTS) arb boost_cropped $(BLAS) brial cliquer cypari cysignals cython ecl eclib ecm flint libgd gap giac givaro glpk gmpy2 gsl iml jinja2 jupyter_core lcalc lrcalc_python libbraiding libhomfly libpng linbox m4ri m4rie memory_allocator mpc mpfi mpfr $(MP_LIBRARY) ntl numpy pari pip pkgconfig planarity ppl pplpy primesieve primecount primecountpy pycygwin $(PYTHON) ratpoints requests rw sage_conf singular symmetrica zn_poly $(PCFILES) | $(PYTHON_TOOLCHAIN) sage_setup - - ---------- - All lines of this file are ignored except the first. -diff --git a/src/sage/libs/lrcalc/lrcalc.pxd b/src/sage/libs/lrcalc/lrcalc.pxd -deleted file mode 100644 -index 10b88db93f..0000000000 ---- a/src/sage/libs/lrcalc/lrcalc.pxd -+++ /dev/null -@@ -1,77 +0,0 @@ --# distutils: libraries = lrcalc -- --cdef extern from "lrcalc/hashtab.h": -- ctypedef struct hashtab: -- pass -- -- ctypedef struct hash_itr: -- pass -- -- ctypedef unsigned long hashkey_t -- ctypedef int (*cmp_t) (void* a, void* b) -- ctypedef hashkey_t (*hash_t) (void* a) -- -- hashtab* hash_new(cmp_t cm, hash_t hsh) -- void hash_free(hashtab *ht) -- -- void* hash_lookup(hashtab *ht, void *key) -- void* hash_insert(hashtab *ht, void *key, void *value) -- -- bint hash_good(hash_itr) -- void hash_first(hashtab* s, hash_itr itr) -- void hash_next(hash_itr itr) -- void* hash_key(hash_itr itr) -- void* hash_value(hash_itr itr) -- int hash_intvalue(hash_itr itr) -- --cdef extern from "lrcalc/vector.h": -- ctypedef struct vector: -- size_t length -- int* array -- -- vector* v_new(int length) -- void v_free(vector* v) -- void v_print(vector *v) -- int v_length(vector* v) -- int v_elem(vector* v, int i) -- -- ctypedef struct vecpair: -- vector *first -- vector *second -- -- vector* vp_first(vecpair* vp) -- vector* vp_second(vecpair* vp) -- --cdef extern from "lrcalc/list.h": -- cdef struct _list: -- void **array -- size_t allocated -- size_t length -- void l_free(_list *lst) -- --cdef extern from "lrcalc/symfcn.h": -- long long lrcoef_c "lrcoef"(vector* outer, vector* inner1, vector* inner2) -- hashtab* mult_c "mult"(vector *sh1, vector *sh2, int maxrows) -- hashtab* skew_c "skew"(vector *outer, vector *inner, int maxrows) -- hashtab* coprod_c "coprod"(vector *part, int all) -- void fusion_reduce_c "fusion_reduce"(hashtab* ht, int rows, int cols, int opt_zero) -- _list *quantum_reduce_c "quantum_reduce"(hashtab* ht, int rows, int col) -- -- ctypedef struct skewtab: -- vector *outer -- vector *inner -- vector *conts -- int maxrows -- vector *conjugate -- int rows -- int cols -- int matrix[1] -- -- skewtab *st_new(vector *outer, vector *inner, vector *conts, int maxrows) -- int st_next(skewtab *st) -- void st_print(skewtab *st) -- void st_free(skewtab *st) -- -- --cdef extern from "lrcalc/schublib.h": -- hashtab* mult_schubert_c "mult_schubert"(vector *sh1, vector *sh2, int rank) -diff --git a/src/sage/libs/lrcalc/lrcalc.pyx b/src/sage/libs/lrcalc/lrcalc.py -similarity index 65% -rename from src/sage/libs/lrcalc/lrcalc.pyx -rename to src/sage/libs/lrcalc/lrcalc.py -index b591081ec4..65db959944 100644 ---- a/src/sage/libs/lrcalc/lrcalc.pyx -+++ b/src/sage/libs/lrcalc/lrcalc.py -@@ -187,180 +187,24 @@ AUTHORS: - # https://www.gnu.org/licenses/ - # **************************************************************************** - --from sage.rings.integer cimport Integer --from sage.structure.parent cimport Parent - from sage.combinat.partition import _Partitions - from sage.combinat.permutation import Permutation --from sage.combinat.skew_tableau import SkewTableau -+from sage.combinat.skew_tableau import SkewTableaux -+from sage.combinat.skew_partition import SkewPartition -+from sage.rings.integer import Integer -+import lrcalc - -- --cdef vector* iterable_to_vector(it): -- """ -- Return an lrcalc vector (which is a list of integers) from a Python iterable. -- -- TESTS:: -- -- sage: from sage.libs.lrcalc.lrcalc import test_iterable_to_vector -- sage: x = test_iterable_to_vector(Partition([3,2,1])); x #indirect doctest -- [3, 2, 1] -- """ -- cdef vector* v -- cdef list itr = list(it) -- cdef int n = len(itr) -- cdef int i -- v = v_new(n) -- for i in range(n): -- v.array[i] = int(itr[i]) -- return v -- -- --cdef list vector_to_list(vector *v): -- """ -- Converts a lrcalc vector to Python list. -- -- TESTS:: -- -- sage: from sage.libs.lrcalc.lrcalc import test_iterable_to_vector -- sage: x = test_iterable_to_vector([]); x #indirect doctest -- [] -- """ -- cdef int i, n -- n = v_length(v) -- cdef list result = [None]*n -- for i in range(n): -- result[i] = Integer(v_elem(v, i)) -- return result -- -- --def test_iterable_to_vector(it): -- """ -- A wrapper function for the cdef function ``iterable_to_vector`` -- and ``vector_to_list``, to test that they are working correctly. -- -- EXAMPLES:: -- -- sage: from sage.libs.lrcalc.lrcalc import test_iterable_to_vector -- sage: x = test_iterable_to_vector([3,2,1]); x -- [3, 2, 1] -- """ -- cdef vector *v = iterable_to_vector(it) -- result = vector_to_list(v) -- v_free(v) -- return result -- -- --cdef skewtab_to_SkewTableau(skewtab *st): -- """ -- A wrapper function which transforms the data set ``st`` used in -- ``lrcalc`` to a ``SkewTableau`` in Sage. -+def _lrcalc_dict_to_sage(result): -+ r""" -+ Translate from lrcalc output format to Sage expected format. - - TESTS:: - -- sage: from sage.libs.lrcalc.lrcalc import test_skewtab_to_SkewTableau -- sage: test_skewtab_to_SkewTableau([],[]) -- [] -- """ -- inner = vector_to_list(st.inner) -- outer = vector_to_list(st.outer) -- return SkewTableau(expr=[[inner[y] for y in range(len(outer))], -- [[st.matrix[x + y * st.cols] + 1 -- for x in range(inner[y], outer[y])] -- for y in range(len(outer) - 1, -1, -1)]]) -- -- --def test_skewtab_to_SkewTableau(outer, inner): -- """ -- A wrapper function for the cdef function ``skewtab_to_SkewTableau`` -- for testing purposes. -- -- It constructs the first LR skew tableau of shape ``outer/inner`` -- as an ``lrcalc`` ``skewtab``, and converts it to a -- :class:`SkewTableau`. -- -- EXAMPLES:: -- -- sage: from sage.libs.lrcalc.lrcalc import test_skewtab_to_SkewTableau -- sage: test_skewtab_to_SkewTableau([3,2,1],[]) -- [[1, 1, 1], [2, 2], [3]] -- sage: test_skewtab_to_SkewTableau([4,3,2,1],[1,1]).pp() -- . 1 1 1 -- . 2 2 -- 1 3 -- 2 -- """ -- cdef vector* o = iterable_to_vector(outer) -- cdef vector* i = iterable_to_vector(inner+[0]*(len(outer)-len(inner))) -- cdef skewtab* st = st_new(o, i, NULL, 0) -- return skewtab_to_SkewTableau(st) -- -- --cdef dict sf_hashtab_to_dict(hashtab *ht): -- """ -- Return a dictionary representing a Schur function. The keys are -- partitions and the values are integers <class 'sage.rings.integer.Integer'>. -- -- EXAMPLES:: -- - sage: from sage.libs.lrcalc.lrcalc import mult -- sage: sorted(mult([1],[1]).items()) #indirect doctest -- [([1, 1], 1), ([2], 1)] -- sage: assert isinstance(mult([1],[1]),dict)#indirect doctest -- """ -- cdef hash_itr itr -- cdef dict result = {} -- cdef list p -- hash_first(ht, itr) -- while hash_good(itr): -- p = vector_to_list(<vector*> hash_key(itr)) -- result[_Partitions(p)] = Integer(hash_intvalue(itr)) -- hash_next(itr) -- return result -- -- --cdef dict schubert_hashtab_to_dict(hashtab *ht): -- """ -- Return a dictionary corresponding to a Schubert polynomial whose keys -- are permutations and whose values are integers <class 'sage.rings.integer.Integer'>. -- -- EXAMPLES:: -- -- sage: from sage.libs.lrcalc.lrcalc import mult_schubert -- sage: mult_schubert([3,2,1], [1,2,3]) #indirect doctest -- {[3, 2, 1]: 1} -- """ -- cdef hash_itr itr -- cdef dict result = {} -- hash_first(ht, itr) -- while hash_good(itr): -- p = vector_to_list(<vector*> hash_key(itr)) -- result[Permutation(p)] = Integer(hash_intvalue(itr)) -- hash_next(itr) -- return result -- -- --cdef dict vp_hashtab_to_dict(hashtab *ht): -- """ -- Return a dictionary corresponding to the coproduct of a Schur function whose keys are -- pairs of partitions and whose values are integers <class 'sage.rings.integer.Integer'>. -- -- EXAMPLES:: -- -- sage: from sage.libs.lrcalc.lrcalc import coprod -- sage: coprod([1]) #indirect doctest -- {([1], []): 1} -+ sage: mult([2,1],[3,2,1],3) # indirect doctest -+ {[3, 3, 3]: 1, [4, 3, 2]: 2, [4, 4, 1]: 1, [5, 2, 2]: 1, [5, 3, 1]: 1} - """ -- cdef hash_itr itr -- cdef vecpair* vp -- cdef dict result = {} -- hash_first(ht, itr) -- while hash_good(itr): -- vp = <vecpair*> hash_key(itr) -- p1 = _Partitions(vector_to_list(vp_first(vp))) -- p2 = _Partitions(vector_to_list(vp_second(vp))) -- result[(p1, p2)] = Integer(hash_intvalue(itr)) -- hash_next(itr) -- return result -- -+ return {_Partitions(la):Integer(k) for la,k in result.items()} - - def lrcoef_unsafe(outer, inner1, inner2): - r""" -@@ -392,18 +236,7 @@ def lrcoef_unsafe(outer, inner1, inner2): - sage: lrcoef_unsafe([2,1,1,1,1], [2,1], [2,1]) - 0 - """ -- cdef long long result -- cdef vector *o -- cdef vector *i1 -- cdef vector *i2 -- o = iterable_to_vector(outer) -- i1 = iterable_to_vector(inner1) -- i2 = iterable_to_vector(inner2) -- result = lrcoef_c(o, i1, i2) -- v_free(o) -- v_free(i1) -- v_free(i2) -- return Integer(result) -+ return Integer(lrcalc.lrcoef(outer, inner1, inner2)) - - - def lrcoef(outer, inner1, inner2): -@@ -510,44 +343,24 @@ def mult(part1, part2, maxrows=None, level=None, quantum=None): - if quantum is not None and (level is None or maxrows is None): - raise ValueError('missing parameters maxrows or level') - -- cdef vector* v1 = iterable_to_vector(part1) -- cdef vector* v2 = iterable_to_vector(part2) -- if maxrows is None: -- maxrows = 0 -- cdef hashtab* ht = mult_c(v1, v2, int(maxrows)) -- cdef hashtab* tab -- cdef dict result -- - if quantum is None: - if level is not None: -- fusion_reduce_c(ht, int(maxrows), int(level), int(0)) -- result = sf_hashtab_to_dict(ht) -- v_free(v1) -- v_free(v2) -- hash_free(ht) -- return result -+ return _lrcalc_dict_to_sage(lrcalc.mult_fusion(part1, part2, maxrows, level)) -+ if maxrows is None: -+ maxrows = -1 -+ return _lrcalc_dict_to_sage(lrcalc.mult(part1, part2, maxrows)) - - # Otherwise do quantum multiplication -- cdef _list *qlist -- cdef dict temp -- qlist = quantum_reduce_c(ht, int(maxrows), int(level)) -- # The above call frees the memory associated with ht -- v_free(v1) -- v_free(v2) -- -- cdef Parent P = quantum.parent() -- result = {} -- for i in range(qlist.length): -- tab = <hashtab*>(qlist.array[i]) -- temp = sf_hashtab_to_dict(tab) -- for k in temp: -- result[k] = result.get(k, P.zero()) + quantum**i * temp[k] -- hash_free(tab) -- l_free(qlist) -- return result -- -- --def skew(outer, inner, maxrows=0): -+ result = lrcalc.mult_quantum(part1, part2, maxrows, level, degrees=True) -+ P = quantum.parent() -+ output = {} -+ for i,k in result.items(): -+ la = _Partitions(i[0]) -+ output[la] = output.get(la, P.zero()) + k*quantum**(i[1]) -+ return output -+ -+ -+def skew(outer, inner, maxrows=-1): - """ - Compute the Schur expansion of a skew Schur function. - -@@ -572,14 +385,7 @@ def skew(outer, inner, maxrows=0): - sage: sorted(skew([2,1],[1]).items()) - [([1, 1], 1), ([2], 1)] - """ -- cdef vector* v1 = iterable_to_vector(outer) -- cdef vector* v2 = iterable_to_vector(inner) -- cdef hashtab* ht = skew_c(v1, v2, int(maxrows)) -- result = sf_hashtab_to_dict(ht) -- v_free(v1) -- v_free(v2) -- hash_free(ht) -- return result -+ return _lrcalc_dict_to_sage(lrcalc.skew(outer, inner, maxrows)) - - - def coprod(part, all=0): -@@ -609,12 +415,8 @@ def coprod(part, all=0): - sage: sorted(coprod([2,1]).items()) - [(([1, 1], [1]), 1), (([2], [1]), 1), (([2, 1], []), 1)] - """ -- cdef vector* v1 = iterable_to_vector(part) -- cdef hashtab* ht = coprod_c(v1, int(all)) -- result = vp_hashtab_to_dict(ht) -- v_free(v1) -- hash_free(ht) -- return result -+ result = lrcalc.coprod(part, all) -+ return {tuple(_Partitions(mu) for mu in la):Integer(k) for la,k in result.items()} - - - def mult_schubert(w1, w2, rank=0): -@@ -646,17 +448,11 @@ def mult_schubert(w1, w2, rank=0): - ([6, 4, 3, 1, 2, 5], 1), ([6, 5, 2, 1, 3, 4], 1), - ([7, 3, 4, 1, 2, 5, 6], 1), ([7, 4, 2, 1, 3, 5, 6], 1)] - """ -- cdef vector* v1 = iterable_to_vector(w1) -- cdef vector* v2 = iterable_to_vector(w2) -- cdef hashtab* ht = mult_schubert_c(v1, v2, int(rank)) -- result = schubert_hashtab_to_dict(ht) -- v_free(v1) -- v_free(v2) -- hash_free(ht) -- return result -+ result = lrcalc.schubmult(w1, w2, rank) -+ return {Permutation(list(la)):Integer(k) for la,k in result.items()} - - --def lrskew(outer, inner, weight=None, maxrows=0): -+def lrskew(outer, inner, weight=None, maxrows=-1): - r""" - Iterate over the skew LR tableaux of shape ``outer / inner``. - -@@ -703,21 +499,20 @@ def lrskew(outer, inner, weight=None, maxrows=0): - sage: list(lrskew([3,2,1],[2], weight=[3,1])) - [[[None, None, 1], [1, 1], [2]]] - """ -- cdef vector* o = iterable_to_vector(outer) -- cdef vector* i = iterable_to_vector(inner + [0]*(len(outer) - len(inner))) -- cdef skewtab* st = st_new(o, i, NULL, int(maxrows)) -+ iterator = lrcalc.lr_iterator(outer, inner, maxrows) -+ shape = SkewPartition([outer, inner]) - - if weight is None: -- yield skewtab_to_SkewTableau(st) -- while st_next(st): -- yield skewtab_to_SkewTableau(st) -+ ST = SkewTableaux() -+ for data in iterator: -+ yield ST.from_shape_and_word(shape, [i+1 for i in data]) - else: - wt = _Partitions(weight) -- r = skewtab_to_SkewTableau(st) -- if r.weight() == wt: -- yield r -- while st_next(st): -- r = skewtab_to_SkewTableau(st) -- if r.weight() == wt: -- yield r -- st_free(st) -+ ST = SkewTableaux() -+ for data in iterator: -+ m = max(data) + 1 -+ w = [0] * m -+ for j in data: -+ w[j] += 1 -+ if w == wt: -+ yield ST.from_shape_and_word(shape, [i+1 for i in data]) |