nodes: 0, module; 1, function_definition; 2, function_name:zrange; 3, parameters; 4, block; 5, identifier:self; 6, identifier:name; 7, identifier:start; 8, identifier:end; 9, default_parameter; 10, default_parameter; 11, default_parameter; 12, expression_statement; 13, if_statement; 14, expression_statement; 15, if_statement; 16, expression_statement; 17, return_statement; 18, identifier:desc; 19, False; 20, identifier:withscores; 21, False; 22, identifier:score_cast_func; 23, identifier:float; 24, comment:"""
          Return a range of values from sorted set ``name`` between
          ``start`` and ``end`` sorted in ascending order.
  
          ``start`` and ``end`` can be negative, indicating the end of the range.
  
          ``desc`` a boolean indicating whether to sort the results descendingly
  
          ``withscores`` indicates to return the scores along with the values.
          The return type is a list of (value, score) pairs
  
          ``score_cast_func`` a callable used to cast the score return value
          """; 25, identifier:desc; 26, block; 27, assignment; 28, identifier:withscores; 29, block; 30, assignment; 31, await; 32, return_statement; 33, identifier:pieces; 34, list; 35, expression_statement; 36, identifier:options; 37, dictionary; 38, call; 39, await; 40, string; 41, identifier:name; 42, identifier:start; 43, identifier:end; 44, call; 45, pair; 46, pair; 47, attribute; 48, argument_list; 49, call; 50, string_content:ZRANGE; 51, attribute; 52, argument_list; 53, string; 54, identifier:withscores; 55, string; 56, identifier:score_cast_func; 57, identifier:self; 58, identifier:execute_command; 59, list_splat; 60, dictionary_splat; 61, attribute; 62, argument_list; 63, identifier:pieces; 64, identifier:append; 65, call; 66, string_content:withscores; 67, string_content:score_cast_func; 68, identifier:pieces; 69, identifier:options; 70, identifier:self; 71, identifier:zrevrange; 72, identifier:name; 73, identifier:start; 74, identifier:end; 75, identifier:withscores; 76, identifier:score_cast_func; 77, identifier:b; 78, argument_list; 79, string; 80, string_content:WITHSCORES
code: async def zrange(self, name, start, end, desc=False, withscores=False,
                       score_cast_func=float):
          """
          Return a range of values from sorted set ``name`` between
          ``start`` and ``end`` sorted in ascending order.
  
          ``start`` and ``end`` can be negative, indicating the end of the range.
  
          ``desc`` a boolean indicating whether to sort the results descendingly
  
          ``withscores`` indicates to return the scores along with the values.
          The return type is a list of (value, score) pairs
  
          ``score_cast_func`` a callable used to cast the score return value
          """
          if desc:
              return await self.zrevrange(name, start, end, withscores,
                                          score_cast_func)
          pieces = ['ZRANGE', name, start, end]
          if withscores:
              pieces.append(b('WITHSCORES'))
          options = {
              'withscores': withscores,
              'score_cast_func': score_cast_func
          }
          return await self.execute_command(*pieces, **options)