RsBundle  Diff

Differences From Artifact [f986c1ffd5]:

  • File src/mpi/problem.rs — part of check-in [4daadd53de] at 2023-08-14 13:15:57 on branch add-subproblems — Add API for adding subproblems in an update (user: fifr size: 16094)

To Artifact [795d73e02c]:

  • File src/mpi/problem.rs — part of check-in [e60788bc13] at 2023-08-14 17:44:16 on branch add-subproblems — Replace `PrimalExtender` by a list of minorants (user: fifr size: 15893)

13
14
15
16
17
18
19
20

21
22
23
24
25
26
27
13
14
15
16
17
18
19

20
21
22
23
24
25
26
27







-
+







 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see  <http://www.gnu.org/licenses/>
 */

use super::msg::{ResultMsg, WorkerMsg};
use crate::problem::{
    FirstOrderProblem, PrimalExtender, ResultSender, SubgradientExtender, UpdateSendError, UpdateSender, UpdateState,
    FirstOrderProblem, ResultSender, SubgradientExtender, UpdateSendError, UpdateSender, UpdateState,
};
use crate::{DVector, Minorant, Real};

use log::{debug, error, info};
use mpi::environment::Universe;
use mpi::topology::{Communicator, SystemCommunicator};
use mpi::Rank;
414
415
416
417
418
419
420
421
422
423
424
425
426


427
428
429
430
431
432
433
434
435
414
415
416
417
418
419
420






421
422



423
424
425
426
427
428







-
-
-
-
-
-
+
+
-
-
-






            bounds,
            Box::new(move |fidx: usize, m: &mut P::Minorant| {
                sgext.extend_subgradient(fidx, m).map_err(Error::OracleError)
            }),
        )
    }

    fn add_subproblems(
        &self,
        nnew: usize,
        pext: Box<dyn PrimalExtender<P::Minorant, P::Err>>,
    ) -> Result<(), UpdateSendError> {
        self.0.add_subproblems(
    fn add_subproblems(&self, minorants: Vec<P::Minorant>) -> Result<(), UpdateSendError> {
        self.0.add_subproblems(minorants)
            nnew,
            Box::new(move |m: &mut P::Minorant| pext.extend_primal(m).map_err(Error::OracleError)),
        )
    }

    fn error(&self, err: P::Err) -> Result<(), UpdateSendError> {
        self.0.error(Error::OracleError(err))
    }
}