Subversion Repositories wimsdev

Rev

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
6,7
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
  !if $slib_bonsom <> $empty
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
$  in $slib_u
24
  $ in $slib_u
-
 
25
  slib_S=1
36
  slib_euler=$slib_euler, $slib_a
26
  slib_euler=$slib_S
37
  slib_S=$slib_a
27
  !for slib_k=2 to $slib_m
38
!next slib_k
28
    slib_s=!line $slib_S of $slib_u
39
 
-
 
40
slib_manquant=!listcomplement $slib_euler in $slib_sommet
29
    slib_bonsom=!listcomplement $slib_s in $slib_sommet
41
!if $slib_manquant <> $empty
30
    !if $slib_bonsom <> $empty
42
  !for slib_a in $slib_manquant
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 slib_a
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
slib_m=!itemcnt $slib_euler
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]