#16802: difference family database
-------------------------------------+-------------------------------------
       Reporter:  vdelecroix         |        Owner:
           Type:  enhancement        |       Status:  needs_work
       Priority:  major              |    Milestone:
      Component:  combinatorial      |   Resolution:
  designs                            |    Merged in:
       Keywords:                     |    Reviewers:
        Authors:  Vincent Delecroix  |  Work issues:
Report Upstream:  N/A                |       Commit:
         Branch:                     |  e8984623ba5c4b181971e0524ca47dbe9cc204fc
  u/vdelecroix/16802                 |     Stopgaps:
   Dependencies:  #16757             |
-------------------------------------+-------------------------------------
Changes (by ncohen):

 * status:  needs_review => needs_work


Comment:

 Yooooooooooooooooooooooooooooo !!!!

 First review of this patch (it will be clearer after those points have
 been solved):

 - The DF in the database: why add a 'S' in the *blocks* of short groups ?
 it is
   not like it is hard to check that a block has an non-empty stabilizer.
 We can
   get this info easily. Plus those 'S' have nothing to do in the blocks of
 a
   design ...

 - The database looks a bit messy as it is. Could you align some stuff,
 like the ':' or the ',' so that one can actually read it in the code ?

 - The database should be indexed with `(v,k,l)` instead of
 `((v1,v2,v3),k,l)`. You can have something like that:

   {{{
   DF_database = {
      (v,k,l) : {
         (v1,v2,v3): [DF1,DF2,DF3,....]
      }
   }
   }}}
   This way you can easily check whether there exists a BIBD that can be
 obtained from a difference family. And you can also find `(v1,v2,v3)`
 easily.

 - With a database indexed with `(v,k,l)` you can undo those modifications
   {{{
   -if (v,k,l) in DF_constructions:
   +G_df = DF_from_database(v,k,l,short_blocks=short_blocks)
   +if G_df:
   }}}

 - Block stabilizer: instead of computing the stabilizer of blocks, you
 could
   just develop a block with respect to the group and remove duplicated,
 you know
   ? All it takes is a simple call to `set(...)`. Much easier to
 understand, no
   questions about where all those group-specific functions should be
   implemented...

   If you do that you save around 100 lines of code+doc with the three
 functions
   {{{block_stabilizer, orbit_representatives, partial_differences}}}.
 Really I
   would have nothing if those functions were group methods, but having to
   implement all that just for difference families, and just to avoid a
 call to
   `set()`, really ?....

   Plus there is the "short+non-abelian exception" in
 `is_difference_family`,
   that wouldn't be needed anymore in this case ....

 - If you insist on having all those functions to avoid calling "set" to
 simplify
   the orbits of a block, and if you want to keep the warning above, you
 may also
   have to handle the case where the group is a multiplicative+commutative
 group.

 - (That's going very far just to avoid a `set(...)` `:-P`

 - `difference_family` : new `short_blocks` argument. Really, WHY do you
 care so
   much about short blocks ? They are just blocks whose orbit is smaller,
 what's
   all the fuss about ? If we give the users access to the database, can't
 we
   just give them a function that tests if a block is short and let them do
 what
   they want with it ?

 - What's the point of filtering difference families with short blocks
 anyway ?

 - The checks in `DF_from_database`: if you want to check anything about
 the
   database, it would be better to do it in the doctests than at runtime
 ?...

 - `DF_from_database`: if you actually need it, should be in
 `difference_family.py` not in `database.py`

 - isn't "too few" better than "too less" ?

 Nathann

--
Ticket URL: <http://trac.sagemath.org/ticket/16802#comment:4>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to