Karim BELABAS on Thu, 17 Apr 2003 15:54:14 +0200 (MEST)

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: point notation

On 17 Apr 2003, Markus Endres wrote:
> I'm going to write a routine called GrInit which initialize a group ring
> K[G] (like nfinit or bnfinit) in some way, returns something like the
> wedderburn decomposition, K-irreducible characters, the maximal order
> and something more.
> now, I want to use the point notation as in nfinit/bnfinit. that means,
> I want a possibility to call my results like K.disc in K=nfinit(pol), as
> example: KG=GrInit(...); KG.Kchi; which returns the characters
> This point notation would be very useful for me. Is there any
> possibility to write such a 'point notation' by my own?

(11:25) gp > x.Kchi = x[2] \\ definition
(11:25) gp > [1,2,3].Kchi
%1 = 2

It's paragraph 2.6.4 in User's manual (stable branch. It's 2.6.5 in CVS).

See my "Contributed GP scripts" page for some examples, especially


1) this might work better (i.e faster, possibly more reliable) on the
_unstable_ branch (i.e from CVS).

2) for trivial accessors like the above, member functions are about twice
slower than direct access (that's still about 10^6 accesses per second on a
1GHz machine).

OTOH, member functions are much _faster_ than general user functions, in
particular argument passing is much more efficient [ user functions
copy their arguments, member functions don't. Allowing passing arguments as
pointers has been discussed, but is not implemented yet ]

  ? D(nf) = nf[3]
  ? nf.D  = nf[3]
  ? nf = nfinit(x^10-2);
  ? for (i=1,10000, D(nf));
  time = 1,990 ms.            \\ 10000 useless copies ...
  ? for (i=1,10000, nf.D);
  time = 20 ms.

Hope this helps,

Karim Belabas                     Tel: (+33) (0)1 69 15 57 48
Dép. de Mathématiques, Bât. 425   Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud              http://www.math.u-psud.fr/~belabas/
F-91405 Orsay (France)            http://www.parigp-home.de/  [PARI/GP]