itertools.count(-3)

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • bearophileHUGS@lycos.com

    itertools.count(-3)

    itertools.count docs say:
    Does not currently support python long integers.
    Note, count() does not check for overflow and will return negative
    numbers after exceeding sys.maxint. This behavior may change in the
    future.

    But it seems it doesn't support negative numbers too:
    >>from itertools import count, islice
    >>list(islice(c ount(), 0, 5))
    [0, 1, 2, 3, 4]
    >>list(islice(c ount(10), 0, 5))
    [10, 11, 12, 13, 14]
    >>list(islice(c ount(-3), 0, 5))
    [4294967293L, 4294967294L, 4294967295L, 0, 1]
    >>def count2(n=0):
    .... while True:
    .... yield n
    .... n += 1
    ....
    >>list(islice(c ount2(-3), 0, 5))
    [-3, -2, -1, 0, 1]

    If this isn't a bug, then maybe docs can tell about this too.

    Bye,
    bearophile

  • Carl Banks

    #2
    Re: itertools.count (-3)


    bearophileH...@ lycos.com wrote:
    itertools.count docs say:
    Does not currently support python long integers.
    Note, count() does not check for overflow and will return negative
    numbers after exceeding sys.maxint. This behavior may change in the
    future.
    >
    But it seems it doesn't support negative numbers too:
    >
    >from itertools import count, islice
    >list(islice(co unt(), 0, 5))
    [0, 1, 2, 3, 4]
    >list(islice(co unt(10), 0, 5))
    [10, 11, 12, 13, 14]
    >list(islice(co unt(-3), 0, 5))
    [4294967293L, 4294967294L, 4294967295L, 0, 1]
    >def count2(n=0):
    ... while True:
    ... yield n
    ... n += 1
    ...
    >list(islice(co unt2(-3), 0, 5))
    [-3, -2, -1, 0, 1]
    >
    If this isn't a bug, then maybe docs can tell about this too.
    Seems like a regression to me. itertools was documented as taking a
    sequence of integers, not necessarily positive integers. It worked on
    Python 2.4.

    Looking at the source (from 2.5 rc2), it looks like they accidentally
    used PyInt_FromSize_ t rather than PyInt_FromSSize _t in the count
    iterator. size_t is unsigned, of course, hence the large negative
    numbers.


    Carl Banks

    Comment

    • Jack Diederich

      #3
      Re: itertools.count (-3)

      On Thu, Sep 21, 2006 at 08:29:11AM -0700, Carl Banks wrote:
      >
      bearophileH...@ lycos.com wrote:
      itertools.count docs say:
      Does not currently support python long integers.
      Note, count() does not check for overflow and will return negative
      numbers after exceeding sys.maxint. This behavior may change in the
      future.

      But it seems it doesn't support negative numbers too:
      >>from itertools import count, islice
      >>list(islice(c ount(), 0, 5))
      [0, 1, 2, 3, 4]
      >>list(islice(c ount(10), 0, 5))
      [10, 11, 12, 13, 14]
      >>list(islice(c ount(-3), 0, 5))
      [4294967293L, 4294967294L, 4294967295L, 0, 1]
      >>def count2(n=0):
      ... while True:
      ... yield n
      ... n += 1
      ...
      >>list(islice(c ount2(-3), 0, 5))
      [-3, -2, -1, 0, 1]

      If this isn't a bug, then maybe docs can tell about this too.
      >
      Seems like a regression to me. itertools was documented as taking a
      sequence of integers, not necessarily positive integers. It worked on
      Python 2.4.
      >
      Looking at the source (from 2.5 rc2), it looks like they accidentally
      used PyInt_FromSize_ t rather than PyInt_FromSSize _t in the count
      iterator. size_t is unsigned, of course, hence the large negative
      numbers.
      >
      Nuts, that was me. I'll fix and add some tests.

      -Jack

      Comment

      Working...