__all__ = ['popCount']


def popCount(v):
    """Return number of 1 bits (population count) of an integer.

    If the integer is negative, the number of 1 bits in the
    twos-complement representation of the integer is returned. i.e.
    ``popCount(-30) == 28`` because -30 is::

        1111 1111 1111 1111 1111 1111 1110 0010

    Uses the algorithm from `HAKMEM item 169 <https://www.inwap.com/pdp10/hbaker/hakmem/hacks.html#item169>`_.

    Args:
        v (int): Value to count.

    Returns:
        Number of 1 bits in the binary representation of ``v``.
    """

    if v > 0xFFFFFFFF:
        return popCount(v >> 32) + popCount(v & 0xFFFFFFFF)

    # HACKMEM 169
    y = (v >> 1) & 0xDB6DB6DB
    y = v - y - ((y >> 1) & 0xDB6DB6DB)
    return (((y + (y >> 3)) & 0xC71C71C7) % 0x3F)

__all__ = ['popCount']


try:
    bit_count = int.bit_count
except AttributeError:
    def bit_count(v):
        return bin(v).count('1')

"""Return number of 1 bits (population count) of the absolute value of an integer.

See https://docs.python.org/3.10/library/stdtypes.html#int.bit_count
"""
popCount = bit_count

Consolidate bit_count / popCount methods
Consolidate bit_count / popCount methods

Fixes https://github.com/fonttools/fonttools/issues/2331

  __all__ = ['popCount']
  
  
- def popCount(v):
-     """Return number of 1 bits (population count) of an integer.
+ try:
+     bit_count = int.bit_count
+ except AttributeError:
+     def bit_count(v):
+         return bin(v).count('1')
  
+ """Return number of 1 bits (population count) of the absolute value of an integer.
-     If the integer is negative, the number of 1 bits in the
-     twos-complement representation of the integer is returned. i.e.
-     ``popCount(-30) == 28`` because -30 is::
  
-         1111 1111 1111 1111 1111 1111 1110 0010
+ See https://docs.python.org/3.10/library/stdtypes.html#int.bit_count
+ """
+ popCount = bit_count
  
-     Uses the algorithm from `HAKMEM item 169 <https://www.inwap.com/pdp10/hbaker/hakmem/hacks.html#item169>`_.
- 
-     Args:
-         v (int): Value to count.
- 
-     Returns:
-         Number of 1 bits in the binary representation of ``v``.
-     """
- 
-     if v > 0xFFFFFFFF:
-         return popCount(v >> 32) + popCount(v & 0xFFFFFFFF)
- 
-     # HACKMEM 169
-     y = (v >> 1) & 0xDB6DB6DB
-     y = v - y - ((y >> 1) & 0xDB6DB6DB)
-     return (((y + (y >> 3)) & 0xC71C71C7) % 0x3F)
- 
Consolidate bit_count / popCount methods
## Code Before:
__all__ = ['popCount']


def popCount(v):
    """Return number of 1 bits (population count) of an integer.

    If the integer is negative, the number of 1 bits in the
    twos-complement representation of the integer is returned. i.e.
    ``popCount(-30) == 28`` because -30 is::

        1111 1111 1111 1111 1111 1111 1110 0010

    Uses the algorithm from `HAKMEM item 169 <https://www.inwap.com/pdp10/hbaker/hakmem/hacks.html#item169>`_.

    Args:
        v (int): Value to count.

    Returns:
        Number of 1 bits in the binary representation of ``v``.
    """

    if v > 0xFFFFFFFF:
        return popCount(v >> 32) + popCount(v & 0xFFFFFFFF)

    # HACKMEM 169
    y = (v >> 1) & 0xDB6DB6DB
    y = v - y - ((y >> 1) & 0xDB6DB6DB)
    return (((y + (y >> 3)) & 0xC71C71C7) % 0x3F)

## Instruction:
Consolidate bit_count / popCount methods
## Code After:
__all__ = ['popCount']


try:
    bit_count = int.bit_count
except AttributeError:
    def bit_count(v):
        return bin(v).count('1')

"""Return number of 1 bits (population count) of the absolute value of an integer.

See https://docs.python.org/3.10/library/stdtypes.html#int.bit_count
"""
popCount = bit_count
