<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><p style="font:14px/1.5 Lucida Grande;margin:0;">Dear all,</p><p style="font:14px/1.5 Lucida Grande;margin:0;"><br></p><p style="font:14px/1.5 Lucida Grande;margin:0;">I got a strange behaviour while implementing the archive in user-defined class,</p><p style="font:14px/1.5 Lucida Grande;margin:0;">to make the behaviour more explicitly, let me post the C++ code here:</p><p style="font:14px/1.5 Lucida Grande;margin:0;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(196, 26, 22);"><span style="color: #643820">#include </span><ginac/ginac.h></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(100, 56, 32);">#include <span style="color: #c41a16"><fstream></span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(155, 35, 147);"><b>using</b><span style="color: rgba(0, 0, 0, 0.85)"> </span><b>namespace</b><span style="color: rgba(0, 0, 0, 0.85)"> </span><span style="color: #0b4f79">GiNaC</span><span style="color: rgba(0, 0, 0, 0.85)">;</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(155, 35, 147);"><b>using</b><span style="color: rgba(0, 0, 0, 0.85)"> </span><b>namespace</b><span style="color: rgba(0, 0, 0, 0.85)"> </span><span style="color: #0b4f79">std</span><span style="color: rgba(0, 0, 0, 0.85)">;</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);"><span style="color: #9b2393"><b>class</b></span> <span style="color: #0b4f79">Symbol</span> : <span style="color: #9b2393"><b>public</b></span> symbol {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(15, 104, 160);">GINAC_DECLARE_REGISTERED_CLASS<span style="color: rgba(0, 0, 0, 0.85)">(Symbol, symbol)</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(155, 35, 147);"><b>public</b><span style="color: rgba(0, 0, 0, 0.85)">:</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #0f68a0">Symbol</span>(<span style="color: #9b2393"><b>const</b></span> string &s);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>void</b></span> <span style="color: #0f68a0">archive</span>(archive_node & n) <span style="color: #9b2393"><b>const</b></span> <span style="color: #9b2393"><b>override</b></span>;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>void</b></span> <span style="color: #0f68a0">read_archive</span>(<span style="color: #9b2393"><b>const</b></span> archive_node& n, lst& sym_lst) <span style="color: #9b2393"><b>override</b></span>;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(155, 35, 147);"><span style="color: rgba(0, 0, 0, 0.85)">    </span><b>unsigned</b><span style="color: rgba(0, 0, 0, 0.85)"> </span><span style="color: #0f68a0">calchash</span><span style="color: rgba(0, 0, 0, 0.85)">() </span><b>const</b><span style="color: rgba(0, 0, 0, 0.85)"> </span><b>override</b><span style="color: rgba(0, 0, 0, 0.85)">;</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">};</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(15, 104, 160);">GINAC_DECLARE_UNARCHIVER<span style="color: rgba(0, 0, 0, 0.85)">(Symbol);</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(15, 104, 160);">GINAC_IMPLEMENT_REGISTERED_CLASS<span style="color: rgba(0, 0, 0, 0.85)">(Symbol, symbol)</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(15, 104, 160);">GINAC_BIND_UNARCHIVER<span style="color: rgba(0, 0, 0, 0.85)">(Symbol);</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);"><span style="color: #9b2393"><b>const</b></span> symbol & <span style="color: #0f68a0">get_symbol</span>(<span style="color: #9b2393"><b>const</b></span> string & s) {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>static</b></span> map<string, symbol> dict;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>if</b></span> (dict.find(s) == dict.end()) dict[s] = symbol(s);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>return</b></span> dict[s];</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(15, 104, 160);">Symbol<span style="color: rgba(0, 0, 0, 0.85)">::</span>Symbol<span style="color: rgba(0, 0, 0, 0.85)">() { }</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);"><span style="color: #0f68a0">Symbol</span>::<span style="color: #0f68a0">Symbol</span>(<span style="color: #9b2393"><b>const</b></span> string &s) : symbol(get_symbol(s)) {  }</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(15, 104, 160);"><span style="color: #9b2393"><b>int</b></span><span style="color: rgba(0, 0, 0, 0.85)"> </span>Symbol<span style="color: rgba(0, 0, 0, 0.85)">::</span>compare_same_type<span style="color: rgba(0, 0, 0, 0.85)">(</span><span style="color: #9b2393"><b>const</b></span><span style="color: rgba(0, 0, 0, 0.85)"> basic &other) </span><span style="color: #9b2393"><b>const</b></span><span style="color: rgba(0, 0, 0, 0.85)"> {</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>const</b></span> Symbol &o = <span style="color: #9b2393"><b>static_cast</b></span><<span style="color: #9b2393"><b>const</b></span> Symbol &>(other);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>int</b></span> ret = get_name().compare(o.get_name());</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>if</b></span>(ret==<span style="color: #1c00cf">0</span>) <span style="color: #9b2393"><b>return</b></span> <span style="color: #1c00cf">0</span>;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>else</b></span> <span style="color: #9b2393"><b>if</b></span>(ret<<span style="color: #1c00cf">0</span>) <span style="color: #9b2393"><b>return</b></span> -<span style="color: #1c00cf">1</span>;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(155, 35, 147);"><span style="color: rgba(0, 0, 0, 0.85)">    </span><b>else</b><span style="color: rgba(0, 0, 0, 0.85)"> </span><b>return</b><span style="color: rgba(0, 0, 0, 0.85)"> </span><span style="color: #1c00cf">1</span><span style="color: rgba(0, 0, 0, 0.85)">;</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"> </p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);"><span style="color: #9b2393"><b>void</b></span> <span style="color: #0f68a0">Symbol</span>::<span style="color: #0f68a0">archive</span>(archive_node & n) <span style="color: #9b2393"><b>const</b></span> {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    inherited::archive(n);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;">    </p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);"><span style="color: #9b2393"><b>void</b></span> <span style="color: #0f68a0">Symbol</span>::<span style="color: #0f68a0">read_archive</span>(<span style="color: #9b2393"><b>const</b></span> archive_node& n, lst& sym_lst) {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    inherited::read_archive(n, sym_lst);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    *<span style="color: #9b2393"><b>this</b></span> = Symbol(get_name());</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(15, 104, 160);"><span style="color: #9b2393"><b>unsigned</b></span><span style="color: rgba(0, 0, 0, 0.85)"> </span>Symbol<span style="color: rgba(0, 0, 0, 0.85)">::</span>calchash<span style="color: rgba(0, 0, 0, 0.85)">() </span><span style="color: #9b2393"><b>const</b></span><span style="color: rgba(0, 0, 0, 0.85)"> {</span></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>static</b></span> <span style="color: #9b2393"><b>auto</b></span> hash = symbol(<span style="color: #c41a16">"_"</span>).gethash();</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>return</b></span> hash;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);"><span style="color: #9b2393"><b>int</b></span> <span style="color: #0f68a0">main</span>() {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    Symbol k1(<span style="color: #c41a16">"k1"</span>), k2(<span style="color: #c41a16">"k2"</span>);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>auto</b></span> garfn = <span style="color: #c41a16">"tmp.gar"</span>;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;">    </p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        archive ar;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        ex val = lst{ k1*k1, k2*k2 };</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        ar.archive_ex(val, <span style="color: #c41a16">"key"</span>);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        ofstream out(garfn);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        out << ar;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        out.close();</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        cout << <span style="color: #c41a16">"writed: "</span> << val << endl;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    } {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        archive ar;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        ifstream in(garfn);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        in >> ar;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        in.close();</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        <span style="color: #9b2393"><b>auto</b></span> val = ar.unarchive_ex(lst{}, <span style="color: #c41a16">"key"</span>);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        cout << <span style="color: #c41a16">"read: "</span> << val << endl;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    }</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(93, 108, 121);"><span style="color: rgba(0, 0, 0, 0.85)">    </span>// console output is</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(93, 108, 121);"><span style="color: rgba(0, 0, 0, 0.85)">    </span>// writed: {k1^2,k2^2}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(93, 108, 121);"><span style="color: rgba(0, 0, 0, 0.85)">    </span>// read: {k1^2,k2^2}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;">    </p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        archive ar;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        ex val = lst{ k1*k1==<span style="color: #1c00cf">0</span>, k2*k2==<span style="color: #1c00cf">0</span> };</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        ar.archive_ex(val, <span style="color: #c41a16">"key"</span>);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        ofstream out(garfn);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        out << ar;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        out.close();</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        cout << <span style="color: #c41a16">"writed: "</span> << val << endl;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    } {</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        archive ar;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        ifstream in(garfn);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        in >> ar;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        in.close();</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        <span style="color: #9b2393"><b>auto</b></span> val = ar.unarchive_ex(lst{}, <span style="color: #c41a16">"key"</span>);</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">        cout << <span style="color: #c41a16">"read: "</span> << val << endl;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    }</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(93, 108, 121);"><span style="color: rgba(0, 0, 0, 0.85)">    </span>// console output is</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(93, 108, 121);"><span style="color: rgba(0, 0, 0, 0.85)">    </span>// writed: {k1^2==0,k2^2==0}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(93, 108, 121);"><span style="color: rgba(0, 0, 0, 0.85)">    </span>// read: {k1^2==0,k1^2==0} </p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(93, 108, 121);"><span style="color: rgba(0, 0, 0, 0.85)">    </span>// Note that the last line above, both items are the same: k1^2==0</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;">    </p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">    <span style="color: #9b2393"><b>return</b></span> <span style="color: #1c00cf">0</span>;</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">}</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">Here I want to introduce a class Symbol, when one defines Symbol a(“a”), b(“a”);,</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85);">then a and b will be the same or equal, so I override the method compare_same_type.</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;">The last console output seems very strange to me, the both items are the same,</p><p style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 15px;"><font face="Menlo" size="2"><span style="color: rgba(0, 0, 0, 0.85);">while the expected result is "</span></font><font color="#5d6c79" face="Menlo" size="2"><span style="caret-color: rgb(93, 108, 121);">read: {k1^2==0,k2^2==0}”.</span></font></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;">Thanks very much!</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;"><br></p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;">Best regards!</p><p style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: Menlo; color: rgba(0, 0, 0, 0.85); min-height: 15px;">Feng</p>