Changes between Initial Version and Version 7 of Ticket #30549

Sep 16, 2020, 9:43:33 AM (2 years ago)


  • Ticket #30549

    • Property Status changed from new to needs_info
    • Property Commit changed from 1e4596efe1690719b824fcf5ed26aa7f7d9bac7a to 74230a1b34757c60169a4af481f75a1dcc6e24db
    • Property Branch changed from u/gh-kliem/face_structure to u/gh-kliem/use_face_structure
  • Ticket #30549 – Description

    initial v7  
    1 This ticket removes all the top level bitset access. The algorithm is cleanly separated from the data structure now.
     1This goal of this ticket is to use `data_structures/biteset.pxi` for the bitset stuff in combinatorial polyhedron and cleanly seperate algorithm and data structure.
    3 There is a new file `bitsets.cpp` (already introduced in #30528). This file should eventually be merged with `data_structures/bitsets.pxd` (and now one can see that such a thing is possible).
     3This ticket should eventually be resolved in many smaller tickets.
    5 There is a file `face.cpp` that grabs what seems to be useful to define a face.
     5Changes are:
    7 There is `face_list.cpp`. Here a list of faces is defined as a structure and some common methods that make sense for lists of faces are defined (such as intersect a face with a list of other faces and `get_next_level`).
     71. Move functions optimizable by intrinsics to a seperate file (`       src/sage/data_structures/bitset_intrinsics.h`). (See #27103 and #27122.)
    9 There are two new structures: `face_list_struct` and `face_struct`. `face_list_struct` is more or less public. `face_struct` is pretty much private. Only the provided functions should be used with it.
     92. Allow most functions in `bitset.pxi` for fuzed types [, fuzed types], such that an (yet to be enriched) bitset data structure specialized for combinatorial faces can use it.
    11 The signatures of functions/methods became a lot easier. Cython files do not have to worry about alignment or `face_length` etc. Memory allocation is still done by `MemoryAllocator`. The low level file iteratively requests all the memory to define a face.
     113. Define a data structure `face_s` that gathers properties of a face and corresponding functions.
    13 With this ticket, one can easily adapt the data structure for combinatorial faces to almost anything one likes. Hopefully without changing the cython files.
     134. Define a data structure `face_list_s` that gathers properties of a list of faces and corresponding functions.
     155. The two flavors of the algorithm (simple and standard) are set up as templates by abusing fuzed types. This makes the code much easier to read. Only the changes will be seperated in the code while the compiler compiles two seperate branches for both flavors.
     17The features of those changes are mainly:
     19- Less involved signatures of functions.
     20- Removing duplications of code.
     21- New flavors of the algorithm can be implemented without messing up all the files.
     22- We may enrich `face_s` without changing all our code.
     23- Intrinsics can easily applied to bitsets in general.