Ok, thanks for your time. I will comment out this declaration/definition. jobject can still be used for more precise object like (a=3,b=3.2), jntuple (a=3,b=3.2) returns an uniformly typed JLObjNamedTuple: (a=3.0,b=3.2).
Greg Le mar. 3 févr. 2026 à 18:42, Waldek Hebisch <[email protected]> a écrit : > > On Tue, Feb 03, 2026 at 06:11:52PM +0100, Grégory Vanuxem wrote: > > Hello, > > > > I am wondering why I have this behavior, see the interpreter session below. > > > > I have a domain JLObjNamedTuple to operate on Julia NamedTuple, > > something like a FriCAS Record. It contains two constructors with > > declaration signature: > > jntuple : String -> % > > jntuple : Tuple(Any) -> % > > > > For comparaison, below, 'jobject(String)' has the same > > declaration/definition than the first jntuple above: > > jobject(str : String) == jlref str > > > > My problem is the function selection of jntuple(String). Here is an > > interpreter session: > > In some places interpreter recursively looks for all possiblities. > But in many places once interpreter made a choice it sticks to it > even if there is better/working possiblity. I suspect that > what you see is caused by such premature commitment. > > Let ma add that design of algebra interface is affected by > interpreter, current signatures a choosen to get reasonable > behaviour from interpeter inference. For example, it would > be natural to make more general matrix categories and such > change seem to work fine for Spad. But interpreter has special > case for current signatures, which doen not work for more > general ones. In a bit different spirit, we do not export > operation like 'nullSpace' over say PID-s, because current > signatures force coercion to field of fractions, which is > what normal users want. > > So, plan your signatures having in mind that _not_ exporting > some signature or deliberatly using a differnt name can > guide interpreter to good choice. > > > > (1) -> jobject "(a=12,b=13)" > > > > Function Selection for jobject > > Arguments: STRING > > -> no appropriate jobject found in String > > -> no appropriate jobject found in String > > > > Modemaps from Associated Packages > > no modemaps > > > > Remaining General Modemaps > > [1] Integer -> JLObject from JLObject > > [2] String -> JLObject from JLObject > > found good modemap for: jobject > > String -> JLObject from JLObject > > > > [1] signature: STRING -> JOBJECT > > implemented: slot (String) from JOBJECT > > > > > > (1) (a = 12, b = 13) > > Type: JLObject > > Time: 0.07 (EV) + 1.69 (OT) = 1.76 sec > > (2) -> jntuple "(a=12,b=13)" > > > > Function Selection for jntuple > > Arguments: TUPLE(STRING) > > -> no appropriate jntuple found in Tuple(String) > > -> no appropriate jntuple found in Tuple(String) > > > > Modemaps from Associated Packages > > [1] String -> JLObjNamedTuple from JLObjNamedTuple > > [2] Tuple(Any) -> JLObjNamedTuple from JLObjNamedTuple > > found good modemap for: jntuple > > Tuple(Any) -> JLObjNamedTuple from JLObjNamedTuple > > > > [1] signature: TUPLE(ANY) -> JOBNTPL > > implemented: slot (Tuple (Any)) from JOBNTPL > > > > > > Function Selection for map by coercion facility (map) > > Arguments: ((STRING -> ANY), LIST(STRING)) > > Target type: LIST(ANY) > > -> no appropriate map found in List(String) > > -> no appropriate map found in List(Any) > > -> no appropriate map found in Any > > -> no appropriate map found in String > > -> no appropriate map found in String > > -> no appropriate map found in Any > > > > Modemaps from Associated Packages > > [1] ((D4 -> D5),List(D4)) -> List(D5) from ListFunctions2(D4,D5) > > if D4 has TYPE and D5 has TYPE > > found good modemap for: map > > ((D4 -> D5),List(D4)) -> List(D5) from ListFunctions2(D4,D5) > > if D4 has TYPE and D5 has TYPE > > > > [1] signature: ((STRING -> ANY), LIST(STRING)) -> LIST(ANY) > > implemented: slot (List (Any))(Mapping (Any) (String))(List > > (String)) from LIST2(STRING,ANY) > > > > BoundsError: attempt to access Char at index [2] > > > > >> System error: > > Invalid command given to Julia > > > > (2) -> jntuple (a=12,b=13) > > > > Function Selection for equation > > Arguments: (VARIABLE(a), PI) > > -> no appropriate equation found in Variable(a) > > -> no appropriate equation found in PositiveInteger > > -> no appropriate equation found in Symbol > > -> no appropriate equation found in Integer > > -> no appropriate equation found in Variable(a) > > -> no appropriate equation found in PositiveInteger > > -> no appropriate equation found in Symbol > > -> no appropriate equation found in Integer > > > > Modemaps from Associated Packages > > no modemaps > > > > Remaining General Modemaps > > [1] (Symbol,Segment(D3)) -> SegmentBinding(D3) from SegmentBinding( > > D3) > > if D3 has TYPE > > [2] (Symbol,String) -> QueryEquation from QueryEquation > > [3] (D1,D1) -> Equation(D1) from Equation(D1) if D1 has TYPE > > found good modemap for: equation > > (D1,D1) -> Equation(D1) from Equation(D1) if D1 has TYPE > > > > [1] signature: (POLY(INT), POLY(INT)) -> EQ(POLY(INT)) > > implemented: slot (Polynomial (Integer))(Polynomial (Integer)) > > from EQ(POLY(INT)) > > > > > > Function Selection for equation > > Arguments: (VARIABLE(b), PI) > > -> no appropriate equation found in Variable(b) > > -> no appropriate equation found in PositiveInteger > > -> no appropriate equation found in Symbol > > -> no appropriate equation found in Integer > > -> no appropriate equation found in Variable(b) > > -> no appropriate equation found in PositiveInteger > > -> no appropriate equation found in Symbol > > -> no appropriate equation found in Integer > > > > Modemaps from Associated Packages > > no modemaps > > > > Remaining General Modemaps > > [1] (Symbol,Segment(D3)) -> SegmentBinding(D3) from SegmentBinding( > > D3) > > if D3 has TYPE > > [2] (Symbol,String) -> QueryEquation from QueryEquation > > [3] (D1,D1) -> Equation(D1) from Equation(D1) if D1 has TYPE > > found good modemap for: equation > > (D1,D1) -> Equation(D1) from Equation(D1) if D1 has TYPE > > > > [1] signature: (POLY(INT), POLY(INT)) -> EQ(POLY(INT)) > > implemented: slot (Polynomial (Integer))(Polynomial (Integer)) > > from EQ(POLY(INT)) > > > > > > Function Selection for jntuple > > Arguments: TUPLE(EQ(POLY(INT))) > > -> no appropriate jntuple found in Tuple(Equation(Polynomial(Integer))) > > -> no appropriate jntuple found in Tuple(Equation(Polynomial(Integer))) > > > > Modemaps from Associated Packages > > [1] String -> JLObjNamedTuple from JLObjNamedTuple > > [2] Tuple(Any) -> JLObjNamedTuple from JLObjNamedTuple > > found good modemap for: jntuple > > Tuple(Any) -> JLObjNamedTuple from JLObjNamedTuple > > > > [1] signature: TUPLE(ANY) -> JOBNTPL > > implemented: slot (Tuple (Any)) from JOBNTPL > > > > > > Function Selection for map by coercion facility (map) > > Arguments: ((EQ(POLY(INT)) -> ANY), LIST(EQ(POLY(INT)))) > > Target type: LIST(ANY) > > -> no appropriate map found in List(Equation(Polynomial(Integer))) > > -> no appropriate map found in List(Any) > > -> no appropriate map found in Any > > -> no appropriate map found in Equation(Polynomial(Integer)) > > -> no appropriate map found in Equation(Polynomial(Integer)) > > -> no appropriate map found in Any > > > > Modemaps from Associated Packages > > [1] ((D4 -> D5),List(D4)) -> List(D5) from ListFunctions2(D4,D5) > > if D4 has TYPE and D5 has TYPE > > found good modemap for: map > > ((D4 -> D5),List(D4)) -> List(D5) from ListFunctions2(D4,D5) > > if D4 has TYPE and D5 has TYPE > > > > [1] signature: ((EQ(POLY(INT)) -> ANY), LIST(EQ(POLY(INT)))) -> LIST(ANY) > > implemented: slot (List (Any))(Mapping (Any) (Equation > > (Polynomial (Integer))))(List (Equation (Polynomial (Integer)))) from > > LIST2(EQ(POLY(INT)),ANY) > > > > > > (2) (a = 12, b = 13) > > Type: JLObjNamedTuple > > Time: 0.01 (IN) + 0.01 (OT) = 0.03 sec > > =========================================================== > > > > Is this a bug in function selection? In the Modemaps list: > > > > Modemaps from Associated Packages > > [1] String -> JLObjNamedTuple from JLObjNamedTuple > > [2] Tuple(Any) -> JLObjNamedTuple from JLObjNamedTuple > > > > The first is the good one, no? > > > > I also noticed that the type of the argument is wrongly determined: > > > > (2) -> jntuple "(a=12,b=13)" > > > > Function Selection for jntuple > > Arguments: TUPLE(STRING) > > -> no appropriate jntuple found in Tuple(String) > > -> no appropriate jntuple found in Tuple(String) > > > > If you have any idea... > > > > Greg > > > > -- > > You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. > > To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. > > To view this discussion visit https://groups.google.com/d/msgid/fricas-devel/CAHnU2dYd1yCx3LqU%2BgK3S_Ct9w1qNqYYfzMmaYC5CtF3rBTnOA%40mail.gmail.com . > > -- > Waldek Hebisch > > -- > You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. > To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. > To view this discussion visit https://groups.google.com/d/msgid/fricas-devel/aYIzbyz6YzMhdKNN%40fricas.org . -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/fricas-devel/CAHnU2dZVVMGkSpK%3DDGjzWhc8cMwbHaC557Ro46zzt4V3964yAQ%40mail.gmail.com.
