code: def _call_real(self, x_real, out_real):
          
          if self.impl.startswith('astra'):
              backend, data_impl = self.impl.split('_')
  
              if data_impl == 'cpu':
                  return astra_cpu_forward_projector(
                      x_real, self.geometry, self.range.real_space, out_real)
  
              elif data_impl == 'cuda':
                  if self._astra_wrapper is None:
                      astra_wrapper = AstraCudaProjectorImpl(
                          self.geometry, self.domain.real_space,
                          self.range.real_space)
                      if self.use_cache:
                          self._astra_wrapper = astra_wrapper
                  else:
                      astra_wrapper = self._astra_wrapper
  
                  return astra_wrapper.call_forward(x_real, out_real)
              else:
                  # Should never happen
                  raise RuntimeError('bad `impl` {!r}'.format(self.impl))
          elif self.impl == 'skimage':
              return skimage_radon_forward(x_real, self.geometry,
                                           self.range.real_space, out_real)
          else:
              # Should never happen
              raise RuntimeError('bad `impl` {!r}'.format(self.impl))
docs: Real-space forward projection for the current set-up.
  
          This method also sets ``self._astra_projector`` for
          ``impl='astra_cuda'`` and enabled cache.