1function varargout = delegate(self, method, nretout, varargin)
2this_model = self.model;
4switch class(this_model)
6 % first
try with chosen solver,
if the method
is not available
7 % or fails keep going with the other candidates
8 if length(self.candidates)>1
9 chosenSolver = chooseSolver(self, method);
10 line_debug(
'AUTO solver analysis: chosen=%s, supports_model=%d',
class(chosenSolver), chosenSolver.supports(self.model));
11 if chosenSolver.supports(self.model)
12 proposedSolvers = {chosenSolver, self.candidates{:}}; %#ok<CCAT>
14 proposedSolvers = self.candidates;
16 else %
if the user wishes to use a precise solver
17 proposedSolvers = {self.solvers{:}};
19 for s=1:length(proposedSolvers)
23 proposedSolvers{s}.(method)(varargin{:});
25 varargout{1} = proposedSolvers{s}.(method)(varargin{:});
27 [r1,r2] = proposedSolvers{s}.(method)(varargin{:});
31 [r1,r2,r3] = proposedSolvers{s}.(method)(varargin{:});
36 [r1,r2,r3,r4] = proposedSolvers{s}.(method)(varargin{:});
42 [r1,r2,r3,r4,r5] = proposedSolvers{s}.(method)(varargin{:});
49 [r1,r2,r3,r4,r5,r6] = proposedSolvers{s}.(method)(varargin{:});
57 [r1,r2,r3,r4,r5,r6,r7] = proposedSolvers{s}.(method)(varargin{:});
66 line_debug(
'Successful method execution completed by %s', proposedSolvers{s}.getName);
67 if self.options.verbose
68 %line_printf(
'Successful method execution completed by %s.\n',proposedSolvers{s}.getName);
72 if ~isempty(strfind(ME.message,
'Unrecognized method'))
73 if self.options.verbose
74 line_printf('Method unsupported by %s.\n',proposedSolvers{s}.getName);
78 line_warning(mfilename,[ME.message,
'\n']);
83 % first
try with chosen solver,
if the method
is not available
84 % or fails keep going with the other candidates
85 chosenSolver = chooseSolver(self,method);
86 % LayeredNetwork solvers use
static-style supports(model) signature
88 [supportsModel, ~] = chosenSolver.supports(self.model);
90 % Fallback: assume solver supports the model
if supports() signature differs
94 proposedSolvers = {chosenSolver, self.candidates{:}}; %#ok<CCAT>
96 proposedSolvers = self.candidates;
98 for s=1:length(proposedSolvers)
102 proposedSolvers{s}.(method)(varargin{:});
104 varargout{1} = proposedSolvers{s}.(method)(varargin{:});
106 [r1,r2] = proposedSolvers{s}.(method)(varargin{:});
110 [r1,r2,r3] = proposedSolvers{s}.(method)(varargin{:});
115 [r1,r2,r3,r4] = proposedSolvers{s}.(method)(varargin{:});
121 [r1,r2,r3,r4,r5] = proposedSolvers{s}.(method)(varargin{:});
128 [r1,r2,r3,r4,r5,r6] = proposedSolvers{s}.(method)(varargin{:});
136 [r1,r2,r3,r4,r5,r6,r7] = proposedSolvers{s}.(method)(varargin{:});
145 if self.options.verbose
146 line_printf(
'Successful method execution completed by %s.\n',proposedSolvers{s}.getName);
150 if self.options.verbose
151 line_printf(
'Switching %s.\n',proposedSolvers{s}.getName);
156% If we reach here, all solvers failed
157line_error(mfilename,
'All candidate solvers failed to execute method ''%s''.', method);