Rev 7692 | Blame | Compare with Previous | Last modification | View Log | RSS feed
!if $wims_read_parm!=slib_header
!goto proc
!endif
slib_parms=4\
,[data]\
,N\
,K\
,n
slib_author=Sophie, Lemaire; Bernadette, Perrin-Riou
slib_example=[2,4,7],10,5,7
slib_require=pari
!exit
:proc
slib_out=$empty
!distribute item $wims_read_parm into slib_data,slib_N,slib_K,slib_n
slib_b= $[binomial($slib_N,$slib_n)^(-1)]
slib_min= $[max(0,$slib_n+$slib_K-$slib_N)]
slib_max= $[min($slib_n,$slib_N)]
!if $slib_max<$slib_min
slib_out=0
!exit
!endif
slib_data=!declosing $slib_data
slib_cnt=!itemcnt $slib_data
slib_minmax=!sort numeric item $slib_data
slib_mind=!item 1 of $slib_minmax
slib_maxd= !item -1 of $slib_minmax
!if $slib_maxd <$slib_min
slib_out=!values 0 for x=1 to $slib_cnt
!exit
!endif
!if $slib_mind >=$slib_max
slib_out=!values 1 for x=1 to $slib_cnt
!exit
!endif
slib_valeur=!exec pari vector(ceil($slib_maxd)-$slib_min+1,x,1.*binomial($slib_K,x+$slib_min-1)*binomial($slib_N-$slib_K,$slib_n-x-$slib_min+1)*$slib_b)
!for slib_x in $slib_data
!if $slib_x<$slib_min
slib_out=!append item 0 to $slib_out
!endif
!if $slib_x>$slib_max
slib_out=!append item 1 to $slib_out
!endif
!if $slib_x<=$slib_max and $slib_x>=$slib_min
slib_outx=!item 1 to $[$slib_x-$slib_min+1] of $slib_valeur
slib_outx=!replace internal , by + in $slib_outx
slib_out=!append item $[$slib_outx] to $slib_out
!endif
!next slib_x
slib_out=!trim $slib_out