Skip to content

Commit 2fb3b6f

Browse files
Version 0.1.4 - Fixing readme, Tests & Samples
1 parent b3f5d47 commit 2fb3b6f

File tree

5 files changed

+34
-15
lines changed

5 files changed

+34
-15
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,9 @@ option|position|dtype|description
104104
`key`|0|int or str|Key to access data. int for tuple or list
105105
`reverse`|1|bool|Reverse sort of column
106106
`clean`|2|func|Function / lambda to clean the value. These calls can cause a significant slowdown.
107-
`required`|3|bool|Default True. If false, will substitute None or default if key not found (not applicable for list or tuple rows)
108-
`default`|4|any|Value to substitute if required==False and key does not exist or None is found. Can be used to achive similar functionality to pandas `na_position`
107+
`default`|3|any|Value to substitute if required==False and key does not exist or None is found. Can be used to achive similar functionality to pandas `na_position`
108+
`required`|4|bool|Default True. If False, will substitute None or default if key not found (not applicable for list or tuple rows)
109+
109110

110111
\* `spec` entries can be passed as:
111112
    type|description

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "multisort"
3-
version = "0.1.3"
3+
version = "0.1.4"
44
description = "NoneType Safe Multi Column Sorting For Python"
55
license = "MIT"
66
authors = ["Timothy C. Quinn"]

tests/hand_test.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ def main():
88
test_multisort_dict_single()
99
test_multisort_obj_single()
1010
test_multisort_tuple_single()
11-
1211
test_multisort_dict_multi()
12+
test_multisort_dict_multi_no_mscol()
1313
test_multisort_obj_multi()
1414
test_multisort_tuple_multi()
1515

@@ -55,44 +55,52 @@ def __repr__(self): return self.__str__()
5555

5656
def test_multisort_dict_single():
5757
_sorted = multisort(students_dict, 'grade', reverse=False)
58-
_print_stud(_sorted)
58+
_print_res(_sorted)
5959

6060

6161
def test_multisort_obj_single():
6262
_sorted = multisort(students_obj, 'attend', reverse=False)
63-
_print_stud(_sorted)
63+
_print_res(_sorted)
6464

6565

6666
def test_multisort_tuple_single():
6767
_sorted = multisort(student_tuple, COL_ATTEND, reverse=False)
68-
_print_stud(_sorted)
68+
_print_res(_sorted)
6969

7070

7171
def test_multisort_dict_multi():
7272
_sorted = multisort(students_dict, [
73-
mscol('grade', reverse=True, clean=lambda s: None if s is None else s.upper(), default='0', required=True),
74-
# ('attend', {'reverse': False}),
73+
mscol('grade', reverse=True, clean=lambda s: None if s is None else s.upper(), default='0', required=True),
74+
mscol('attend', reverse=False),
75+
], reverse=False)
76+
_print_res(_sorted)
77+
78+
79+
def test_multisort_dict_multi_no_mscol():
80+
_sorted = multisort(students_dict, [
81+
('grade', True, lambda s: None if s is None else s.upper(), '0', True),
82+
('attend', False),
7583
], reverse=False)
76-
_print_stud(_sorted)
84+
_print_res(_sorted)
7785

7886

7987
def test_multisort_obj_multi():
8088
_sorted = multisort(students_obj, [
8189
mscol('grade', reverse=True),
8290
mscol('attend')
8391
], reverse=False)
84-
_print_stud(_sorted)
92+
_print_res(_sorted)
8593

8694

8795
def test_multisort_tuple_multi():
8896
_sorted = multisort(student_tuple, [
8997
mscol(COL_GRADE, reverse=True),
9098
mscol(COL_ATTEND)
9199
], reverse=False)
92-
_print_stud(_sorted)
100+
_print_res(_sorted)
93101

94102

95-
def _print_stud(rows):
103+
def _print_res(rows):
96104
print(f"\n{util.getFuncName(2)}() Results:")
97105
for row in rows:
98106
print(util.pre(str(row)))

tests/performance_tests.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ async def run_tests():
4646
run_pandas(students[:]),
4747
superfast(students[:]),
4848
superfast_clean(students[:]),
49+
superfast_lambda(students[:]),
4950
]
5051
res = await asyncio.gather(*coroutines, return_exceptions=True)
5152

@@ -124,6 +125,17 @@ def key_attend(student):
124125
return ('superfast', sw.elapsed(prec=7))
125126

126127

128+
async def superfast_lambda(students):
129+
sw = util.StopWatch()
130+
students_sorted = sorted(students, key=lambda r: (r['grade'] is None, r['grade'],) )
131+
students_sorted.sort(key=lambda r: (r['attend'] is None, r['attend'],), reverse=True)
132+
133+
return ('superfast_lambda', sw.elapsed(prec=7))
134+
135+
136+
137+
138+
127139
async def superfast_clean(students):
128140
sw = util.StopWatch()
129141
def key_grade(student):

tests/test_multisort.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,6 @@ def dump_sort(stest_no, spec, rows, rows_as, row_as, expected, reverse):
210210
return sb.ts()
211211

212212

213-
214-
215213

216214
def _get_rows_in(rows_list=False, rows_tuple=False, row_as_dict=False, row_as_obj=False, row_as_list=False, row_as_tuple=False):
217215
if row_as_dict:

0 commit comments

Comments
 (0)