class_docstr: A "symmetric" LCWA scoring heads *and* tails at once.
  
  This objective was introduced by [lacroix2018]_ as
  
  .. math ::
  
      l_{i,j,k}(X) = - X_{i,j,k} + \log \left(
          \sum_{k'} \exp(X_{i,j,k′})
      \right) - X_{k,j+P,i} + \log \left(
          \sum_{i'} \exp (X_{k, j+P, i'})
      \right)
  
  
  which can be seen as a "symmetric LCWA", where for one batch of triples, we score both, heads *and* tails, given
  the remainder of the triple.
  
  .. note ::
      at the same time, there is a also a difference to the :class:`LCWATrainingLoop`: we do not group by e.g.,
      head+relation pairs. Thus, the name might be suboptimal and change in the future.
class_docstr_tok: ["A","``","symmetric","''","LCWA","scoring","heads","*","and","*","tails","at","once",".","This","objective","was","introduced","by","[","lacroix2018","]","_","as","..","math",":",":","l_","{","i",",","j",",","k","}","(","X",")","=","-","X_","{","i",",","j",",","k","}","+","\\log","\\left","(","\\sum_","{","k","'","}","\\exp","(","X_","{","i",",","j",",","k\u2032","}",")","\\right",")","-","X_","{","k",",","j+P",",","i","}","+","\\log","\\left","(","\\sum_","{","i","'","}","\\exp","(","X_","{","k",",","j+P",",","i","'","}",")","\\right",")","which","can","be","seen","as","a","``","symmetric","LCWA","''",",","where","for","one","batch","of","triples",",","we","score","both",",","heads","*","and","*","tails",",","given","the","remainder","of","the","triple",".","..","note",":",":","at","the","same","time",",","there","is","a","also","a","difference","to","the",":","class",":","`","LCWATrainingLoop","`",":","we","do","not","group","by","e.g.",",","head+relation","pairs",".","Thus",",","the","name","might","be","suboptimal","and","change","in","the","future","."]
code: def _slice_size_search(self, **kwargs) -> int:
      # TODO?
      raise MemoryError(
          "The current model can't be trained on this hardware with these parameters."
      )
  
imports: import logging
  from math import ceil
  from typing import Callable, ClassVar, Optional, Tuple, Union
  import torch
  from torch.nn import functional
  from torch.utils.data import DataLoader, TensorDataset
  from .training_loop import TrainingLoop
  from ..losses import Loss
  from ..models import Model
  from ..triples import CoreTriplesFactory
  from ..triples.instances import LCWABatchType, LCWASampleType
  from ..typing import InductiveMode, MappedTriples
label_desc: Use image node_id 4 for calling the SymmetricLCWATrainingLoop obj's underlying member method code with example usage: obj._slice_size_search() without return types