* Deactivate images generation during documentation build since graphics functions...
[scilab.git] / scilab / modules / elementary_functions / macros / %spb_cumsum.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2010 -  INRIA - Serge Steer
3 // 
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at    
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 function r=%spb_cumsum(a,d,typ)
11   if argn(2)==1 then
12     typ=list()
13     d='*'
14   elseif argn(2)==2 then 
15     if argn(2)==2& or(d==['native','double']) then
16       typ=list(d)
17       d='*'
18     else
19       typ=list()
20     end
21   else
22     typ=list(typ)
23   end
24   if size(d,'*')<>1 then 
25     if type(d)==10 then
26       error(msprintf(_("%s: Wrong size for input argument #%d: A string expected.\n"),"cumsum",2))
27     else
28       error(msprintf(_("%s: Wrong size for input argument #%d: A scalar expected.\n"),"cumsum",2))
29     end
30   end
31
32   if type(d)==10 then
33     d=find(d==['m','*','r','c'])
34     if d==[] then
35       error(msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"),..
36                      "cumsum",2,"""*"",""r"",""c"",""m"",1:"+string(ndims(a))))
37     end
38     d=d-2
39   end
40   
41   dims=size(a)
42
43   if d==-1 then 
44     //sum(x,'m'), determine the summation direction
45     d=find(dims>1,1)
46     if d==[] then d=0,end
47   end
48   if d<0 then
49     error(msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"),..
50                      "cumsum",2,"""*"",""r"",""c"",""m"",1:"+string(ndims(a))))
51   end
52   
53   if typ<>list('native') then
54     r=sparse(dims,0,dims);
55   else
56     r=sparse(dims,%f,dims);
57   end
58   
59   select d
60   case 0 then
61     ij=spget(a)
62     if size(ij,1)==0 then return,end
63     if dims(1)==1 then
64         mnj=min(ij(:,2))
65         r(1,mnj:$)=sparse(cumsum(full(a(1,mnj:$)),typ(:)))
66     elseif dims(2)==1 then
67       mni=min(ij(:,1))
68       r(mni:$,1)=sparse(cumsum(full(a(mni:$,1)),typ(:)))
69     else
70       mnj=min(ij(:,2))
71       r(:,mnj:dims(2))=sparse(cumsum(full(a(:,mnj:$)),typ(:)))
72     end
73   case 1 then
74     for k=1:dims(2)
75       ij=spget(a(:,k))
76       if size(ij,1)<>0 then
77         mni=min(ij(:,1))
78         r(mni:$,k)=sparse(cumsum(full(a(mni:$,k)),typ(:)))
79       end
80     end
81   case 2 then
82     for k=1:dims(1)
83       ij=spget(a(k,:))
84       if size(ij,1)<>0 then
85         mnj=min(ij(:,2))
86         r(k,mnj:$)=sparse(cumsum(full(a(k,mnj:$)),typ(:)))
87       end
88     end
89   else
90     if typ==list('native') then
91       r=a
92     else
93       r=bool2s(a)
94     end
95   end
96  
97 endfunction