From: <cde...@us...> - 2010-10-28 17:08:33
|
Revision: 7891 http://octave.svn.sourceforge.net/octave/?rev=7891&view=rev Author: cdemills Date: 2010-10-28 17:08:27 +0000 (Thu, 28 Oct 2010) Log Message: ----------- Various fixes and improvment Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-10-28 14:39:05 UTC (rev 7890) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-10-28 17:08:27 UTC (rev 7891) @@ -33,7 +33,7 @@ case 1 resu = A; - for indi=1:length(varargin), + for indi = 1:length(varargin), B = varargin{indi}; if !isa(B, 'dataframe'), if iscell(B) && 2 == length(B), @@ -81,7 +81,8 @@ case 2 resu = A; - for indi=1:length(varargin), + + for indi = 1:length(varargin), B = varargin{indi}; if !isa(B, 'dataframe'), if iscell(B) && 2 == length(B), @@ -99,19 +100,15 @@ endif resu._name{2} = vertcat(resu._name{2}, B._name{2}); resu._over{2} = [resu._over{2} B._over{2}]; - indj = resu._cnt(2) + 1; - for indi = 1:B._cnt(2), - resu._data{indj} = B._data{indi}; - resu._type{indj} = B._type{indi}; - indj = indj + 1; - endfor + resu._data(resu._cnt(2)+(1:B._cnt(2))) = B._data; + resu._type(resu._cnt(2)+(1:B._cnt(2))) = B._type; resu._cnt(2) = resu._cnt(2) + B._cnt(2); endfor case 3 resu = A; - for indi=1:length(varargin), + for indi = 1:length(varargin), B = varargin{indi}; if !isa(B, 'dataframe'), if iscell(B) && 2 == length(B), Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m 2010-10-28 14:39:05 UTC (rev 7890) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m 2010-10-28 17:08:27 UTC (rev 7891) @@ -26,29 +26,24 @@ %# %# $Id: minus.m 852 2010-07-22 10:47:55Z dupuis $ %# - +keyboard [A, B] = df_basecomp(A, B); - +keyboard if isscalar(A) %# B is a dataframe resu = B; - for indi = 1:B._cnt(2), - resu._data{indi} = A-B._data{indi}; - endfor + resu._data = cellfun(@(x) A-x, B._data, "UniformOutput", false); return elseif ismatrix(A), resu = B; - for indi = 1:B._cnt(2), - resu._data{indi} = A(indi, :) - B._data{indi}; - endfor + resu._data = cellfun(@(x, y) x-y, num2cell(A, 1), B._data, \ + "UniformOutput", false); return endif if isscalar(B), resu = A; - for indi = 1:A._cnt(2), - resu._data{indi} = A._data{indi} -B; - endfor + resu._data = cellfun(@(x) x-B, A._data, "UniformOutput", false); return elseif ismatrix(B), resu = A; Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m 2010-10-28 14:39:05 UTC (rev 7890) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m 2010-10-28 17:08:27 UTC (rev 7891) @@ -53,7 +53,7 @@ s = statistics(df._data{:, indi}); s = s([1:3 6 4:5]); %# generate a column with name and fields name - resuR = strjust([deblank(df._name{1, 2}(indi, :)); + resuR = strjust([deblank(df._name{1, 2}{indi, :}); "Min. :"; "1st Qu.:"; "Median :"; "Mean :"; "3rd Qu.:"; "Max. :"], 'right'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-10-29 07:14:38
|
Revision: 7892 http://octave.svn.sourceforge.net/octave/?rev=7892&view=rev Author: cdemills Date: 2010-10-29 07:14:29 +0000 (Fri, 29 Oct 2010) Log Message: ----------- Implemented the basic matrix-like ops on DF Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_check_char_array.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strjust.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strset.m trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m trunk/octave-forge/extra/dataframe/inst/@dataframe/uminus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/uplus.m Property Changed: ---------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m trunk/octave-forge/extra/dataframe/inst/@dataframe/isempty.m trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_check_char_array.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strjust.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strset.m trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -26,7 +26,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: cat.m 1025 2010-08-02 08:55:55Z dupuis $ + %# $Id$ %# switch dim Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -55,7 +55,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: dataframe.m 1036 2010-08-03 16:24:01Z dupuis $ + %# $Id$ %# if 0 == nargin Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -24,7 +24,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: display.m 1027 2010-08-02 08:59:39Z dupuis $ + %# $Id$ %# %# generate header name Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -24,7 +24,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: end.m 852 2010-07-22 10:47:55Z dupuis $ + %# $Id$ %# try Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -28,7 +28,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: fold.m 1016 2010-07-30 13:49:35Z dupuis $ + %# $Id$ %# switch dim case 1 Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m ___________________________________________________________________ Added: svn:keywords + Id Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/isempty.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -1,7 +1,7 @@ function resu = minus(A, B); %# function resu = minus(A, B) - %# Implements the '-' operator when at least one one argument is a dataframe. + %# Implements the '-' operator when at least one argument is a dataframe. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% @@ -24,38 +24,37 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: minus.m 852 2010-07-22 10:47:55Z dupuis $ + %# $Id$ %# -keyboard + [A, B] = df_basecomp(A, B); -keyboard - if isscalar(A) - %# B is a dataframe - resu = B; - resu._data = cellfun(@(x) A-x, B._data, "UniformOutput", false); - return - elseif ismatrix(A), - resu = B; - resu._data = cellfun(@(x, y) x-y, num2cell(A, 1), B._data, \ - "UniformOutput", false); - return - endif - if isscalar(B), + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + resu = B; + if isscalar(A) + resu._data = cellfun(@(x) A-x, B._data, "UniformOutput", false); + elseif ismatrix(A), + resu._data = cellfun(@(x, y) x-y, num2cell(A, 1), B._data,\ + "UniformOutput", false); + else + error("Operator - not implemented"); + endif + else + resu = A; + resu._data = cellfun(@(x, y) x-y, A._data, B._data,\ + "UniformOutput", false); + endif + else resu = A; - resu._data = cellfun(@(x) x-B, A._data, "UniformOutput", false); - return - elseif ismatrix(B), - resu = A; - for indi = 1:A._cnt(2), - resu._data{indi} = A._data{indi} -B(:, indi); - endfor - return + if isscalar(B), + resu._data = cellfun(@(x) x-B, A._data, "UniformOutput", false); + elseif ismatrix(B), + resu._data = cellfun(@(x, y) x-y, A._data, num2cell(B, 1),\ + "UniformOutput", false); + else + error("Operator - not implemented"); + endif endif - - resu = A; - for indi = 1:A._cnt(2), - resu._data{indi} = A._data{indi} -B._data{indi}; - endfor - + endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -0,0 +1,57 @@ +function resu = mldivide(A, B); + + %# function resu = mldivide(A, B) + %# Implements the '\' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + [A, B] = df_basecomp(A, B); + + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + resu = B; + if isscalar(A) + resu._data = cellfun(@(x) A<x, B._data, "UniformOutput", false); + elseif ismatrix(A), + resu._data = num2cell(A\cell2mat(B._data), 1); + else + error("Operator \ not implemented"); + endif + else + resu = A; + resu._data = num2cell(cell2mat(A._data)\cell2mat(B._data), 1); + endif + else + resu = A; + if isscalar(B), + resu._data = cellfun(@(x) x\B, A._data, "UniformOutput", false); + elseif ismatrix(B), + resu._data = num2cell(cell2mat(A._data)\B, 1); + else + error("Operator \ not implemented"); + endif + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -0,0 +1,57 @@ +function resu = mrdivide(A, B); + + %# function resu = mrdivide(A, B) + %# Implements the '*' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + [A, B] = df_basecomp(A, B); + + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + resu = B; + if isscalar(A) + resu._data = cellfun(@(x) A/x, B._data, "UniformOutput", false); + elseif ismatrix(A), + resu._data = num2cell(A/cell2mat(B._data), 1); + else + error("Operator / not implemented"); + endif + else + resu = A; + resu._data = num2cell(cell2mat(A._data)/cell2mat(B._data), 1); + endif + else + resu = A; + if isscalar(B), + resu._data = cellfun(@(x) x/B, A._data, "UniformOutput", false); + elseif ismatrix(B), + resu._data = num2cell(cell2mat(A._data)/B, 1); + else + error("Operator / not implemented"); + endif + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -0,0 +1,57 @@ +function resu = mtimes(A, B); + + %# function resu = mtimes(A, B) + %# Implements the '*' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + [A, B] = df_basecomp(A, B); + + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + resu = B; + if isscalar(A) + resu._data = cellfun(@(x) A*x, B._data, "UniformOutput", false); + elseif ismatrix(A), + resu._data = num2cell(A*cell2mat(B._data), 1); + else + error("Operator * not implemented"); + endif + else + resu = A; + resu._data = num2cell(cell2mat(A._data)*cell2mat(B._data), 1); + endif + else + resu = A; + if isscalar(B), + resu._data = cellfun(@(x) x*B, A._data, "UniformOutput", false); + elseif ismatrix(B), + resu._data = num2cell(cell2mat(A._data)*B, 1); + else + error("Operator * not implemented"); + endif + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -24,7 +24,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: numel.m 981 2010-07-26 16:23:08Z dupuis $ + %# $Id$ %# if isempty(varargin), Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -1,7 +1,7 @@ -function resu = minus(A, B); +function resu = plus(A, B); - %# function resu = minus(A, B) - %# Implements the '-' operator when at least one one argument is a dataframe. + %# function resu = plus(A, B) + %# Implements the '+' operator when at least one argument is a dataframe. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% @@ -24,31 +24,37 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: plus.m 852 2010-07-22 10:47:55Z dupuis $ + %# $Id$ %# [A, B] = df_basecomp(A, B); - if isscalar(A) - %# B is a dataframe - resu = B; - for indi = 1:B._cnt(2), - resu._data{indi} = A+B._data{indi}; - endfor - return - endif - - if isscalar(B), + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + resu = B; + if isscalar(A) + resu._data = cellfun(@(x) A+x, B._data, "UniformOutput", false); + elseif ismatrix(A), + resu._data = cellfun(@(x, y) x+y, num2cell(A, 1), B._data,\ + "UniformOutput", false); + else + error("Operator + not implemented"); + endif + else + resu = A; + resu._data = cellfun(@(x, y) x+y, A._data, B._data,\ + "UniformOutput", false); + endif + else resu = A; - for indi = 1:A._cnt(2), - resu._data{indi} = A._data{indi}+B; - endfor - return + if isscalar(B), + resu._data = cellfun(@(x) x+B, A._data, "UniformOutput", false); + elseif ismatrix(B), + resu._data = cellfun(@(x, y) x+y, A._data, num2cell(B, 1),\ + "UniformOutput", false); + else + error("Operator + not implemented"); + endif endif - - resu = A; - for indi = 1:A._cnt(2), - resu._data{indi} = A._data{indi} + B._data{indi}; - endfor - + endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -25,7 +25,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: df_basecomp.m 852 2010-07-22 10:47:55Z dupuis $ + %# $Id$ %# if isscalar(A) || isscalar(B) Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_check_char_array.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_check_char_array.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_check_char_array.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -23,7 +23,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: df_check_char_array.m 852 2010-07-22 10:47:55Z dupuis $ + %# $Id$ %# if 2 == nargin, required = [nelem 1]; endif Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_check_char_array.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -27,7 +27,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: df_name2idx.m 1037 2010-08-03 16:25:05Z dupuis $ + %# $Id$ %# if isempty(subs), Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -27,7 +27,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: df_pad.m 1028 2010-08-03 10:10:26Z dupuis $ + %# $Id$ %# switch dim Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strjust.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strjust.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strjust.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -23,7 +23,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: df_strjust.m 852 2010-07-22 10:47:55Z dupuis $ + %# $Id$ %# indi = size(a, 2) - size(b, 2); Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strjust.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strset.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strset.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strset.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -25,7 +25,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: df_strset.m 1020 2010-07-30 15:21:23Z dupuis $ + %# $Id$ %# %# adjust x size, if required Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_strset.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -23,7 +23,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: size.m 852 2010-07-22 10:47:55Z dupuis $ + %# $Id$ %# switch nargin Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -24,7 +24,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: subsasgn.m 1035 2010-08-03 16:22:58Z dupuis $ + %# $Id$ %# switch(S(1).type) Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -32,7 +32,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: subsref.m 1034 2010-08-03 16:22:09Z dupuis $ + %# $Id$ %# %# what kind of object should we return ? Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m 2010-10-28 17:08:27 UTC (rev 7891) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -26,7 +26,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: summary.m 852 2010-07-22 10:47:55Z dupuis $ + %# $Id$ %# dummy = df._type; resu = []; Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/summary.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/uminus.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/uminus.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/uminus.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -0,0 +1,33 @@ +function resu = uminus(A); + + %# function resu = uminus(A) + %# Implements the unitary '-' operator for a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = A; + resu._data = cellfun(@(x) -x, A._data, "UniformOutput", false); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/uminus.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/uplus.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/uplus.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/uplus.m 2010-10-29 07:14:29 UTC (rev 7892) @@ -0,0 +1,33 @@ +function resu = uplus(A); + + %# function resu = uplus(A) + %# Implements the unitary '+' operator for a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = A; + resu._data = cellfun(@(x) +x, A._data, "UniformOutput", false); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/uplus.m ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-10-29 08:19:21
|
Revision: 7893 http://octave.svn.sourceforge.net/octave/?rev=7893&view=rev Author: cdemills Date: 2010-10-29 08:19:14 +0000 (Fri, 29 Oct 2010) Log Message: ----------- Implemented the dotted basic matrix-like ops on DF Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m 2010-10-29 08:19:14 UTC (rev 7893) @@ -0,0 +1,60 @@ +function resu = ldivide(A, B); + + %# function resu = ldivide(A, B) + %# Implements the '-' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + [A, B] = df_basecomp(A, B); + + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + resu = B; + if isscalar(A) + resu._data = cellfun(@(x) A.\x, B._data, "UniformOutput", false); + elseif ismatrix(A), + resu._data = cellfun(@(x, y) x.\y, num2cell(A, 1), B._data,\ + "UniformOutput", false); + else + error("Operator .\ not implemented"); + endif + else + resu = A; + resu._data = cellfun(@(x, y) x.\y, A._data, B._data,\ + "UniformOutput", false); + endif + else + resu = A; + if isscalar(B), + resu._data = cellfun(@(x) x.\B, A._data, "UniformOutput", false); + elseif ismatrix(B), + resu._data = cellfun(@(x, y) x.\y, A._data, num2cell(B, 1),\ + "UniformOutput", false); + else + error("Operator .\ not implemented"); + endif + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m 2010-10-29 07:14:29 UTC (rev 7892) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m 2010-10-29 08:19:14 UTC (rev 7893) @@ -33,7 +33,7 @@ if !isa(A, 'dataframe'), resu = B; if isscalar(A) - resu._data = cellfun(@(x) A<x, B._data, "UniformOutput", false); + resu._data = cellfun(@(x) A\x, B._data, "UniformOutput", false); elseif ismatrix(A), resu._data = num2cell(A\cell2mat(B._data), 1); else Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m 2010-10-29 08:19:14 UTC (rev 7893) @@ -0,0 +1,60 @@ +function resu = rdivide(A, B); + + %# function resu = rdivide(A, B) + %# Implements the '.*' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + [A, B] = df_basecomp(A, B); + + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + resu = B; + if isscalar(A) + resu._data = cellfun(@(x) A./x, B._data, "UniformOutput", false); + elseif ismatrix(A), + resu._data = cellfun(@(x, y) x./y, num2cell(A, 1), B._data,\ + "UniformOutput", false); + else + error("Operator ./ not implemented"); + endif + else + resu = A; + resu._data = cellfun(@(x, y) x./y, A._data, B._data,\ + "UniformOutput", false); + endif + else + resu = A; + if isscalar(B), + resu._data = cellfun(@(x) x./B, A._data, "UniformOutput", false); + elseif ismatrix(B), + resu._data = cellfun(@(x, y) x./y, A._data, num2cell(B, 1),\ + "UniformOutput", false); + else + error("Operator ./ not implemented"); + endif + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m 2010-10-29 08:19:14 UTC (rev 7893) @@ -0,0 +1,60 @@ +function resu = times(A, B); + + %# function resu = times(A, B) + %# Implements the '.*' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + [A, B] = df_basecomp(A, B); + + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + resu = B; + if isscalar(A) + resu._data = cellfun(@(x) A.*x, B._data, "UniformOutput", false); + elseif ismatrix(A), + resu._data = cellfun(@(x, y) x.*y, num2cell(A, 1), B._data,\ + "UniformOutput", false); + else + error("Operator .* not implemented"); + endif + else + resu = A; + resu._data = cellfun(@(x, y) x.*y, A._data, B._data,\ + "UniformOutput", false); + endif + else + resu = A; + if isscalar(B), + resu._data = cellfun(@(x) x.*B, A._data, "UniformOutput", false); + elseif ismatrix(B), + resu._data = cellfun(@(x, y) x.*y, A._data, num2cell(B, 1),\ + "UniformOutput", false); + else + error("Operator .* not implemented"); + endif + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-10 08:41:19
|
Revision: 7905 http://octave.svn.sourceforge.net/octave/?rev=7905&view=rev Author: cdemills Date: 2010-11-10 08:41:13 +0000 (Wed, 10 Nov 2010) Log Message: ----------- Various typos corrected in the help text Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/isempty.m trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/isempty.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/isempty.m 2010-11-09 21:27:59 UTC (rev 7904) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/isempty.m 2010-11-10 08:41:13 UTC (rev 7905) @@ -1,6 +1,6 @@ function resu = isempty(df) %# -*- texinfo -*- - %# @deftypefn {Function File} isempty(@var{df) + %# @deftypefn {Function File} isempty(@var{df}) %# Return 1 if df is an empty dataframe (either the number of rows, or %# the number of columns, or both are zero). Otherwise, return 0. %# @end deftypefn Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m 2010-11-09 21:27:59 UTC (rev 7904) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m 2010-11-10 08:41:13 UTC (rev 7905) @@ -1,7 +1,7 @@ function resu = ldivide(A, B); %# function resu = ldivide(A, B) - %# Implements the '-' operator when at least one argument is a dataframe. + %# Implements the dotted '\' operator when at least one argument is a dataframe. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m 2010-11-09 21:27:59 UTC (rev 7904) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m 2010-11-10 08:41:13 UTC (rev 7905) @@ -1,7 +1,7 @@ function resu = mrdivide(A, B); %# function resu = mrdivide(A, B) - %# Implements the '*' operator when at least one argument is a dataframe. + %# Implements the '/' operator when at least one argument is a dataframe. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m 2010-11-09 21:27:59 UTC (rev 7904) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m 2010-11-10 08:41:13 UTC (rev 7905) @@ -1,7 +1,7 @@ function resu = rdivide(A, B); %# function resu = rdivide(A, B) - %# Implements the '.*' operator when at least one argument is a dataframe. + %# Implements the dotted '\' operator when at least one argument is a dataframe. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m 2010-11-09 21:27:59 UTC (rev 7904) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m 2010-11-10 08:41:13 UTC (rev 7905) @@ -1,7 +1,7 @@ function resu = times(A, B); %# function resu = times(A, B) - %# Implements the '.*' operator when at least one argument is a dataframe. + %# Implements the dotted '*' operator when at least one argument is a dataframe. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-16 18:01:37
|
Revision: 7922 http://octave.svn.sourceforge.net/octave/?rev=7922&view=rev Author: cdemills Date: 2010-11-16 18:01:31 +0000 (Tue, 16 Nov 2010) Log Message: ----------- Removed a typo: indi=>indr Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-16 17:28:54 UTC (rev 7921) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-16 18:01:31 UTC (rev 7922) @@ -164,12 +164,12 @@ %# cut into lines -- include the EOL to have a one-to-one %# matching between line numbers. Use a non-greedy match. lines = regexp(in, ['.*?' eol], 'match'); - dummy = cellfun(@(x) regexp(x, eol), lines); + dummy = cellfun(@(x) regexp(x, eol), lines); %# remove the EOL character(s) lines(1==dummy) = {""}; %# use a positive lookahead -- eol is not part of the match - lines(dummy > 1) = cellfun(@(x) regexp(x, ['.*(?=' eol ')'], 'match'), \ - lines(dummy > 1)); + lines(dummy > 1) = cellfun(@(x) regexp(x, ['.*?(?=' eol ')'], \ + 'match'), lines(dummy > 1)); %# a field either starts at a word boundary, either by + - . for %# a numeric data, either by ' for a string. Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-16 17:28:54 UTC (rev 7921) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-16 18:01:31 UTC (rev 7922) @@ -254,7 +254,7 @@ endif dummy = dummy && (!isempty(cname) && size(cname{1}, 2) < 1); if dummy, - ridx = cell2mat(RHS(:, 1)); + ridx = cell2mat(RHS(:, 1)); %# can it be converted to a list of unique numbers ? if length(unique(ridx)) == length(ridx), ridx = RHS(:, 1); RHS = RHS(:, 2:end); @@ -506,7 +506,7 @@ if 1 == size(RHS, 1), dummy(indr) = ridx{1}; else - dummy(indr) = vertcat(ridx{indi}); + dummy(indr) = vertcat(ridx{indr}); endif if length(unique(dummy)) != length(dummy), %# || \ %# any(diff(dummy) <= 0), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-17 17:07:43
|
Revision: 7931 http://octave.svn.sourceforge.net/octave/?rev=7931&view=rev Author: cdemills Date: 2010-11-17 17:07:37 +0000 (Wed, 17 Nov 2010) Log Message: ----------- Try to detect more cases of badly formatted regexpes Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-17 15:12:16 UTC (rev 7930) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-17 17:07:37 UTC (rev 7931) @@ -160,7 +160,10 @@ unwind_protect_cleanup fclose(fid); end_unwind_protect - eol = '(\r\n|\n|\r|\f|\x85)'; + %# explicit list taken from 'man pcrepattern' -- we enclose all + %# vertical separators in case the underlying regexp engine + %# doesn't have them all. + eol = '(\r\n|\n|\v|\f|\r|\x85)'; %# cut into lines -- include the EOL to have a one-to-one %# matching between line numbers. Use a non-greedy match. lines = regexp(in, ['.*?' eol], 'match'); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m 2010-11-17 15:12:16 UTC (rev 7930) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m 2010-11-17 17:07:37 UTC (rev 7931) @@ -61,15 +61,16 @@ %# translate list of variables to list of indices for indi= 1:size(subs, 1), %# regexp doesn't like empty patterns - if isempty(subs{indi}), continue, endif - %# convert '*' from standard pattern to regexp pattern - subs{indi} = regexprep(subs{indi}, '([^\.]|^)\*', "$1.*"); - %# quote '|[]()?$', otherwise the regexp will stall forever/fail + if isempty(subs{indi}), continue, endif + %# convert from standard pattern to regexp pattern + subs{indi} = regexprep(subs{indi}, '([^\.\\])(\*|\?)', "$1.$2"); + %# quote repetition ops at begining of line, otherwise the regexp + %# will stall forever/fail subs{indi} = regexprep(subs{indi}, \ - '([^\\])([\|\[\(\)\]\?\$])', "$1\\$2"); - %# work at start of line too - subs{indi} = regexprep(subs{indi}, \ - '^([\|\[\(\)\]\?\$])', "\\$1"); + '^([\*\+\?\{\}\|])', "\\$1"); + %# detect | followed by EOL + subs{indi} = regexprep(subs{indi}, '([^\\])\|$', "$1\\|"); + if 0 == index(subs{indi}, ':'), for indj = 1:min(length(names), count), %# sanity check if ~isempty(regexp(names{indj}, subs{indi})), Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-11-17 15:12:16 UTC (rev 7930) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-11-17 17:07:37 UTC (rev 7931) @@ -254,7 +254,7 @@ if ~strcmp(output_type, df._type{indc(indi)}), if dummy, continue; endif %# unmixable args -- falls back to type of parent container - error("Selected columns not compatible with cat() -- use 'cell' as output format"); + error("Selected columns %s not compatible with cat() -- use 'cell' as output format", mat2str(indc)); %# dead code -- suppress previous line for switching automagically the output format to df output_type = class(df); break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-22 16:48:34
|
Revision: 7936 http://octave.svn.sourceforge.net/octave/?rev=7936&view=rev Author: cdemills Date: 2010-11-22 16:48:27 +0000 (Mon, 22 Nov 2010) Log Message: ----------- Better handling of missing files, initialisation from scalar/vector, display of complex numbers Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m trunk/octave-forge/extra/dataframe/inst/@dataframe/isfield.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m Property Changed: ---------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/isfield.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-22 12:16:18 UTC (rev 7935) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-22 16:48:27 UTC (rev 7936) @@ -71,6 +71,7 @@ df._ridx = []; df._data = cell(0, 0); df._type = cell(0, 0); + df._src = cell(0, 0); df = class(df, 'dataframe'); return endif @@ -147,111 +148,128 @@ if isa(x, 'char') && size(x, 1) < 2, %# read the data frame from a file try - x = load(tilde_expand(x)); + dummy = tilde_expand(x); + x = load(dummy); + df._src{end+1, 1} = dummy; catch - UTF8_BOM = char([0xEF 0xBB 0xBF]); + %# try our own method + UTF8_BOM = char([0xEF 0xBB 0xBF]); unwind_protect - fid = fopen(tilde_expand(x)); - dummy = fgetl(fid); - if !strcmp(dummy, UTF8_BOM), - frewind(fid); + dummy = tilde_expand(x); + fid = fopen(dummy); + if fid != -1, + dummy = fgetl(fid); + if !strcmp(dummy, UTF8_BOM), + frewind(fid); + endif + in = fscanf(fid, "%c"); %# slurps everything + df._src{end+1, 1} = dummy; + else + in = []; endif - in = fscanf(fid, "%c"); %# slurps everything unwind_protect_cleanup - fclose(fid); + if fid != -1, fclose(fid); endif end_unwind_protect - %# explicit list taken from 'man pcrepattern' -- we enclose all - %# vertical separators in case the underlying regexp engine - %# doesn't have them all. - eol = '(\r\n|\n|\v|\f|\r|\x85)'; - %# cut into lines -- include the EOL to have a one-to-one - %# matching between line numbers. Use a non-greedy match. - lines = regexp(in, ['.*?' eol], 'match'); - dummy = cellfun(@(x) regexp(x, eol), lines); - %# remove the EOL character(s) - lines(1==dummy) = {""}; - %# use a positive lookahead -- eol is not part of the match - lines(dummy > 1) = cellfun(@(x) regexp(x, ['.*?(?=' eol ')'], \ - 'match'), lines(dummy > 1)); - %# a field either starts at a word boundary, either by + - . for - %# a numeric data, either by ' for a string. - %# content = cellfun(@(x) regexp(x, '(\b|[-+\.''])[^,]*(''|\b)', 'match'),\ - %# lines, 'UniformOutput', false); %# extract fields - content = cellfun(@(x) strsplit(x, sep), lines, \ - 'UniformOutput', false); %# extract fields - indl = 1; indj = 1; %# disp('line 151 '); keyboard - if ~isempty(seeked), + if !isempty(in), + %# explicit list taken from 'man pcrepattern' -- we enclose all + %# vertical separators in case the underlying regexp engine + %# doesn't have them all. + eol = '(\r\n|\n|\v|\f|\r|\x85)'; + %# cut into lines -- include the EOL to have a one-to-one + %# matching between line numbers. Use a non-greedy match. + lines = regexp(in, ['.*?' eol], 'match'); + dummy = cellfun(@(x) regexp(x, eol), lines); + %# remove the EOL character(s) + lines(1==dummy) = {""}; + %# use a positive lookahead -- eol is not part of the match + lines(dummy > 1) = cellfun(@(x) regexp(x, ['.*?(?=' eol ')'], \ + 'match'), lines(dummy > 1)); + %# a field either starts at a word boundary, either by + - . for + %# a numeric data, either by ' for a string. + + %# content = cellfun(@(x) regexp(x, '(\b|[-+\.''])[^,]*(''|\b)', 'match'),\ + %# lines, 'UniformOutput', false); %# extract fields + content = cellfun(@(x) strsplit(x, sep), lines, \ + 'UniformOutput', false); %# extract fields + indl = 1; indj = 1; %# disp('line 151 '); keyboard + if ~isempty(seeked), + while indl <= length(lines), + dummy = content{indl}; + if strcmp(dummy{1}, seeked) + break; + endif + indl = indl + 1; + endwhile + %# else + %# dummy = content{indl}; + endif + x = cell(1+length(lines)-indl, size(dummy, 2)); + empty_lines = []; while indl <= length(lines), dummy = content{indl}; - if strcmp(dummy{1}, seeked) - break; + if all(cellfun('size', dummy, 2) == 0), + empty_lines = [empty_lines indj]; + indl = indl + 1; indj = indj + 1; + continue; endif - indl = indl + 1; + %# does it looks like a comment line ? + if regexp(dummy{1}, ['^\s*' char(35)]), + empty_lines = [empty_lines indj]; + indl = indl + 1; indj = indj + 1; + continue; + endif + %# try to convert to float + the_line = cellfun(@(x) sscanf(x, "%f"), dummy, \ + 'UniformOutput', false); + for indk = 1: size(the_line, 2), + if isempty(the_line{indk}) || any(size(the_line{indk}) > 1), + %#if indi > 1 && indk > 1, disp('line 117 '); keyboard; %#endif + if unquot, + try + %# remove quotes and leading space(s) + x(indj, indk) = regexp(dummy{indk}, '[^'' ].*[^'']', 'match'){1}; + catch + %# if the previous test fails, try a simpler one + in = regexp(dummy{indk}, '[^'' ]+', 'match'); + if !isempty(in), + x(indj, indk) = in{1}; + %# else + %# x(indj, indk) = []; + endif + end_try_catch + else + %# no conversion possible, store and remove leading space(s) + x(indj, indk) = regexp(dummy{indk}, '[^ ].*', 'match'); + endif + else + x(indj, indk) = the_line{indk}; + endif + endfor + indl = indl + 1; indj = indj + 1; endwhile - %# else - %# dummy = content{indl}; - endif - x = cell(1+length(lines)-indl, size(dummy, 2)); - empty_lines = []; - while indl <= length(lines), - dummy = content{indl}; - if all(cellfun('size', dummy, 2) == 0), - empty_lines = [empty_lines indj]; - indl = indl + 1; indj = indj + 1; - continue; + if !isempty(empty_lines), + x(empty_lines, :) = []; endif - %# does it looks like a comment line ? - if regexp(dummy{1}, ['^\s*' char(35)]), - empty_lines = [empty_lines indj]; - indl = indl + 1; indj = indj + 1; - continue; + %# detect empty columns + empty_lines = find(0 == sum(cellfun('size', x, 2))); + if !isempty(empty_lines), + x(:, empty_lines) = []; endif - %# try to convert to float - the_line = cellfun(@(x) sscanf(x, "%f"), dummy, \ - 'UniformOutput', false); - for indk = 1: size(the_line, 2), - if isempty(the_line{indk}) || any(size(the_line{indk}) > 1), - %#if indi > 1 && indk > 1, disp('line 117 '); keyboard; %#endif - if unquot, - try - %# remove quotes and leading space(s) - x(indj, indk) = regexp(dummy{indk}, '[^'' ].*[^'']', 'match'){1}; - catch - %# if the previous test fails, try a simpler one - in = regexp(dummy{indk}, '[^'' ]+', 'match'); - if !isempty(in), - x(indj, indk) = in{1}; - %# else - %# x(indj, indk) = []; - endif - end_try_catch - else - %# no conversion possible, store and remove leading space(s) - x(indj, indk) = regexp(dummy{indk}, '[^ ].*', 'match'); - endif - else - x(indj, indk) = the_line{indk}; - endif - endfor - indl = indl + 1; indj = indj + 1; - endwhile - if !isempty(empty_lines), - x(empty_lines, :) = []; + clear UTF8_BOM fid in lines indl the_line content empty_lines endif - %# detect empty columns - empty_lines = find(0 == sum(cellfun('size', x, 2))); - if !isempty(empty_lines), - x(:, empty_lines) = []; - endif - clear UTF8_BOM fid in lines indl the_line content empty_lines end_try_catch endif %# fallback, avoiding a recursive call idx.type = '()'; - indj = df._cnt(2)+(1:size(x, 2)); - + if !isa(x, 'char'), + indj = df._cnt(2)+(1:size(x, 2)); + else + %# at this point, reading some filename failed + error("dataframe: can't open '%s' for reading data", x); + endif; + if iscell(x), if 2 == length(x), %# use the intermediate value as destination column @@ -280,7 +298,7 @@ %# allow overwriting of column names df._over{2}(1, indj) = true; else - if !isempty(indj), + if !isempty(indj), if length(df._name{2}) < indj(1) || isempty(df._name{2}(indj)), [df._name{2}(indj, 1), df._over{2}(1, indj)] ... = df_colnames(inputname(indi), indj); @@ -315,14 +333,24 @@ if any([index(base, "=")]), %# takes the left part as base x = strsplit(base, "="); - x = deblank(x{1}); y = false; - elseif any([index(base, '''')]), - %# base is most probably a filename - x = regexp(base, '[^''].*[^'']', 'match'){1}; y = true; - elseif any([index(base, "(") index(base, ":")]), - x = 'X'; y = true; %# this is a default value, may be changed + x = deblank(x{1}); + if isvarname(x), + y = false; + else + x = 'X'; y = true; + endif else - x = base; y = false; + %# is base most probably a filename ? + x = regexp(base, '''[^''].*[^'']''', 'match'); + if isempty(x), + if isvarname(base), + x = base; y = false; + else + x = 'X'; y = true; %# this is a default value, may be changed + endif + else + x = x{1}; y = true; + endif endif if numel(num) > 1, Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-11-22 12:16:18 UTC (rev 7935) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-11-22 16:48:27 UTC (rev 7936) @@ -83,13 +83,12 @@ %# keep only one horizontal space per line indk = 1; while indk <= size(df._data{indc}, 2), dummy{3, 2+indi} = disp(df._data{indc}(:, indk)); - tmp_str = char(regexp(dummy{3, 2+indi}, ' \S.*', ... + tmp_str = char(regexp(dummy{3, 2+indi}, \ + '[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?(\s??[-+]\s??[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?i)?', \ 'match', 'dotexceptnewline')); - if size(tmp_str, 1) < df._cnt(1), - tmp_str = horzcat... - (vspace, char(regexp(dummy{3, 2+indi}, '\S.*', ... - 'match', 'dotexceptnewline'))); - endif + tmp_str = horzcat... + (vspace, char(regexp(dummy{3, 2+indi}, '\S.*', ... + 'match', 'dotexceptnewline'))); dummy{3, 2+indi} = tmp_str; indi = indi + 1; indk = indk + 1; endwhile Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/isfield.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/isfield.m 2010-11-22 12:16:18 UTC (rev 7935) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/isfield.m 2010-11-22 16:48:27 UTC (rev 7936) @@ -32,7 +32,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: dataframe.m 7931 2010-11-17 17:07:37Z cdemills $ + %# $Id$ %# if !isa(df, 'dataframe'), Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/isfield.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-22 12:16:18 UTC (rev 7935) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-22 16:48:27 UTC (rev 7936) @@ -189,7 +189,7 @@ else if isvector(RHS), if 0 == df._cnt(1), - nrow = length(RHS); %# try to produce row vectors + nrow = size(RHS, 1); else nrow = df._cnt(1); %# limit to df numbner of rows endif @@ -308,7 +308,7 @@ endif endif endif - + %# perform row resizing if columns are already filled if !isempty(indr) && isnumeric(indr), if max(indr) > df._cnt(1) && size(df._data, 2) == df._cnt(2), @@ -453,8 +453,9 @@ else %# ignore 'column' dimension -- force colum vectors -- use a %# third dim just in case + if isempty(S.subs{1}), S.subs{1} = ':'; endif S.subs(2) = []; - if length(S.subs) < 2, S.subs(2) = 1; endif + if length(S.subs) < 2, S.subs{2} = 1; endif if length(indc) > 1 && length(RHS) > 1, %# set a row from a vector fillfunc = @(x, y) builtin('subsasgn', x, S, RHS(y)); @@ -463,7 +464,11 @@ endif endif for indi = 1:length(indc), - df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, indi); + try + df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, indi); + catch + disp('line 470 '); keyboard + end_try_catch # catch # if ndims(df._data{indc(indi)}) > 2, # %# upstream forgot to give the third dim Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m 2010-11-22 16:48:27 UTC (rev 7936) @@ -0,0 +1,111 @@ +function resu = sum(df, varargin) + + %# -*- texinfo -*- + %# @deftypefn {Function File} {} sum (@var{x}) + %# @deftypefnx {Function File} {} sum (@var{x}, @var{dim}) + %# @deftypefnx {Function File} {} sum (@dots{}, 'native') + %# @deftypefnx {Function File} {} sum (@dots{}, 'double') + %# @deftypefnx {Function File} {} sum (@dots{}, 'extra') + %# Sum of elements along dimension @var{dim}. If @var{dim} is + %# omitted, it defaults to the first non-singleton dimension. + %# + %# If the optional argument 'native' is given, then the sum is performed + %# in the same type as the original argument, rather than in the default + %# double type. For example: + %# + %# @example + %# @group + %# sum ([true, true]) + %# @result{} 2 + %# sum ([true, true], 'native') + %# @result{} true + %# @end group + %# @end example + %# + %# On the contrary, if 'double' is given, the sum is performed in double + %# precision even for single precision inputs. + %# + %# For double precision inputs, 'extra' indicates that a more accurate algorithm + %# than straightforward summation is to be used. For single precision inputs, + %# 'extra' is the same as 'double'. Otherwise, 'extra' has no effect.\n\ + %# @end deftypefn + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + + + if !isa(df, 'dataframe'), + resu = []; return; + endif + + dim = []; type_comp = []; + + indi = 1; while indi <= length(varargin) + if isnumeric(varargin{indi}), + if !isempty(dim), + print_usage(); + resu = []; + return + else + dim = varargin{indi}; + endif + else + if !isempty(type_comp), + print_usage(); + resu = []; + return + else + type_comp = varargin{indi}; + endif + endif + endwhile; + + if isempty(dim), dim = 1; endif; + if isempty(type_comp), type_comp = 'double'; endif + + %# pre-assignation + resu = struct(df); + + switch(dim) + case {1}, + resu._ridx = 1; resu._name{1, 1} = []; resu._over{1, 1} = []; + for indi = 1:resu._cnt(2), + resu._data{1, indi} = sum(resu._data{1, indi}, dim, type_comp); + endfor + resu._cnt(1) = 1; + case {2}, + error('Operation not implemented'); + case {3}, + for indi = 1:resu._cnt(2), + resu._data{1, indi} = sum(resu._data{1, indi}, 2, type_comp) + endfor + if length(resu._cnt) > 2, resu._cnt = resu._cnt(1:2); endif + otherwise + error("Invalid dimension %d", dim); + endswitch + + resu = dataframe(resu); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-22 17:10:40
|
Revision: 7937 http://octave.svn.sourceforge.net/octave/?rev=7937&view=rev Author: cdemills Date: 2010-11-22 17:10:33 +0000 (Mon, 22 Nov 2010) Log Message: ----------- Display the dataframe src, if any Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-22 16:48:27 UTC (rev 7936) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-22 17:10:33 UTC (rev 7937) @@ -158,12 +158,12 @@ dummy = tilde_expand(x); fid = fopen(dummy); if fid != -1, + df._src{end+1, 1} = dummy; dummy = fgetl(fid); if !strcmp(dummy, UTF8_BOM), frewind(fid); endif in = fscanf(fid, "%c"); %# slurps everything - df._src{end+1, 1} = dummy; else in = []; endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-11-22 16:48:27 UTC (rev 7936) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-11-22 17:10:33 UTC (rev 7937) @@ -34,6 +34,12 @@ head = sprintf("Dataframe with %d rows and %d columns (%d unfolded)", ... df._cnt); endif +if !isempty(df._src), + for indi = 1:size(df._src, 1), + head = char(head, ["Src: " df._src{indi, 1}]); + endfor +endif + if all(df._cnt > 0), %# stop for empty df vspace = repmat(' ', df._cnt(1), 1); indi = 1; %# the real, unfolded index This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-23 10:51:12
|
Revision: 7940 http://octave.svn.sourceforge.net/octave/?rev=7940&view=rev Author: cdemills Date: 2010-11-23 10:51:03 +0000 (Tue, 23 Nov 2010) Log Message: ----------- Added basic mapper functions like sin - cos - sqrt - ... Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/abs.m trunk/octave-forge/extra/dataframe/inst/@dataframe/acos.m trunk/octave-forge/extra/dataframe/inst/@dataframe/acosh.m trunk/octave-forge/extra/dataframe/inst/@dataframe/angle.m trunk/octave-forge/extra/dataframe/inst/@dataframe/arg.m trunk/octave-forge/extra/dataframe/inst/@dataframe/asin.m trunk/octave-forge/extra/dataframe/inst/@dataframe/asinh.m trunk/octave-forge/extra/dataframe/inst/@dataframe/atan.m trunk/octave-forge/extra/dataframe/inst/@dataframe/atanh.m trunk/octave-forge/extra/dataframe/inst/@dataframe/ceil.m trunk/octave-forge/extra/dataframe/inst/@dataframe/conj.m trunk/octave-forge/extra/dataframe/inst/@dataframe/cos.m trunk/octave-forge/extra/dataframe/inst/@dataframe/cosh.m trunk/octave-forge/extra/dataframe/inst/@dataframe/erf.m trunk/octave-forge/extra/dataframe/inst/@dataframe/erfc.m trunk/octave-forge/extra/dataframe/inst/@dataframe/erfcx.m trunk/octave-forge/extra/dataframe/inst/@dataframe/erfinv.m trunk/octave-forge/extra/dataframe/inst/@dataframe/exp.m trunk/octave-forge/extra/dataframe/inst/@dataframe/expm1.m trunk/octave-forge/extra/dataframe/inst/@dataframe/finite.m trunk/octave-forge/extra/dataframe/inst/@dataframe/fix.m trunk/octave-forge/extra/dataframe/inst/@dataframe/floor.m trunk/octave-forge/extra/dataframe/inst/@dataframe/gamma.m trunk/octave-forge/extra/dataframe/inst/@dataframe/imag.m trunk/octave-forge/extra/dataframe/inst/@dataframe/isinf.m trunk/octave-forge/extra/dataframe/inst/@dataframe/isna.m trunk/octave-forge/extra/dataframe/inst/@dataframe/isnan.m trunk/octave-forge/extra/dataframe/inst/@dataframe/lgamma.m trunk/octave-forge/extra/dataframe/inst/@dataframe/log.m trunk/octave-forge/extra/dataframe/inst/@dataframe/log10.m trunk/octave-forge/extra/dataframe/inst/@dataframe/log1p.m trunk/octave-forge/extra/dataframe/inst/@dataframe/log2.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m trunk/octave-forge/extra/dataframe/inst/@dataframe/real.m trunk/octave-forge/extra/dataframe/inst/@dataframe/round.m trunk/octave-forge/extra/dataframe/inst/@dataframe/roundb.m trunk/octave-forge/extra/dataframe/inst/@dataframe/signum.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sin.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sinh.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sort.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sqrt.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sumsq.m trunk/octave-forge/extra/dataframe/inst/@dataframe/tan.m trunk/octave-forge/extra/dataframe/inst/@dataframe/tanh.m Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/abs.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/abs.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/abs.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = abs(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@abs, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/abs.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/acos.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/acos.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/acos.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = acos(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@acos, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/acos.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/acosh.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/acosh.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/acosh.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = acosh(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@acosh, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/acosh.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/angle.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/angle.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/angle.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = angle(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@angle, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/angle.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/arg.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/arg.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/arg.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = arg(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@arg, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/arg.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/asin.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/asin.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/asin.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = asin(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@asin, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/asin.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/asinh.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/asinh.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/asinh.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = asinh(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@asinh, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/asinh.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/atan.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/atan.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/atan.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = atan(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@atan, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/atan.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/atanh.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/atanh.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/atanh.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = atanh(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@atanh, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/atanh.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-11-22 20:12:51 UTC (rev 7939) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -63,7 +63,7 @@ indb = logical(ones(1, resu._cnt(2))); indi = 1; while indi <= resu._cnt(2), - indj = strmatch(resu._name{2}(indi), B. _name{2}); + indj = strmatch(resu._name{2}(indi), B. _name{2}, 'exact'); if ~isempty(indj), indj = indj(1); if ~strcmp(resu._type{indi}, B._type{indj}), @@ -134,7 +134,7 @@ indb = logical(ones(1, resu._cnt(2))); indi = 1; while indi <= resu._cnt(2), - indj = strmatch(resu._name{2}(indi), B. _name{2}); + indj = strmatch(resu._name{2}(indi), B. _name{2}, 'exact'); if ~isempty(indj), indj = indj(1); if ~strcmp(resu._type{indi}, B._type{indj}), Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/ceil.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ceil.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ceil.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = ceil(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@ceil, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/ceil.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/conj.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/conj.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/conj.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = conj(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@conj, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/conj.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/cos.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cos.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cos.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = cos(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@cos, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/cos.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/cosh.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cosh.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cosh.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = cosh(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@cosh, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/cosh.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/erf.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/erf.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/erf.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = erf(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@erf, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/erf.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/erfc.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/erfc.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/erfc.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = erfc(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@erfc, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/erfc.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/erfcx.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/erfcx.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/erfcx.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = erfcx(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@erfcx, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/erfcx.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/erfinv.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/erfinv.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/erfinv.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = erfinv(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@erfinv, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/erfinv.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/exp.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/exp.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/exp.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = exp(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@exp, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/exp.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/expm1.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/expm1.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/expm1.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = expm1(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@expm1, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/expm1.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/finite.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/finite.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/finite.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = finite(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@finite, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/finite.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/fix.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/fix.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/fix.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = fix(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@fix, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/fix.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/floor.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/floor.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/floor.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = floor(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@floor, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/floor.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/gamma.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/gamma.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/gamma.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = gamma(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@gamma, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/gamma.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/imag.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/imag.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/imag.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = imag(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@imag, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/imag.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/isinf.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/isinf.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/isinf.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = isinf(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@isinf, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/isinf.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/isna.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/isna.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/isna.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = isna(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@isna, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/isna.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/isnan.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/isnan.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/isnan.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = isnan(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@isnan, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/isnan.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/lgamma.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/lgamma.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/lgamma.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = lgamma(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@lgamma, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/lgamma.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/log.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/log.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/log.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = log(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@log, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/log.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/log10.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/log10.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/log10.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = log10(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@log10, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/log10.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/log1p.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/log1p.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/log1p.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = log1p(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@log1p, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/log1p.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/log2.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/log2.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/log2.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = log2(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@log2, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/log2.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,34 @@ +function resu = df_mapper(func, df, varargin) + %# resu = df_mapper(func, df) + %# small interface to iterate some func over the elements of a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df; + for indi = resu._cnt(2):-1:1, + resu._data{indi} = feval(func, resu._data{indi}, varargin{:}); + endfor + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/real.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/real.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/real.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = real(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@real, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/real.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/round.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/round.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/round.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = round(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@round, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/round.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/roundb.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/roundb.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/roundb.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = roundb(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@roundb, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/roundb.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/signum.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/signum.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/signum.m 2010-11-23 10:51:03 UTC (rev 7940) @@ -0,0 +1,29 @@ +function resu = signum(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@signum, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/signum.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/sin.m =================================================================== --- trunk/... [truncated message content] |
From: <cde...@us...> - 2010-11-23 17:34:11
|
Revision: 7941 http://octave.svn.sourceforge.net/octave/?rev=7941&view=rev Author: cdemills Date: 2010-11-23 17:34:03 +0000 (Tue, 23 Nov 2010) Log Message: ----------- A new bunch of mapping functions added Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sumsq.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m trunk/octave-forge/extra/dataframe/inst/@dataframe/cumprod.m trunk/octave-forge/extra/dataframe/inst/@dataframe/cumsum.m trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m~ trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/ipermute.m trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m~ trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m~ trunk/octave-forge/extra/dataframe/inst/@dataframe/max.m trunk/octave-forge/extra/dataframe/inst/@dataframe/min.m trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m trunk/octave-forge/extra/dataframe/inst/@dataframe/not.m trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m trunk/octave-forge/extra/dataframe/inst/@dataframe/prod.m trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = and(A, B); + + %# function resu = and(A, B) + %# Implements the '&' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@and, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/cumprod.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cumprod.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cumprod.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = cumprod(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@cumprod, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/cumprod.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/cumsum.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cumsum.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cumsum.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = cumsum(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@cumsum, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/cumsum.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = eq(A, B); + + %# function resu = eq(A, B) + %# Implements the '==' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@eq, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,58 @@ +function varargout = find(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + switch nargout + case {0, 1} + nz = 0; resu = []; + for indi = 1:df._cnt(2), + resu = [resu; nz + feval(@find, df._data{indi})]; + nz = nz + prod(size(df._data{indi})); + endfor + varargout{1} = resu; + case 2 + nz = 0; idx_i = []; idx_j = []; + for indi = 1:df._cnt(2), + [dum1, dum2] = feval(@find, df._data{indi}); + idx_i = [idx_i; dum1]; + idx_j = [idx_j; nz + dum2]; + nz = nz + size(df._data{indi}, 2); + endfor + varargout{1} = idx_i; varargout{2} = idx_j; + case 3 + nz = 0; idx_i = []; idx_j = []; val = []; + for indi = 1:df._cnt(2), + [dum1, dum2, dum3] = feval(@find, df._data{indi}); + idx_i = [idx_i; dum1]; + idx_j = [idx_j; nz + dum2]; + val = [val; dum3]; + nz = nz + size(df._data{indi}, 2); + endfor + varargout{1} = idx_i; varargout{2} = idx_j; varargout{3} = val; + otherwise + print_usage('find'); + endswitch + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m~ =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m~ (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m~ 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function varargout = find(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id: sin.m 7940 2010-11-23 10:51:03Z cdemills $ + %# + + resu = df_mapper(@find, df, varargin{:}); + +endfunction Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = ge(A, B); + + %# function resu = ge(A, B) + %# Implements the '>=' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@ge, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = gt(A, B); + + %# function resu = gt(A, B) + %# Implements the '>' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@gt, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = horzcat(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cat(1, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/ipermute.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ipermute.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ipermute.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = ipermute(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper2(@ipermute, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/ipermute.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = le(A, B); + + %# function resu = le(A, B) + %# Implements the '<=' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@le, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m~ =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m~ (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m~ 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = eq(A, B); + + %# function resu = eq(A, B) + %# Implements the '==' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id: minus.m 7892 2010-10-29 07:14:29Z cdemills $ + %# + + resu = cell2mat(df_func(@eq, A, B)); + +endfunction Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = lt(A, B); + + %# function resu = minus(A, B) + %# Implements the '<' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@lt, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m~ =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m~ (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m~ 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,59 @@ +function resu = lt(A, B); + + %# function resu = minus(A, B) + %# Implements the '<' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id: minus.m 7892 2010-10-29 07:14:29Z cdemills $ + %# + + [A, B] = df_basecomp(A, B); + + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + if isscalar(A) + resu = cellfun(@(x) lt(A, x), B._data, "UniformOutput", false); + elseif ismatrix(A), + resu = cellfun(@(x, y) lt(x, y), num2cell(A, 1), B._data, \ + "UniformOutput", false); + else + error("Operator < not implemented"); + endif + else + resu = cellfun(@(x, y) lt(x, y), A._data, B._data, \ + "UniformOutput", false); + endif + else + if isscalar(B), + resu = cellfun(@(x) lt(x, B), A._data, "UniformOutput", false); + elseif ismatrix(B), + resu = cellfun(@(x, y) lt(x, y), A._data, num2cell(B, 1), \ + "UniformOutput", false); + else + error("Operator < not implemented"); + endif + endif + + resu = cell2mat(resu); + +endfunction Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/max.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/max.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/max.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = max(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper2(@max, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/max.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/min.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/min.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/min.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = min(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper2(@min, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/min.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = ne(A, B); + + %# function resu = ne(A, B) + %# Implements the '!=' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@ne, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/not.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/not.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/not.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = not(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@not, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/not.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = or(A, B); + + %# function resu = or(A, B) + %# Implements the '|' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@or, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = permute(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper2(@permute, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,58 @@ +function resu = df_func(func, A, B); + + %# function resu = df_func(func, A, B) + %# Implements an iterator to apply some func when at least one + %# argument is a dataframe + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + [A, B] = df_basecomp(A, B); + + if isa(B, 'dataframe') + if !isa(A, 'dataframe'), + if isscalar(A) + resu = cellfun(@(x) feval(func, A, x), B._data, "UniformOutput", false); + elseif ismatrix(A), + resu = cellfun(@(x, y) feval(func, x, y), num2cell(A, 1), B._data, \ + "UniformOutput", false); + else + error("Function %s not implemented", func2str(func)); + endif + else + resu = cellfun(@(x, y) feval(func, x, y), A._data, B._data, \ + "UniformOutput", false); + endif + else + if isscalar(B), + resu = cellfun(@(x) feval(func, x, B), A._data, "UniformOutput", false); + elseif ismatrix(B), + resu = cellfun(@(x, y) feval(func, x, y), A._data, num2cell(B, 1), \ + "UniformOutput", false); + else + error("Operator < not implemented"); + endif + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,59 @@ +function resu = df_mapper2(func, df, varargin) + %# resu = df_mapper2(func, df) + %# small interface to iterate some vector func over the elements of a + %# dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + dim =1; resu = []; vout = varargin; + + if !isempty(varargin) && isnumeric(varargin{1}), + dim = varargin{1}; + %# the "third" dim is the second on stored data + if 3 == dim, vout(1) = 2; endif + endif + + resu = df; + + switch(dim) + case {1}, + %# remove row metadata + resu._ridx = 1; resu._name{1, 1} = []; resu._over{1, 1} = []; + for indi = resu._cnt(2):-1:1, + resu._data{indi} = feval(func, resu._data{indi}, vout{:}); + endfor + resu._cnt(1) = 1; + case {2}, + error('Operation not implemented'); + case {3}, + for indi = resu._cnt(2):-1:1; + resu._data{indi} = feval(func, resu._data{indi}, vout{:}); + endfor + if length(resu._cnt) > 2, resu._cnt = resu._cnt(1:2); endif + otherwise + error("Invalid dimension %d", dim); + endswitch + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/prod.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/prod.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/prod.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,33 @@ +function resu = prod(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + if !isa(df, 'dataframe'), + resu = []; return; + endif + + resu = df_mapper2(@prod, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/prod.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m 2010-11-23 10:51:03 UTC (rev 7940) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -1,5 +1,5 @@ -function [nrow, ncol] = size(df, varargin) - %# function resu = end(df, varargin) +function varargout = size(df, varargin) + %# function resu = size(df, varargin) %# This is size operator for a dataframe object. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> @@ -30,18 +30,18 @@ case 1 switch nargout case {0 1} - nrow = df._cnt; + varargout{1} = df._cnt; case {2} - nrow = df._cnt(1); ncol = df._cnt(2); + varargout{1} = df._cnt(1); varargout{2} = df._cnt(2); otherwise error(print_usage()); endswitch case 2 switch nargout case {0 1} - nrow = df._cnt; + varargout{1} = df._cnt; try - nrow = nrow(varargin{1}); + varargout{1} = varargout{1}(varargin{1}); catch error(print_usage()); end_try_catch Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m 2010-11-23 10:51:03 UTC (rev 7940) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/sum.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -1,35 +1,5 @@ function resu = sum(df, varargin) - %# -*- texinfo -*- - %# @deftypefn {Function File} {} sum (@var{x}) - %# @deftypefnx {Function File} {} sum (@var{x}, @var{dim}) - %# @deftypefnx {Function File} {} sum (@dots{}, 'native') - %# @deftypefnx {Function File} {} sum (@dots{}, 'double') - %# @deftypefnx {Function File} {} sum (@dots{}, 'extra') - %# Sum of elements along dimension @var{dim}. If @var{dim} is - %# omitted, it defaults to the first non-singleton dimension. - %# - %# If the optional argument 'native' is given, then the sum is performed - %# in the same type as the original argument, rather than in the default - %# double type. For example: - %# - %# @example - %# @group - %# sum ([true, true]) - %# @result{} 2 - %# sum ([true, true], 'native') - %# @result{} true - %# @end group - %# @end example - %# - %# On the contrary, if 'double' is given, the sum is performed in double - %# precision even for single precision inputs. - %# - %# For double precision inputs, 'extra' indicates that a more accurate algorithm - %# than straightforward summation is to be used. For single precision inputs, - %# 'extra' is the same as 'double'. Otherwise, 'extra' has no effect.\n\ - %# @end deftypefn - %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% %% This file is part of Octave. @@ -58,53 +28,6 @@ resu = []; return; endif - dim = []; type_comp = []; + resu = df_mapper2(@sum, df, varargin{:}); - indi = 1; while indi <= length(varargin) - if isnumeric(varargin{indi}), - if !isempty(dim), - print_usage('@dataframe/sum'); - resu = []; - return - else - dim = varargin{indi}; - endif - else - if !isempty(type_comp), - print_usage('@dataframe/sum'); - resu = []; - return - else - type_comp = varargin{indi}; - endif - endif - indi = indi + 1; - endwhile; - - if isempty(dim), dim = 1; endif; - if isempty(type_comp), type_comp = 'double'; endif - - %# pre-assignation - resu = struct(df); - - switch(dim) - case {1}, - resu._ridx = 1; resu._name{1, 1} = []; resu._over{1, 1} = []; - for indi = 1:resu._cnt(2), - resu._data{1, indi} = sum(resu._data{1, indi}, dim, type_comp); - endfor - resu._cnt(1) = 1; - case {2}, - error('Operation not implemented'); - case {3}, - for indi = 1:resu._cnt(2), - resu._data{1, indi} = sum(resu._data{1, indi}, 2, type_comp) - endfor - if length(resu._cnt) > 2, resu._cnt = resu._cnt(1:2); endif - otherwise - error("Invalid dimension %d", dim); - endswitch - - resu = dataframe(resu); - endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/sumsq.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/sumsq.m 2010-11-23 10:51:03 UTC (rev 7940) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/sumsq.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -1,35 +1,5 @@ function resu = sumsq(df, varargin) - %# -*- texinfo -*- - %# @deftypefn {Function File} {} sum (@var{x}) - %# @deftypefnx {Function File} {} sum (@var{x}, @var{dim}) - %# @deftypefnx {Function File} {} sum (@dots{}, 'native') - %# @deftypefnx {Function File} {} sum (@dots{}, 'double') - %# @deftypefnx {Function File} {} sum (@dots{}, 'extra') - %# Sum of elements along dimension @var{dim}. If @var{dim} is - %# omitted, it defaults to the first non-singleton dimension. - %# - %# If the optional argument 'native' is given, then the sum is performed - %# in the same type as the original argument, rather than in the default - %# double type. For example: - %# - %# @example - %# @group - %# sum ([true, true]) - %# @result{} 2 - %# sum ([true, true], 'native') - %# @result{} true - %# @end group - %# @end example - %# - %# On the contrary, if 'double' is given, the sum is performed in double - %# precision even for single precision inputs. - %# - %# For double precision inputs, 'extra' indicates that a more accurate algorithm - %# than straightforward summation is to be used. For single precision inputs, - %# 'extra' is the same as 'double'. Otherwise, 'extra' has no effect.\n\ - %# @end deftypefn - %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% %% This file is part of Octave. @@ -58,48 +28,6 @@ resu = []; return; endif - dim = []; + resu = df_mapper2(@sumsq, df, varargin{:}); - indi = 1; while indi <= length(varargin) - if isnumeric(varargin{indi}), - if !isempty(dim), - print_usage('@dataframe/sumsq'); - resu = []; - return - else - dim = varargin{indi}; - endif - else - print_usage('@dataframe/sumsq'); - resu = []; - return - endif - indi = indi + 1; - endwhile; - - if isempty(dim), dim = 1; endif; - - %# pre-assignation - resu = struct(df); - - switch(dim) - case {1}, - resu._ridx = 1; resu._name{1, 1} = []; resu._over{1, 1} = []; - for indi = 1:resu._cnt(2), - resu._data{1, indi} = sumsq(resu._data{1, indi}, dim); - endfor - resu._cnt(1) = 1; - case {2}, - error('Operation not implemented'); - case {3}, - for indi = 1:resu._cnt(2), - resu._data{1, indi} = sumsq(resu._data{1, indi}, 2); - endfor - if length(resu._cnt) > 2, resu._cnt = resu._cnt(1:2); endif - otherwise - error("Invalid dimension %d", dim); - endswitch - - resu = dataframe(resu); - endfunction Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,29 @@ +function resu = vertcat(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cat(2, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m 2010-11-23 17:34:03 UTC (rev 7941) @@ -0,0 +1,32 @@ +function resu = xor(A, B); + + %# function resu = xor(A, B) + %# Implements the '??' operator when at least one argument is a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = cell2mat(df_func(@xor, A, B)); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-23 17:35:33
|
Revision: 7942 http://octave.svn.sourceforge.net/octave/?rev=7942&view=rev Author: cdemills Date: 2010-11-23 17:35:27 +0000 (Tue, 23 Nov 2010) Log Message: ----------- Removed backup junk Removed Paths: ------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m~ trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m~ trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m~ Deleted: trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m~ =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m~ 2010-11-23 17:34:03 UTC (rev 7941) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m~ 2010-11-23 17:35:27 UTC (rev 7942) @@ -1,29 +0,0 @@ -function varargout = find(df, varargin) - - %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> - %% - %% This file is part of Octave. - %% - %% Octave is free software; you can redistribute it and/or - %% modify it under the terms of the GNU General Public - %% License as published by the Free Software Foundation; - %% either version 2, or (at your option) any later version. - %% - %% Octave is distributed in the hope that it will be useful, - %% but WITHOUT ANY WARRANTY; without even the implied - %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - %% PURPOSE. See the GNU General Public License for more - %% details. - %% - %% You should have received a copy of the GNU General Public - %% License along with Octave; see the file COPYING. If not, - %% write to the Free Software Foundation, 59 Temple Place - - %% Suite 330, Boston, MA 02111-1307, USA. - - %# - %# $Id: sin.m 7940 2010-11-23 10:51:03Z cdemills $ - %# - - resu = df_mapper(@find, df, varargin{:}); - -endfunction Deleted: trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m~ =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m~ 2010-11-23 17:34:03 UTC (rev 7941) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m~ 2010-11-23 17:35:27 UTC (rev 7942) @@ -1,32 +0,0 @@ -function resu = eq(A, B); - - %# function resu = eq(A, B) - %# Implements the '==' operator when at least one argument is a dataframe. - - %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> - %% - %% This file is part of Octave. - %% - %% Octave is free software; you can redistribute it and/or - %% modify it under the terms of the GNU General Public - %% License as published by the Free Software Foundation; - %% either version 2, or (at your option) any later version. - %% - %% Octave is distributed in the hope that it will be useful, - %% but WITHOUT ANY WARRANTY; without even the implied - %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - %% PURPOSE. See the GNU General Public License for more - %% details. - %% - %% You should have received a copy of the GNU General Public - %% License along with Octave; see the file COPYING. If not, - %% write to the Free Software Foundation, 59 Temple Place - - %% Suite 330, Boston, MA 02111-1307, USA. - - %# - %# $Id: minus.m 7892 2010-10-29 07:14:29Z cdemills $ - %# - - resu = cell2mat(df_func(@eq, A, B)); - -endfunction Deleted: trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m~ =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m~ 2010-11-23 17:34:03 UTC (rev 7941) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m~ 2010-11-23 17:35:27 UTC (rev 7942) @@ -1,59 +0,0 @@ -function resu = lt(A, B); - - %# function resu = minus(A, B) - %# Implements the '<' operator when at least one argument is a dataframe. - - %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> - %% - %% This file is part of Octave. - %% - %% Octave is free software; you can redistribute it and/or - %% modify it under the terms of the GNU General Public - %% License as published by the Free Software Foundation; - %% either version 2, or (at your option) any later version. - %% - %% Octave is distributed in the hope that it will be useful, - %% but WITHOUT ANY WARRANTY; without even the implied - %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - %% PURPOSE. See the GNU General Public License for more - %% details. - %% - %% You should have received a copy of the GNU General Public - %% License along with Octave; see the file COPYING. If not, - %% write to the Free Software Foundation, 59 Temple Place - - %% Suite 330, Boston, MA 02111-1307, USA. - - %# - %# $Id: minus.m 7892 2010-10-29 07:14:29Z cdemills $ - %# - - [A, B] = df_basecomp(A, B); - - if isa(B, 'dataframe') - if !isa(A, 'dataframe'), - if isscalar(A) - resu = cellfun(@(x) lt(A, x), B._data, "UniformOutput", false); - elseif ismatrix(A), - resu = cellfun(@(x, y) lt(x, y), num2cell(A, 1), B._data, \ - "UniformOutput", false); - else - error("Operator < not implemented"); - endif - else - resu = cellfun(@(x, y) lt(x, y), A._data, B._data, \ - "UniformOutput", false); - endif - else - if isscalar(B), - resu = cellfun(@(x) lt(x, B), A._data, "UniformOutput", false); - elseif ismatrix(B), - resu = cellfun(@(x, y) lt(x, y), A._data, num2cell(B, 1), \ - "UniformOutput", false); - else - error("Operator < not implemented"); - endif - endif - - resu = cell2mat(resu); - -endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2012-09-05 10:21:17
|
Revision: 10964 http://octave.svn.sourceforge.net/octave/?rev=10964&view=rev Author: cdemills Date: 2012-09-05 10:21:06 +0000 (Wed, 05 Sep 2012) Log Message: ----------- Header values now stored in a 'header' field, plus various cleanup Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2012-09-05 08:41:17 UTC (rev 10963) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2012-09-05 10:21:06 UTC (rev 10964) @@ -1,4 +1,4 @@ -function df = dataframe(x = [], varargin) +function df = dataframe(x, varargin) %# -*- texinfo -*- %# @deftypefn {Function File} @var{df} = dataframe(@var{x = []}, ...) @@ -61,14 +61,10 @@ %# if (0 == nargin) - disp ('FIXME -- should create a dataframe from the whole workspace') - df = dataframe ([]); - return -endif - -if (isempty (x) && 1 == nargin) - %# default constructor: initialise the fields in the right order - df._cnt = [0 0]; + %# default constructor: create a scalar struct and initialise the + %# fields in the right order + df = struct ('_cnt', [0 0]); + %# do not call "struct" with the two next args: it would create an array df._name = {cell(0, 1), cell(1, 0)}; %# rows - cols df._over = cell (1, 2); df._ridx = []; @@ -76,24 +72,45 @@ df._rep = cell (0, 0); %# a repetition index df._type = cell (0, 0); %# the type of each column df._src = cell (0, 0); + df._header = cell (0, 0); df._cmt = cell (0, 0); %# to put comments df = class (df, 'dataframe'); return endif +if (isnull (x) && 1 == nargin) + disp ('FIXME -- should create a dataframe from the whole workspace') + df = dataframe (); %# just call the default constructor + return +endif + if (isa (x, 'dataframe')) + %# Try to append whatever data or metadata given through varargin + %# into this dataframe df = x; -elseif (isa (x, 'struct')) - df = class (x, 'dataframe'); return else - df = dataframe ([]); %# get the right fields + df = dataframe (); %# get the right fields + if (isa (x, 'struct')) + %# only accept a struct if it has the same fieldnames as a dataframe + dummy = fieldnames (x); + indi = fieldnames (df); + if (size (dummy, 1) ~= size (indi, 1)) + error ('First argument of dataframe is a struct with the wrong number of fields'); + endif + if (~all (cellfun (@strcmp, dummy, indi))) + error ('First argument of dataframe is a struct with wrong field names'); + endif + %# easy way to transform a struct into a dataframe object + df = class (x, 'dataframe'); + if (1 == nargin) return; endif + endif endif %# default values seeked = []; trigger = []; unquot = true; sep = "\t,"; cmt_lines = []; locales = "C"; datefmt = ''; -if (length (varargin) > 0) +if (length (varargin) > 0) %# extract known arguments indi = 1; %# loop over possible arguments while (indi <= size (varargin, 2)) @@ -149,7 +166,11 @@ case 'datefmt' datefmt = varargin{indi + 1}; varargin(indi:indi+1) = []; - otherwise %# FIXME: just skip it for now + case '--' + %# stop processing args -- take the rest as filenames + varargin(indi) = []; + break; + otherwise %# FIXME: just skip it for now disp (sprintf ("Ignoring unkown argument %s", varargin{indi})); indi = indi + 1; endswitch @@ -181,16 +202,15 @@ indi = indi + 1; if (~isa (x, 'dataframe')) if (isa (x, 'char') && size (x, 1) < 2) - %# read the data frame from a file + dummy = tilde_expand (x); try - dummy = tilde_expand (x); + %# read the data frame from a file x = load (dummy); df._src{end+1, 1} = dummy; catch %# try our own method UTF8_BOM = char ([0xEF 0xBB 0xBF]); unwind_protect - dummy = tilde_expand (x); fid = fopen (dummy); if (fid ~= -1) df._src{end+1, 1} = dummy; @@ -244,9 +264,14 @@ continue; endif dummy = content{indl}; - if (strcmp (dummy{1}, seeked)) + if (~isempty (regexp (dummy{1}, seeked, 'match'))) break; - endif + endif + if (isempty (df._header)) + df._header = dummy; + else + df._header(end+1, 1:length (dummy)) = dummy; + endif indl = indl + 1; endwhile elseif (~isempty (trigger)) @@ -256,7 +281,12 @@ if (all (cellfun ('size', dummy, 2) == 0)) continue; endif - if (size (dummy, 2) >= 1 && ... + if (isempty (df._header)) + df._header = dummy; + else + df._header(end+1, 1:length (dummy)) = dummy; + endif + if (size (dummy, 2) >= 1 && ... ~isempty (regexp (dummy{1}, trigger, 'match'))) break; endif @@ -430,7 +460,11 @@ %# use direct assignement if (ndims (x) > 2), idx.subs{3} = 1:size (x, 3); endif %# df = subsasgn(df, idx, x); <= call directly lower level - df = df_matassign (df, idx, indj, length (indj), x); + try + df = df_matassign (df, idx, indj, length (indj), x); + catch + disp ('line 443 '); keyboard + end_try_catch if (~isempty (cmt_lines)) df._cmt = vertcat (df._cmt, cellstr (cmt_lines)); cmt_lines = []; Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2012-09-05 08:41:17 UTC (rev 10963) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2012-09-05 10:21:06 UTC (rev 10964) @@ -117,6 +117,14 @@ endif return + case "header" + if (length (S) > 1) + df._header = feval (@subsasgn, df._header, S(2:end), RHS); + else + df._header = RHS; + endif + return + case "comment" if (length (S) > 1) df._cmt = feval (@subsasgn, df._cmt, S(2:end), RHS); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2012-09-05 08:41:17 UTC (rev 10963) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2012-09-05 10:21:06 UTC (rev 10964) @@ -124,6 +124,9 @@ case "source" S(1).subs = "_src"; further_deref = true; + case "header" + S(1).subs = "_header"; + further_deref = true; case "comment" S(1).subs = "_cmt"; further_deref = true; @@ -431,6 +434,7 @@ endif %# to be verified : keyboard resu._src = df._src; + resu._header = df._header; resu._cmt = df._cmt; resu = df_thirddim (resu); if (length (S) > 1) %# perform further access, if required This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-24 15:34:01
|
Revision: 7943 http://octave.svn.sourceforge.net/octave/?rev=7943&view=rev Author: cdemills Date: 2010-11-24 15:33:54 +0000 (Wed, 24 Nov 2010) Log Message: ----------- A few new functions and corrections Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/columns.m trunk/octave-forge/extra/dataframe/inst/@dataframe/ismatrix.m trunk/octave-forge/extra/dataframe/inst/@dataframe/isscalar.m trunk/octave-forge/extra/dataframe/inst/@dataframe/isvector.m trunk/octave-forge/extra/dataframe/inst/@dataframe/power.m trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/reshape.m trunk/octave-forge/extra/dataframe/inst/@dataframe/rows.m Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/columns.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/columns.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/columns.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -0,0 +1,31 @@ +function resu = columns(df) + %# function resu = columns(df) + %# returns the number of columns of a dataframe + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df._cnt(end); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/columns.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-11-23 17:35:27 UTC (rev 7942) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -27,111 +27,115 @@ %# $Id$ %# -%# generate header name -if 2 == length(df._cnt), - head = sprintf("Dataframe with %d rows and %d columns", df._cnt); -else - head = sprintf("Dataframe with %d rows and %d columns (%d unfolded)", ... - df._cnt); -endif -if !isempty(df._src), - for indi = 1:size(df._src, 1), - head = char(head, ["Src: " df._src{indi, 1}]); - endfor -endif + %# generate header name + if 2 == length(df._cnt), + head = sprintf("Dataframe with %d rows and %d columns", df._cnt); + else + head = sprintf("Dataframe with %d rows and %d columns (%d unfolded)", ... + df._cnt); + endif -if all(df._cnt > 0), %# stop for empty df - vspace = repmat(' ', df._cnt(1), 1); - indi = 1; %# the real, unfolded index - %# loop over columns where the corresponding _data really exists - for indc = 1:min(df._cnt(2), size(df._data, 2)), - %# emit column names and type - if 1 == size(df._data{indc}, 2), - dummy{1, 2+indi} = deblank(disp(df._name{2}{indc})); - dummy{2, 2+indi} = deblank(df._type{indc}); + if !isempty(df._src), + for indi = 1:size(df._src, 1), + head = char(head, ["Src: " df._src{indi, 1}]); + endfor + endif + + if all(df._cnt > 0), %# stop for empty df + vspace = repmat(' ', df._cnt(1), 1); + indi = 1; %# the real, unfolded index + %# loop over columns where the corresponding _data really exists + for indc = 1:min(df._cnt(2), size(df._data, 2)), + %# emit column names and type + if 1 == size(df._data{indc}, 2), + dummy{1, 2+indi} = deblank(disp(df._name{2}{indc})); + dummy{2, 2+indi} = deblank(df._type{indc}); + else + %# append a dot and the third-dimension index to column name + tmp_str = [deblank(disp(df._name{2}{indc})) "."]; + tmp_str = arrayfun(@(x) horzcat(tmp_str, num2str(x)), ... + (1:size(df._data{indc}, 2)), 'UniformOutput', false); + dummy{1, 2+indi} = tmp_str{1}; + dummy{2, 2+indi} = deblank(df._type{indc}); + indk = 1; while indk < size(df._data{indc}, 2), + dummy{1, 2+indi+indk} = tmp_str{1+indk}; + dummy{2, 2+indi+indk} = dummy{2, 2+indi}; + indk = indk + 1; + endwhile + endif + %# "print" each column + switch df._type{indc} + case {'char'} + indk = 1; while indk <= size(df._data{indc}, 2), + tmp_str = df._data{indc}(:, indk); %#get the whole column + indj = cellfun('isprint', tmp_str, 'UniformOutput', false); + indj = ~cellfun('all', indj); + for indr = 1:length(indj), + if indj(indr), + if isna(tmp_str{indr}), + tmp_str{indr} = "NA"; + else + tmp_str{indr} = undo_string_escapes(tmp_str{indr}); + endif + endif + endfor + %# keep the whole thing, and add a vertical space + dummy{3, 2+indi} = disp(char(tmp_str)); + dummy{3, 2+indi} = horzcat... + (vspace, char(regexp(dummy{3, 2+indi}, '.*', ... + 'match', 'dotexceptnewline'))); + indi = indi + 1; indk = indk + 1; + endwhile + otherwise + %# keep only one horizontal space per line + indk = 1; while indk <= size(df._data{indc}, 2), + dummy{3, 2+indi} = disp(df._data{indc}(:, indk)); + tmp_str = char(regexp(dummy{3, 2+indi}, \ + '[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?(\s??[-+]\s??[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?i)?', \ + 'match', 'dotexceptnewline')); + tmp_str = horzcat... + (vspace, char(regexp(dummy{3, 2+indi}, '\S.*', ... + 'match', 'dotexceptnewline'))); + dummy{3, 2+indi} = tmp_str; + indi = indi + 1; indk = indk + 1; + endwhile + endswitch + endfor + + %# put everything together + vspace = [' '; ' '; vspace]; + %# second line content + if !isempty(df._ridx), + if 1 == size(df._ridx, 2), + dummy{2, 1} = ["_"; "Nr"]; + dummy{3, 1} = disp(df._ridx(:)); + indi = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); + resu = strjust(char(dummy{2, 1}, indi), 'right'); + else + resu = []; + for indi = 1:size(df._ridx, 2)-1, + dummy{2, 1} = [["_." num2str(indi)]; "Nr"]; + dummy{3, 1} = disp(df._ridx(:, indi)); + indj = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); + resu = horzcat(resu, strjust(char(dummy{2, 1}, indj), 'right'), vspace); + endfor + dummy{2, 1} = [["_." num2str(indi+1)]; "Nr"]; + dummy{3, 1} = disp(df._ridx(:, end)); + indj = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); + resu = horzcat(resu, strjust(char(dummy{2, 1}, indj), 'right')); + endif else - %# append a dot and the third-dimension index to column name - tmp_str = [deblank(disp(df._name{2}{indc})) "."]; - tmp_str = arrayfun(@(x) horzcat(tmp_str, num2str(x)), ... - (1:size(df._data{indc}, 2)), 'UniformOutput', false); - dummy{1, 2+indi} = tmp_str{1}; - dummy{2, 2+indi} = deblank(df._type{indc}); - indk = 1; while indk < size(df._data{indc}, 2), - dummy{1, 2+indi+indk} = tmp_str{1+indk}; - dummy{2, 2+indi+indk} = dummy{2, 2+indi}; - indk = indk + 1; - endwhile + resu = []; endif - %# "print" each column - switch df._type{indc} - case {'char'} - indk = 1; while indk <= size(df._data{indc}, 2), - tmp_str = df._data{indc}(:, indk); %#get the whole column - indj = cellfun('isprint', tmp_str, 'UniformOutput', false); - indj = ~cellfun('all', indj); - for indr = 1:length(indj), - if indj(indr), - if isna(tmp_str{indr}), - tmp_str{indr} = "NA"; - else - tmp_str{indr} = undo_string_escapes(tmp_str{indr}); - endif - endif - endfor - %# keep the whole thing, and add a vertical space - dummy{3, 2+indi} = disp(char(tmp_str)); - dummy{3, 2+indi} = horzcat... - (vspace, char(regexp(dummy{3, 2+indi}, '.*', ... - 'match', 'dotexceptnewline'))); - indi = indi + 1; indk = indk + 1; - endwhile - otherwise - %# keep only one horizontal space per line - indk = 1; while indk <= size(df._data{indc}, 2), - dummy{3, 2+indi} = disp(df._data{indc}(:, indk)); - tmp_str = char(regexp(dummy{3, 2+indi}, \ - '[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?(\s??[-+]\s??[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?i)?', \ - 'match', 'dotexceptnewline')); - tmp_str = horzcat... - (vspace, char(regexp(dummy{3, 2+indi}, '\S.*', ... - 'match', 'dotexceptnewline'))); - dummy{3, 2+indi} = tmp_str; - indi = indi + 1; indk = indk + 1; - endwhile - endswitch - endfor - vspace = [' '; ' '; vspace]; - %# second line content - if 1 == size(df._ridx, 2), - dummy{2, 1} = ["_"; "Nr"]; - dummy{3, 1} = disp(df._ridx(:)); - indi = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); - resu = strjust(char(dummy{2, 1}, indi), 'right'); - else - resu = []; - for indi = 1:size(df._ridx, 2)-1, - dummy{2, 1} = [["_." num2str(indi)]; "Nr"]; - dummy{3, 1} = disp(df._ridx(:, indi)); - indj = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); - resu = horzcat(resu, strjust(char(dummy{2, 1}, indj), 'right'), vspace); - endfor - dummy{2, 1} = [["_." num2str(indi+1)]; "Nr"]; - dummy{3, 1} = disp(df._ridx(:, end)); - indj = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); - resu = horzcat(resu, strjust(char(dummy{2, 1}, indj), 'right')); - endif - %# emit row names - if isempty(df._name{1}), - dummy{2, 2} = []; dummy{3, 2} = []; - else - dummy{2, 2} = [" ";" "]; - dummy{3, 2} = df._name{1}; - endif - - if size(dummy, 2) > 1, - %# resu contains the ridx - + %# emit row names + if isempty(df._name{1}), + dummy{2, 2} = []; dummy{3, 2} = []; + else + dummy{2, 2} = [" ";" "]; + dummy{3, 2} = df._name{1}; + endif + %# insert a vertical space if !isempty(dummy{3, 2}), indi = ~cellfun('isempty', dummy{3, 2}); @@ -160,10 +164,7 @@ else resu = ''; endif -else - resu = ''; -endif + + resu = char(head, resu); disp(resu) -resu = char(head, resu); disp(resu) - - +endfunction Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/ismatrix.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ismatrix.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ismatrix.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -0,0 +1,38 @@ +function resu = ismatrix(df) + %# function resu = ismatrix(df) + %# returns true if the dataframe can be converted to a matrix + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + df_is_num = isnumeric(df._data{1}); + df_is_char = ischar(df._data{1}); + for indi = df._cnt(2):-1:2, + df_is_num = df_is_num & isnumeric(df._data{indi}); + df_is_char = df_is_char & ischar(df._data{indi}); + endfor + + resu = df_is_num | df_is_char; + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/ismatrix.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/isscalar.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/isscalar.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/isscalar.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -0,0 +1,31 @@ +function resu = isscalar(df) + %# function resu = isscalar(df) + %# returns true if the dataframe can be converted to a vector + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = ismatrix(df) & (length(find(df._cnt > 1)) < 1); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/isscalar.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/isvector.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/isvector.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/isvector.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -0,0 +1,31 @@ +function resu = isvector(df) + %# function resu = isvector(df) + %# returns true if the dataframe can be converted to a vector + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = ismatrix(df) & (length(find(df._cnt > 1)) <= 1); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/isvector.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m 2010-11-23 17:35:27 UTC (rev 7942) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -27,22 +27,16 @@ %# $Id$ %# - if isempty(varargin), - n = builtin('numel', df); - else - n = builtin('numel', df, varargin); - endif - return; +%# if 1 == nargout, +%# n = feval(@numel, df, varargin{:}); +%# else + if 1 == nargin, + n = prod(df._cnt([1 end])); + else + error(print_usage()); + endif +%# endif - %# dead code -- MatLab usage of numel is inconsistant between arrays - %# and objects. Compare numel(randn(3)) and numel(some_class) - - if 1 == nargin, - n = prod(df._cnt([1 end])); - else - error(print_usage()); - endif - endfunction function usage = print_usage() Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/power.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/power.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/power.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -0,0 +1,29 @@ +function resu = power(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df_mapper(@power, df, varargin{:}); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/power.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-11-23 17:35:27 UTC (rev 7942) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -1,8 +1,9 @@ function [A, B] = df_basecomp(A, B); %# function [A, B] = df_basecomp(A, B) - %# Basic size verifcation for binary operations on dataframe. Returns - %# a scalar, a matrix, or a dataframe. Cell arrays are converted to df. + %# Basic size and metadata compatibility verifications for + %# two-arguments operations on dataframe. Returns a scalar, a matrix, + %# or a dataframe. Cell arrays are converted to df. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% @@ -28,35 +29,39 @@ %# $Id$ %# - if isscalar(A) || isscalar(B) - return - endif - - if iscell(A), - A = dataframe(A); - elseif iscell(B), - B = dataframe(B); - endif - - if any(size(A) - size(B)), - error("Non compatible sizes"); - endif - if !isa(A, 'dataframe') || !isa(B, 'dataframe'), - return; %# don't go further with names/indexes comparisons - endif - - if any(A._ridx-B._ridx), - error("Non compatible indexes"); - endif - if !isempty(A._name{1}) && !isempty(B._name{1}) - if !any(strcmp(cellstr(A._name{1}), cellstr(B._name{1}))), - error("Incompatible row names"); + if !(isscalar(A) || isscalar(B)) + if (iscell(A)), + A = dataframe(A); + elseif (iscell(B)), + B = dataframe(B); endif - endif - if !isempty(A._name{2}) && !isempty(B._name{2}) - if !any(strcmp(cellstr(A._name{2}), cellstr(B._name{2}))), - error("Incompatible column names"); + + if (any(size(A) - size(B))), + disp([size(A) size(B)]) + error("Non compatible sizes"); endif + + if (isa(A, 'dataframe') && isa(B, 'dataframe')), + + %# compare indexes if both exist + if (!isempty(A._ridx) && !isempty(B._ridx)) + if (any(A._ridx-B._ridx)), + error("Non compatible indexes"); + endif + endif + + if (!isempty(A._name{1}) && !isempty(B._name{1})) + if (!any(strcmp(cellstr(A._name{1}), cellstr(B._name{1})))), + error("Incompatible row names"); + endif + endif + + if !isempty(A._name{2}) && !isempty(B._name{2}) + if !any(strcmp(cellstr(A._name{2}), cellstr(B._name{2}))), + error("Incompatible column names"); + endif + endif + endif endif endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-23 17:35:27 UTC (rev 7942) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -28,7 +28,13 @@ %# $Id$ %# - [A, B] = df_basecomp(A, B); + try + [A, B] = df_basecomp(A, B); + catch + A + B + keyboard + end_try_catch if isa(B, 'dataframe') if !isa(A, 'dataframe'), Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m 2010-11-23 17:35:27 UTC (rev 7942) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -40,7 +40,7 @@ switch(dim) case {1}, %# remove row metadata - resu._ridx = 1; resu._name{1, 1} = []; resu._over{1, 1} = []; + resu._ridx = []; resu._name{1, 1} = []; resu._over{1, 1} = []; for indi = resu._cnt(2):-1:1, resu._data{indi} = feval(func, resu._data{indi}, vout{:}); endfor Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -0,0 +1,61 @@ +function resu = repmat(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df; idx = horzcat(varargin{:}); + %# for the second dim, use either 1 either the 3rd one + dummy = idx; + if (length(dummy) > 2), + dummy(2) = []; + else + dummy(2) = 1; + endif + %# operate on first and third dim first + if (idx(1) > 1 || length(idx) > 2) + resu = df_mapper(@repmat, df, dummy); + if (!isempty(df._name{1})), + resu._name{1} = feval(@repmat, df._name{1}, [idx(1) 1]); + resu._over{1} = feval(@repmat, df._over{1}, [idx(1) 1]); + endif + resu._cnt(1) = resu._cnt(1) * idx(1); + endif + + %# operate on ridx + resu._ridx = feval(@repmat, resu._ridx, dummy); + + %# operate on second dim + if (length(idx) > 1 && idx(2) > 1), + resu._data = feval(@repmat, resu._data, [1 idx(2)]); + resu._name{2} = feval(@repmat, df._name{2}, [idx(2) 1]); + resu._over{2} = feval(@repmat, df._over{2}, [1 idx(2)]); + resu._type = feval(@repmat, df._type, [1 idx(2)]); + resu._cnt(2) = resu._cnt(2) * idx(2); + endif + + if (any([length(resu._cnt) length(idx)] > 2)), + resu._cnt(3) = sum(cellfun('size', resu._data, 2)); + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/reshape.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/reshape.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/reshape.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -0,0 +1,30 @@ +function resu = reshape(df, varargin) + %# function resu = reshape(df, varargin) + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + error('Function not yet implemented on dataframe'); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/reshape.m ___________________________________________________________________ Added: svn:keywords + Id Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/rows.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/rows.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/rows.m 2010-11-24 15:33:54 UTC (rev 7943) @@ -0,0 +1,31 @@ +function resu = rows(df) + %# function resu = rows(df) + %# returns the number of rows of a dataframe + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + resu = df._cnt(1); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/rows.m ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-24 21:57:22
|
Revision: 7947 http://octave.svn.sourceforge.net/octave/?rev=7947&view=rev Author: cdemills Date: 2010-11-24 21:57:16 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Made df_func return a dataframe, extract as much metadata as it can from its inputs Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m 2010-11-24 21:28:59 UTC (rev 7946) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m 2010-11-24 21:57:16 UTC (rev 7947) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = cell2mat(df_func(@eq, A, B)); + resu = df_func(@eq, A, B); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m 2010-11-24 21:28:59 UTC (rev 7946) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m 2010-11-24 21:57:16 UTC (rev 7947) @@ -27,34 +27,6 @@ %# $Id$ %# - [A, B] = df_basecomp(A, B); - - if isa(B, 'dataframe') - if !isa(A, 'dataframe'), - resu = B; - if isscalar(A) - resu._data = cellfun(@(x) A+x, B._data, "UniformOutput", false); - elseif ismatrix(A), - resu._data = cellfun(@(x, y) x+y, num2cell(A, 1), B._data,\ - "UniformOutput", false); - else - error("Operator + not implemented"); - endif - else - resu = A; - resu._data = cellfun(@(x, y) x+y, A._data, B._data,\ - "UniformOutput", false); - endif - else - resu = A; - if isscalar(B), - resu._data = cellfun(@(x) x+B, A._data, "UniformOutput", false); - elseif ismatrix(B), - resu._data = cellfun(@(x, y) x+y, A._data, num2cell(B, 1),\ - "UniformOutput", false); - else - error("Operator + not implemented"); - endif - endif + resu = df_func(@plus, A, B); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-24 21:28:59 UTC (rev 7946) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-24 21:57:16 UTC (rev 7947) @@ -1,8 +1,9 @@ -function resu = df_func(func, A, B); +function resu = df_func(func, A, B, varargin); %# function resu = df_func(func, A, B) %# Implements an iterator to apply some func when at least one - %# argument is a dataframe. The output is NOT a dataframe. + %# argument is a dataframe. The output is a dataframe with the same + %# metadata, types may be altered, like f.i. double=>logical. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% @@ -28,37 +29,44 @@ %# $Id$ %# - try - [A, B] = df_basecomp(A, B); - catch - A - B - keyboard - end_try_catch - + [A, B] = df_basecomp(A, B); + if isa(B, 'dataframe') + resu = df_allmeta(B); if !isa(A, 'dataframe'), if isscalar(A) - resu = cellfun(@(x) feval(func, A, x), B._data, "UniformOutput", false); + resu._data = cellfun(@(x) feval(func, A, x, varargin{:}), B._data, \ + "UniformOutput", false); elseif ismatrix(A), - resu = cellfun(@(x, y) feval(func, x, y), num2cell(A, 1), B._data, \ - "UniformOutput", false); + resu._data = cellfun(@(x, y) feval(func, x, y, varargin{:}), \ + num2cell(A, 1), B._data, "UniformOutput", false); else - error("Function %s not implemented", func2str(func)); + error("Function %s not implemented for %s by %s", \ + func2str(func), class(A), class(B)); endif else - resu = cellfun(@(x, y) feval(func, x, y), A._data, B._data, \ - "UniformOutput", false); - endif + resu._data = cellfun(@(x, y) feval(func, x, y, varargin{:}), A._data, \ + B._data, "UniformOutput", false); + endif else + resu = df_allmeta(A); if isscalar(B), - resu = cellfun(@(x) feval(func, x, B), A._data, "UniformOutput", false); + resu._data = cellfun(@(x) feval(func, x, B, varargin{:}), A._data, \ + "UniformOutput", false); elseif ismatrix(B), - resu = cellfun(@(x, y) feval(func, x, y), A._data, num2cell(B, 1), \ - "UniformOutput", false); + resu._data = cellfun(@(x, y) feval(func, x, y, varargin{:}), A._data, \ + num2cell(B, 1), "UniformOutput", false); else - error("Operator < not implemented"); + error("Function %s not implemented for %s by %s", \ + func2str(func), class(A), class(B)); endif endif - + + resu._type = cellfun(@(x) class(x(1)), resu._data, "UniformOutput", false); + %# sanity check + dummy = sum(cellfun('size', resu._data, 2)); + if dummy != resu._cnt(2), + resu._cnt(3) = dummy; + endif + endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m 2010-11-24 21:28:59 UTC (rev 7946) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m 2010-11-24 21:57:16 UTC (rev 7947) @@ -27,10 +27,9 @@ %# resu = df_allmeta(df); - for indi = df._cnt(2):-1:1, - resu._data{indi} = feval(func, df._data{indi}, varargin{:}); - endfor - + resu._data = cellfun(@(x) feval(func, x, varargin{:}), df._data, "UniformOutput", false); + resu._type = cellfun(@(x) class(x(1)), resu._data, "UniformOutput", false); + %# sanity check dummy = sum(cellfun('size', resu._data, 2)); if dummy != resu._cnt(2), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-26 09:31:58
|
Revision: 7952 http://octave.svn.sourceforge.net/octave/?rev=7952&view=rev Author: cdemills Date: 2010-11-26 09:31:51 +0000 (Fri, 26 Nov 2010) Log Message: ----------- Merging df_rcfunc and df_ccfunc Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_ccfunc.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_rcfunc.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsindex.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m 2010-11-25 23:37:17 UTC (rev 7951) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/eq.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@eq, A, B); + resu = df_func(@eq, A, B); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m 2010-11-25 23:37:17 UTC (rev 7951) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -28,7 +28,7 @@ %# try - resu = df_rcfunc(@mtimes, A, B); + resu = df_rcfunc(@mtimes, A, B, true); catch disp(lasterr()); error("Operator * problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m 2010-11-25 23:37:17 UTC (rev 7951) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/plus.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -28,7 +28,7 @@ %# try - resu = df_ccfunc(@plus, A, B); + resu = df_func(@plus, A, B); catch disp(lasterr()); error("Operator + problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_ccfunc.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_ccfunc.m 2010-11-25 23:37:17 UTC (rev 7951) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_ccfunc.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -1,9 +1,10 @@ -function resu = df_ccfunc(func, A, B, varargin); +function resu = df_ccfunc(func, A, B, whole); - %# function resu = df_ccfunc(func, A, B) + %# function resu = df_ccfunc(func, A, B, whole) %# Implements an column vs column iterator to apply some func when at %# least one argument is a dataframe. The output is a dataframe with %# the same metadata, types may be altered, like f.i. double=>logical. + %# 'whole' indicate if the LHS as to be taken in block, default = false. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% @@ -30,20 +31,28 @@ %# [A, B, resu] = df_basecomp(A, B); + if nargin < 4, whole = false; endif if (isa(B, 'dataframe')) if (!isa(A, 'dataframe')), - if (isscalar(A) || ismatrix(A)), + if (isscalar(A) || (ismatrix(A) && whole)), for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, A, char(B._data{indi}), \ - varargin{:}); + resu._data{indi} = feval(func, A, char(B._data{indi})); otherwise - resu._data{indi} = feval(func, A, B._data{indi}, \ - varargin{:}); + resu._data{indi} = feval(func, A, B._data{indi}); endswitch endfor + elseif (ismatrix(A)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, A(:, indi), char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, A(:, indi), B._data{indi}); + endswitch + endfor else error("Function %s not implemented for %s by %s", \ func2str(func), class(A), class(B)); Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -0,0 +1,103 @@ +function resu = df_func(func, A, B, itercol=true, whole=logical([0 0])); + + %# function resu = df_rcfunc(func, A, B, whole) + %# Implements an iterator to apply some func when at + %# least one argument is a dataframe. The output is a dataframe with + %# the same metadata, types may be altered, like f.i. double=>logical. + %# When itercol is 'true', the default, LHS is iterated by columns, + %# otherwise by rows. 'Whole' is a two-elements logical vector with + %# the meaning that LHS and or RHS must be iterated at once or not + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id: df_rcfunc.m 7950 2010-11-25 18:07:59Z cdemills $ + %# + + [A, B, resu] = df_basecomp(A, B); + + if (isa(B, 'dataframe')) + if (!isa(A, 'dataframe')), + if (isscalar(A)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, A, char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, A, B._data{indi}); + endswitch + endfor + else + if (whole(1) && !whole(2)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, A, char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, A, B._data{indi}); + endswitch + endfor + elseif (itercol && !whole(2)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, A(:, indi), char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, A(:, indi), B._data{indi}); + endswitch + endfor + elseif (!whole(2)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, A(indi, :), char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, A(indi, :), B._data{indi}); + endswitch + endfor + else + error("Function %s not implemented for %s by %s", \ + func2str(func), class(A), class(B)); + endif + endif + else + error('To be implemented'); + resu._data = cellfun(@(x, y) feval(func, x, y, varargin{:}), A._data, \ + B._data, "UniformOutput", false); + endif + else + if (isscalar(B) || ismatrix(B)), + resu._data = cellfun(@(x) feval(func, x, B, varargin{:}), A._data, \ + "UniformOutput", false); + else + error("Function %s not implemented for %s by %s", \ + func2str(func), class(A), class(B)); + endif + endif + + resu._type = cellfun(@class, resu._data, "UniformOutput", false); + %# sanity check + dummy = sum(cellfun('size', resu._data, 2)); + if dummy != resu._cnt(2), + resu._cnt(3) = dummy; + endif + +endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m 2010-11-25 23:37:17 UTC (rev 7951) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_name2idx.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -51,6 +51,8 @@ switch class(subs) case {"cell" } orig_name = char(subs); + case {"dataframe"} + orig_name = "elements indexed by a dataframe"; otherwise orig_name = num2str(subs); endswitch @@ -111,6 +113,8 @@ elseif isa(subs, 'logical'), idx = 1:length(subs); idx(~subs) = []; + elseif isa(subs, 'dataframe'), + idx = subsindex(subs, 1); else idx = subs; endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_rcfunc.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_rcfunc.m 2010-11-25 23:37:17 UTC (rev 7951) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_rcfunc.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -1,9 +1,10 @@ -function resu = df_rcfunc(func, A, B, varargin); +function resu = df_rcfunc(func, A, B, whole); - %# function resu = df_rcfunc(func, A, B) + %# function resu = df_rcfunc(func, A, B, whole) %# Implements an row vs column iterator to apply some func when at %# least one argument is a dataframe. The output is a dataframe with %# the same metadata, types may be altered, like f.i. double=>logical. + %# 'whole' indicate if the LHS as to be taken in block, default = false. %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> %% @@ -30,12 +31,28 @@ %# [A, B, resu] = df_basecomp(A, B); - + if nargin < 4, whole = false; endif + if (isa(B, 'dataframe')) if (!isa(A, 'dataframe')), - if (isscalar(A) || ismatrix(A)), - resu._data = cellfun(@(x) feval(func, A, x, varargin{:}), B._data, \ - "UniformOutput", false); + if (isscalar(A) || (ismatrix(A) && whole)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, A, char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, A, B._data{indi}); + endswitch + endfor + elseif (ismatrix(A)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, A(indi, :), char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, A(indi, :), B._data{indi}); + endswitch + endfor else error("Function %s not implemented for %s by %s", \ func2str(func), class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-25 23:37:17 UTC (rev 7951) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -27,17 +27,6 @@ %# $Id$ %# - %# we may use df as index ! - for indi = 1:length(S), - if isa(S(indi).subs, 'cell'), - for indj = 1:length(S(indi).subs), - if isa(S(indi).subs{indj}, 'dataframe'), - S(indi).subs{indj} = horzcat((struct(S(indi).subs{indj}))._data{:}); - endif - endfor - endif - endfor - switch(S(1).type) case '{}' error('Invalid dataframe as cell assignement'); Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsindex.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsindex.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsindex.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -0,0 +1,46 @@ +function resu = subsindex(df, base) + %# function resu = subsindex(df) + %# This function convert a dataframe to an index + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + if nargin < 2, + base = -1.0; + else + base = base - 1.0; + endif + + resu = []; + for indi = 1:length(df._data), + %# transform each column to an index + switch(df._type{indi}) + case 'logical' + resu = vertcat(resu, find(df._data{indi}) - base); + otherwise + resu = vertcat(resu, double(df._data{indi}) - base); + endswitch + endfor + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsindex.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-11-25 23:37:17 UTC (rev 7951) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-11-26 09:31:51 UTC (rev 7952) @@ -37,16 +37,6 @@ %# what kind of object should we return ? asked_output_type = ''; asked_output_format = []; - %# we may use df as index ! - for indi = 1:length(S), - if isa(S(indi).subs, 'cell'), - for indj = 1:length(S(indi).subs), - if isa(S(indi).subs{indj}, 'dataframe'), - S(indi).subs{indj} = horzcat((struct(S(indi).subs{indj}))._data{:}); - endif - endfor - endif - endfor if (strcmp(S(1).type, '.')), %# struct access indi = strmatch(S(1).subs, 'as'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-26 11:05:42
|
Revision: 7953 http://octave.svn.sourceforge.net/octave/?rev=7953&view=rev Author: cdemills Date: 2010-11-26 11:05:35 +0000 (Fri, 26 Nov 2010) Log Message: ----------- Back to unified df_func; implented 'inv'; by default, df.array let downclassing occur Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/inv.m Removed Paths: ------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_ccfunc.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_rcfunc.m Property Changed: ---------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/and.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@and, A, B); + resu = df_func(@and, A, B); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ge.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@ge, A, B); + resu = df_func(@ge, A, B); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/gt.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@gt, A, B); + resu = df_func(@gt, A, B); endfunction Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/inv.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/inv.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/inv.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -0,0 +1,52 @@ +function [resu, rcond] = inv(df); + + %# function [x, rcond] = inv(df) + %# Overloaded function computing the inverse of a dataframe. To + %# succeed, the dataframe must be convertible to an square array. Row + %# and column meta-information are exchanged. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + if (length(df._cnt) > 2 || (df._cnt(1) != df._cnt(2))), + error("Dataframe is not square"); + endif + + %# quick and dirty conversion + [dummy, rcond] = inv(horzcat(df._data{:})); + + resu = df_allmeta(df); + + [resu._name{2}, resu._name{1}] = deal(resu._name{1}, resu._name{2}); + [resu._over{2}, resu._over{1}] = deal(resu._over{1}, resu._over{2}); + if (isempty(resu._name{2})), + resu._name{2} = cellstr(repmat('_', resu._cnt(2), 1)); + resu._over{2} = ones(1, resu._cnt(2)); + endif + for indi = resu._cnt(1):-1:1, + resu._data{indi} = dummy(:, indi); + endfor + resu._type(:) = class(dummy); + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/inv.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ldivide.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -28,7 +28,7 @@ %# try - resu = df_ccfunc(@ldivide, A, B); + resu = df_func(@ldivide, A, B); catch disp(lasterr()); error("Operator .\\ problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/le.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@le, A, B); + resu = df_func(@le, A, B); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/lt.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@lt, A, B); + resu = df_func(@lt, A, B); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/minus.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -28,7 +28,7 @@ %# try - resu = df_ccfunc(@minus, A, B); + resu = df_func(@minus, A, B); catch disp(lasterr()); error("Operator - problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mldivide.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -28,7 +28,7 @@ %# try - resu = df_rcfunc(@mldivide, A, B); + resu = df_func(@mldivide, A, B); catch disp(lasterr()); error("Operator \\ problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -28,7 +28,7 @@ %# try - resu = df_rcfunc(@mrdivide, A, B); + resu = df_func(@mrdivide, A, B); catch disp(lasterr()); error("Operator / problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mtimes.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -28,7 +28,7 @@ %# try - resu = df_rcfunc(@mtimes, A, B, true); + resu = df_func(@mtimes, A, B, false, [true false]); catch disp(lasterr()); error("Operator * problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ne.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@ne, A, B); + resu = df_func(@ne, A, B); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/or.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@or, A, B); + resu = df_func(@or, A, B); endfunction Deleted: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_ccfunc.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_ccfunc.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_ccfunc.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -1,89 +0,0 @@ -function resu = df_ccfunc(func, A, B, whole); - - %# function resu = df_ccfunc(func, A, B, whole) - %# Implements an column vs column iterator to apply some func when at - %# least one argument is a dataframe. The output is a dataframe with - %# the same metadata, types may be altered, like f.i. double=>logical. - %# 'whole' indicate if the LHS as to be taken in block, default = false. - - %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> - %% - %% This file is part of Octave. - %% - %% Octave is free software; you can redistribute it and/or - %% modify it under the terms of the GNU General Public - %% License as published by the Free Software Foundation; - %% either version 2, or (at your option) any later version. - %% - %% Octave is distributed in the hope that it will be useful, - %% but WITHOUT ANY WARRANTY; without even the implied - %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - %% PURPOSE. See the GNU General Public License for more - %% details. - %% - %% You should have received a copy of the GNU General Public - %% License along with Octave; see the file COPYING. If not, - %% write to the Free Software Foundation, 59 Temple Place - - %% Suite 330, Boston, MA 02111-1307, USA. - - %# - %# $Id: df_func.m 7947 2010-11-24 21:57:16Z cdemills $ - %# - - [A, B, resu] = df_basecomp(A, B); - if nargin < 4, whole = false; endif - - if (isa(B, 'dataframe')) - if (!isa(A, 'dataframe')), - if (isscalar(A) || (ismatrix(A) && whole)), - for indi = resu._cnt(2):-1:1, - switch resu._type{indi} - case "char" - resu._data{indi} = feval(func, A, char(B._data{indi})); - otherwise - resu._data{indi} = feval(func, A, B._data{indi}); - endswitch - endfor - elseif (ismatrix(A)), - for indi = resu._cnt(2):-1:1, - switch resu._type{indi} - case "char" - resu._data{indi} = feval(func, A(:, indi), char(B._data{indi})); - otherwise - resu._data{indi} = feval(func, A(:, indi), B._data{indi}); - endswitch - endfor - else - error("Function %s not implemented for %s by %s", \ - func2str(func), class(A), class(B)); - endif - else - resu._data = cellfun(@(x, y) feval(func, x, y, varargin{:}), A._data, \ - B._data, "UniformOutput", false); - endif - else - if (isscalar(B) || ismatrix(B)), - for indi = resu._cnt(2):-1:1, - switch resu._type{indi} - case "char" - resu._data{indi} = feval(func, char(A._data{indi}), \ - B, varargin{:}); - otherwise - resu._data{indi} = feval(func, A._data{indi}, \ - B, varargin{:}); - endswitch - endfor - else - error("Function %s not implemented for %s by %s", \ - func2str(func), class(A), class(B)); - endif - endif - - resu._type = cellfun(@class, resu._data, "UniformOutput", false); - %# sanity check - dummy = sum(cellfun('size', resu._data, 2)); - if dummy != resu._cnt(2), - resu._cnt(3) = dummy; - endif - -endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -29,7 +29,7 @@ %% Suite 330, Boston, MA 02111-1307, USA. %# - %# $Id: df_rcfunc.m 7950 2010-11-25 18:07:59Z cdemills $ + %# $Id$ %# [A, B, resu] = df_basecomp(A, B); Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m ___________________________________________________________________ Added: svn:keywords + Id Deleted: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_rcfunc.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_rcfunc.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_rcfunc.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -1,82 +0,0 @@ -function resu = df_rcfunc(func, A, B, whole); - - %# function resu = df_rcfunc(func, A, B, whole) - %# Implements an row vs column iterator to apply some func when at - %# least one argument is a dataframe. The output is a dataframe with - %# the same metadata, types may be altered, like f.i. double=>logical. - %# 'whole' indicate if the LHS as to be taken in block, default = false. - - %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> - %% - %% This file is part of Octave. - %% - %% Octave is free software; you can redistribute it and/or - %% modify it under the terms of the GNU General Public - %% License as published by the Free Software Foundation; - %% either version 2, or (at your option) any later version. - %% - %% Octave is distributed in the hope that it will be useful, - %% but WITHOUT ANY WARRANTY; without even the implied - %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - %% PURPOSE. See the GNU General Public License for more - %% details. - %% - %% You should have received a copy of the GNU General Public - %% License along with Octave; see the file COPYING. If not, - %% write to the Free Software Foundation, 59 Temple Place - - %% Suite 330, Boston, MA 02111-1307, USA. - - %# - %# $Id$ - %# - - [A, B, resu] = df_basecomp(A, B); - if nargin < 4, whole = false; endif - - if (isa(B, 'dataframe')) - if (!isa(A, 'dataframe')), - if (isscalar(A) || (ismatrix(A) && whole)), - for indi = resu._cnt(2):-1:1, - switch resu._type{indi} - case "char" - resu._data{indi} = feval(func, A, char(B._data{indi})); - otherwise - resu._data{indi} = feval(func, A, B._data{indi}); - endswitch - endfor - elseif (ismatrix(A)), - for indi = resu._cnt(2):-1:1, - switch resu._type{indi} - case "char" - resu._data{indi} = feval(func, A(indi, :), char(B._data{indi})); - otherwise - resu._data{indi} = feval(func, A(indi, :), B._data{indi}); - endswitch - endfor - else - error("Function %s not implemented for %s by %s", \ - func2str(func), class(A), class(B)); - endif - else - error('To be implemented'); - resu._data = cellfun(@(x, y) feval(func, x, y, varargin{:}), A._data, \ - B._data, "UniformOutput", false); - endif - else - if (isscalar(B) || ismatrix(B)), - resu._data = cellfun(@(x) feval(func, x, B, varargin{:}), A._data, \ - "UniformOutput", false); - else - error("Function %s not implemented for %s by %s", \ - func2str(func), class(A), class(B)); - endif - endif - - resu._type = cellfun(@class, resu._data, "UniformOutput", false); - %# sanity check - dummy = sum(cellfun('size', resu._data, 2)); - if dummy != resu._cnt(2), - resu._cnt(3) = dummy; - endif - -endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/rdivide.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -28,7 +28,7 @@ %# try - resu = df_ccfunc(@rdivide, A, B); + resu = df_func(@rdivide, A, B); catch disp(lasterr()); error("Operator ./ problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -262,12 +262,16 @@ output_type = asked_output_type; else %# can the data be merged ? - output_type = df._type{indc(1)}; + output_type = df._data{indc(1)}(1); dummy = isnumeric(df._data{indc(1)}); for indi = 2:ncol, dummy = dummy & isnumeric(df._data{indc(indi)}); if ~strcmp(output_type, df._type{indc(indi)}), - if dummy, continue; endif + if dummy, + %# let downclassing occur + output_type = horzcat(output_type, df._data{indc(indi)}(1)); + continue; + endif %# unmixable args -- falls back to type of parent container error("Selected columns %s not compatible with cat() -- use 'cell' as output format", mat2str(indc)); %# dead code -- suppress previous line for switching automagically the output format to df @@ -275,6 +279,8 @@ break; endif endfor + asked_output_format = class(output_type); + output_type = "array"; endif endif @@ -312,7 +318,7 @@ endif endif endif - + if (strcmp(output_type, class(df))), %# disp('line 295 ') %# export the result as a dataframe Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/times.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -28,7 +28,7 @@ %# try - resu = df_ccfunc(@times, A, B); + resu = df_func(@times, A, B); catch disp(lasterr()); error("Operator .* problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m 2010-11-26 09:31:51 UTC (rev 7952) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/xor.m 2010-11-26 11:05:35 UTC (rev 7953) @@ -27,6 +27,6 @@ %# $Id$ %# - resu = df_ccfunc(@xor, A, B); + resu = df_func(@xor, A, B); endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-26 16:56:47
|
Revision: 7955 http://octave.svn.sourceforge.net/octave/?rev=7955&view=rev Author: cdemills Date: 2010-11-26 16:56:40 +0000 (Fri, 26 Nov 2010) Log Message: ----------- Intermediate version, some matrix ops are still not working as they should Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m 2010-11-26 16:38:36 UTC (rev 7954) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/mrdivide.m 2010-11-26 16:56:40 UTC (rev 7955) @@ -28,7 +28,7 @@ %# try - resu = df_func(@mrdivide, A, B); + resu = df_func(@mrdivide, A, B, false, [true false]); catch disp(lasterr()); error("Operator / problem for %s vs. %s", class(A), class(B)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-11-26 16:38:36 UTC (rev 7954) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-11-26 16:56:40 UTC (rev 7955) @@ -55,9 +55,16 @@ if (!isempty(A._name{1})) if (!isempty(B._name{1})) - if (!any(strcmp(cellstr(A._name{1}), cellstr(B._name{1})))), + dummy = !(strcmp(cellstr(A._name{1}), cellstr(B._name{1}))\ + | (A._over{1}(:)) | (B._over{1}(:))); + if (any(dummy)), error("Incompatible row names"); endif + dummy = A._over{1} > B._over{1}; + if (any(dummy)), + C._name{1}(dummy) = B._name{1}(dummy); + C._over{1}(dummy) = B._over{1}(dummy); + endif endif else if (nargout > 2), @@ -67,24 +74,31 @@ if (!isempty(A._name{2})) if (!isempty(B._name{2})) - if (!any(strcmp(cellstr(A._name{2}), cellstr(B._name{2})))), + dummy = !(strcmp(cellstr(A._name{2}), cellstr(B._name{2}))\ + | (A._over{2}(:)) | (B._over{2}(:))); + if (any(dummy)), error("Incompatible column names"); endif + dummy = A._over{2} > B._over{2}; + if (any(dummy)), + C._name{2}(dummy) = B._name{2}(dummy); + C._over{2}(dummy) = B._over{2}(dummy); + endif endif else - if (nargout > 2), + if (nargout > 2 && !isempty(B._name{2})), C._name{2} = B._name{2}; C._over{2} = B._over{2}; endif endif - if (isempty(A._src) && nargout > 2), + if (isempty(A._src) && nargout > 2 && !isempty(B._src)), C._src = B._src; endif endif else if (nargout > 2), C = df_allmeta(B); endif endif - else + else %# one of the arg is a scalar if (isa(A, 'dataframe')) if (nargout > 2), C = df_allmeta(A); endif else Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-26 16:38:36 UTC (rev 7954) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-26 16:56:40 UTC (rev 7955) @@ -79,17 +79,88 @@ endif endif else - error('To be implemented'); - resu._data = cellfun(@(x, y) feval(func, x, y, varargin{:}), A._data, \ - B._data, "UniformOutput", false); + if (itercol), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, char(A._data{indi}), char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, A._data{indi}, B._data{indi}); + endswitch + endfor + else + dummy = horzcat(A._data {:}); + if whole(1), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, dummy, char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, dummy, B._data{indi}); + endswitch + endfor + else + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, dummy(indi, :), char(B._data{indi})); + otherwise + resu._data{indi} = feval(func, dummy(indi, :), B._data{indi}); + endswitch + endfor + endif + endif endif - else - if (isscalar(B) || ismatrix(B)), - resu._data = cellfun(@(x) feval(func, x, B, varargin{:}), A._data, \ - "UniformOutput", false); + else %# B is not a dataframe + if (isscalar(B)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, char(A._data{indi}), B); + otherwise + resu._data{indi} = feval(func, A._data{indi}, B); + endswitch + endfor else - error("Function %s not implemented for %s by %s", \ - func2str(func), class(A), class(B)); + if (itercol), + if (whole(2)), + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, char(A._data{indi}), B); + otherwise + resu._data{indi} = feval(func, A._data{indi}, B); + endswitch + endfor + else + for indi = resu._cnt(2):-1:1, + switch resu._type{indi} + case "char" + resu._data{indi} = feval(func, char(A._data{indi}), \ + B(:, indi)); + otherwise + resu._data{indi} = feval(func, A._data{indi}, B(:, indi)); + endswitch + endfor + endif + else + dummy = horzcat(A._data {:}); + if whole(1), + for indi = resu._cnt(2):-1:1, + resu._data{indi} = feval(func, dummy, B(:, indi)); + endfor + else + if !whole(2), + for indi = resu._cnt(2):-1:1, + resu._data{indi} = feval(func, dummy(indi, :), B(:, indi)); + endfor + else + for indi = resu._cnt(2):-1:1, + resu._data{indi} = feval(func, dummy(indi, :), B); + endfor + endif + endif + endif endif endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-29 14:46:51
|
Revision: 7963 http://octave.svn.sourceforge.net/octave/?rev=7963&view=rev Author: cdemills Date: 2010-11-29 14:46:44 +0000 (Mon, 29 Nov 2010) Log Message: ----------- Horzcat and vertcat must insert the row/column names early through inputname, otherwise it is no more useable in cat Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-11-29 14:42:34 UTC (rev 7962) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-11-29 14:46:44 UTC (rev 7963) @@ -59,24 +59,28 @@ resu._cnt(1) = resu._cnt(1) + B._cnt(1); resu._ridx = [resu._ridx(:); B._ridx(:)]; %# find data with same column names - indr = logical(ones(1, resu._cnt(2))); - indb = logical(ones(1, resu._cnt(2))); - indi = 1; - while indi <= resu._cnt(2), - indj = strmatch(resu._name{2}(indi), B. _name{2}, 'exact'); - if ~isempty(indj), - indj = indj(1); - if ~strcmp(resu._type{indi}, B._type{indj}), - error("Trying to mix columns of different types"); + dummy = A._over{2} & B._over{2}; + indA = logical(ones(1, resu._cnt(2))); + indB = logical(ones(1, resu._cnt(2))); + for indj = 1:resu._cnt(2), + if (dummy(indj)), + indk = strmatch(resu._name{2}(indi), B. _name{2}, 'exact'); + if (~isempty(indk)), + indk = indk(1); + if ~strcmp(resu._type{indi}, B._type{indk}), + error("Trying to mix columns of different types"); + endif endif - resu._data{indi} = [resu._data{indi}; B._data{indj}]; - indr(indi) = false; indb(indj) = false; + else + indk = indj; endif - indi = indi + 1; - endwhile - if any(indr) || any(indb) + resu._data{indj} = [resu._data{indj}; B._data{indk}]; + indA(indj) = false; indB(indk) = false; + endfor + if any(indA) || any(indB) error('Different number/names of columns in dataframe'); endif + endfor case 2 Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-29 14:42:34 UTC (rev 7962) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-29 14:46:44 UTC (rev 7963) @@ -299,8 +299,12 @@ df._over{2}(1, indj) = true; else if !isempty(indj), - if length(df._name{2}) < indj(1) || isempty(df._name{2}(indj)), + if (1 == length(df._name{2}) && length(df._name{2}) < \ + length(indj)), [df._name{2}(indj, 1), df._over{2}(1, indj)] ... + = df_colnames(char(df._name{2}), indj); + elseif (length(df._name{2}) < indj(1) || isempty(df._name{2}(indj))), + [df._name{2}(indj, 1), df._over{2}(1, indj)] ... = df_colnames(inputname(indi), indj); endif endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m 2010-11-29 14:42:34 UTC (rev 7962) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/horzcat.m 2010-11-29 14:46:44 UTC (rev 7963) @@ -24,6 +24,10 @@ %# $Id$ %# - resu = cat(1, df, varargin{:}); + for indi = 1:length(varargin), + varargin{indi} = dataframe(varargin{indi}, 'colnames', inputname(1+indi));, + endfor + + resu = cat(2, df, varargin{:}); endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m 2010-11-29 14:42:34 UTC (rev 7962) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/vertcat.m 2010-11-29 14:46:44 UTC (rev 7963) @@ -24,6 +24,11 @@ %# $Id$ %# - resu = cat(2, df, varargin{:}); + %# do the conversion now, in order not to loose inputnames + for indi = 1:length(varargin), + varargin{indi} = dataframe(varargin{indi}, 'colnames', inputname(1+indi));, + endfor + resu = cat(1, df, varargin{:}); + endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-11-30 21:58:15
|
Revision: 7965 http://octave.svn.sourceforge.net/octave/?rev=7965&view=rev Author: cdemills Date: 2010-11-30 21:58:08 +0000 (Tue, 30 Nov 2010) Log Message: ----------- Mostly implemented a 3rd dim with column-compressed data Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_allmeta.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_colmeta.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m trunk/octave-forge/extra/dataframe/inst/@dataframe/sort.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m Added Paths: ----------- trunk/octave-forge/extra/dataframe/inst/@dataframe/ndims.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_whole.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/cat.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -28,7 +28,7 @@ %# %# $Id$ %# - +disp('@dataframe/cat.m'); disp(dim) switch dim case 1 resu = A; @@ -57,17 +57,22 @@ resu._over{1} = [resu._over{1} B._over{1}]; endif resu._cnt(1) = resu._cnt(1) + B._cnt(1); - resu._ridx = [resu._ridx(:); B._ridx(:)]; + if size(resu._ridx, 2) < size(B._ridx, 2), + resu._ridx(:, end+1:size(B._ridx, 2)) = NA; + elseif size(resu._ridx, 2) > size(B._ridx, 2), + B._ridx(:, end+1:size(resu._ridx, 2)) = NA; + endif + resu._ridx = [resu._ridx; B._ridx]; %# find data with same column names dummy = A._over{2} & B._over{2}; - indA = logical(ones(1, resu._cnt(2))); - indB = logical(ones(1, resu._cnt(2))); + indA = true(1, resu._cnt(2)); + indB = true(1, resu._cnt(2)); for indj = 1:resu._cnt(2), if (dummy(indj)), - indk = strmatch(resu._name{2}(indi), B. _name{2}, 'exact'); + indk = strmatch(resu._name{2}(indj), B._name{2}, 'exact'); if (~isempty(indk)), indk = indk(1); - if ~strcmp(resu._type{indi}, B._type{indk}), + if ~strcmp(resu._type{indj}, B._type{indk}), error("Trying to mix columns of different types"); endif endif @@ -114,59 +119,75 @@ for indi = 1:length(varargin), B = varargin{indi}; - if !isa(B, 'dataframe'), - if iscell(B) && 2 == length(B), + if (!isa(B, 'dataframe')), + if (iscell(B) && 2 == length(B)), B = dataframe(B{2}, 'rownames', B{1}); else - B = dataframe(B, 'colnames', inputname(2+indi)); + B = dataframe(B, 'colnames', inputname(indi+2)); endif endif - if resu._cnt(1) != B._cnt(1), - disp('line 124 '); keyboard + if (resu._cnt(1) != B._cnt(1)), error('Different number of rows in dataframes'); endif - if resu._cnt(2) != B._cnt(2), + if (resu._cnt(2) != B._cnt(2)), error('Different number of columns in dataframes'); endif %# to be merged against 3rd dim, rownames must be equals, if %# non-empty. Columns are merged based upon their name; columns %# with identic content are kept. - resu._ridx = [resu._ridx B._ridx(:)]; + if size(resu._ridx, 2) < size(B._ridx, 2), + resu._ridx(:, end+1:size(B._ridx, 2)) = NA; + elseif size(resu._ridx, 2) > size(B._ridx, 2), + B._ridx(:, end+1:size(resu._ridx, 2)) = NA; + endif + resu._ridx = cat(3, resu._ridx, B._ridx); %# find data with same column names - indr = logical(ones(1, resu._cnt(2))); - indb = logical(ones(1, resu._cnt(2))); - indi = 1; - while indi <= resu._cnt(2), - indj = strmatch(resu._name{2}(indi), B. _name{2}, 'exact'); - if ~isempty(indj), - indj = indj(1); - if ~strcmp(resu._type{indi}, B._type{indj}), - error("Trying to mix columns of different types"); + indA = true(1, resu._cnt(2)); + indB = true(1, resu._cnt(2)); + dummy = A._over{2} & B._over{2}; + for indj = 1:resu._cnt(2), + if (dummy(indj)), + indk = strmatch(resu._name{2}(indj), B._name{2}, 'exact'); + if (~isempty(indk)), + indk = indk(1); + if (~strcmp(resu._type{indj}, B._type{indk})), + error("Trying to mix columns of different types"); + endif endif - if all([isnumeric(resu._data{indi}) isnumeric(B._data{indj})]), - try - dummy = all(abs(resu._data{indi} - B._data{indj}) <= eps); - if dummy, - %# two numeric columns with same content -- skip - indr(indi) = false; indb(indj) = false; - indi = indi+1; continue; + else + indk = indj; + endif + if (all([isnumeric(resu._data{indj}) isnumeric(B._data{indk})])), + %# iterate over the columns of resu and B + op1 = resu._data{indj}; op2 = B._data{indk}; + for ind2=1:columns(op2), + indr = false; + for ind1=1:columns(op1), + if (all(abs(op1(:, ind1) - op2(:, ind2)) <= eps)), + resu._rep{indj} = [resu._rep{indj} ind1]; + indr = true; + break; endif - catch - %# things are not substractible - end_try_catch - endif - %# pad - resu._data{indi} = [resu._data{indi} B._data{indj}]; - indr(indi) = false; indb(indj) = false; + endfor + if (!indr), + %# pad in the second dim + resu._data{indj} = [resu._data{indj}, B._data{indk}]; + resu._rep{indj} = [resu._rep{indj} 1+length(resu._rep{indj})]; + endif + endfor + else + resu._data{indj} = [resu._data{indj} B._data{indk}]; + resu._rep{indj} = [resu._rep{indj} 1+length(resu._rep({indj}))]; endif - indi = indi + 1; - endwhile - if any(indr) || any(indb) + indA(indj) = false; indB(indk) = false; + endfor + if (any(indA) || any(indB)), error('Different number/names of columns in dataframe'); endif endfor - dummy = sum(cellfun('size', resu._data, 2)); + + dummy = sum(cellfun(@length, resu._rep)); if dummy != resu._cnt(2), resu._cnt(3) = dummy; else Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -69,8 +69,9 @@ df._name = {cell(0, 1), cell(1, 0)}; %# rows - cols df._over = cell(1, 2); df._ridx = []; - df._data = cell(0, 0); - df._type = cell(0, 0); + df._data = cell(0, 0); + df._rep = cell(0, 0); %# a repetition index + df._type = cell(0, 0); %# the type of each column df._src = cell(0, 0); df = class(df, 'dataframe'); return @@ -312,6 +313,7 @@ if !isempty(indj), idx.subs = {'', indj}; %# use direct assignement + if ndims(x) > 2, idx.subs{3} = 1:size(x, 3); endif df = subsasgn(df, idx, x); else df._cnt(2) = length(df._name{2}); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -42,26 +42,25 @@ endif if all(df._cnt > 0), %# stop for empty df - vspace = repmat(' ', df._cnt(1), 1); + dummy=[]; vspace = repmat(' ', df._cnt(1), 1); indi = 1; %# the real, unfolded index %# loop over columns where the corresponding _data really exists for indc = 1:min(df._cnt(2), size(df._data, 2)), %# emit column names and type - if 1 == size(df._data{indc}, 2), + if 1 == length(df._rep{indc}), dummy{1, 2+indi} = deblank(disp(df._name{2}{indc})); dummy{2, 2+indi} = deblank(df._type{indc}); else %# append a dot and the third-dimension index to column name tmp_str = [deblank(disp(df._name{2}{indc})) "."]; tmp_str = arrayfun(@(x) horzcat(tmp_str, num2str(x)), ... - (1:size(df._data{indc}, 2)), 'UniformOutput', false); + (1:length(df._rep{indc})), 'UniformOutput', false); dummy{1, 2+indi} = tmp_str{1}; dummy{2, 2+indi} = deblank(df._type{indc}); - indk = 1; while indk < size(df._data{indc}, 2), - dummy{1, 2+indi+indk} = tmp_str{1+indk}; - dummy{2, 2+indi+indk} = dummy{2, 2+indi}; - indk = indk + 1; - endwhile + for indk = 2:length(tmp_str), + dummy{1, 1+indi+indk} = tmp_str{indk}; + dummy{2, 1+indi+indk} = dummy{2, 2+indi}; + endfor endif %# "print" each column switch df._type{indc} @@ -88,8 +87,9 @@ endwhile otherwise %# keep only one horizontal space per line - indk = 1; while indk <= size(df._data{indc}, 2), - dummy{3, 2+indi} = disp(df._data{indc}(:, indk)); + unfolded = df._data{indc}(:, df._rep{indc}); + indk = 1; while indk <= size(unfolded, 2), + dummy{3, 2+indi} = disp(unfolded(:, indk)); tmp_str = char(regexp(dummy{3, 2+indi}, \ '[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?(\s??[-+]\s??[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?i)?', \ 'match', 'dotexceptnewline')); @@ -105,27 +105,35 @@ %# put everything together vspace = [' '; ' '; vspace]; %# second line content - if !isempty(df._ridx), - if 1 == size(df._ridx, 2), - dummy{2, 1} = ["_"; "Nr"]; - dummy{3, 1} = disp(df._ridx(:)); - indi = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); - resu = strjust(char(dummy{2, 1}, indi), 'right'); - else - resu = []; - for indi = 1:size(df._ridx, 2)-1, - dummy{2, 1} = [["_." num2str(indi)]; "Nr"]; - dummy{3, 1} = disp(df._ridx(:, indi)); - indj = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); - resu = horzcat(resu, strjust(char(dummy{2, 1}, indj), 'right'), vspace); - endfor - dummy{2, 1} = [["_." num2str(indi+1)]; "Nr"]; - dummy{3, 1} = disp(df._ridx(:, end)); - indj = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); - resu = horzcat(resu, strjust(char(dummy{2, 1}, indj), 'right')); - endif - else - resu = []; + resu = []; + if (!isempty(df._ridx)), + for ind1 = 1:size(df._ridx, 2), + if (1 == size(df._ridx, 3)) && (any(!isna(df._ridx(:, ind1)))), + dummy{2, 1} = [sprintf("_%d", ind1) ; "Nr"]; + dummy{3, 1} = disp(df._ridx(:, ind1)); + indi = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); + if isempty(resu), + resu = strjust(char(dummy{2, 1}, indi), 'right'); + else + resu = horzcat(resu, vspace, strjust(char(dummy{2, 1}, indi), \ + 'right'), vspace); + endif + else + for ind2 = 1:size(df._ridx, 3), + if (any(!isna(df._ridx(:, ind1, ind2)))), + dummy{2, 1} = [sprintf("_%d.%d", ind1, ind2) ; "Nr"]; + dummy{3, 1} = disp(df._ridx(:, ind1, ind2)); + indi = regexp(dummy{3, 1}, '\b.*\b', 'match', 'dotexceptnewline'); + if isempty(resu), + resu = strjust(char(dummy{2, 1}, indi), 'right'); + else + resu = horzcat(resu, vspace, strjust(char(dummy{2, 1}, indi), \ + 'right'), vspace); + endif + endif + endfor + endif + endfor endif %# emit row names @@ -140,17 +148,17 @@ if !isempty(dummy{3, 2}), indi = ~cellfun('isempty', dummy{3, 2}); if any(indi), - resu = horzcat(resu, vspace); - resu = horzcat(resu, strjust(char(dummy{2, 2}, dummy{3,2}), 'right')); + resu = horzcat(resu, vspace, strjust(char(dummy{2, 2}, dummy{3, 2}),\ + 'right')); endif endif %# emit each colum - for indi = 1: size(dummy, 2) - 2, + for indi = 1:size(dummy, 2) - 2, %# was max(df._cnt(2:end)), try %# avoid this column touching the previous one - if any(cellfun('size', dummy(1:2, 2+indi), 2) >= ... + if any(cellfun('size', dummy(1:2, 2+indi), 2) >= \ size(dummy{3, 2+indi}, 2)), resu = horzcat(resu, vspace); endif @@ -158,6 +166,7 @@ catch tmp_str = sprintf("Emitting %d lines, expecting %d", ... size(dummy{3, 2+indi}, 1), df._cnt(1)); + keyboard error(tmp_str); end_try_catch endfor Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/end.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -31,7 +31,7 @@ if k < 3, resu = df._cnt(k); else - resu = max(cellfun('size', df._data, 2)); + resu = max(cellfun(@length, df._rep)); endif catch error("incorrect call to end, index greater than number of dimensions"); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/fold.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -35,7 +35,7 @@ [indr, nrow] = df_name2idx(df._name{1}, indr, df._cnt(1), 'row'); [indc, ncol] = df_name2idx(df._name{2}, indc, df._cnt(2), 'column'); - if indr(1) > 1, + if (indr(1) > 1), slice_size = indr(1) - 1; %# we can't use directly resu = df(1:slice_size, :, :) S.type = '()'; @@ -43,10 +43,10 @@ resu = subsref(df, S); %# how many columns for each slice - targets = cellfun('size', df._data, 2); + targets = cellfun(@length, df._rep); %# a test function to determine if the location is free for indj = 1:df._cnt(2), - if any(indj == indc), + if (any(indj == indc)), continue; endif switch df._type{indj} @@ -63,19 +63,20 @@ %# where does this line go ? where = find(df._data{indc}(1:slice_size, 1) ... == df._data{indc}(indi, 1)); - if !isempty(where), + if (!isempty(where)), %# transfering one line -- loop over columns for indj = 1:df._cnt(2), if any(indj == indc), continue; endif - if testfunc{indj}(resu._data{indj}, where, targets(indj)) + if (testfunc{indj}(resu._data{indj}, where, targets(indj))), %# add one more sheet resu = df_pad(resu, 3, 1, indj); targets(indj) = targets(indj) + 1; endif %# transfer field + stop resu._data{indj}(where, targets(indj)) = ... df._data{indj}(indi, 1); endfor Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/ndims.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/ndims.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/ndims.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -0,0 +1,12 @@ +function resu = ndims(df) + %# -*- texinfo -*- + %# @deftypefn {Function File} ndims(@var{df}) + %# overloaded function implementing ndims for a dataframe + %# @end deftypefn + + resu = 2; + nseq = max(cellfun(@length, df._rep)); + + if nseq > 1, resu = 3; endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/ndims.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_allmeta.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_allmeta.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_allmeta.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -1,7 +1,7 @@ function resu = df_allmeta(df, dim = []) %# function resu = df_allmeta(df) - %# Returns a new dataframe, initalised with the allthe + %# Returns a new dataframe, initalised with the all the %# meta-information but with empty data %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> @@ -30,7 +30,11 @@ resu = dataframe([]); - if isempty(dim), dim = df._cnt(1:2); endif + if (isempty(dim)), + dim = df._cnt(1:2); + else + dim = dim(1:2); %# ignore third dim, if any + endif resu._cnt(1:2) = min(dim, df._cnt(1:2)); if (!isempty(df._name{1})), @@ -42,11 +46,16 @@ resu._over{2} = df._over{2}(1:resu._cnt(2)); endif if (!isempty(df._ridx)), - resu._ridx = df._ridx(1:resu._cnt(1)); + if (size(df._ridx, 2) >= resu._cnt(2)), + resu._ridx = df._ridx(1:resu._cnt(1), :, :); + else + resu._ridx = df._ridx(1:resu._cnt(1), 1, :); + endif endif - resu._type = df._type(1:resu._cnt(2)); %# init it with the right orientation resu._data = cell(size(df._data)); + resu._rep = cell(size(df._rep)); + resu._type = df._type(1:resu._cnt(2)); resu._src = df._src; endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -58,7 +58,7 @@ if (isscalar(A)), Csize = size(B); else - if (size(A, 1) != size(B, 1)), + if (size(A, 1) != size(B, 1)), error("Non compatible row sizes (op1 is %dx%d, op2 is %dx%d)",\ size(A), size(B)); endif @@ -77,6 +77,7 @@ if (!isempty(A._ridx)) if (!isempty(B._ridx) && itercol), if (any(A._ridx-B._ridx)), + keyboard error("Non compatible indexes"); endif endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_colmeta.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_colmeta.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_colmeta.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -36,6 +36,7 @@ resu._type = df._type; %# init it with the right orientation resu._data = cell(size(df._data)); + resu._rep = cell(size(df._rep)); resu._src = df._src; endfunction Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -0,0 +1,62 @@ +function [df, S] = df_cow(df, S, col, inds) + + %# function [resu, S] = df_cow(df, S, col, inds) + %# Implements Copy-On-Write on dataframe. If one or more columns + %# specified in inds is aliased to another one, duplicate it and + %# adjust the repetition index to remove the aliasing + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + if length(col) > 1, + error("df_cow must work on a column-by-column basis"); + endif + + if isempty(inds), inds = 1; endif + + for indi = inds, + dummy = df._rep{col}; dummy(indi)=[]; + [t1, t2] = ismember(df._rep{col}(indi)(:), dummy); + for indj = t2(find(t2)), %# Copy-On-Write + %# determines the index for the next column + t1 = 1+max(df._rep{col}); + %# update repetition index aliasing this one + df._rep{col}(find(df._rep{col} == indj)(2:end)) = t1; + %# duplicate the touched column + df._data{col} = horzcat(df._data{col}, df._data{col}(:, indj)); + if (length(S.subs) > 1), + %# adapt the sheet index accordingly + indk = find(S.subs{2} == indj); + S.subs{2}(indk(2:end)) = t1; + endif + endfor + endfor + + %# sanity check + dummy = sum(cellfun(@length, df._rep)); + if dummy != df._cnt(2), + df._cnt(3) = dummy; + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -33,7 +33,8 @@ %# [A, B, resu] = df_basecomp(A, B, itercol, func); - + itercol = itercol(1); %# drop second value + if (isa(B, 'dataframe')) if (!isa(A, 'dataframe')), if (isscalar(A)), @@ -45,26 +46,34 @@ resu._data{indi} = feval(func, A, B._data{indi}); endswitch endfor + resu._rep = B._rep; else if (whole(1) && !whole(2)), for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, A, char(B._data{indi})); + resu._data{indi} = feval(func, A, \ + char(B._data{indi}(:, B._rep{indi}))); otherwise - resu._data{indi} = feval(func, A, B._data{indi}); + resu._data{indi} = feval(func, A, \ + B._data{indi}(:, B._rep{indi})); endswitch + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor elseif (itercol && !whole(2)), for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, A(:, indi), char(B._data{indi})); + resu._data{indi} = feval(func, A(:, indi, :), \ + char(B._data{indi}(:, B._rep{indi}))); otherwise - resu._data{indi} = feval(func, A(:, indi), B._data{indi}); + resu._data{indi} = feval(func, A(:, indi, :), \ + B._data{indi}(:, B._rep{indi})); endswitch + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor elseif (!whole(2)), + warning("no 3D yet"); for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" @@ -74,9 +83,10 @@ endswitch endfor else - dummy = feval(func, A, horzcat(B._data {:})); + dummy = feval(func, A, df_whole(B)); for indi = resu._cnt(2):-1:1, %# store column-wise - resu._data{indi} = dummy(:, indi); + resu._data{indi} = squeeze(dummy(:, indi, :)); + resu._rep{indi} = 1:size(resu._data{indi}, 2); resu._type{indi} = class(dummy); endfor endif @@ -86,35 +96,49 @@ for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, char(A._data{indi}), char(B._data{indi})); + resu._data{indi} = feval\ + (func, char(A._data{indi}(:, A._rep{indi})), \ + char(B._data{indi}(B._rep{indi}))); otherwise - resu._data{indi} = feval(func, A._data{indi}, B._data{indi}); + resu._data{indi} = feval\ + (func, A._data{indi}(:, A._rep{indi}), \ + B._data{indi}(:, B._rep{indi})); endswitch + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor - else - dummy = horzcat(A._data {:}); + else %# itercol is false + dummy = df_whole(A); if whole(1), for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, dummy, char(B._data{indi})); + resu._data{indi} = feval(func, dummy, \ + char(B._data{indi}(:, B._rep{indi}))); otherwise - resu._data{indi} = feval(func, dummy, B._data{indi}); + resu._data{indi} = feval(func, dummy, \ + B._data{indi}(:, B._rep{indi})); endswitch + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor elseif (!whole(2)), for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, dummy(indi, :), char(B._data{indi})); + resu._data{indi} = squeeze\ + (feval(func, dummy(indi, :, :),\ + char(B._data{indi}(:, B._rep{indi})))); otherwise - resu._data{indi} = feval(func, dummy(indi, :), B._data{indi}); + resu._data{indi} = squeeze\ + (feval(func, dummy(indi, :, :), \ + B._data{indi}(:, B._rep{indi}))); endswitch + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor else - dummy = feval(func, dummy, horzcat(B._data{:})); + dummy = feval(func, dummy, df_whole(B)); for indi = resu._cnt(2):-1:1, %# store column-wise - resu._data{indi} = dummy(:, indi); + resu._data{indi} = squeeze(dummy(:, indi, :)); + resu._rep{indi} = 1:size(resu._data{indi}, 2); resu._type{indi} = class(dummy); endfor endif @@ -130,45 +154,54 @@ resu._data{indi} = feval(func, A._data{indi}, B); endswitch endfor + resu._rep = A._rep; else if (itercol), if (whole(2)), for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, char(A._data{indi}), B); + unfolded = char(A._data{indi}(:, A._rep{indi})); otherwise - resu._data{indi} = feval(func, A._data{indi}, B); + unfolded = A._data{indi}(:, A._rep{indi}); endswitch + resu._data{indi} = squeeze(feval(func, unfolded, B)); + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor else for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, char(A._data{indi}), \ - B(:, indi)); + unfolded = char(A._data{indi}(:, A._rep{indi})); otherwise - resu._data{indi} = feval(func, A._data{indi}, B(:, indi)); + unfolded = A._data{indi}(:, A._rep{indi}); endswitch + resu._data{indi} = squeeze(feval(func, unfolded, \ + B(:, indi, :))); + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor - endif + endif else - dummy = horzcat(A._data {:}); + dummy = df_whole(A); if whole(1), for indi = columns(B):-1:1, - resu._data{indi} = feval(func, dummy, B(:, indi)); + resu._data{indi} = squeeze(feval(func, dummy, B(:, indi, :))); + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor else if !whole(2), for indi = resu._cnt(1):-1:1, - resu._data{indi} = feval(func, dummy(indi, :), B(:, indi)); + resu._data{indi} = squeeze(feval(func, dummy(indi, :, :), \ + B(:, indi, :))); + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor else for indi = resu._cnt(1):-1:1, %# in place computation - dummy(indi, :) = feval(func, dummy(indi, :), B); + dummy(indi, :, :) = feval(func, dummy(indi, :, :), B); endfor for indi = resu._cnt(2):-1:1, %# store column-wise - resu._data{indi} = dummy(:, indi); + resu._data{indi} = squeeze(dummy(:, indi, :)); + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor endif endif @@ -197,7 +230,7 @@ resu._type = cellfun(@class, resu._data, "UniformOutput", false); %# sanity check - dummy = sum(cellfun('size', resu._data, 2)); + dummy = sum(cellfun(@length, resu._rep)); if dummy != resu._cnt(2), resu._cnt(3) = dummy; endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -27,11 +27,13 @@ %# resu = df_allmeta(df); - resu._data = cellfun(@(x) feval(func, x, varargin{:}), df._data, "UniformOutput", false); + resu._data = cellfun(@(x) feval(func, x, varargin{:}), df._data, \ + "UniformOutput", false); + resu._rep = df._rep; %# things didn't change resu._type = cellfun(@(x) class(x(1)), resu._data, "UniformOutput", false); %# sanity check - dummy = sum(cellfun('size', resu._data, 2)); + dummy = sum(cellfun(@length, resu._rep)); if dummy != resu._cnt(2), resu._cnt(3) = dummy; endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -39,9 +39,12 @@ switch(dim) case {1}, resu = df_colmeta(df); - resu._data = cellfun(@(x) feval(func, x, vout{:}), df._data, \ - "UniformOutput", false); - resu._cnt(1) = max(cellfun('size', resu._data, 2)); + for indi = 1:df._cnt(2), + resu._data{indi} = feval(func, df._data{indi}(:, df._rep{indi}), \ + vout{:}); + resu._rep{indi} = 1:size(resu._data{indi}, 2); + endfor + resu._cnt(1) = max(cellfun('size', resu._data, 1)); if (resu._cnt(1) == df._cnt(1)), %# the func was not contracting resu._ridx = df._ridx; @@ -50,15 +53,18 @@ case {2}, error('Operation not implemented'); case {3}, - resu = df_allmeta(df); - resu._data = cellfun(@(x) feval(func, x, vout{:}), df._data, \ - "UniformOutput", false); + resu = df_allmeta(df); + for indi = 1:df._cnt(2), + resu._data{indi} = feval(func, df._data{indi}(:, df._rep{indi}), \ + vout{:}); + resu._rep{indi} = 1:size(resu._data{indi}, 2); + endfor otherwise error("Invalid dimension %d", dim); endswitch %# sanity check - dummy = sum(cellfun('size', resu._data, 2)); + dummy = sum(cellfun(@length, resu._rep)); if dummy != resu._cnt(2), resu._cnt(3) = dummy; endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -49,7 +49,7 @@ df._ridx = dummy; %# pad every line for indi = 1:min(size(df._data, 2), df._cnt(2)), - neff = n - size(df._data{indi}, 1); + neff = n + df._cnt(1) - size(df._data{indi}, 1); if neff > 0, m = size(df._data{indi}, 2); switch df._type{indi} @@ -85,7 +85,9 @@ df._type(n+(indc+1:end)) = df._type(indc+1:end); df._type(indc + (1:n)) = NA; df._data(n + (indc+1:end)) = df._data(indc+1:end); + df._rep(n + (indc+1:end)) = df._rep(indc+1:end); df._data(indc + (1:n)) = NA; + df._rep(indc + (1:n)) = 1; endif else %# add new values after the last column @@ -106,6 +108,7 @@ dummy = cast(repmat(NA, df._cnt(1), 1), coltype{indi}); endswitch df._data{indc+indi} = dummy; + df._rep{indc+indi} = 1; df._type{indc+indi} = coltype{indi}; endfor @@ -118,14 +121,14 @@ strjust(num2str(indc + (1:n).'), 'left')); df._name{2}(indc + (1:n)) = cellstr(dummy); df._over{2}(1, indc + (1:n)) = true; - endif - + endif case 3 - if isempty(coltype), + if (n <= 0), return; endif + if (isempty(coltype)), coltype = 1:df._cnt(2); endif - dummy = max(n+cellfun('size', df._data(coltype), 2)); + dummy = max(n+cellfun(@length, df._rep(coltype))); if size(df._ridx, 2) < dummy, df._ridx(:, end+1:dummy) = NA; endif @@ -133,19 +136,23 @@ switch df._type{indi} case {'char'} if isa(df._data{indi}, 'char'), - dummy = horzcat(df._data{indi}, {repmat(NA, df._cnt(1), n)}); + dummy = horzcat(df._data{indi}(:, df._rep{indi}), \ + {repmat(NA, df._cnt(1), 1)}); else dummy = df._data{indi}; endif case { 'double' } - dummy = horzcat(df._data{indi}, repmat(NA, df._cnt(1), n)); + dummy = horzcat(df._data{indi}(:, df._rep{indi}), \ + repmat(NA, df._cnt(1), 1)); otherwise - dummy = cast(horzcat(df._data{indi}, repmat(NA, df._cnt(1), n)), ... + dummy = cast(horizcat(df._data{indi}(:, df._rep{indi}), \ + repmat(NA, df._cnt(1), 1)), \ df._type{indi}); endswitch df._data{indi} = dummy; + df._rep{indi} = [df._rep{indi} length(df._rep{indi})+ones(1, n)]; endfor - df._cnt(3) = sum(cellfun('size', df._data, 2)); + df._cnt(3) = sum(cellfun(@length, df._rep)); otherwise error('Invalid dimension in df_pad'); endswitch Added: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_whole.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_whole.m (rev 0) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_whole.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -0,0 +1,54 @@ +function resu = df_whole(df); + + %# function resu = df_whole(df) + %# Generate a full matrix from a column-compressed version of a dataframe. + + %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> + %% + %% This file is part of Octave. + %% + %% Octave is free software; you can redistribute it and/or + %% modify it under the terms of the GNU General Public + %% License as published by the Free Software Foundation; + %% either version 2, or (at your option) any later version. + %% + %% Octave is distributed in the hope that it will be useful, + %% but WITHOUT ANY WARRANTY; without even the implied + %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + %% PURPOSE. See the GNU General Public License for more + %% details. + %% + %% You should have received a copy of the GNU General Public + %% License along with Octave; see the file COPYING. If not, + %% write to the Free Software Foundation, 59 Temple Place - + %% Suite 330, Boston, MA 02111-1307, USA. + + %# + %# $Id$ + %# + + inds = max(cellfun(@length, df._rep)); + + resu = df._data{1}(:, df._rep{1}); + if (inds > 1), + resu = reshape(resu, df._cnt(1), 1, []); + if (1 == size(resu, 3)), + resu = repmat(resu, [1 1 inds]); + endif + endif + + if df._cnt(2) > 1, + resu = repmat(resu, [1 df._cnt(2)]); + for indi = 2:df._cnt(2), + dummy = df._data{indi}(:, df._rep{indi}); + if (inds > 1), + dummy = reshape(dummy, df._cnt(1), 1, []); + if (1 == size(dummy, 3)), + dummy = repmat(dummy, [1 1 inds]); + endif + endif + resu(:, indi, :) = dummy; + endfor + endif + +endfunction Property changes on: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_whole.m ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/repmat.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -32,9 +32,9 @@ else dummy(2) = 1; endif - %# operate on first and third dim first - if (idx(1) > 1 || length(idx) > 2) - resu = df_mapper(@repmat, df, dummy); + %# operate on first dim + if (idx(1) > 1), + resu = df_mapper(@repmat, df, [idx(1) 1]); if (!isempty(df._name{1})), resu._name{1} = feval(@repmat, df._name{1}, [idx(1) 1]); resu._over{1} = feval(@repmat, df._over{1}, [idx(1) 1]); @@ -42,8 +42,14 @@ resu._cnt(1) = resu._cnt(1) * idx(1); endif + if (dummy(2) > 1), + for indi = 1:resu._cnt(2), + resu._rep{indi} = feval(@repmat, resu._rep{indi}, [1 dummy(2)]); + endfor + endif + %# operate on ridx - resu._ridx = feval(@repmat, resu._ridx, dummy); + resu._ridx = feval(@repmat, resu._ridx, idx); %# operate on second dim if (length(idx) > 1 && idx(2) > 1), @@ -55,7 +61,7 @@ endif if (any([length(resu._cnt) length(idx)] > 2)), - resu._cnt(3) = sum(cellfun('size', resu._data, 2)); + resu._cnt(3) = sum(cellfun(@length, resu._rep)); endif endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/size.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -29,10 +29,22 @@ switch nargin case 1 switch nargout - case {0 1} + case {0, 1} varargout{1} = df._cnt; case {2} - varargout{1} = df._cnt(1); varargout{2} = df._cnt(2); + varargout{1} = df._cnt(1); + if (1 == df._cnt(2) && length(df._cnt) > 2), + varargout{2} = df._cnt(3); + else + varargout{2} = df._cnt(2); + endif + case {3} + varargout{1:2} = df._cnt(1:2); + if 2==length(df._cnt), + varargout{3} = 1; + else + varargout{3} = df._cnt(3); + endif otherwise error(print_usage()); endswitch @@ -48,6 +60,22 @@ otherwise error(print_usage()); endswitch + case 3 + switch nargout + case {0 1} + if (length(df._cnt) < 3), + varargout{1} = 1; + else + varargout{1} = df._cnt; + endif + try + varargout{1} = varargout{1}(varargin{1}); + catch + error(print_usage()); + end_try_catch + otherwise + error(print_usage()); + endswitch otherwise error(print_usage()); endswitch Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/sort.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/sort.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/sort.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -112,15 +112,19 @@ switch(dim) case {1}, for indi = 1:resu._cnt(2), - [resu._data{1, indi}, idx(:, indi)] = sort(resu._data{1, indi}, varargin{:}); + [resu._data{indi}, idx(:, indi, :)] = sort\ + (resu._data{indi}(:, resu._rep{indi}), varargin{:}); + resu._data{indi} = squeeze(resu._data{indi}); + resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor - if 1 == size(idx, 2), + if all([1 == size(idx, 2) 1 == size(idx, 3)]), resu._ridx = resu._ridx(idx, :); resu._name{1, 1} = resu._name{1, 1}(idx); resu._over{1, 1} = resu._over{1, 1}(idx); else %# data where mixed - resu._ridx = idx; resu._name{1, 1} = []; resu._over{1, 1} = []; + resu._ridx = idx; + resu._name{1, 1} = []; resu._over{1, 1} = []; endif case {2}, Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -154,8 +154,14 @@ if strcmp(S.subs(1), ':'), %# removing column/matrix RHS = S; RHS.subs(2) = []; - df._data(indc) = cellfun(@(x) feval(@subsasgn, x, RHS, []), - df._data(indc), "UniformOutput", false); + for indi = indc, + unfolded = df._data{indi}(:, df._rep{indi}); + unfolded = feval(@subsasgn, unfolded, RHS, []); + df._data{indi} = unfolded; + if (!isempty(unfolded)), + df._rep(indi) = 1:size(unfolded, 2); + endif + endfor %# remove empty elements indi = cellfun('isempty', df._data); if any(indi), %# nothing left, remove this column @@ -165,6 +171,7 @@ df._over{2} = df._over{2}(indi); df._type = df._type(indi); df._data = df._data(indi); + df._rep = df._rep(indi); endif endif if strcmp(S.subs(2), ':'), %# removing rows @@ -183,7 +190,8 @@ df._cnt(1) = df._cnt(1) - length(indr); endif endif - dummy = sum(cellfun('size', df._data, 2)); + %# ici + dummy = sum(cellfun(@length, df._rep)); if dummy != df._cnt(2), df._cnt(3) = dummy; else @@ -196,6 +204,7 @@ if ~indc_was_set, %# initial dataframe was empty ncol = size(RHS, 2); indc = 1:ncol; endif + indr = S.subs{1, 1}; indr_was_set = ~isempty(indr); %# initial dataframe was empty ? @@ -218,6 +227,12 @@ elseif !isempty(indr) && isnumeric(indr), nrow = length(indr); endif + if (length(S.subs) > 2), + inds = S.subs{1, 3}; + else + inds = []; + endif + rname = cell(0, 0); rname_width = max(1, size(df._name{2}, 2)); ridx = []; cname = rname; ctype = rname; @@ -407,6 +422,7 @@ endif else %# partial assignement -- extract actual data and update + keyboard dummy = df._data{indc(indi)}; try switch df._type{indc(indi)} @@ -424,42 +440,56 @@ error(dummy); end_try_catch endif - df._data{indc(indi)} = dummy; indj = indj + 1; + df._data{indc(indi)} = dummy; df._rep{indc(indi)} = 1:size(dummy, 2); + indj = indj + 1; endfor else %# RHS is either a numeric, either a df - if any(indc > min(size(df._data, 2), df._cnt(2))), + if (any(indc > min(size(df._data, 2), df._cnt(2)))), df = df_pad(df, 2, max(indc-min(size(df._data, 2), df._cnt(2))),\ class(RHS)); endif - if isa(RHS, 'dataframe'), + if (!isempty(inds) && any(inds > 1)), + for indi=1:length(indc), + if (max(inds) > length(df._rep{indc(indi)})), + df = df_pad(df, 3, max(inds)-length(df._rep{indc(indi)}), \ + indc(indi)); + endif + endfor + endif + + if (isa(RHS, 'dataframe')), + %# block-copy index + S.subs(2) = 1; + df._ridx = feval(@subsasgn, df._ridx, S, RHS._ridx); + %# skip second dim and copy data + S.subs(2) = []; for indi = 1:length(indc), - if 1 == size(RHS._data{indi}, 2), - if strcmp(df._type(indc(indi)), \ - RHS._type(indi)), + if (1 == length(RHS._rep{indi})), + df = df_cow(df, S, indc(indi), inds); + if (strcmp(df._type(indc(indi)), \ + RHS._type(indi))), df._data{indc(indi)}(indr, 1) = RHS._data{indi}; else df._data{indc(indi)}(indr, 1) = cast(RHS._data{indi}, \ df._type(indc(indi))); endif else - dummy = 1:size(RHS._data{indi}, 2); - if strcmp(df._type(indc(indi)), RHS._type(indi)), - df._data{indc(indi)}(indr, dummy) = RHS._data{indi}; + unfolded = df._data{indc(indi)}(:, df._rep{indc(indi)}); + if (strcmp(df._type(indc(indi)), RHS._type(indi))), + truc = RHS._data{indi}(:, RHS._rep{indi}); + unfolded = feval(@subsasgn, unfolded, S, \ + RHS._data{indi}(:, RHS._rep{indi})); else - df._data{indc(indi)}(indr, dummy) = cast(RHS._data{indi}, \ - df._type(indc(indi))); + unfolded = feval(@subsasgn, unfolded, S, \ + cast(RHS._data{indi}(:, RHS._rep{indi}), \ + df._type(indc(indi)))); endif + df._data{indc(indi)} = unfolded; + df._rep{indc(indi)} = 1:size(unfolded, 2); endif endfor - if (1 == size(RHS._ridx, 2)) - df._ridx(indr, :) = NA; - df._ridx(indr, 1) = RHS._ridx; - else - dummy = 1:size(RHS._ridx, 2); - df._ridx(indr, dummy) = RHS._ridx; - endif if (!isempty(RHS._name{1})), df._name{1}(indr) = RHS._name{1}(indr); df._over{1}(indr) = RHS._over{1}(indr); @@ -478,19 +508,24 @@ else %# ignore 'column' dimension -- force colum vectors -- use a %# third dim just in case - if isempty(S.subs{1}), S.subs{1} = ':'; endif + if (isempty(S.subs{1})), S.subs{1} = ':'; endif S.subs(2) = []; - if length(S.subs) < 2, S.subs{2} = 1; endif - if length(indc) > 1 && length(RHS) > 1, + if (length(S.subs) < 2), + S.subs{2} = 1; + endif + if (length(indc) > 1 && length(RHS) > 1), %# set a row from a vector - fillfunc = @(x, y) feval(@subsasgn, x, S, RHS(y)); + fillfunc = @(x, S, y) feval(@subsasgn, x, S, RHS(y)); else - fillfunc = @(x, y) feval(@subsasgn, x, S, RHS); + fillfunc = @(x, S, y) feval(@subsasgn, x, S, RHS); endif endif + Sorig = S; for indi = 1:length(indc), try - df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, indi); + [df, S] = df_cow(df, S, indc(indi), inds); + df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, S, indi); + S = Sorig; catch disp('line 470 '); keyboard end_try_catch @@ -508,14 +543,16 @@ else %# 2D - 3D matrix S.subs(2) = []; %# ignore 'column' dimension %# rotate slices in dim 1-3 to slices in dim 1-2 - if isempty(S.subs{1}), - fillfunc = @(x, y) squeeze(RHS(:, y, :)); + if (isempty(S.subs{1})), + fillfunc = @(x, S, y) squeeze(RHS(:, y, :)); else - fillfunc = @(x, y) feval(@subsasgn, x, S, squeeze(RHS(:, y, :))); + fillfunc = @(x, S, y) feval(@subsasgn, x, S, squeeze(RHS(:, y, :))); endif + Sorig = S; for indi = 1:length(indc), - %# disp('line 454 '); keyboard - df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, indi); + [df, S] = df_cow(df, S, indc(indi), inds); + df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, S, indi); + S = Sorig; endfor endif if indi < size(RHS, 2) && !isa(RHS, 'char'), @@ -528,6 +565,7 @@ if !isempty(indr) && isnumeric(indr), if max(indr) > df._cnt(1) && size(df._data, 2) < df._cnt(2), df = df_pad(df, 1, max(indr)-df._cnt(1), rname_width); + keyboard endif endif @@ -558,7 +596,7 @@ endif %# adjust cnt(3) if required - dummy = sum(cellfun('size', df._data, 2)); + dummy = sum(cellfun(@length, df._rep)); if (dummy > df._cnt(2)) || length(df._cnt) > 2, df._cnt(3) = dummy; endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-11-30 17:22:36 UTC (rev 7964) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-11-30 21:58:08 UTC (rev 7965) @@ -55,7 +55,7 @@ indi = strmatch(S(1).subs, char('df', class(df))); if (~isempty(indi)), %# requiring a dataframe - if 1 == indi, %# 'df' = short for 'dataframe' + if (1 == indi), %# 'df' = short for 'dataframe' asked_output_type = 'dataframe'; else asked_output_type = S(1).subs; @@ -300,18 +300,18 @@ inds = 1; indt(1, 1:df._cnt(2)) = inds; nseq = 1; if (isempty(S) || all(cellfun('isclass', S(1).subs, 'char'))) inds = ':'; indt(1, 1:df._cnt(2)) = inds; - nseq = max(cellfun('size', df._data(indc), 2)); + nseq = max(cellfun(@length, df._rep(indc))); else if (length(S(1).subs) > 1), %# access-as-matrix if (length(S(1).subs) > 2), inds = S(1).subs{3}; - if isa(inds, 'char'), - nseq = max(cellfun('size', df._data(indc), 2)); + if (isa(inds, 'char')), + nseq = max(cellfun(@length, df._rep(indc))); indt(1, 1:df._cnt(2)) = inds; else %# generate a specific index for each column nseq = length(inds); - dummy = cellfun('size', df._data(indc), 2); + dummy = cellfun(@length, df._rep(indc)); indt(1, 1:df._cnt(2)) = inds; indt(1==dummy) = 1; endif @@ -327,10 +327,12 @@ for indi = 1:ncol, resu._data{indi} = df._data{indc(indi)}\ (indr, indt{indc(indi)}); + resu._rep{indi} = df._rep{indc(indi)}(indt{indc(indi)}); resu._name{2}(indi, 1) = df._name{2}(indc(indi)); resu._over{2}(1, indi) = df._over{2}(indc(indi)); resu._type{indi} = df._type{indc(indi)}; endfor + %# to be verified : keyboard if (!isempty(df._ridx) && size(df._ridx, 2) >= inds), resu._ridx = df._ridx(indr, inds); endif @@ -339,7 +341,7 @@ resu._over{1}(1, 1:nrow) = df._over{1}(indr); endif resu._src = df._src; - dummy = sum(cellfun('size', resu._data, 2)); + dummy = sum(cellfun(@length, resu._rep)); if (dummy > resu._cnt(2)), resu._cnt(3) = dummy; else @@ -456,56 +458,54 @@ df = struct(df); if (~isempty(asked_output_format)), %# force a conversion if (strmatch(asked_output_format, 'cell')), - extractfunc = @(x) mat2cell(df._data{indc(x)}, \ - ones(df._cnt(1), 1)); + extractfunc = @(x) mat2cell\ + (df._data{indc(x)}(indr, df._rep{indc(x)}(inds)), \ + ones(nrow, 1)); else - extractfunc = @(x) cast(df._data{indc(x)}, asked_output_format); + extractfunc = @(x) cast(df._data{indc(x)}\ + (indr, df._rep{indc(x)}(inds)),\ + asked_output_format); endif else %# let the usual downclassing occur - extractfunc = @(x) df._data{indc(x)}; + extractfunc = @(x) df._data{indc(x)}(indr, df._rep{indc(x)}(inds)); endif try - dummy = extractfunc(1); + if (nseq > 1), + dummy = reshape(extractfunc(1), nrow, 1, []); + if (size(dummy, 3) < nseq), + dummy = repmat(dummy, [1 1 nseq]); + endif + else + dummy = extractfunc(1); + endif catch error("Column %d format (%s) can't be converted to %s", \ indc(1), df._type{indc(1)}, asked_output_format); end_try_catch if (ncol > 1), %# dynamic allocation with the final type - if (size(dummy, 2) > 1), - resu = repmat(dummy(indr, inds(1)), [1 ncol nseq]); - %# "turn" the extracted matrix - resu(:, 1, :) = dummy(indr, inds); - else - resu = repmat(dummy(indr(:)), [1 ncol nseq]); - endif + resu = repmat(dummy, [1 ncol]); for indi = 2:ncol, try - dummy = extractfunc(indi); + if (nseq > 1), + dummy = reshape(extractfunc(indi), nrow, 1, []); + if (size(dummy, 3) < nseq), + dummy = repmat(dummy, [1 1 nseq]); + endif + else + dummy = extractfunc(indi); + endif catch error("Column %d format (%s) can't be converted to %s", \ indc(indi), df._type{indc(indi)}, asked_output_format); end_try_catch - if (1 == size(dummy, 2)), - try - if (1 == nseq), - resu(:, indi) = dummy(indr)(:); - else - resu(:, indi, :) = repmat(dummy(indr), [1 1 nseq]); - endif - catch - disp('line 458 '); keyboard - end_try_catch - else - %# "turn" the extracted matrix - resu(:, indi, :) = dummy(indr, inds); - endif + resu(:, indi, :) = dummy; endfor else if (strcmp(df._type{indc(1)}, 'char')), - resu = char(dummy(indr, inds)); + resu = char(dummy); else - resu = dummy(indr, inds); + resu = dummy; endif endif if (!isempty(S) && 2 == length(S(1).subs) \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-12-01 08:45:14
|
Revision: 7966 http://octave.svn.sourceforge.net/octave/?rev=7966&view=rev Author: cdemills Date: 2010-12-01 08:45:08 +0000 (Wed, 01 Dec 2010) Log Message: ----------- A few fixes for single-dimension writing, and around COW logic Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-11-30 21:58:08 UTC (rev 7965) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-12-01 08:45:08 UTC (rev 7966) @@ -40,8 +40,8 @@ %# if strict is set, B may not be non-scalar vs scalar if ((!(isscalar(A) || isscalar(B)))||(strict && isscalar(A))), if (itercol), %# requires full compatibility - Csize = size(A); - if (any(Csize - size(B))), + Csize = size(A)(1:2); + if (any(Csize - size(B)(1:2))), %# disp([size(A) size(B)]) error("Non compatible row and columns sizes (op1 is %dx%d, op2 is %dx%d)",\ Csize, size(B)); @@ -49,18 +49,18 @@ else %# compatibility with matrix product if (size(A, 2) - size(B, 1)), error("Non compatible columns vs. rows size (op1 is %dx%d, op2 is %dx%d)",\ - size(A), size(B)); + size(A)(1:2), size(B)(1:2)); endif Csize = [size(A, 1) size(B, 2)]; endif endif else if (isscalar(A)), - Csize = size(B); + Csize = size(B)(1:2); else if (size(A, 1) != size(B, 1)), error("Non compatible row sizes (op1 is %dx%d, op2 is %dx%d)",\ - size(A), size(B)); + size(A), size(B)(1:2)); endif Csize = [size(A, 2) size(B, 2)]; endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-11-30 21:58:08 UTC (rev 7965) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-12-01 08:45:08 UTC (rev 7966) @@ -34,22 +34,28 @@ endif if isempty(inds), inds = 1; endif - for indi = inds, - dummy = df._rep{col}; dummy(indi)=[]; + dummy = df._rep{col}; dummy(indi) = 0; [t1, t2] = ismember(df._rep{col}(indi)(:), dummy); for indj = t2(find(t2)), %# Copy-On-Write %# determines the index for the next column t1 = 1+max(df._rep{col}); - %# update repetition index aliasing this one - df._rep{col}(find(df._rep{col} == indj)(2:end)) = t1; %# duplicate the touched column - df._data{col} = horzcat(df._data{col}, df._data{col}(:, indj)); - if (length(S.subs) > 1), + df._data{col} = horzcat(df._data{col}, \ + df._data{col}(:, df._rep{col}(indj))); + if (indi > 1) + %# a new column has been created + df._rep{col}(indi) = t1; + else + %# update repetition index aliasing this one + dummy = find(dummy == indi); + df._rep{col}(dummy) = t1; + endif + if (length(S.subs) > 1 && indi > 1), %# adapt the sheet index accordingly - indk = find(S.subs{2} == indj); - S.subs{2}(indk(2:end)) = t1; + S.subs{2}(find(S.subs{2}==indi)) = t1; endif + endfor endfor Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-11-30 21:58:08 UTC (rev 7965) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_func.m 2010-12-01 08:45:08 UTC (rev 7966) @@ -64,10 +64,10 @@ for indi = resu._cnt(2):-1:1, switch resu._type{indi} case "char" - resu._data{indi} = feval(func, A(:, indi, :), \ + resu._data{indi} = feval(func, squeeze(A(:, indi, :)), \ char(B._data{indi}(:, B._rep{indi}))); otherwise - resu._data{indi} = feval(func, A(:, indi, :), \ + resu._data{indi} = feval(func, squeeze(A(:, indi, :)), \ B._data{indi}(:, B._rep{indi})); endswitch resu._rep{indi} = 1:size(resu._data{indi}, 2); @@ -176,8 +176,8 @@ otherwise unfolded = A._data{indi}(:, A._rep{indi}); endswitch - resu._data{indi} = squeeze(feval(func, unfolded, \ - B(:, indi, :))); + resu._data{indi} = feval(func, unfolded, \ + squeeze(B(:, indi, :))); resu._rep{indi} = 1:size(resu._data{indi}, 2); endfor endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-11-30 21:58:08 UTC (rev 7965) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-01 08:45:08 UTC (rev 7966) @@ -130,8 +130,13 @@ case '()' [indr, nrow, S(1).subs{1}] = df_name2idx(df._name{1}, S(1).subs{1}, \ df._cnt(1), 'row'); - [indc, ncol, S(1).subs{2}] = df_name2idx(df._name{2}, S(1).subs{2}, \ - df._cnt(2), 'column'); + if (length(S(1).subs) > 1), + [indc, ncol, S(1).subs{2}] = df_name2idx(df._name{2}, S(1).subs{2}, \ + df._cnt(2), 'column'); + else + indc = 1; ncol = 1; + S(1).subs{2} = 1; %# avoid an error at line 516 + endif resu = df_matassign(df, S, indc, ncol, RHS); endswitch @@ -527,6 +532,7 @@ df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, S, indi); S = Sorig; catch + disp(lasterr) disp('line 470 '); keyboard end_try_catch # catch This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-12-01 14:21:51
|
Revision: 7969 http://octave.svn.sourceforge.net/octave/?rev=7969&view=rev Author: cdemills Date: 2010-12-01 14:21:44 +0000 (Wed, 01 Dec 2010) Log Message: ----------- Added a _cmt field in order to store comment lines found in .csv Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_allmeta.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_colmeta.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-12-01 13:31:24 UTC (rev 7968) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-12-01 14:21:44 UTC (rev 7969) @@ -31,7 +31,7 @@ %# be unquoted before storage, default = true; %# @item sep: the elements separator, default '\t,' %# @end itemize - %# The remaining data are concatenanted (right-appended) to the existing ones. + %# The remaining data are concatenated (right-appended) to the existing ones. %# @end deftypefn %% Copyright (C) 2009-2010 Pascal Dupuis <Pas...@uc...> @@ -73,6 +73,7 @@ df._rep = cell(0, 0); %# a repetition index df._type = cell(0, 0); %# the type of each column df._src = cell(0, 0); + df._cmt = cell(0, 0); %# to put comments df = class(df, 'dataframe'); return endif @@ -85,7 +86,7 @@ df = dataframe([]); %# get the right fields endif -seeked = []; unquot = true; sep = "\t,"; +seeked = []; unquot = true; sep = "\t,"; cmt_lines = []; if length(varargin) > 0, indi = 1; @@ -206,7 +207,7 @@ %# dummy = content{indl}; endif x = cell(1+length(lines)-indl, size(dummy, 2)); - empty_lines = []; + empty_lines = []; cmt_lines = []; while indl <= length(lines), dummy = content{indl}; if all(cellfun('size', dummy, 2) == 0), @@ -217,6 +218,7 @@ %# does it looks like a comment line ? if regexp(dummy{1}, ['^\s*' char(35)]), empty_lines = [empty_lines indj]; + cmt_lines = strvcat(cmt_lines, horzcat(dummy{:})); indl = indl + 1; indj = indj + 1; continue; endif @@ -310,15 +312,19 @@ endif endif endif - if !isempty(indj), + if (!isempty(indj)), idx.subs = {'', indj}; %# use direct assignement - if ndims(x) > 2, idx.subs{3} = 1:size(x, 3); endif + if (ndims(x) > 2), idx.subs{3} = 1:size(x, 3); endif df = subsasgn(df, idx, x); + if (!isempty(cmt_lines)), + df._cmt{end+1, 1} = cmt_lines; + cmt_lines = []; + endif else df._cnt(2) = length(df._name{2}); endif - elseif indi > 1, + elseif (indi > 1), error('Concatenating dataframes: use cat instead'); endif @@ -336,11 +342,11 @@ function [x, y] = df_colnames(base, num) %# small auxiliary function to generate column names. This is required %# here, as only the constructor can use inputname() - if any([index(base, "=")]), + if (any([index(base, "=")])), %# takes the left part as base x = strsplit(base, "="); x = deblank(x{1}); - if isvarname(x), + if (isvarname(x)), y = false; else x = 'X'; y = true; @@ -348,8 +354,8 @@ else %# is base most probably a filename ? x = regexp(base, '''[^''].*[^'']''', 'match'); - if isempty(x), - if isvarname(base), + if (isempty(x)), + if (isvarname(base)), x = base; y = false; else x = 'X'; y = true; %# this is a default value, may be changed @@ -359,7 +365,7 @@ endif endif - if numel(num) > 1, + if (numel(num) > 1), x = repmat(x, numel(num), 1); x = cstrcat(x, strjust(num2str(num(:)), 'left')); y = repmat(y, 1, numel(num)); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-12-01 13:31:24 UTC (rev 7968) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-12-01 14:21:44 UTC (rev 7969) @@ -37,9 +37,18 @@ if !isempty(df._src), for indi = 1:size(df._src, 1), - head = char(head, ["Src: " df._src{indi, 1}]); + head = strvcat\ + (head, [repmat("Src: ", size(df._src{indi, 1}, 1), 1)\ + df._src{indi, 1}]); endfor endif + if !isempty(df._cmt), + for indi = 1:size(df._cmt, 1), + head = strvcat\ + (head, [repmat("Comment: ", size(df._cmt{indi, 1}, 1), 1)\ + df._cmt{indi, 1}]); + endfor + endif if all(df._cnt > 0), %# stop for empty df dummy=[]; vspace = repmat(' ', df._cnt(1), 1); Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_allmeta.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_allmeta.m 2010-12-01 13:31:24 UTC (rev 7968) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_allmeta.m 2010-12-01 14:21:44 UTC (rev 7969) @@ -57,5 +57,6 @@ resu._rep = cell(size(df._rep)); resu._type = df._type(1:resu._cnt(2)); resu._src = df._src; + resu._cmt = df._cmt; endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-12-01 13:31:24 UTC (rev 7968) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_basecomp.m 2010-12-01 14:21:44 UTC (rev 7969) @@ -142,6 +142,8 @@ if (isempty(A._src) && nargout > 2 && !isempty(B._src)), C._src = B._src; endif + if (isempty(A._cmt) && nargout > 2 && !isempty(B._cmt)), + C._cmt = B._cmt; endif else if (nargout > 2), C = df_allmeta(B, Csize); endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_colmeta.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_colmeta.m 2010-12-01 13:31:24 UTC (rev 7968) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_colmeta.m 2010-12-01 14:21:44 UTC (rev 7969) @@ -38,5 +38,6 @@ resu._data = cell(size(df._data)); resu._rep = cell(size(df._rep)); resu._src = df._src; + resu._cmt = df._cmt; endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-01 13:31:24 UTC (rev 7968) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-01 14:21:44 UTC (rev 7969) @@ -91,6 +91,14 @@ endif return + case "comment" + if length(S) > 1, + resu._cmt = feval(@subsasgn, df._cmt, S(2:end), RHS); + else + resu._cmt = RHS; + endif + return + otherwise if !ischar(S(1).subs), error("Congratulations. I didn't see how to produce this error"); @@ -500,11 +508,16 @@ df._over{1}(indr) = RHS._over{1}(indr); endif if (!isempty(RHS._src)), - %# keyboard if (!any(strcmp(cellstr(df._src), cellstr(RHS._src)))), df._src = vertcat(df._src, RHS._src); endif endif + if (!isempty(RHS._cmt)), + if (!any(strcmp(cellstr(df._cmt), cellstr(RHS._cmt)))), + df._cmt = vertcat(df._cmt, RHS._cmt); + endif + endif + else %# RHS is homogenous, pad at once if (isvector(RHS)), %# scalar - vector Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-12-01 13:31:24 UTC (rev 7968) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-12-01 14:21:44 UTC (rev 7969) @@ -124,6 +124,9 @@ case "source" S(1).subs = "_src"; further_deref = true; + case "comment" + S(1).subs = "_cmt"; + further_deref = true; otherwise error("Unknown column name: %s", S(1).subs); endswitch This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-12-03 17:45:37
|
Revision: 7979 http://octave.svn.sourceforge.net/octave/?rev=7979&view=rev Author: cdemills Date: 2010-12-03 17:45:31 +0000 (Fri, 03 Dec 2010) Log Message: ----------- Chasing down a bug in the way the remapping of the column index is performed in df_cow Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-12-02 21:59:10 UTC (rev 7978) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-12-03 17:45:31 UTC (rev 7979) @@ -53,6 +53,7 @@ endif if (length(S.subs) > 1 && indi > 1), %# adapt the sheet index accordingly + keyboard S.subs{2}(find(S.subs{2}==indi)) = t1; endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-02 21:59:10 UTC (rev 7978) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-03 17:45:31 UTC (rev 7979) @@ -143,14 +143,17 @@ df._cnt(2), 'column'); else mz = max(cellfun(@length, df._rep)); +before = S(1).subs{1}; [indr, indc, inds] = ind2sub([df._cnt(1:2) mz], indr); ncol = length(unique(indc)); S(1).subs{1} = indr; S(1).subs{2} = indc; if (any(inds > 1)), S(1).subs{3} = inds; endif + toto=df_whole(df); keyboard endif + keyboard resu = df_matassign(df, S, indc, ncol, RHS); endswitch @@ -463,6 +466,7 @@ endfor else + keyboard %# RHS is either a numeric, either a df if (any(indc > min(size(df._data, 2), df._cnt(2)))), df = df_pad(df, 2, max(indc-min(size(df._data, 2), df._cnt(2))),\ @@ -543,7 +547,7 @@ fillfunc = @(x, S, y) feval(@subsasgn, x, S, RHS); endif endif - Sorig = S; + Sorig = S; keyboard for indi = 1:length(indc), try [df, S] = df_cow(df, S, indc(indi), inds); @@ -565,6 +569,7 @@ # end_try_catch endfor else %# 2D - 3D matrix + disp('line 572 '); keyboard S.subs(2) = []; %# ignore 'column' dimension %# rotate slices in dim 1-3 to slices in dim 1-2 if (isempty(S.subs{1})), @@ -574,8 +579,14 @@ endif Sorig = S; for indi = 1:length(indc), + disp('line 582 '); disp(df._rep); disp(S); keyboard [df, S] = df_cow(df, S, indc(indi), inds); + disp('line 584 '); disp(df._rep);disp(S); keyboard df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, S, indi); + disp('line 586 '); disp(df._rep); + disp(squeeze(RHS(:, indc(indi), :))); + disp(df._data{indc(indi)}(:, df._rep{indc(indi)})); + keyboard S = Sorig; endfor endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-12-04 22:04:41
|
Revision: 7980 http://octave.svn.sourceforge.net/octave/?rev=7980&view=rev Author: cdemills Date: 2010-12-04 22:04:35 +0000 (Sat, 04 Dec 2010) Log Message: ----------- Sorted an issue with assignement Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-12-03 17:45:31 UTC (rev 7979) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/dataframe.m 2010-12-04 22:04:35 UTC (rev 7980) @@ -313,6 +313,7 @@ endif endif if (!isempty(indj)), + %# the exact row size will be determined latter idx.subs = {'', indj}; %# use direct assignement if (ndims(x) > 2), idx.subs{3} = 1:size(x, 3); endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-12-03 17:45:31 UTC (rev 7979) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-12-04 22:04:35 UTC (rev 7980) @@ -51,15 +51,16 @@ dummy = find(dummy == indi); df._rep{col}(dummy) = t1; endif - if (length(S.subs) > 1 && indi > 1), - %# adapt the sheet index accordingly - keyboard - S.subs{2}(find(S.subs{2}==indi)) = t1; - endif - endfor endfor - + %# reorder S + if (length(S.subs) > 1), + dummy = length(S.subs{2}); + if (dummy > 1), + %# the second factor is a permutation matrix + S.subs{2} = S.subs{2}*(eye(dummy)(:, df._rep{col})); + endif + endif %# sanity check dummy = sum(cellfun(@length, df._rep)); if dummy != df._cnt(2), Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-03 17:45:31 UTC (rev 7979) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-04 22:04:35 UTC (rev 7980) @@ -143,17 +143,13 @@ df._cnt(2), 'column'); else mz = max(cellfun(@length, df._rep)); -before = S(1).subs{1}; [indr, indc, inds] = ind2sub([df._cnt(1:2) mz], indr); ncol = length(unique(indc)); S(1).subs{1} = indr; S(1).subs{2} = indc; if (any(inds > 1)), S(1).subs{3} = inds; endif - toto=df_whole(df); - keyboard endif - keyboard resu = df_matassign(df, S, indc, ncol, RHS); endswitch @@ -466,7 +462,6 @@ endfor else - keyboard %# RHS is either a numeric, either a df if (any(indc > min(size(df._data, 2), df._cnt(2)))), df = df_pad(df, 2, max(indc-min(size(df._data, 2), df._cnt(2))),\ @@ -547,7 +542,7 @@ fillfunc = @(x, S, y) feval(@subsasgn, x, S, RHS); endif endif - Sorig = S; keyboard + Sorig = S; for indi = 1:length(indc), try [df, S] = df_cow(df, S, indc(indi), inds); @@ -569,24 +564,16 @@ # end_try_catch endfor else %# 2D - 3D matrix - disp('line 572 '); keyboard S.subs(2) = []; %# ignore 'column' dimension - %# rotate slices in dim 1-3 to slices in dim 1-2 if (isempty(S.subs{1})), - fillfunc = @(x, S, y) squeeze(RHS(:, y, :)); - else - fillfunc = @(x, S, y) feval(@subsasgn, x, S, squeeze(RHS(:, y, :))); + S.subs{1} = indr; endif + %# rotate slices in dim 1-3 to slices in dim 1-2 + fillfunc = @(x, S, y) feval(@subsasgn, x, S, squeeze(RHS(:, y, :))); Sorig = S; for indi = 1:length(indc), - disp('line 582 '); disp(df._rep); disp(S); keyboard [df, S] = df_cow(df, S, indc(indi), inds); - disp('line 584 '); disp(df._rep);disp(S); keyboard df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, S, indi); - disp('line 586 '); disp(df._rep); - disp(squeeze(RHS(:, indc(indi), :))); - disp(df._data{indc(indi)}(:, df._rep{indc(indi)})); - keyboard S = Sorig; endfor endif @@ -600,7 +587,6 @@ if !isempty(indr) && isnumeric(indr), if max(indr) > df._cnt(1) && size(df._data, 2) < df._cnt(2), df = df_pad(df, 1, max(indr)-df._cnt(1), rname_width); - keyboard endif endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-12-05 12:22:09
|
Revision: 7981 http://octave.svn.sourceforge.net/octave/?rev=7981&view=rev Author: cdemills Date: 2010-12-05 12:22:03 +0000 (Sun, 05 Dec 2010) Log Message: ----------- Fixed some other issues with 3D access Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-12-04 22:04:35 UTC (rev 7980) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_cow.m 2010-12-05 12:22:03 UTC (rev 7981) @@ -1,6 +1,6 @@ -function [df, S] = df_cow(df, S, col, inds) +function [df, S] = df_cow(df, S, col) - %# function [resu, S] = df_cow(df, S, col, inds) + %# function [resu, S] = df_cow(df, S, col) %# Implements Copy-On-Write on dataframe. If one or more columns %# specified in inds is aliased to another one, duplicate it and %# adjust the repetition index to remove the aliasing @@ -33,7 +33,12 @@ error("df_cow must work on a column-by-column basis"); endif - if isempty(inds), inds = 1; endif + if (1 == length(S.subs)), + inds = 1; + else + inds = S.subs{2}; + endif + for indi = inds, dummy = df._rep{col}; dummy(indi) = 0; [t1, t2] = ismember(df._rep{col}(indi)(:), dummy); @@ -53,12 +58,12 @@ endif endfor endfor + %# reorder S if (length(S.subs) > 1), - dummy = length(S.subs{2}); - if (dummy > 1), - %# the second factor is a permutation matrix - S.subs{2} = S.subs{2}*(eye(dummy)(:, df._rep{col})); + if (S.subs{2} != 1 || length(S.subs{2}) > 1), + %# adapt sheet index according to df_rep + S.subs{2} = df._rep{col}(S.subs{2}); endif endif %# sanity check Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-04 22:04:35 UTC (rev 7980) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsasgn.m 2010-12-05 12:22:03 UTC (rev 7981) @@ -479,33 +479,22 @@ if (isa(RHS, 'dataframe')), %# block-copy index S.subs(2) = 1; - df._ridx = feval(@subsasgn, df._ridx, S, RHS._ridx); + if any(!isna(RHS._ridx)), + df._ridx = feval(@subsasgn, df._ridx, S, RHS._ridx); + endif %# skip second dim and copy data - S.subs(2) = []; + S.subs(2) = []; Sorig = S; for indi = 1:length(indc), - if (1 == length(RHS._rep{indi})), - df = df_cow(df, S, indc(indi), inds); - if (strcmp(df._type(indc(indi)), \ - RHS._type(indi))), - df._data{indc(indi)}(indr, 1) = RHS._data{indi}; - else - df._data{indc(indi)}(indr, 1) = cast(RHS._data{indi}, \ - df._type(indc(indi))); - endif + [df, S] = df_cow(df, S, indc(indi)); + if (strcmp(df._type(indc(indi)), RHS._type(indi))), + df._data{indc(indi)} = feval(@subsasgn, df._data{indc(indi)}, S, \ + RHS._data{indi}(:, RHS._rep{indi})); else - unfolded = df._data{indc(indi)}(:, df._rep{indc(indi)}); - if (strcmp(df._type(indc(indi)), RHS._type(indi))), - truc = RHS._data{indi}(:, RHS._rep{indi}); - unfolded = feval(@subsasgn, unfolded, S, \ - RHS._data{indi}(:, RHS._rep{indi})); - else - unfolded = feval(@subsasgn, unfolded, S, \ - cast(RHS._data{indi}(:, RHS._rep{indi}), \ - df._type(indc(indi)))); - endif - df._data{indc(indi)} = unfolded; - df._rep{indc(indi)} = 1:size(unfolded, 2); + df._data{indc(indi)} = feval(@subsasgn, df._data{indc(indi)}, S, \ + cast(RHS._data{indi}(:, RHS._rep{indi}),\ + df._type(indc(indi)))); endif + S = Sorig; endfor if (!isempty(RHS._name{1})), df._name{1}(indr) = RHS._name{1}(indr); @@ -545,7 +534,7 @@ Sorig = S; for indi = 1:length(indc), try - [df, S] = df_cow(df, S, indc(indi), inds); + [df, S] = df_cow(df, S, indc(indi)); df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, S, indi); S = Sorig; catch @@ -572,7 +561,7 @@ fillfunc = @(x, S, y) feval(@subsasgn, x, S, squeeze(RHS(:, y, :))); Sorig = S; for indi = 1:length(indc), - [df, S] = df_cow(df, S, indc(indi), inds); + [df, S] = df_cow(df, S, indc(indi)); df._data{indc(indi)} = fillfunc(df._data{indc(indi)}, S, indi); S = Sorig; endfor Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-12-04 22:04:35 UTC (rev 7980) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-12-05 12:22:03 UTC (rev 7981) @@ -348,8 +348,8 @@ resu._cnt(1) = nrow; resu._cnt(2) = ncol; for indi = 1:ncol, resu._data{indi} = df._data{indc(indi)}\ - (indr, indt{indc(indi)}); - resu._rep{indi} = df._rep{indc(indi)}(indt{indc(indi)}); + (indr, df._rep{indi}(indt{indc(indi)})); + resu._rep{indi} = 1:size(resu._data{indi}, 2); resu._name{2}(indi, 1) = df._name{2}(indc(indi)); resu._over{2}(1, indi) = df._over{2}(indc(indi)); resu._type{indi} = df._type{indc(indi)}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cde...@us...> - 2010-12-08 09:24:29
|
Revision: 7995 http://octave.svn.sourceforge.net/octave/?rev=7995&view=rev Author: cdemills Date: 2010-12-08 09:24:23 +0000 (Wed, 08 Dec 2010) Log Message: ----------- Adapted display and numel to the change in semantic of df._cnt(3) Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-12-08 09:13:41 UTC (rev 7994) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/display.m 2010-12-08 09:24:23 UTC (rev 7995) @@ -31,7 +31,7 @@ if 2 == length(df._cnt), head = sprintf("Dataframe with %d rows and %d columns", df._cnt); else - head = sprintf("Dataframe with %d rows and %d columns (%d unfolded)", ... + head = sprintf("Dataframe with %d rows and %d columns on %d pages", ... df._cnt); endif Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m 2010-12-08 09:13:41 UTC (rev 7994) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/numel.m 2010-12-08 09:24:23 UTC (rev 7995) @@ -31,7 +31,7 @@ %# n = feval(@numel, df, varargin{:}); %# else if 1 == nargin, - n = prod(df._cnt([1 end])); + n = sum(cellfun(@numel, df._data)); else error(print_usage()); endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |