Ticket #111 (closed enhancement: fixed)

Opened 3 years ago

Last modified 6 months ago

[with patch, positive review] def copy -- they should all be def __copy__

Reported by: was Owned by: AlexGhitza
Priority: minor Milestone: sage-4.1.1
Component: user interface Keywords:
Cc: robertwb, mhansen Author(s): Alex Ghitza
Report Upstream: Reviewer(s): David Loeffler
Merged in: sage-4.1.1.alpha0 Work issues:

Description

There are many instances of copy methods in SAGE. They should all be copy, which is what gets called by the standard copy module (part of the standard Python library).

sage: search_sage('def copy')

matrix/sparse_matrix.py:    def copy(self):
modules/free_module_element.py:    def copy(self):
plot/graph.py:    def copy(self, name):
rings/finite_field_element.py:    def copy(self):
rings/fraction_field_element.py:    def copy(self):
rings/laurent_series_ring_element.py:    def copy(self):
rings/padic.py:    def copy(self):
rings/polynomial_element.py:    def copy(self):
rings/polynomial_element.py:    def copy(self):
rings/polynomial_element.py:    def copy(self):
rings/polynomial_element.py:    def copy(self):
rings/power_series_ring_element.py:    def copy(self):
rings/power_series_ring_element.py:    def copy(self):
rings/quotient_ring_element.py:    def copy(self):
libs/pari/functional.py:def copy(self): return pari(self).copy()
modular/modsym/manin_symbols.py:    def copy(self):
server/server1/server1.py:    def copyfile(self, source, outputfile): 
matrix/dense_matrix_pyx.pyx:    def copy(self):
matrix/matrix_generic.pyx:    def copy(self):
matrix/matrix_integer_dense.pyx:    def copy(self):
matrix/matrix_modn_dense.pyx:    def copy(Matrix_modn_dense self):
matrix/matrix_modn_sparse.pyx:    def copy(self):
matrix/matrix_rational_dense.pyx:    def copy(self):
matrix/sparse_matrix_pyx.pyx:    def copy(self):
matrix/sparse_matrix_pyx.pyx:    def copy(self):
matrix/sparse_matrix_pyx.pyx:    def copy(self):
rings/integer.pyx:    def copy(self):
rings/integer_mod.pyx:    def copy(IntegerMod_gmp self):
rings/integer_mod.pyx:    def copy(IntegerMod_int self):
rings/integer_mod.pyx:    def copy(IntegerMod_int64 self):
rings/mpc.pyx:    def copy(self):
rings/polynomial_pyx.pyx:    def copy(self):
rings/polynomial_pyx.pyx:    def copy(self):
rings/rational.pyx:    def copy(self):
rings/real_double.pyx:    def copy(self):
rings/real_mpfr.pyx:    def copy(self):
rings/sparse_poly.pyx:    def copy(self):
rings/sparse_poly.pyx:    def copy(self):
libs/linbox/finite_field_givaro.pyx:    def copy(self):
libs/ntl/ntl.pyx:    def copy(self):
libs/ntl/ntl.pyx:    def copy(self):
libs/ntl/ntl.pyx:    def copy(ntl_GF2E self):
libs/pari/_py_pari_orig.pyx:    def copy(gen self):
libs/pari/gen.pyx:    def copy(gen self):

Attachments

trac_111.patch Download (32.7 KB) - added by AlexGhitza 8 months ago.
trac_111-reviewer.patch Download (0.7 KB) - added by davidloeffler 8 months ago.
apply over previous patch

Change History

Changed 3 years ago by was

  • status changed from new to closed
  • resolution set to fixed

Fixed for sage-1.4

Changed 3 years ago by was

  • status changed from closed to reopened
  • resolution fixed deleted

I reverted my changes in my local copy -- there were some nontrivial issues with make such a global change.

Changed 3 years ago by was

  • type changed from defect to enhancement

Changed 3 years ago by mabshoff

  • milestone set to Sage-2.10

Changed 17 months ago by mabshoff

  • cc robertwb, mhansen added

The number has decreased significantly:

libs/ntl/ntl_ZZX.pyx:    def copy(self):
libs/ntl/ntl_ZZ_pEX.pyx:    def copy(self):
libs/ntl/ntl_ZZ_pX.pyx:    def copy(self):
libs/pari/gen.pyx:    def copy(gen self):
matrix/matrix0.pyx:    def copy(self):
modules/free_module_element.pyx:    def copy(self):
rings/padics/padic_ZZ_pX_CA_element.pyx:    def copy(self):
rings/padics/padic_ZZ_pX_CR_element.pyx:    def copy(self):
rings/padics/padic_ZZ_pX_FM_element.pyx:    def copy(self):
rings/padics/padic_capped_absolute_element.pyx:    def copy(pAdicCappedAbsoluteElement self):
rings/padics/padic_capped_relative_element.pyx:    def copy(self):
rings/padics/padic_fixed_mod_element.pyx:    def copy(self):
rings/polynomial/polynomial_pyx.pyx:    def copy(self):
rings/polynomial/polynomial_pyx.pyx:    def copy(self):
rings/laurent_series_ring_element.pyx:    def copy(self):
rings/power_series_poly.pyx:    def copy(self):
rings/rational.pyx:    def copy(self):
rings/sparse_poly.pyx:    def copy(self):
rings/sparse_poly.pyx:    def copy(self):

It would be nice if someone could take an axe to the remaining ones.

Cheers,

Michael

Changed 8 months ago by AlexGhitza

In sage-4.1, I am seeing

libs/pari/gen.pyx:1051:    def copy(gen self):
libs/ntl/ntl_ZZ_pEX.pyx:197:    def copy(self):
libs/ntl/ntl_ZZ_pX.pyx:189:    def copy(self):
libs/ntl/ntl_ZZX.pyx:152:    def copy(self):
graphs/graph.py:780:    def copy(self, implementation='networkx', sparse=None):
combinat/matrices/latin.py:321:    def copy(self):
matrix/matrix0.pyx:115:    def copy(self):
modular/modsym/manin_symbols.py:1667:    def copy(self):
rings/laurent_series_ring_element.pyx:943:    def copy(self):
rings/finite_field_givaro.pyx:1118:    cdef FiniteField_givaro copy
rings/finite_field_element.py:396:    def copy(self):
rings/fraction_field_element.pyx:179:    def copy(self):
rings/power_series_poly.pyx:575:    def copy(self):
rings/rational.pyx:558:    def copy(self):
rings/padics/padic_fixed_mod_element.pyx:661:    def copy(self):
rings/padics/padic_ZZ_pX_CA_element.pyx:1567:    def copy(self):
rings/padics/padic_ZZ_pX_CR_element.pyx:2193:    def copy(self):
rings/padics/padic_ZZ_pX_FM_element.pyx:840:    def copy(self):
rings/padics/padic_capped_relative_element.pyx:1453:    def copy(self):
rings/padics/padic_capped_absolute_element.pyx:810:    def copy(pAdicCappedAbsoluteElement self):
rings/polynomial/polynomial_element_generic.py:866:    def copy(self):
rings/polynomial/padics/polynomial_padic_capped_relative_dense.py:726:    def copy(self):
groups/perm_gps/partn_ref/refinement_python.pyx:145:    def copy(self):
modules/free_module_element.pyx:513:    def copy(self):
databases/database.py:575:    def copy(self):
databases/database.py:1003:    def copy(self):
databases/database.py:1546:    def copy(self):

Changed 8 months ago by AlexGhitza

  • owner changed from was to AlexGhitza
  • status changed from reopened to new

Doing all of these in one shot is pretty nasty. I've attached a patch that fixes most of the instances, and I have opened two follow-up tickets: #6521 for matrix0.pyx and #6522 for graph.py.

Changed 8 months ago by AlexGhitza

Changed 8 months ago by AlexGhitza

  • summary changed from def copy -- they should all be def __copy__ to [with patch, needs review] def copy -- they should all be def __copy__

Changed 8 months ago by AlexGhitza

  • status changed from new to assigned

Changed 8 months ago by mvngu

  • author set to Alex Ghitza

Changed 8 months ago by davidloeffler

Patch looks fine to me -- I am running doctests at the moment -- but it looks like you missed one in sage/rings/polynomial/polynomial_element_generic.py. I'll do a mini-patch and see if that breaks anything :-)

Changed 8 months ago by davidloeffler

apply over previous patch

Changed 8 months ago by davidloeffler

  • reviewer set to David Loeffler
  • summary changed from [with patch, needs review] def copy -- they should all be def __copy__ to [with patch, positive review] def copy -- they should all be def __copy__

I have uploaded a one-liner patch to deal with the def copy in polynomial_element_generic that got missed out. All doctests pass, both on sage.math and on my machine, so let's get this one in.

Changed 8 months ago by mvngu

  • status changed from assigned to closed
  • resolution set to fixed
  • merged set to sage-4.1.1.alpha0

Merged both patches.

Changed 6 months ago by kcrisman

Just an FYI to those involved on this ticket: there may be a new ticket coming to put in deprecation warnings for these. See the discussion at #6521.

Note: See TracTickets for help on using tickets.