You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: separateBounds.m
    path of file: ./repos/Robotics-Toolbox/rvcdlcs/src/thirdparty/cvxhull/polytopes
    
    the code of the file until where you have to start completion: function [A,b,Aeq,beq,lb,ub,report] = separateBounds( A,b,Aeq,beq,tol )
%separateBounds - given a quadruplet {A, b, Aeq, beq} of linear constraint 
%matrices and vectors corresponding to the region A*x<=b, Aeq*x=beq, the routine
%will convert to a sextuplet {A, b, Aeq, beq, lb, ub} of the kind used
%in the Optimization Toolbox.
%
%      [A,b,Aeq,beq,lb,ub,report] = separateBounds( A,b,Aeq,beq )
%
%In other words, the code will look through the rows of A and Aeq for
%constraints corresponding to simple upper and lower bounds. It will then
%separate these constraints from the rest, expressing them instead using
%vectors lb, ub. The "report" output argument is a structure containing
%some relevnt stats,
%
%    report.infeasibleBounds: indices, i, of any lb(i)>ub(i)
%    report.inequalitiesRemoved: indices of rows removed from A,b
%    report.equalitiesRemoved: indices of rows removed from Aeq,beq
%
%EXAMPLE:
%
%     A =  [1     1     1
%          -1     0     0
%           0    -1     0
%           1     0     0
%           0     1     0] ;
%
%      b=[1 0 0 1 1].';
%
%     Aeq=[0 0 1]; 

    
function [A,b,Aeq,beq,lb,ub,report] = separateBounds( A,b,Aeq,beq,tol )
%separateBounds - given a quadruplet {A, b, Aeq, beq} of linear constraint 
%matrices and vectors corresponding to the region A*x<=b, Aeq*x=beq, the routine
%will convert to a sextuplet {A, b, Aeq, beq, lb, ub} of the kind used
%in the Optimization Toolbox.
%
%      [A,b,Aeq,beq,lb,ub,report] = separateBounds( A,b,Aeq,beq )
%
%In other words, the code will look through the rows of A and Aeq for
%constraints corresponding to simple upper and lower bounds. It will then
%separate these constraints from the rest, expressing them instead using
%vectors lb, ub. The "report" output argument is a structure containing
%some relevnt stats,
%
%    report.infeasibleBounds: indices, i, of any lb(i)>ub(i)
%    report.inequalitiesRemoved: indices of rows removed from A,b
%    report.equalitiesRemoved: indices of rows removed from Aeq,beq
%
%EXAMPLE:
%
%     A =  [1     1     1
%          -1     0     0
%           0    -1     0
%           1     0     0
%           0     1     0] ;
%
%      b=[1 0 0 1 1].';
%
%     Aeq=[0 0 1]; 
%     beq=1;
%
%     >>[A,b,Aeq,beq,lb,ub] = separateBounds( A,b,Aeq,beq )
% 
%         A =
% 
%              1     1     1
% 
% 
%         b =
% 
%              1
% 
% 
%         Aeq =
% 
%            Empty matrix: 0-by-3
% 
% 
%         beq =
% 
%            Empty matrix: 1-by-0
% 
% 
%         lb =
% 
%              0
%              0
%              1
% 
% 
%         ub =
% 
%              1
%              1
%              1
%
%By default, the code will consider a constraint A(i,:)<=b(i) to correspond
%to a pure bound if a row A(i,:) or similarly Aeq(i,:) contains no more
%than one non-zero element. In certain situations, however, the matrices A
%and Aeq are the output of floating point calculations and such rows will
%contain non-zero elements representing numerical noise. In such instances,
%one can call the code with a tolerance parameter
%
%      [A,b,Aeq,beq,lb,ub,report] = separateBounds( A,b,Aeq,beq,tol )
%
%where 0<=tol<=1. The criterion for deciding whether a constraint is a pure
%bound is then,
%
%        max(abs(A(:,i)))>=tol*sum(abs(A(i,:)))
%
%The default beavior corresponds to tol=1.


  %%%%begin parsing

          if ~exist('Aeq','var'), Aeq=[]; end