abjad.duration

abjad.duration.durations(items)

Changes items to durations.

abjad.duration.is_duration(argument)

Is true when argument is duration (but not fraction).

abjad.duration.is_fraction(argument)

Is true when argument is fraction (but not duration).

abjad.duration.is_offset(argument)

Is true when argument is offset.

abjad.duration.offset(n[, d])

Makes offset from n.

abjad.duration.pair_with_denominator(...)

Spells fraction as pair with denominator.

abjad.duration.Duration([numerator, denominator])

Duration.

abjad.duration.Offset(fraction[, displacement])

Offset.

abjad.duration.Ratio(numerator, denominator)

Ratio.

abjad.duration.durations(items: list) list[Duration][source]

Changes items to durations.

>>> abjad.duration.durations([(15, 8), (3, 8), abjad.TimeSignature((3, 4))])
[Duration(15, 8), Duration(3, 8), Duration(3, 4)]
abjad.duration.is_duration(argument: object) bool[source]

Is true when argument is duration (but not fraction).

>>> abjad.duration.is_duration(abjad.Duration(1, 4))
True
>>> abjad.duration.is_duration(abjad.Fraction(1, 4))
False
>>> abjad.duration.is_duration(abjad.Offset(abjad.Fraction(1, 4)))
False
>>> abjad.duration.is_duration((1, 4))
False
>>> abjad.duration.is_duration(0)
False
abjad.duration.is_fraction(argument: object) bool[source]

Is true when argument is fraction (but not duration).

>>> abjad.duration.is_fraction(abjad.Duration(1, 4))
False
>>> abjad.duration.is_fraction(abjad.Fraction(1, 4))
True
>>> abjad.duration.is_fraction(abjad.Offset(abjad.Fraction(1, 4)))
False
>>> abjad.duration.is_fraction((1, 4))
False
>>> abjad.duration.is_fraction(0)
False
abjad.duration.is_offset(argument: object) bool[source]

Is true when argument is offset.

>>> abjad.duration.is_offset(abjad.Duration(1, 4))
False
>>> abjad.duration.is_offset(abjad.Fraction(1, 4))
False
>>> abjad.duration.is_offset(abjad.Offset(abjad.Fraction(1, 4)))
True
>>> abjad.duration.is_offset((1, 4))
False
>>> abjad.duration.is_offset(0)
False
abjad.duration.offset(n: int, d: int | None = None) Offset[source]

Makes offset from n.

>>> abjad.duration.offset(1)
Offset(Fraction(1, 1))
abjad.duration.pair_with_denominator(fraction: Fraction, denominator: int) tuple[int, int][source]

Spells fraction as pair with denominator.

>>> for numerator in range(12):
...     fraction = abjad.Fraction(numerator, 6)
...     pair = abjad.duration.pair_with_denominator(fraction, 6)
...     print(fraction, pair)
... 
0 (0, 6)
1/6 (1, 6)
1/3 (2, 6)
1/2 (3, 6)
2/3 (4, 6)
5/6 (5, 6)
1 (6, 6)
7/6 (7, 6)
4/3 (8, 6)
3/2 (9, 6)
5/3 (10, 6)
11/6 (11, 6)
>>> for numerator in range(12):
...     fraction = abjad.Fraction(numerator, 6)
...     pair = abjad.duration.pair_with_denominator(fraction, 8)
...     print(fraction, pair)
... 
0 (0, 8)
1/6 (1, 6)
1/3 (1, 3)
1/2 (4, 8)
2/3 (2, 3)
5/6 (5, 6)
1 (8, 8)
7/6 (7, 6)
4/3 (4, 3)
3/2 (12, 8)
5/3 (5, 3)
11/6 (11, 6)
>>> for numerator in range(12):
...     fraction = abjad.Fraction(numerator, 6)
...     pair = abjad.duration.pair_with_denominator(fraction, 12)
...     print(fraction, pair)
... 
0 (0, 12)
1/6 (2, 12)
1/3 (4, 12)
1/2 (6, 12)
2/3 (8, 12)
5/6 (10, 12)
1 (12, 12)
7/6 (14, 12)
4/3 (16, 12)
3/2 (18, 12)
5/3 (20, 12)
11/6 (22, 12)
class abjad.duration.Duration(numerator=0, denominator=None)[source]

Duration.

>>> abjad.Duration(3, 16)
Duration(3, 16)

clock_string()

Gets clock string.

dot_count()

Gets dot count.

equal_or_greater_assignable()

Gets assignable duration equal to or just greater than this duration.

equal_or_greater_power_of_two()

Gets duration equal or just greater power of two.

equal_or_lesser_assignable()

Gets assignable duration equal or just less than this duration.

equal_or_lesser_power_of_two()

Gets duration of the form d**2 equal to or just less than this duration.

exponent()

Gets base-2 exponent.

flag_count()

Gets flag count.

fraction()

Returns duration as fraction.

is_assignable()

Is true when duration is assignable.

is_dyadic()

Is true when denominator of duration is integer power of two.

lilypond_duration_string()

Gets LilyPond duration string.

pair()

Gets numerator and denominator pair.

reciprocal()

Gets reciprocal.

clock_string() str[source]

Gets clock string.

Rounds down to nearest second.

>>> abjad.Duration(117).clock_string()
"1'57''"
dot_count() int[source]

Gets dot count.

Dot count defined equal to number of dots required to notate duration. Raises assignability error when duration is not assignable.

>>> for n in range(1, 16 + 1):
...     try:
...         duration = abjad.Duration(n, 16)
...         sixteenths = abjad.duration.pair_with_denominator(duration, 16)
...         dot_count = duration.dot_count()
...         string = f"{sixteenths[0]}/{sixteenths[1]}\t{dot_count}"
...         print(string)
...     except abjad.AssignabilityError:
...         sixteenths = abjad.duration.pair_with_denominator(duration, 16)
...         print(f"{sixteenths[0]}/{sixteenths[1]}\t--")
... 
1/16	0
2/16	0
3/16	1
4/16	0
5/16	--
6/16	1
7/16	2
8/16	0
9/16	--
10/16	--
11/16	--
12/16	1
13/16	--
14/16	2
15/16	3
16/16	0
equal_or_greater_assignable() Duration[source]

Gets assignable duration equal to or just greater than this duration.

>>> for numerator in range(1, 16 + 1):
...     duration = abjad.Duration(numerator, 16)
...     result = duration.equal_or_greater_assignable()
...     sixteenths = abjad.duration.pair_with_denominator(duration, 16)
...     print(f"{sixteenths[0]}/{sixteenths[1]}\t{result!s}")
... 
1/16	1/16
2/16	1/8
3/16	3/16
4/16	1/4
5/16	3/8
6/16	3/8
7/16	7/16
8/16	1/2
9/16	3/4
10/16	3/4
11/16	3/4
12/16	3/4
13/16	7/8
14/16	7/8
15/16	15/16
16/16	1
equal_or_greater_power_of_two() Duration[source]

Gets duration equal or just greater power of two.

>>> for numerator in range(1, 16 + 1):
...     duration = abjad.Duration(numerator, 16)
...     result = duration.equal_or_greater_power_of_two()
...     sixteenths = abjad.duration.pair_with_denominator(duration, 16)
...     print(f"{sixteenths[0]}/{sixteenths[1]}\t{result!s}")
... 
1/16	1/16
2/16	1/8
3/16	1/4
4/16	1/4
5/16	1/2
6/16	1/2
7/16	1/2
8/16	1/2
9/16	1
10/16	1
11/16	1
12/16	1
13/16	1
14/16	1
15/16	1
16/16	1
equal_or_lesser_assignable() Duration[source]

Gets assignable duration equal or just less than this duration.

>>> for numerator in range(1, 16 + 1):
...     duration = abjad.Duration(numerator, 16)
...     result = duration.equal_or_lesser_assignable()
...     sixteenths = abjad.duration.pair_with_denominator(duration, 16)
...     print(f"{sixteenths[0]}/{sixteenths[1]}\t{result!s}")
... 
1/16	1/16
2/16	1/8
3/16	3/16
4/16	1/4
5/16	1/4
6/16	3/8
7/16	7/16
8/16	1/2
9/16	1/2
10/16	1/2
11/16	1/2
12/16	3/4
13/16	3/4
14/16	7/8
15/16	15/16
16/16	1
equal_or_lesser_power_of_two() Duration[source]

Gets duration of the form d**2 equal to or just less than this duration.

>>> for numerator in range(1, 16 + 1):
...     duration = abjad.Duration(numerator, 16)
...     result = duration.equal_or_lesser_power_of_two()
...     sixteenths = abjad.duration.pair_with_denominator(duration, 16)
...     print(f"{sixteenths[0]}/{sixteenths[1]}\t{result!s}")
... 
1/16	1/16
2/16	1/8
3/16	1/8
4/16	1/4
5/16	1/4
6/16	1/4
7/16	1/4
8/16	1/2
9/16	1/2
10/16	1/2
11/16	1/2
12/16	1/2
13/16	1/2
14/16	1/2
15/16	1/2
16/16	1
exponent() int[source]

Gets base-2 exponent.

>>> for numerator in range(1, 16 + 1):
...     duration = abjad.Duration(numerator, 16)
...     exponent = duration.exponent()
...     sixteenths = abjad.duration.pair_with_denominator(duration, 16)
...     print(f"{sixteenths[0]}/{sixteenths[1]}\t{duration.exponent()!s}")
... 
1/16	4
2/16	3
3/16	3
4/16	2
5/16	2
6/16	2
7/16	2
8/16	1
9/16	1
10/16	1
11/16	1
12/16	1
13/16	1
14/16	1
15/16	1
16/16	0
flag_count() int[source]

Gets flag count.

Flag count defined equal to number of flags required to notate duration.

>>> for n in range(1, 16 + 1):
...     duration = abjad.Duration(n, 64)
...     sixty_fourths = abjad.duration.pair_with_denominator(duration, 64)
...     print(f"{sixty_fourths[0]}/{sixty_fourths[1]}\t{duration.flag_count()}")
... 
1/64	4
2/64	3
3/64	3
4/64	2
5/64	2
6/64	2
7/64	2
8/64	1
9/64	1
10/64	1
11/64	1
12/64	1
13/64	1
14/64	1
15/64	1
16/64	0
fraction()[source]

Returns duration as fraction.

is_assignable() bool[source]

Is true when duration is assignable.

>>> for numerator in range(0, 16 + 1):
...     duration = abjad.Duration(numerator, 16)
...     sixteenths = abjad.duration.pair_with_denominator(duration, 16)
...     print(f"{sixteenths[0]}/{sixteenths[1]}\t{duration.is_assignable()}")
... 
0/16	False
1/16	True
2/16	True
3/16	True
4/16	True
5/16	False
6/16	True
7/16	True
8/16	True
9/16	False
10/16	False
11/16	False
12/16	True
13/16	False
14/16	True
15/16	True
16/16	True
is_dyadic() bool[source]

Is true when denominator of duration is integer power of two.

>>> for n in range(1, 16 + 1):
...     duration = abjad.Duration(1, n)
...     print(f"{duration!s}\t{duration.is_dyadic()}")
... 
1	True
1/2	True
1/3	False
1/4	True
1/5	False
1/6	False
1/7	False
1/8	True
1/9	False
1/10	False
1/11	False
1/12	False
1/13	False
1/14	False
1/15	False
1/16	True
lilypond_duration_string() str[source]

Gets LilyPond duration string.

>>> abjad.Duration(3, 16).lilypond_duration_string()
'8.'
pair() tuple[int, int][source]

Gets numerator and denominator pair.

>>> abjad.Duration(3, 16).pair()
(3, 16)
reciprocal() Duration[source]

Gets reciprocal.

>>> abjad.Duration(3, 7).reciprocal()
Duration(7, 3)
class abjad.duration.Offset(fraction: Fraction, displacement: Duration | None = None)[source]

Offset.

>>> fraction = abjad.Fraction(3, 16)
>>> abjad.Offset(fraction)
Offset(Fraction(3, 16))
>>> displacement = abjad.Duration(-1, 16)
>>> abjad.Offset(fraction, displacement=displacement)
Offset(Fraction(3, 16), displacement=Duration(-1, 16))

remove_displacement()

Makes new offset equal to this offset without displacement.

remove_displacement()[source]

Makes new offset equal to this offset without displacement.

>>> duration = abjad.Duration(-1, 16)
>>> offset = abjad.Offset(abjad.Fraction(1, 4), displacement=duration)
>>> offset
Offset(Fraction(1, 4), displacement=Duration(-1, 16))
>>> offset.remove_displacement()
Offset(Fraction(1, 4))
class abjad.duration.Ratio(numerator: int, denominator: int)[source]

Ratio.

>>> abjad.Ratio(6, 4)
Ratio(numerator=6, denominator=4)

Abjad ratios are two-term, unreduced integer ratios of the form n:d.

These are used primarily in modeling tuplet ratios like 3:2 and 6:4.

as_fraction()

Changes (unreduced) ratio to (reduced) fraction.

is_augmented()

Is true when ratio numerator is less than ratio denominator.

is_canonical()

Is true when ratio is normalized diminution.

is_diminished()

Is true when ratio denominator is less than ratio numerator.

is_dyadic()

Is true when ratio denominator is nonnegative integer power of two.

is_normalized()

Is true when fraction form of ratio is greater than 1/2 and less than 2.

is_reduced()

Is true when ratio numerator and denominator are relatively prime.

is_trivial()

Is true when ratio numerator equals ratio denominator.

reciprocal()

Get reciprocal of ratio.

as_fraction()[source]

Changes (unreduced) ratio to (reduced) fraction.

>>> abjad.Ratio(6, 4).as_fraction()
Fraction(3, 2)
is_augmented() bool[source]

Is true when ratio numerator is less than ratio denominator.

>>> abjad.Ratio(6, 4).is_augmented()
False
>>> abjad.Ratio(3, 2).is_augmented()
False
>>> abjad.Ratio(4, 6).is_augmented()
True
>>> abjad.Ratio(2, 3).is_augmented()
True
>>> abjad.Ratio(2, 2).is_augmented()
False
>>> abjad.Ratio(1, 1).is_augmented()
False
is_canonical() bool[source]

Is true when ratio is normalized diminution.

>>> abjad.Ratio(6, 4).is_canonical()
True
>>> abjad.Ratio(3, 2).is_canonical()
True
>>> abjad.Ratio(4, 6).is_canonical()
False
>>> abjad.Ratio(2, 3).is_canonical()
False
>>> abjad.Ratio(2, 2).is_canonical()
False
>>> abjad.Ratio(1, 1).is_canonical()
False
is_diminished() bool[source]

Is true when ratio denominator is less than ratio numerator.

>>> abjad.Ratio(6, 4).is_diminished()
True
>>> abjad.Ratio(3, 2).is_diminished()
True
>>> abjad.Ratio(4, 6).is_diminished()
False
>>> abjad.Ratio(2, 3).is_diminished()
False
>>> abjad.Ratio(2, 2).is_diminished()
False
>>> abjad.Ratio(1, 1).is_diminished()
False
is_dyadic() bool[source]

Is true when ratio denominator is nonnegative integer power of two.

>>> abjad.Ratio(6, 4).is_dyadic()
True
>>> abjad.Ratio(3, 2).is_dyadic()
True
>>> abjad.Ratio(4, 6).is_dyadic()
False
>>> abjad.Ratio(2, 3).is_dyadic()
False
>>> abjad.Ratio(2, 2).is_dyadic()
True
>>> abjad.Ratio(1, 1).is_dyadic()
True
is_normalized() bool[source]

Is true when fraction form of ratio is greater than 1/2 and less than 2.

>>> abjad.Ratio(6, 4).is_normalized()
True
>>> abjad.Ratio(3, 2).is_normalized()
True
>>> abjad.Ratio(4, 6).is_normalized()
True
>>> abjad.Ratio(2, 3).is_normalized()
True
>>> abjad.Ratio(2, 2).is_normalized()
True
>>> abjad.Ratio(1, 1).is_normalized()
True
>>> abjad.Ratio(10, 4).is_normalized()
False
>>> abjad.Ratio(4, 10).is_normalized()
False
>>> abjad.Ratio(9, 4).is_normalized()
False
>>> abjad.Ratio(4, 9).is_normalized()
False
is_reduced() bool[source]

Is true when ratio numerator and denominator are relatively prime.

>>> abjad.Ratio(6, 4).is_reduced()
False
>>> abjad.Ratio(3, 2).is_reduced()
True
>>> abjad.Ratio(4, 6).is_reduced()
False
>>> abjad.Ratio(2, 3).is_reduced()
True
>>> abjad.Ratio(2, 2).is_reduced()
False
>>> abjad.Ratio(1, 1).is_reduced()
True
is_trivial() bool[source]

Is true when ratio numerator equals ratio denominator.

>>> abjad.Ratio(6, 4).is_trivial()
False
>>> abjad.Ratio(3, 2).is_trivial()
False
>>> abjad.Ratio(4, 6).is_trivial()
False
>>> abjad.Ratio(2, 3).is_trivial()
False
>>> abjad.Ratio(2, 2).is_trivial()
True
>>> abjad.Ratio(1, 1).is_trivial()
True
reciprocal() Ratio[source]

Get reciprocal of ratio.

>>> abjad.Ratio(6, 4).reciprocal()
Ratio(numerator=4, denominator=6)