#16275: Hom: introduce a check argument to simplify the unpickling detection 
logic
-------------------------------------+-------------------------------------
       Reporter:  nthiery            |        Owner:
           Type:  enhancement        |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-6.2
      Component:  categories         |   Resolution:
       Keywords:  homset, pickling   |    Merged in:
        Authors:  Nicolas M.         |    Reviewers:  Simon King, Nicolas
  Thiéry, Simon King                 |  M. Thiéry
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  u/SimonKing/ticket/16275           |  e1e916cde347deac1df9079f7ec856184e3862bf
   Dependencies:                     |     Stopgaps:
-------------------------------------+-------------------------------------

Comment (by nthiery):

 Cool!

 Coming back to the idea of putting the pickle as a doctest; there is a
 quite natural way to avoid the ugly meaningless string: to put instead
 the corresponding sequence of instructions, as given by
 explain_pickle.

 Hmm, ok, maybe that's a bit too long in this case :-)
 {{{
 sage: pg_unpickle_map = unpickle_global('sage.categories.map',
 'unpickle_map')
 sage: pg_HeckeModuleMorphism_matrix =
 unpickle_global('sage.modular.hecke.morphism',
 'HeckeModuleMorphism_matrix')
 sage: pg_Hom = unpickle_global('sage.categories.homset', 'Hom')
 sage: pg_dynamic_class = unpickle_global('sage.structure.dynamic_class',
 'dynamic_class')
 sage: pg_ModularSymbolsAmbient_wt2_g0 =
 unpickle_global('sage.modular.modsym.ambient',
 'ModularSymbolsAmbient_wt2_g0')
 sage: pg_getattr = unpickle_global('__builtin__', 'getattr')
 sage: pg_unreduce =
 unpickle_global('sage.structure.unique_representation', 'unreduce')
 sage: pg_HeckeModules = unpickle_global('sage.categories.hecke_modules',
 'HeckeModules')
 sage: pg_RationalField = unpickle_global('sage.rings.rational_field',
 'RationalField')
 sage: pg = unpickle_instantiate(pg_RationalField, ())
 sage: si1 = pg_unreduce(pg_HeckeModules, (pg,), {})
 sage: si2 =
 unpickle_newobj(pg_dynamic_class('ModularSymbolsAmbient_wt2_g0_with_category',
 (pg_ModularSymbolsAmbient_wt2_g0, pg_getattr(si1, 'parent_class')),
 None, None, pgsage: _ModularSymbolsAmbient_wt2_g0), ())
 sage: pg_unpickle = unpickle_global('sage.matrix.matrix0', 'unpickle')
 sage: pg_Matrix_rational_dense =
 unpickle_global('sage.matrix.matrix_rational_dense',
 'Matrix_rational_dense')
 sage: pg_MatrixSpace = unpickle_global('sage.matrix.matrix_space',
 'MatrixSpace')
 sage: si3 = pg_unreduce(pg_MatrixSpace, (pg, 3r, 3r, False), {})
 sage: si4 = pg_unpickle(pg_Matrix_rational_dense, si3, True, None, '8 0 0
 0 8 0 0 0 8', 0r)
 sage: pg__make_p1list = unpickle_global('sage.modular.modsym.p1list',
 '_make_p1list')
 sage: pg_Gamma0_constructor =
 unpickle_global('sage.modular.arithgroup.congroup_gamma0',
 'Gamma0_constructor')
 sage: pg_make_integer = unpickle_global('sage.rings.integer',
 'make_integer')
 sage: si5 = pg_make_integer('6')
 sage: pg_generic_factory_unpickle =
 unpickle_global('sage.structure.factory', 'generic_factory_unpickle')
 sage: pg_lookup_global = unpickle_global('sage.structure.factory',
 'lookup_global')
 sage: si6 = (6r, 2r, 'rc1')
 sage: pg_ManinSymbol =
 unpickle_global('sage.modular.modsym.manin_symbols', 'ManinSymbol')
 sage: si7 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si8 = (0r, 0r, 1r)
 sage: pg_ManinSymbolList_gamma0 =
 unpickle_global('sage.modular.modsym.manin_symbols',
 'ManinSymbolList_gamma0')
 sage: si9 = unpickle_newobj(pg_ManinSymbolList_gamma0, ())
 sage: si10 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si11 = (0r, 1r, 0r)
 sage: unpickle_build(si10, {'_ManinSymbol__t':si11,
 '_ManinSymbol__parent':si9})
 sage: si12 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si13 = (0r, 1r, 1r)
 sage: unpickle_build(si12, {'_ManinSymbol__t':si13,
 '_ManinSymbol__parent':si9})
 sage: si14 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si15 = (0r, 1r, 2r)
 sage: unpickle_build(si14, {'_ManinSymbol__t':si15,
 '_ManinSymbol__parent':si9})
 sage: si16 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si17 = (0r, 1r, 3r)
 sage: unpickle_build(si16, {'_ManinSymbol__t':si17,
 '_ManinSymbol__parent':si9})
 sage: si18 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si19 = (0r, 1r, 4r)
 sage: unpickle_build(si18, {'_ManinSymbol__t':si19,
 '_ManinSymbol__parent':si9})
 sage: si20 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si21 = (0r, 1r, 5r)
 sage: unpickle_build(si20, {'_ManinSymbol__t':si21,
 '_ManinSymbol__parent':si9})
 sage: si22 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si23 = (0r, 2r, 1r)
 sage: unpickle_build(si22, {'_ManinSymbol__t':si23,
 '_ManinSymbol__parent':si9})
 sage: si24 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si25 = (0r, 2r, 3r)
 sage: unpickle_build(si24, {'_ManinSymbol__t':si25,
 '_ManinSymbol__parent':si9})
 sage: si26 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si27 = (0r, 2r, 5r)
 sage: unpickle_build(si26, {'_ManinSymbol__t':si27,
 '_ManinSymbol__parent':si9})
 sage: si28 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si29 = (0r, 3r, 1r)
 sage: unpickle_build(si28, {'_ManinSymbol__t':si29,
 '_ManinSymbol__parent':si9})
 sage: si30 = unpickle_newobj(pg_ManinSymbol, ())
 sage: si31 = (0r, 3r, 2r)
 sage: unpickle_build(si30, {'_ManinSymbol__t':si31,
 '_ManinSymbol__parent':si9})
 sage: unpickle_build(si9, {'_ManinSymbolList__manin_symbol_list':[si7,
 si10, si12, si14, si16, si18, si20, si22, si24, si26, si28, si30],
 '_list':[si8, si11, si13, si15, si1sage: 7, si19, si21, si23, si25,
 si27, si29, si31], '_index':{si13:2r, si27:9r, si15:3r, si8:0r,
 si17:4r, si25:8r, si23:7r, si31:11r, si19sage: :5r, si11:1r, si29:10r,
 si21:6r}, '_ManinSymbolList_group__syms':pg__make_p1list(6r),
 '_ManinSymbolList_group__level':si5, '_wsage: eight':2r})
 sage: unpickle_build(si7, {'_ManinSymbol__t':si8,
 '_ManinSymbol__parent':si9})
 sage: pg_Matrix_rational_sparse =
 unpickle_global('sage.matrix.matrix_rational_sparse',
 'Matrix_rational_sparse')
 sage: pg_make_rational = unpickle_global('sage.rings.rational',
 'make_rational')
 sage: si32 = {(3r, 2r):pg_make_rational('1'), (0r,
 0r):pg_make_rational('-1'), (8r, 2r):pg_make_rational('-1'), (7r,
 1r):pg_make_rational('1'), (9r, 2r):pg_make_rational('-1sage: '), (5r,
 2r):pg_make_rational('1'), (11r, 2r):pg_make_rational('1'), (3r,
 1r):pg_make_rational('-1'), (10r, 1r)sage: :pg_make_rational('1'),
 (5r, 1r):pg_make_rational('-1'), (1r, 0r):pg_make_rational('1'), (4r,
 1r):pg_make_rational('-1'), (7r, 2r)sage: :pg_make_rational('-1'), (9r,
 1r):pg_make_rational('1')}
 sage: pg_DirichletCharacter = unpickle_global('sage.modular.dirichlet',
 'DirichletCharacter')
 sage: si33 = unpickle_newobj(pg_DirichletCharacter, ())
 sage: si34 = pg_make_integer('6')
 sage: unpickle_build(si33,
 (pg_generic_factory_unpickle(pg_lookup_global('DirichletGroup'), si6,
 (pg, si34, pg_make_rational('-1'), pg_make_integer('2')), {}),
 {'_DirichletCsage: haracter__modulus':si34,
 '_DirichletCharacter__values_on_gens':(pg_make_rational('1'),)}))
 sage: pg_HeckeAlgebra_full = unpickle_global('sage.modular.hecke.algebra',
 'HeckeAlgebra_full')
 sage: pg_CommutativeAlgebras =
 unpickle_global('sage.categories.commutative_algebras',
 'CommutativeAlgebras')
 sage: si35 =
 unpickle_newobj(pg_dynamic_class('HeckeAlgebra_full_with_category',
 (pg_HeckeAlgebra_full, pg_getattr(pg_unreduce(pg_CommutativeAlgebras,
 (pg,), {}), 'parent_clsage: ass')), None, None, pg_HeckeAlgebra_full), ())
 sage: pg_HeckeOperator =
 unpickle_global('sage.modular.modsym.hecke_operator', 'HeckeOperator')
 sage: si36 = unpickle_newobj(pg_HeckeOperator, ())
 sage: pg_HeckeAlgebraElement_matrix =
 unpickle_global('sage.modular.hecke.hecke_operator',
 'HeckeAlgebraElement_matrix')
 sage: si37 = unpickle_newobj(pg_HeckeAlgebraElement_matrix, ())
 sage: unpickle_build(si37, (si35,
 {'_HeckeAlgebraElement_matrix__matrix':si4,
 
'_HeckeAlgebraElement__hecke_module_morphism':pg_unpickle_map(pg_HeckeModuleMorphism_matrix,
 pgsage: _Hom(si2, si2, si1), {'_matrix':si4,
 '_HeckeModuleMorphism_matrix__name':''}, {'_codomain':si2, '_domain':si2,
 '_repr_type_str':None})}))
 sage: unpickle_build(si36, (si35, {'_HeckeOperator__matrix_form':si37,
 '_HeckeOperator__matrix':si4, '_HeckeOperator__n':7r}))
 sage: unpickle_build(si35, {'_latex_names':None, '_list':None,
 '_HeckeAlgebra_base__matrix_space_cache':si3, '_names':None,
 '_gens_dict':None, '_HeckeAlgebra_base__M':si2, 'sage: _base':pg,
 '_gens':None, '_HeckeAlgebra_base__hecke_operator':{7r:si36}})
 sage: unpickle_build(si2, {'_latex_names':None,
 '_ModularSymbolsAmbient__rank':3r, '_hecke_matrices':{(7r, None):si4,
 7r:si4}, '_ModularSymbolsAmbient__p1list':pg__make_p1list(6r),
 '_ModularSymbolsSpace__group':pg_Gamma0_constructor(si5),
 
'_AmbientHeckeModule__free_module':pg_generic_factory_unpickle(pg_lookup_global('FreeModule'),
 si6, (pg, 3r, False, None), {}), '_ModularSymbolsSpace__sign':0r,
 '_AmbientHeckeModule__rank':pg_make_integer('3'),
 '_HeckeModule_free_module__weight':2r, '_list':None,
 '_manin_generators':[si7, si10, si12, si14, si16, si18, si20, si22, si24,
 si26, si28, si30], '_gens_dict':None, '_generator_orders':None,
 '_manin_gens_to_basis':pg_unpickle(pg_Matrix_rational_sparse,
 pg_unreduce(pg_MatrixSpace, (pg, 12r, 3r, True), {}), False,
 {'dict':si32}, si32, -1r), '_ModularSymbolsSpace__character':si33,
 '_diamond_matrices':{}, '_names':None, '_HeckeModule_generic__level':si5,
 '_manin_basis':[1r, 10r, 11r], '_base':pg, '_gens':None,
 '_HeckeModule_generic__hecke_algebra':si35, '_mod2term':[(1r,
 pg_make_rational('-1')), (1r, pg_make_rational('1')), (6r,
 pg_make_rational('-1')), (9r, pg_make_rational('-1')), (10r,
 pg_make_rational('-1')), (7r, pg_make_rational('-1')), (6r,
 pg_make_rational('1')), (7r, pg_make_rational('1')), (11r,
 pg_make_rational('-1')), (9r, pg_make_rational('1')), (10r,
 pg_make_rational('1')), (11r, pg_make_rational('1'))],
 '_ModularSymbolsAmbient_wtk_g0__manin_symbols':si9})
 sage: pg_unpickle_map(pg_HeckeModuleMorphism_matrix, pg_Hom(si2, si2,
 si1), {'_matrix':pg_unpickle(pg_Matrix_rational_dense, si3, False, None,
 '0 1 2 3 4 5 6 7 8', 0r), '_HeckeModuleMorphism_matrix__name':'spam',
 '_default_filename':'broken_pickle.sobj'}, {'_codomain':si2,
 '_domain':si2, '_repr_type_str':None})
 }}}

 Cheers,
                  Nicolas

--
Ticket URL: <http://trac.sagemath.org/ticket/16275#comment:42>
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