# score.sieves

"...sieve theory is the study of the internal symmetries of a series of points
either constructed intuitively, given by observation, or invented completely
from moduli of repetition." - Xenakis, Formalized Music, pp. 276
Sieve functions based on work by Iannis Xenakis. Sieves are represented as
a 2-vector of [modulo index]. U and I are used to create Union and
Intersection Sieves. Sieves may also be nil, though are factored out when a
Sieve is simplified, and generates no sequence when gen-sieve is called.
Code Consulted:
* C Code from "Sieves" article below.
* Haskell Music Theory (https://hackage.haskell.org/package/hmt-0.15)
* athenaCL (http://www.flexatone.org/athena.html)
* Music21 (http://web.mit.edu/music21/)
Literature:
* Xenakis and Rahn. "Sieves". Perspectives of New Music, Vol. 28, No. 1
(Winter, 1990), pp. 58-78.
* Xenakis. "Formalized Music". pp. 268-288.

### ->Intersection

`(->Intersection l r)`

Positional factory function for class score.sieves.Intersection.

### ->Union

`(->Union l r)`

Positional factory function for class score.sieves.Union.

### analyze-sieve

`(analyze-sieve pts)`

Analyzes the formula of the sieve for a given sequence pts of number
values. Sequence pts should be finite.
Returns a map containing:
* :analysis - vector of sieve vectors containing [modulus index
points-covered].
* :sieve - Union sieve of analysis vectors
* :period - period of the sieve

### gen-sieve

`(gen-sieve n sieve)`

`(gen-sieve sieve)`

Generate sequence using sieve. Can optionally provide number n of elements
to produce.

### I

`(I & sieves)`

Create new sieve that is the intersection of sieves

### map->Intersection

`(map->Intersection m__6522__auto__)`

Factory function for class score.sieves.Intersection, taking a map of keywords to field values.

### map->Union

`(map->Union m__6522__auto__)`

Factory function for class score.sieves.Union, taking a map of keywords to field values.

### Sieve

#### protocol

#### members

### element?

`(element? s n)`

Determines if number n is an element of this Sieve

### normalize

`(normalize s)`

Reduces Sieves in [mod index] form to its normalized form

### period

`(period s)`

Returns the period of the Sieve.

### reduce-sieve

`(reduce-sieve s)`

Reduces the Sieve to its simplest form

### simplified

`(simplified sieve)`

Returns simplified (normalized and reduce) version of sieve

### U

`(U & sieves)`

Create new sieve that is the union of sieves