code: def rsh(self, num, cin=None):
          
          if num < 0 or num > self.size:
              raise ValueError("expected 0 <= num <= {0.size}".format(self))
          if cin is None:
              items = [self.ftype.box(0) for _ in range(num)]
              cin = self.__class__(items, ftype=self.ftype)
          else:
              if len(cin) != num:
                  raise ValueError("expected length of cin to be equal to num")
          if num == 0:
              return self, self.__class__([], ftype=self.ftype)
          else:
              fs = self.__class__(self._items[num:] + cin._items,
                                  ftype=self.ftype)
              cout = self.__class__(self._items[:num], ftype=self.ftype)
              return fs, cout
docs: Right shift the farray by *num* places.
  
          The *num* argument must be a non-negative ``int``.
  
          If the *cin* farray is provided, it will be shifted in.
          Otherwise, the carry-in is zero.
  
          Returns a two-tuple (farray fs, farray cout),
          where *fs* is the shifted vector, and *cout* is the "carry out".
  
          Returns a new farray.