comparison scripts/sparse/treelayout.m @ 30875:5d3faba0342e

doc: Ensure documentation lists output argument when it exists for all m-files. For new users of Octave it is best to show explicit calling forms in the documentation and to show a return argument when it exists. * bp-table.cc, shift.m, accumarray.m, accumdim.m, bincoeff.m, bitcmp.m, bitget.m, bitset.m, blkdiag.m, celldisp.m, cplxpair.m, dblquad.m, flip.m, fliplr.m, flipud.m, idivide.m, int2str.m, interpft.m, logspace.m, num2str.m, polyarea.m, postpad.m, prepad.m, randi.m, repmat.m, rng.m, rot90.m, rotdim.m, structfun.m, triplequad.m, uibuttongroup.m, uicontrol.m, uipanel.m, uipushtool.m, uitoggletool.m, uitoolbar.m, waitforbuttonpress.m, help.m, __additional_help_message__.m, hsv.m, im2double.m, im2frame.m, javachk.m, usejava.m, argnames.m, char.m, formula.m, inline.m, __vectorize__.m, findstr.m, flipdim.m, strmatch.m, vectorize.m, commutation_matrix.m, cond.m, cross.m, duplication_matrix.m, expm.m, orth.m, rank.m, rref.m, trace.m, vech.m, cast.m, compare_versions.m, delete.m, dir.m, fileattrib.m, grabcode.m, gunzip.m, inputname.m, license.m, list_primes.m, ls.m, mexext.m, movefile.m, namelengthmax.m, nargoutchk.m, nthargout.m, substruct.m, swapbytes.m, ver.m, verLessThan.m, what.m, fminunc.m, fsolve.m, fzero.m, optimget.m, __fdjac__.m, matlabroot.m, savepath.m, campos.m, camroll.m, camtarget.m, camup.m, camva.m, camzoom.m, clabel.m, diffuse.m, legend.m, orient.m, rticks.m, specular.m, thetaticks.m, xlim.m, xtickangle.m, xticklabels.m, xticks.m, ylim.m, ytickangle.m, yticklabels.m, yticks.m, zlim.m, ztickangle.m, zticklabels.m, zticks.m, ellipsoid.m, isocolors.m, isonormals.m, stairs.m, surfnorm.m, __actual_axis_position__.m, __pltopt__.m, close.m, graphics_toolkit.m, pan.m, print.m, printd.m, __ghostscript__.m, __gnuplot_print__.m, __opengl_print__.m, rotate3d.m, subplot.m, zoom.m, compan.m, conv.m, poly.m, polyaffine.m, polyder.m, polyint.m, polyout.m, polyreduce.m, polyvalm.m, roots.m, prefdir.m, prefsfile.m, profexplore.m, profexport.m, profshow.m, powerset.m, unique.m, arch_rnd.m, arma_rnd.m, autoreg_matrix.m, bartlett.m, blackman.m, detrend.m, durbinlevinson.m, fftconv.m, fftfilt.m, fftshift.m, fractdiff.m, hamming.m, hanning.m, hurst.m, ifftshift.m, rectangle_lw.m, rectangle_sw.m, triangle_lw.m, sinc.m, sinetone.m, sinewave.m, spectral_adf.m, spectral_xdf.m, spencer.m, ilu.m, __sprand__.m, sprand.m, sprandn.m, sprandsym.m, treelayout.m, beta.m, betainc.m, betaincinv.m, betaln.m, cosint.m, expint.m, factorial.m, gammainc.m, gammaincinv.m, lcm.m, nthroot.m, perms.m, reallog.m, realpow.m, realsqrt.m, sinint.m, hadamard.m, hankel.m, hilb.m, invhilb.m, magic.m, pascal.m, rosser.m, toeplitz.m, vander.m, wilkinson.m, center.m, corr.m, cov.m, discrete_cdf.m, discrete_inv.m, discrete_pdf.m, discrete_rnd.m, empirical_cdf.m, empirical_inv.m, empirical_pdf.m, empirical_rnd.m, kendall.m, kurtosis.m, mad.m, mean.m, meansq.m, median.m, mode.m, moment.m, range.m, ranks.m, run_count.m, skewness.m, spearman.m, statistics.m, std.m, base2dec.m, bin2dec.m, blanks.m, cstrcat.m, deblank.m, dec2base.m, dec2bin.m, dec2hex.m, hex2dec.m, index.m, regexptranslate.m, rindex.m, strcat.m, strjust.m, strtrim.m, strtrunc.m, substr.m, untabify.m, __have_feature__.m, __prog_output_assert__.m, __run_test_suite__.m, example.m, fail.m, asctime.m, calendar.m, ctime.m, date.m, etime.m: Add return arguments to @deftypefn macros where they were missing. Rename variables in functions (particularly generic "retval") to match documentation. Rename some return variables for (hopefully) better clarity (e.g., 'ax' to 'hax' to indicate it is a graphics handle to an axes object).
author Rik <rik@octave.org>
date Wed, 30 Mar 2022 20:40:27 -0700
parents 397d29f7135c
children
comparison
equal deleted inserted replaced
30874:2b07748dbae3 30875:5d3faba0342e
22 ## <https://www.gnu.org/licenses/>. 22 ## <https://www.gnu.org/licenses/>.
23 ## 23 ##
24 ######################################################################## 24 ########################################################################
25 25
26 ## -*- texinfo -*- 26 ## -*- texinfo -*-
27 ## @deftypefn {} {} treelayout (@var{tree}) 27 ## @deftypefn {} {[@var{x}, @var{y}] =} treelayout (@var{tree})
28 ## @deftypefnx {} {} treelayout (@var{tree}, @var{permutation}) 28 ## @deftypefnx {} {[@var{x}, @var{y}] =} treelayout (@var{tree}, @var{permutation})
29 ## @deftypefnx {} {[@var{x}, @var{y}, @var{h}, @var{s}] =} treelayout (@dots{})
29 ## treelayout lays out a tree or a forest. 30 ## treelayout lays out a tree or a forest.
30 ## 31 ##
31 ## The first argument @var{tree} is a vector of predecessors. 32 ## The first argument @var{tree} is a vector of predecessors.
32 ## 33 ##
33 ## The parameter @var{permutation} is an optional postorder permutation. 34 ## The optional parameter @var{permutation} is a postorder permutation.
34 ## 35 ##
35 ## The complexity of the algorithm is O(n) in terms of time and memory 36 ## The complexity of the algorithm is O(n) in terms of time and memory
36 ## requirements. 37 ## requirements.
37 ## @seealso{etreeplot, gplot, treeplot} 38 ## @seealso{etreeplot, gplot, treeplot}
38 ## @end deftypefn 39 ## @end deftypefn
39 40
40 function [x_coordinate, y_coordinate, height, s] = ... 41 function [x, y, h, s] = treelayout (tree, permutation)
41 treelayout (tree, permutation)
42 42
43 if (nargin < 1) 43 if (nargin < 1)
44 print_usage (); 44 print_usage ();
45 elseif (! isvector (tree) || rows (tree) != 1 || ! isnumeric (tree) 45 elseif (! isvector (tree) || rows (tree) != 1 || ! isnumeric (tree)
46 || any (tree > length (tree)) || any (tree < 0)) 46 || any (tree > length (tree)) || any (tree < 0))
160 top_level = 0; 160 top_level = 0;
161 endif 161 endif
162 ## If there is not any descendant of "parent node": 162 ## If there is not any descendant of "parent node":
163 if (stk(end,2) != par_number) 163 if (stk(end,2) != par_number)
164 left_most += 1; 164 left_most += 1;
165 x_coordinate_r(par_number) = left_most; 165 x_r(par_number) = left_most;
166 max_ht = min (max_ht, level); 166 max_ht = min (max_ht, level);
167 if (length (stk) > 1 && find ((circshift (stk,1) - stk) == 0) > 1 167 if (length (stk) > 1 && find ((circshift (stk,1) - stk) == 0) > 1
168 && stk(end,2) != stk(end-1,2)) 168 && stk(end,2) != stk(end-1,2))
169 ## Return to the nearest branching the position to return 169 ## Return to the nearest branching the position to return
170 ## position is the position on the stack, where should be 170 ## position is the position on the stack, where should be
179 179
180 level += length (par_number_vec); 180 level += length (par_number_vec);
181 181
182 ## The level have to be decreased. 182 ## The level have to be decreased.
183 183
184 x_coordinate_r(par_number_vec) = left_most; 184 x_r(par_number_vec) = left_most;
185 stk(position:end,:) = []; 185 stk(position:end,:) = [];
186 endif 186 endif
187 187
188 ## Remove the next node from "searched branch". 188 ## Remove the next node from "searched branch".
189 189
190 stk(end,:) = []; 190 stk(end,:) = [];
191 ## Choose new "parent node". 191 ## Choose new "parent node".
192 par_number = stk(end,1); 192 par_number = stk(end,1);
193 ## If there is another branch start to search it. 193 ## If there is another branch start to search it.
194 if (par_number != -1) 194 if (par_number != -1)
195 y_coordinate(par_number) = level; 195 y(par_number) = level;
196 x_coordinate_l(par_number) = left_most + 1; 196 x_l(par_number) = left_most + 1;
197 endif 197 endif
198 else 198 else
199 199
200 ## There were descendants of "parent nod" choose the last of 200 ## There were descendants of "parent nod" choose the last of
201 ## them and go on through it. 201 ## them and go on through it.
202 level -= 1; 202 level -= 1;
203 par_number = stk(end,1); 203 par_number = stk(end,1);
204 y_coordinate(par_number) = level; 204 y(par_number) = level;
205 x_coordinate_l(par_number) = left_most + 1; 205 x_l(par_number) = left_most + 1;
206 endif 206 endif
207 endwhile 207 endwhile
208 208
209 ## Calculate the x coordinates (the known values are the position 209 ## Calculate the x coordinates (the known values are the position
210 ## of most left and most right descendants). 210 ## of most left and most right descendants).
211 x_coordinate = (x_coordinate_l + x_coordinate_r) / 2; 211 x = (x_l + x_r) / 2;
212 212
213 height = num_nodes - max_ht - 1; 213 h = num_nodes - max_ht - 1;
214 214
215 endfunction 215 endfunction
216 216
217 217
218 %!test 218 %!test