Rev 12678 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 12678 | Rev 13103 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | !if $wims_read_parm!=slib_header |
1 | !if $wims_read_parm!=slib_header |
2 | !goto proc |
2 | !goto proc |
3 | !endif |
3 | !endif |
4 | 4 | ||
5 | slib_author=Bernadette, Perrin-Riou |
5 | slib_author=Bernadette, Perrin-Riou |
6 | 6 | ||
7 | slib_example=6\ |
7 | slib_example=6\ |
8 |
|
8 | 6,7\ |
- | 9 | 6,5,euler\ |
|
- | 10 | 12,5,euler |
|
- | 11 | ||
- | 12 | ||
9 | slib_require=pari |
13 | slib_require=pari |
10 | !exit |
14 | !exit |
11 | 15 | ||
12 | :proc |
16 | :proc |
13 | !reset slib_m, slib_n |
17 | !reset slib_m, slib_n |
14 | !distribute item $wims_read_parm into slib_n, slib_m, slib_option |
18 | !distribute item $wims_read_parm into slib_n, slib_m, slib_option |
15 | !default slib_m =!randint $[floor(1.5*$slib_n)], $[2*$slib_n] |
19 | !default slib_m =!randint $[floor(1.5*$slib_n)], $[2*$slib_n] |
16 | slib_sommet=!values x for x=1 to $slib_n |
20 | slib_sommet=!values x for x=1 to $slib_n |
17 | slib_u=!exec pari matrix($slib_n,$slib_n,slib_i,slib_j,if(slib_j==slib_i,slib_i)) |
21 | slib_u=!exec pari matrix($slib_n,$slib_n,slib_i,slib_j,if(slib_j==slib_i,slib_i)) |
18 | - | ||
19 | slib_u=!translate internal ; to $\ |
- | |
20 | $ in $slib_u |
- | |
21 | slib_S=1 |
- | |
22 | slib_euler=$slib_S |
- | |
23 | !for slib_k=2 to $slib_m |
- | |
24 | slib_s=!line $slib_S of $slib_u |
- | |
25 | slib_bonsom=!listcomplement $slib_s in $slib_sommet |
- | |
26 |
|
22 | !if $slib_option!=euler |
27 | slib_a = !randitem $slib_bonsom |
- | |
28 | !else |
- | |
29 | !goto end |
- | |
30 | !endif |
- | |
31 | slib_u=!translate internal $\ |
- | |
32 | $ to ; in $slib_u |
- | |
33 | slib_u=!exec pari {slib_M=Mat([$slib_u]); slib_M[$slib_a,$slib_S]=$slib_S ; slib_M[$slib_S,$slib_a]=$slib_a;print(slib_M)} |
- | |
34 | slib_u=!translate internal ; to $\ |
23 | slib_u=!translate internal ; to $\ |
35 |
|
24 | $ in $slib_u |
- | 25 | slib_S=1 |
|
36 |
|
26 | slib_euler=$slib_S |
37 |
|
27 | !for slib_k=2 to $slib_m |
38 |
|
28 | slib_s=!line $slib_S of $slib_u |
39 | - | ||
40 |
|
29 | slib_bonsom=!listcomplement $slib_s in $slib_sommet |
41 | !if |
30 | !if $slib_bonsom <> $empty |
42 |
|
31 | slib_a = !randitem $slib_bonsom |
- | 32 | !else |
|
- | 33 | !goto end |
|
- | 34 | !endif |
|
43 | slib_u=!translate internal $\ |
35 | slib_u=!translate internal $\ |
44 | $ to ; in $slib_u |
36 | $ to ; in $slib_u |
45 | slib_u=!exec pari {slib_M=Mat([$slib_u]); slib_M[$slib_a,$slib_S]=$slib_S ; slib_M[$slib_S,$slib_a]=$slib_a;print(slib_M)} |
37 | slib_u=!exec pari {slib_M=Mat([$slib_u]); slib_M[$slib_a,$slib_S]=$slib_S ; slib_M[$slib_S,$slib_a]=$slib_a;print(slib_M)} |
- | 38 | slib_u=!translate internal ; to $\ |
|
- | 39 | $ in $slib_u |
|
46 | slib_euler=$slib_euler, $slib_a |
40 | slib_euler=$slib_euler, $slib_a |
47 | slib_S=$slib_a |
41 | slib_S=$slib_a |
48 | !next |
42 | !next slib_k |
- | 43 | ||
- | 44 | slib_manquant=!listcomplement $slib_euler in $slib_sommet |
|
- | 45 | !if $slib_manquant <> $empty |
|
- | 46 | !for slib_a in $slib_manquant |
|
- | 47 | slib_u=!translate internal $\ |
|
- | 48 | $ to ; in $slib_u |
|
- | 49 | slib_u=!exec pari {slib_M=Mat([$slib_u]); slib_M[$slib_a,$slib_S]=$slib_S ; slib_M[$slib_S,$slib_a]=$slib_a;print(slib_M)} |
|
- | 50 | slib_euler=$slib_euler, $slib_a |
|
- | 51 | slib_S=$slib_a |
|
- | 52 | !next slib_a |
|
49 | !endif |
53 | !endif |
50 | :end |
54 | :end |
- | 55 | slib_m=!itemcnt $slib_euler |
|
- | 56 | ||
- | 57 | slib_u = !nonempty lines $slib_u |
|
- | 58 | slib_u=!translate internal $\ |
|
- | 59 | $ to ; in $slib_u |
|
51 | 60 | ||
- | 61 | slib_p = !shuffle $slib_n |
|
- | 62 | slib_pp =!item $slib_p of $slib_sommet |
|
- | 63 | slib_euler1= |
|
- | 64 | !for slib_i in $slib_euler |
|
- | 65 | slib_pos=!positionof item $slib_i in $slib_p |
|
- | 66 | slib_euler1=!append item $slib_pos to $slib_euler1 |
|
- | 67 | !next slib_i |
|
52 |
|
68 | slib_euler=$slib_euler1 |
- | 69 | slib_G=!exec pari slib_p = [$slib_p]; slib_M=Mat([$slib_u]); slib_M=matrix($slib_n,$slib_n,slib_i,slib_j,if(slib_i !=slib_j && slib_M[slib_i,slib_j] != 0,1)) ;matrix($slib_n,$slib_n,slib_i,slib_j,slib_M[slib_p[slib_i],slib_p[slib_j]]) |
|
- | 70 | !else graph eulerien |
|
- | 71 | !readproc slib/graph/randomconnex $slib_n, $slib_m |
|
- | 72 | slib_G=$slib_out |
|
- | 73 | !readproc slib/graph/grapheuler.gp |
|
- | 74 | slib_G=!exec pari G=graphe_eulerien([$slib_G]);C=cycle_eulerien(G);[G,C] |
|
- | 75 | slib_euler=!declosing $(slib_G[2]) |
|
- | 76 | slib_G=!declosing $(slib_G[1]) |
|
53 | 77 | ||
54 | slib_u = !nonempty lines $slib_u |
- | |
55 | slib_u=!translate internal $\ |
- | |
56 | $ to ; in $slib_u |
- | |
57 | - | ||
58 | slib_p = !shuffle $slib_n |
- | |
59 | slib_pp =!item $slib_p of $slib_sommet |
- | |
60 | slib_euler1= |
- | |
61 | !for slib_i in $slib_euler |
- | |
62 | slib_pos=!positionof item $slib_i in $slib_p |
- | |
63 | slib_euler1=!append item $slib_pos to $slib_euler1 |
- | |
64 | !next slib_i |
- | |
65 | slib_euler=$slib_euler1 |
- | |
66 | slib_G=!exec pari slib_p = [$slib_p]; slib_M=Mat([$slib_u]); slib_M=matrix($slib_n,$slib_n,slib_i,slib_j,if(slib_i !=slib_j && slib_M[slib_i,slib_j] != 0,1)) ;matrix($slib_n,$slib_n,slib_i,slib_j,slib_M[slib_p[slib_i],slib_p[slib_j]]) |
- | |
67 | - | ||
68 | !if $slib_option=1 and $(slib_euler[1])!=$(slib_euler[-1]) |
- | |
69 | slib_G=!exec pari G={[$slib_G]};\ |
- | |
70 | slib_e=[$slib_euler];\ |
- | |
71 | G[slib_e[1],slib_e[$slib_m]]=1;\ |
- | |
72 | G[slib_e[$slib_m],slib_e[1]]=1; G |
- | |
73 | slib_euler=$slib_euler, $(slib_euler[1]) |
- | |
74 | !endif |
78 | !endif |
75 | - | ||
76 | 79 | ||
77 | slib_out=[$slib_G],[$slib_euler] |
80 | slib_out=[$slib_G],[$slib_euler] |