def median(collection, iteratee=None): """Calculate median of each element in `collection`. If iteratee is passed, each element of `collection` is passed through a iteratee before the median is computed. Args: collection (list|dict): Collection to process. iteratee (mixed, optional): Iteratee applied per iteration. Returns: float: Result of median. Example: >>> median([1, 2, 3, 4, 5]) 3 >>> median([1, 2, 3, 4]) 2.5 .. versionadded:: 2.1.0 """ length = len(collection) middle = (length + 1) / 2 collection = sorted(ret[0] for ret in iteriteratee(collection, iteratee)) if pyd.is_odd(length): result = collection[int(middle - 1)] else: left = int(middle - 1.5) right = int(middle - 0.5) result = (collection[left] + collection[right]) / 2 return result
class ManuscriptFactory(factory.Factory): class Meta: model = Manuscript id = factory.Sequence(lambda n: n + 1) siglum_disambiguator = factory.Faker("word") museum_number = factory.Sequence( lambda n: MuseumNumber("M", str(n)) if pydash.is_odd(n) else None ) accession = factory.Sequence(lambda n: f"A.{n}" if pydash.is_even(n) else "") period_modifier = factory.fuzzy.FuzzyChoice(PeriodModifier) period = factory.fuzzy.FuzzyChoice(set(Period) - {Period.NONE}) provenance = factory.fuzzy.FuzzyChoice(set(Provenance) - {Provenance.STANDARD_TEXT}) type = factory.fuzzy.FuzzyChoice(set(ManuscriptType) - {ManuscriptType.NONE}) notes = factory.Faker("sentence") colophon = Transliteration.of_iterable( [TextLine.of_iterable(LineNumber(1, True), (Word.of([Reading.of_name("ku")]),))] ) unplaced_lines = Transliteration.of_iterable( [TextLine.of_iterable(LineNumber(1, True), (Word.of([Reading.of_name("nu")]),))] ) references = factory.List( [factory.SubFactory(ReferenceFactory, with_document=True)], TupleFactory )
def test_is_odd(case, expected): assert _.is_odd(case) == expected