code: def _calc_time_step_first(self):
          
          system = self.system
          config = self.config
  
          if not system.dae.n:
              freq = 1.0
          elif system.dae.n == 1:
              B = matrix(system.dae.Gx)
              self.solver.linsolve(system.dae.Gy, B)
              As = system.dae.Fx - system.dae.Fy * B
              freq = abs(As[0, 0])
          else:
              freq = 20.0
  
          if freq > system.freq:
              freq = float(system.freq)
  
          tspan = abs(config.tf - config.t0)
          tcycle = 1 / freq
          config.deltatmax = min(5 * tcycle, tspan / 100.0)
          config.deltat = min(tcycle, tspan / 100.0)
          config.deltatmin = min(tcycle / 64, config.deltatmax / 20)
  
          if config.fixt:
              if config.tstep <= 0:
                  logger.warning('Fixed time step is negative or zero')
                  logger.warning('Switching to automatic time step')
                  config.fixt = False
              else:
                  config.deltat = config.tstep
                  if config.tstep < config.deltatmin:
                      logger.warning(
                          'Fixed time step is below the estimated minimum')
  
          self.h = config.deltat
docs: Compute the first time step and save to ``self.h``
  
          Returns
          -------
          None