Skip to content

Commit

Permalink
Revert "Added a new helper utils.get_ordinal_clusters to cluster ordi…
Browse files Browse the repository at this point in the history
…nal numbers based on an offset."
  • Loading branch information
duchenean authored May 15, 2024
1 parent 29a7c24 commit 470d639
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 76 deletions.
4 changes: 2 additions & 2 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ Changelog
1.0.2 (unreleased)
------------------

- Added a new helper `utils.get_ordinal_clusters` to cluster ordinal numbers based on an offset.
[aduchene]
- Nothing changed yet.


1.0.1 (2024-04-08)
------------------
Expand Down
21 changes: 0 additions & 21 deletions imio/pyutils/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from imio.pyutils.utils import all_of_dict_values
from imio.pyutils.utils import append
from imio.pyutils.utils import get_clusters
from imio.pyutils.utils import get_ordinal_clusters
from imio.pyutils.utils import insert_in_ordereddict
from imio.pyutils.utils import iterable_as_list_of_list
from imio.pyutils.utils import letters_sequence
Expand Down Expand Up @@ -56,26 +55,6 @@ def test_get_clusters(self):
self.assertEqual(get_clusters([1, 2, 4, 5, 15], separator="|"),
'1-2|4-5|15')

def test_get_ordinal_clusters(self):
self.assertEqual(get_ordinal_clusters([100, 200, 300, 500, 600, 800, 1000, 1500]),
'1-3, 5-6, 8, 10, 15')
self.assertEqual(get_ordinal_clusters([100, 200, 300, 500, 501, 503, 600, 700, 1000, 1500]),
'1-3, 5-5.1, 5.3, 6-7, 10, 15')
self.assertEqual(
get_ordinal_clusters(
[100, 200, 300, 400, 500, 501, 502, 521, 522, 540, 550, 1200, 1300], separator="|"),
'1-5.2|5.21-5.22|5.40|5.50|12-13')
self.assertEqual(
get_ordinal_clusters(
[100, 200, 300, 301, 302, 321, 322, 340, 1199, 1200, 1300], cluster_format="from {} to {}"),
'from 1 to 3.2, from 3.21 to 3.22, 3.40, 11.99, from 12 to 13')
self.assertEqual(get_ordinal_clusters([100, 200, 250, 400, 700], single_cluster_format="({})"),
'1-2, (2.50), (4), (7)')
self.assertEqual(get_ordinal_clusters([10, 20, 30, 31, 32, 110, 112, 130], offset=10),
'1-3.2, 11, 11.2, 13')
self.assertListEqual(get_ordinal_clusters([100, 200, 250, 400, 700], as_str=False),
[[100, 200], [250], [400], [700]])

def test_insert_in_ordered_dict(self):
dic = OrderedDict([('a', 1), ('b', 2)])
self.assertEqual(insert_in_ordereddict(dic, ('bad', 3)), None)
Expand Down
54 changes: 1 addition & 53 deletions imio/pyutils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,58 +63,6 @@ def get_clusters(numbers=[], separator=", "):
return separator.join(res)


def display_offset_number(number, offset):
"""Display a number with an offset. For example when p_number=123 and offset=100, it returns '1.23'"""
if number % offset == 0:
return str(int(number / offset))
return '{}.{}'.format(number // offset, number % offset)


def get_ordinal_clusters(
numbers=[],
cluster_format="{0}-{1}",
single_cluster_format="{0}",
separator=", ",
offset=100,
as_str=True):
"""Return given p_numbers by clusters while taking care of the offset (used for sub numering).
p_offset should be a power of 10, it doesn't make any sense otherwise.
When p_numbers=[100,200,300,400,500,501,502,521,522,540,550,700,1200,1300] and p_offset=100,
the result is '1-5.2, 5.21-5.22, 5.40, 5.50, 7, 12-13'."""

def _is_in_cluster(number, cluster, offset):
"""Check if a number is in a cluster.
A number is in a cluster if it follows directly the last number according to the offset"""
if len(cluster) > 0:
if number % offset == 0:
return number - cluster[-1] == offset
return number - cluster[-1] == 1
return True

# Initialize the first group
clusters = []
current_cluster = [numbers[0]]
for num in numbers[1:]:
if _is_in_cluster(num, current_cluster, offset):
current_cluster.append(num)
else: # we'll start a new cluster
clusters.append(current_cluster)
current_cluster = [num]
clusters.append(current_cluster) # Add the last one

if not as_str:
return clusters

res = []
for cluster in clusters:
if len(cluster) > 1:
res.append(cluster_format.format(display_offset_number(cluster[0], offset),
display_offset_number(cluster[-1], offset)))
else:
res.append(single_cluster_format.format(display_offset_number(cluster[0], offset)))
return separator.join(res)


def insert_in_ordereddict(dic, value, after_key='', at_position=None):
"""Insert a tuple in an new Ordereddict.
Expand Down Expand Up @@ -232,7 +180,7 @@ def radix_like_starting_1(n, base, L=[]): # noqa
L.reverse()
return L
else:
return radix_like_starting_1((n % base) and (n // base) or (n // base) - 1, base, L + [(n % base) or base])
return radix_like_starting_1((n % base) and (n // base) or (n // base) -1 , base, L + [(n % base) or base])


def replace_in_list(lst, value, replacement, generator=False):
Expand Down

0 comments on commit 470d639

Please sign in to comment.