SAGE’s To Do list

There is still some work to do :-) :

Warning

This list is currently very incomplete as most doctests do not use the .. todo:: markup.

Todo

Rewrite the hand-written TODOs by using the correct .. todo:: markup.

The combined to do list is only available in the html version of the reference manual.

Todo

Rewrite the hand-written TODOs by using the correct .. todo:: markup.

(The original entry is located in /usr/share/doc/sagemath-5.9/en/reference/todolist.rst, line 13.)

Todo

Add an optional argument to allow for:

sage: Realizations(A, category = Blahs()) # todo: not implemented

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/categories/category.py:docstring of sage.categories.category.Category.Realizations, line 39.)

Todo

Get a consistent hierarchy of homset categories. Currently, it is built in parallel to that of their base categories (which is plain wrong!!!)

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/categories/category.py:docstring of sage.categories.category.HomCategory, line 3.)

Todo

  • Use the symmetric group in the examples (for nicer output), and print the edges for a stronger test.
  • The constructed poset should be lazy, in order to handle large / infinite Coxeter groups.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/categories/finite_coxeter_groups.py:docstring of sage.categories.finite_coxeter_groups.FiniteCoxeterGroups.ParentMethods.bruhat_poset, line 44.)

Todo

  • Use the symmetric group in the examples (for nicer output), and print the edges for a stronger test.
  • The constructed poset should be lazy, in order to handle large / infinite Coxeter groups.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/categories/finite_coxeter_groups.py:docstring of sage.categories.finite_coxeter_groups.FiniteCoxeterGroups.ParentMethods.weak_lattice, line 70.)

Todo

  • Use the symmetric group in the examples (for nicer output), and print the edges for a stronger test.
  • The constructed poset should be lazy, in order to handle large / infinite Coxeter groups.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/categories/finite_coxeter_groups.py:docstring of sage.categories.finite_coxeter_groups.FiniteCoxeterGroups.ParentMethods.weak_poset, line 70.)

Todo

design decision: how much of the homset comes from the category of X and Y, and how much from the specific X and Y. In particular, do we need several parent classes depending on X and Y, or does the difference only lie in the elements (i.e. the morphism), and of course how the parent calls their constructors.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/categories/homset.py:docstring of sage.categories.homset.Hom, line 121.)

Todo

Refactor during the upcoming homset cleanup.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/categories/homset.py:docstring of sage.categories.homset.Homset.element_class_set_morphism, line 8.)

Todo

Add an optional argument to allow for:

sage: Realizations(A, category = Blahs()) # todo: not implemented

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/categories/realizations.py:docstring of sage.categories.realizations.Realizations, line 39.)

Todo

GUAVA commands:
  • MOLS returns a list of n Mutually Orthogonal Latin Squares (MOLS).
  • VandermondeMat
  • GrayMat returns a list of all different vectors of length n over the field F, using Gray ordering.
Not in GAP:

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/combinat.py:docstring of sage.combinat.combinat, line 133.)

Todo

  • Vocabulary and conventions:
    • For a classical crystal: connected / highest weight / irreducible
    • ...
  • Layout instructions for plot() for rank 2 types
  • RestrictionOfCrystal

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/crystals/crystals.py:docstring of sage.combinat.crystals.crystals, line 96.)

Todo

Eventually, category should be Sets by default.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/crystals/tensor_product.py:docstring of sage.combinat.crystals.tensor_product.TestParent, line 50.)

Todo

Do the iteration in place to save on copying time

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/integer_list.py:docstring of sage.combinat.integer_list.IntegerListsLex.count, line 7.)

Todo

Placeholder. Implement a proper check.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/integer_list.py:docstring of sage.combinat.integer_list.IntegerListsLexElement.check, line 4.)

Todo

Move this into Cython.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/integer_list.py:docstring of sage.combinat.integer_list.first, line 8.)

Todo

Integer vectors should accept max_part as a single argument, and the following should change:

sage: S = IntegerVectorsModPermutationGroup(PermutationGroup([[(1,2,3,4)]]), max_part=12); S.ambient()
Integer vectors

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/integer_vectors_mod_permgroup.py:docstring of sage.combinat.integer_vectors_mod_permgroup.IntegerVectorsModPermutationGroup_with_constraints.ambient, line 10.)

Todo

this could be generalized to any free algebra.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/ncsf_qsym/ncsf.py:docstring of sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.MultiplicativeBasesOnPrimitiveElements, line 12.)

Todo

Reimplement like remove_horizontal_border_strip using IntegerListsLex

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/partition.py:docstring of sage.combinat.partition.Partition.add_horizontal_border_strip, line 15.)

Todo

Check in Knuth AOCP4.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/partition.py:docstring of sage.combinat.partition.Partitions_n.random_element_uniform, line 21.)

Todo

  • generalize this feature by accepting a family of operators as input
  • move up in some appropriate category

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/posets/linear_extensions.py:docstring of sage.combinat.posets.linear_extensions.LinearExtensionsOfPoset.markov_chain_digraph, line 8.)

Todo

should the vertices of the diagram have the poset as parent?

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/posets/posets.py:docstring of sage.combinat.posets.posets.FinitePoset.hasse_diagram, line 3.)

Todo

The current algorithm has exponential complexity (in time and memory). Someone should really implement a better algorithm. See trac ticket #13223.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/posets/posets.py:docstring of sage.combinat.posets.posets.FinitePoset.is_graded, line 10.)

Todo

  • Is it acceptable to have those two features for a single method?
  • In particular, we miss a short idiom to get the default linear extension

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/posets/posets.py:docstring of sage.combinat.posets.posets.FinitePoset.linear_extension, line 44.)

Todo

add tests as in combinat::rankers

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/ranker.py:docstring of sage.combinat.ranker.on_fly, line 27.)

Todo

Output the tree as a graph using the graph code

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/rigged_configurations/kleber_tree.py:docstring of sage.combinat.rigged_configurations.kleber_tree, line 22.)

Todo

Implement a direct action of e_0 without moving to KR crystals.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/rigged_configurations/kr_tableaux.py:docstring of sage.combinat.rigged_configurations.kr_tableaux.KirillovReshetikhinTableauxElement.e, line 3.)

Todo

Implement a direct action of f_0 without moving to KR crystals.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/rigged_configurations/kr_tableaux.py:docstring of sage.combinat.rigged_configurations.kr_tableaux.KirillovReshetikhinTableauxElement.f, line 3.)

Todo

Implement crystal operators e_0 and f_0.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/rigged_configurations/rigged_configuration_element.py:docstring of sage.combinat.rigged_configurations.rigged_configuration_element, line 8.)

Todo

Implement affine crystal structure and remove conversion to classical Cartan type.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/rigged_configurations/rigged_configurations.py:docstring of sage.combinat.rigged_configurations.rigged_configurations, line 166.)

Todo

Convert this to using m_i (multiplicities) with a dictionary?

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/rigged_configurations/rigged_partition.py:docstring of sage.combinat.rigged_configurations.rigged_partition, line 18.)

Todo

add some reducible Cartan types (suggestions?)

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/root_system/cartan_type.py:docstring of sage.combinat.root_system.cartan_type.CartanTypeFactory.samples, line 47.)

Todo

This implementation is only valid in the root or weight lattice

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/root_system/root_lattice_realizations.py:docstring of sage.combinat.root_system.root_lattice_realizations.RootLatticeRealizations.ElementMethods.is_parabolic_root, line 7.)

Todo

add a non simply laced example

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/root_system/root_lattice_realizations.py:docstring of sage.combinat.root_system.root_lattice_realizations.RootLatticeRealizations.ParentMethods.alphacheck, line 17.)

Todo

the result should be an enumerated set, and handle infinite root systems

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/root_system/root_lattice_realizations.py:docstring of sage.combinat.root_system.root_lattice_realizations.RootLatticeRealizations.ParentMethods.roots, line 28.)

Todo

Lift to CombinatorialFreeModule.Element as canonical_inner_product

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/root_system/type_affine.py:docstring of sage.combinat.root_system.type_affine.AmbientSpace.Element.inner_product, line 23.)

Todo

Lift to CombinatorialFreeModule.Element as canonical_inner_product

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/root_system/type_affine.py:docstring of sage.combinat.root_system.type_affine.AmbientSpace.Element.scalar, line 23.)

Todo

Factor out this code with the classical ambient space.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/root_system/type_affine.py:docstring of sage.combinat.root_system.type_affine.AmbientSpace.simple_coroot, line 16.)

Todo

  • merge with_apply_multi_module_morphism
  • allow for any root space / lattice
  • define properly the return type (depends on the base rings of the two spaces)
  • make this robust for extended weight lattices (i might be “delta”)

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/root_system/weight_space.py:docstring of sage.combinat.root_system.weight_space.WeightSpaceElement.scalar, line 4.)

Todo

delete this class once all coercions will be handled by Sage’s coercion model

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/sf/classical.py:docstring of sage.combinat.sf.classical.SymmetricFunctionAlgebra_classical, line 3.)

Todo

to be described

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/sf/sf.py:docstring of sage.combinat.sf.sf.SymmetricFunctions, line 618.)

Todo

  • Introduce fields with degree 1 elements as in MuPAD-Combinat, to get proper plethysm.
  • Use UniqueRepresentation to get rid of all the manual cache handling for the bases
  • Devise a mechanism so that pickling bases of symmetric functions pickles the coercions which have a cache.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/sf/sf.py:docstring of sage.combinat.sf.sf.SymmetricFunctions, line 667.)

Todo

most of the methods in this class are generic (manipulations of morphisms, ...) and should be generalized (or removed)

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/sf/sfa.py:docstring of sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic, line 1.)

Todo

generalize to Modules.Graded.Connected.ParentMethods

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/sf/sfa.py:docstring of sage.combinat.sf.sfa.SymmetricFunctionsBases.ParentMethods.one_basis, line 17.)

Todo

  • construct the product of two irreducible representations.
  • implement Induction/Restriction of representations.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/symmetric_group_representations.py:docstring of sage.combinat.symmetric_group_representations, line 1.)

Todo

Implement semistandard tableau tuples as defined in [DJM].

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/tableau_tuple.py:docstring of sage.combinat.tableau_tuple, line 180.)

Todo

Add link to some thematic tutorial on graphs

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/tutorial.py:docstring of sage.combinat.tutorial, line 17.)

Todo

add link to some tutorial on quotient rings

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/tutorial.py:docstring of sage.combinat.tutorial, line 467.)

Todo

hide the results by default

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/combinat/tutorial.py:docstring of sage.combinat.tutorial, line 1158.)

Todo

Eventually, category should be Sets by default.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/geometry/lattice_polytope.py:docstring of sage.geometry.lattice_polytope.SetOfAllLatticePolytopesClass, line 50.)

Todo

Find a beautiful layout for this beautiful graph.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/graphs/graph_generators.py:docstring of sage.graphs.graph_generators.GraphGenerators.SchlaefliGraph, line 14.)

Todo

Technical things:

  • Query the database for non-inclusion results so that comparisons can return False, and implement strict inclusions.
  • Implement a proper search method for the classes not listed in graph_classes
  • Some of the graph classes appearing in graph_classes already have a recognition algorithm implemented in Sage. It would be so nice to be able to write g in Trees, g in Perfect, g in Chordal, ... :-)

Long-term stuff:

  • Implement simple accessors for all the information in the ISGCI database (as can be done from the website)
  • Implement intersection of graph classes
  • Write generic recognition algorithms for specific classes (when a graph class is defined by the exclusion of subgraphs, one can write a generic algorithm checking the existence of each of the graphs, and this method already exists in Sage).
  • Improve the performance of Sage’s graph library by letting it take advantage of the properties of graph classes. For example, Graph.independent_set() could use the library to detect that a given graph is, say, a tree or a planar graph, and use a specialized algorithm for finding an independent set.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/graphs/isgci.py:docstring of sage.graphs.isgci, line 282.)

Todo

This code could probably be made more efficient by using FLINT polynomials and being written in Cython, using an array of fmpz_poly_t pointers or something... Right now just about the whole complement optimization is written in Python, and could be easily sped up.

(The original entry is located in docstring of sage.graphs.matchpoly.complete_poly, line 7.)

Todo

  • Implement a non-naive fallback method for computing all the elements of the conjugacy class when the group is not defined in GAP, as the one in Butler’s paper.
  • Define a sage method for gap matrices so that groups of matrices can use the quicker GAP algorithm rather than the naive one.

(The original entry is located in docstring of sage.groups.conjugacy_classes, line 9.)

Todo

Implement a non-naive algorithm, cf. for instance G. Butler: “An Inductive Schema for Computing Conjugacy Classes in Permutation Groups”, Math. of Comp. Vol. 62, No. 205 (1994)

(The original entry is located in docstring of sage.groups.conjugacy_classes.ConjugacyClass.set, line 4.)

Todo

Fix the broken hash.

sage: G = SymmetricGroup(6)
sage: G3 = G.subgroup([G((1,2,3,4,5,6)),G((1,2))])
sage: hash(G) == hash(G3)  # todo: Should be True!
False

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/groups/perm_gps/permgroup_named.py:docstring of sage.groups.perm_gps.permgroup_named.PermutationGroup_unique, line 1.)

Todo

Create an animated image file (GIF) if spin is on and put data extracted from a file into a variable/string/structure to return

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/interfaces/jmoldata.py:docstring of sage.interfaces.jmoldata.JmolData, line 1.)

Todo

Add instead an optional argument to MatrixSpace() to temporarily disable the category initialization in those special cases where speed is critical:

sage: MS = MatrixSpace(QQ,7, init_category=False) # todo: not implemented
sage: TestSuite(MS).run()                         # todo: not implemented
Traceback (most recent call last):
...
AssertionError: category of self improperly initialized

until someone recreates explicitly the same matrix space without that optional argument:

sage: MS = MatrixSpace(QQ,7)                      # todo: not implemented
sage: TestSuite(MS).run()                         # todo: not implemented

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/matrix/matrix_space.py:docstring of sage.matrix.matrix_space.MatrixSpace.full_category_initialisation, line 30.)

Todo

  • Add Pyrex source code inspection (I assume it doesn’t currently do this)
  • Add ability to sort output by time
  • Add option to constructor to print timing immediately when checkpoint is reached
  • Migrate to Pyrex?
  • Add ability to return timings in a more machine-friendly format

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/misc/profiler.py:docstring of sage.misc.profiler.Profiler, line 40.)

Todo

This should be moved to sage.matrix.matrix_modn_dense at some point.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/modular/overconvergent/hecke_series.py:docstring of sage.modular.overconvergent.hecke_series.ech_form, line 4.)

Todo

Refactor modules such that it only counts what category the base ring belongs to, but not what is its Python class.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/modules/free_module.py:docstring of sage.modules.free_module.FreeModuleFactory, line 122.)

Todo

remove the loads tests above; the TestSuite should be sufficient

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/padics/padic_base_leaves.py:docstring of sage.rings.padics.padic_base_leaves, line 181.)

Todo

(The original entry is located in docstring of sage.rings.padics.padic_generic_element.pAdicGenericElement.log, line 46.)

Todo

Implement this method.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/ideal.py:docstring of sage.rings.ideal.Ideal_generic.absolute_norm, line 9.)

Todo

This is not implemented for many rings. Implement it!

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/ideal.py:docstring of sage.rings.ideal.Ideal_generic.is_maximal, line 4.)

Todo

Code is naive. Only keeps track of ideal generators as set during initialization of the ideal. (Can the base ring change? See example below.)

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/ideal.py:docstring of sage.rings.ideal.Ideal_generic.is_principal, line 4.)

Todo

The following skipped tests should be removed once trac ticket #13999 is fixed:

sage: TestSuite(S).run(skip=['_test_nonzero_equal', '_test_elements', '_test_zero'])

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/quotient_ring.py:docstring of sage.rings.quotient_ring, line 15.)

Todo

Not yet implemented!

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/quotient_ring.py:docstring of sage.rings.quotient_ring.QuotientRing_nc.characteristic, line 3.)

Todo

Note that ngens counts 0 as a generator. Does this make sense? That is, since 0 only generates itself and the fact that this is true for all rings, is there a way to “knock it off” of the generators list if a generator of some original ring is modded out?

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/quotient_ring.py:docstring of sage.rings.quotient_ring.QuotientRing_nc.ngens, line 3.)

Todo

Implement ComplexIntervalFieldElement multiplicative order similar to ComplexNumber multiplicative order with _set_multiplicative_order(n) and ComplexNumber.multiplicative_order() methods.

(The original entry is located in docstring of sage.rings.complex_interval, line 23.)

Todo

Implement ComplexIntervalFieldElement multiplicative order and set this output to have multiplicative order n.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/complex_interval_field.py:docstring of sage.rings.complex_interval_field.ComplexIntervalField_class.zeta, line 3.)

Todo

  • implementation of matrices over the universal cyclotomic field.
  • speed improvements of the cythonized methods.
  • speed improvements for scalar multiples.
  • Remove the inheritance from Field and FieldElement as soon as the methods is_field(proof=True) is implemented in the Fields category.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/rings/universal_cyclotomic_field/universal_cyclotomic_field.py:docstring of sage.rings.universal_cyclotomic_field.universal_cyclotomic_field, line 23.)

Todo

It is not yet possible to use set_from_method in conjunction with cached_method.

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/sets/set_from_iterator.py:docstring of sage.sets.set_from_iterator.EnumeratedSetFromIterator_method_decorator, line 66.)

Todo

title

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/structure/global_options.py:docstring of sage.structure.global_options.GlobalOptions.dispatch, line 1.)

Todo

Eventually, category should be Sets by default.

(The original entry is located in docstring of sage.structure.parent.Parent, line 50.)

Todo

Create a custom-made SourPickle for the last example.

(The original entry is located in docstring of sage.structure.sage_object.unpickle_all, line 62.)

Todo

add an example illustrating this behavior

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/structure/unique_representation.py:docstring of sage.structure.unique_representation.CachedRepresentation, line 216.)

Todo

should reuse something preexisting ...

(The original entry is located in /usr/lib64/python2.7/site-packages/sage/structure/unique_representation.py:docstring of sage.structure.unique_representation.unreduce, line 6.)

Previous topic

Welcome to Sage’s Reference Manual!

This Page