Opened 5 years ago

Last modified 5 years ago

## #23240 new enhancement

# Improve coercion discovery

Reported by: | saraedum | Owned by: | |
---|---|---|---|

Priority: | major | Milestone: | sage-8.0 |

Component: | coercion | Keywords: | |

Cc: | roed | Merged in: | |

Authors: | Reviewers: | ||

Report Upstream: | N/A | Work issues: | |

Branch: | Commit: | ||

Dependencies: | Stopgaps: |

### Description (last modified by )

Currently, `parent.pyx`

, when discovering coercion maps, has a line that says

cdef int num_paths = 1 # this is the number of paths we find before settling on the best (the one with lowest coerce_cost). # setting this to 1 will make it return the first path found.

This is unfortunate because sometimes it leads to the discovery of very unfortunate coercions:

sage: W.coerce_map_from(int) Composite map: From: Set of Python objects of type 'int' To: Eisenstein Extension of Unramified Extension of 5-adic Ring with floating precision 20 in a defined by x^2 + 4*x + 2 in w defined by x^2 + 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + 4*5^5 + 4*5^6 + 4*5^7 + 4*5^8 + 4*5^9 + 4*5^10 + 4*5^11 + 4*5^12 + 4*5^13 + 4*5^14 + 4*5^15 + 4*5^16 + 4*5^17 + 4*5^18 + 4*5^19 + 4*5^20 Defn: Native morphism: From: Set of Python objects of type 'int' To: Integer Ring then Ring Coercion morphism: From: Integer Ring To: 5-adic Ring with floating precision 20 then Conversion map: From: 5-adic Ring with floating precision 20 To: Unramified Extension of 5-adic Ring with floating precision 20 in a defined by x^2 + 4*x + 2 then Conversion map: From: Unramified Extension of 5-adic Ring with floating precision 20 in a defined by x^2 + 4*x + 2 To: Eisenstein Extension of Unramified Extension of 5-adic Ring with floating precision 20 in a defined by x^2 + 4*x + 2 in w defined by x^2 + 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + 4*5^5 + 4*5^6 + 4*5^7 + 4*5^8 + 4*5^9 + 4*5^10 + 4*5^11 + 4*5^12 + 4*5^13 + 4*5^14 + 4*5^15 + 4*5^16 + 4*5^17 + 4*5^18 + 4*5^19 + 4*5^20

even though there would have been a much easier way via

sage: W.coerce_map_from(ZZ) Ring Coercion morphism: From: Integer Ring To: Eisenstein Extension of Unramified Extension of 5-adic Ring with floating precision 20 in a defined by x^2 + 4*x + 2 in w defined by x^2 + 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + 4*5^5 + 4*5^6 + 4*5^7 + 4*5^8 + 4*5^9 + 4*5^10 + 4*5^11 + 4*5^12 + 4*5^13 + 4*5^14 + 4*5^15 + 4*5^16 + 4*5^17 + 4*5^18 + 4*5^19 + 4*5^20

This constant should be replaced by a more sophisticated heuristic. Also, it should take into account that nobody ever sets the `_coerce_cost`

on their own coercion maps.

**Note:**See TracTickets for help on using tickets.