# Feature Release steps

 - tests passing
 - mix format
 - inline documentation
 - top of module documentation
 - version bump in mix.exs
 - version bump in README.md
 - git tag -a v0.x.x -m "v0.x.x - summary"
 - git push
 - git push --tags
 - mix hex.publish

# CHANGELOG

## v0.*.*

### Changes/Refactorizations

### Enhancements

 - Chunky.Math
  - is_abundant?/1 - Is a number `n` an Abundant number
  - next_abundant/1 - Find the next abundant number after `n`
  - is_perfect?/1 - Is a number `n` a perfect number
  - is_deficient?/1 - Is a number `n` a deficient number
  - next_deficient/1 - Find the next deficient number
  - is_arithmetic_number?/1 - Is a number `n` an arithmetic number
  - aliquot_sum/1 - Aliquot Sum of `n`
  - is_highly_abundant?/1` - Is a number `n` highly abundant?
  - is_powerful_number?/1 - Is a number `n` a powerful number?
  - product_of_prime_factors/1 - Number theoretical function for product of prime factor exponents of `n`
  - is_highly_powerful_number?/1 - Is a number a _highly powerful_ number?
  - is_perfect_power?/1 - Is integer `n` a perfect power?
  - is_perfect_square?/1 - Is integer `n` a perfect square?
  - is_perfect_cube?/1 - Is integer `n` a perfect cube?
  - is_root_of?/2 - Is integer `n` any k-th root of `m`?
  - is_achilles_number?/1 - Is integer `n` an achilles number?
  - is_coprime?/2 - Test if `m` and `n` are co-prime
  - totient/1 - Calculate Euler's totient for `n`
  
 - Chunky.Sequence
  - drop/2 - Like Enum.drop
  
### New Sequences
 
 - A001065 - Aliquot parts of N
 - A005101 - Abundant Numbers
 - A000396 - Perfect Numbers
 - A005100 - Deficient Numbers
 - A003601 - Arithmetic Numbers
 - A002093 - Highly Abundant Numbers
 - Added Sequences.OEIS.Factors module
 - A001694 - Powerful Numbers
 - A005361 - Product of Prime Exponents of factors of N
 - A005934 - Highly powerful numbers: numbers with record value
 - A001597 - Perfect Powers
 - A052486 - Achilles Numbers
 - A000010 - Euler's totient function

## v0.8.0

### Changes/Refactorizations

### Enhancements

 - Chunky.Sequence
  - sequences are now marked as finite or infinite (as computable/stored in Squence library)
  - sequences can now have initial index/offset other than 0 (like A000593)
  - New Functions:
   - `is_finite?/1` - Is a sequence finite or infinite is sequence library?
 - Chunky.Math
  - `factors/1` - All divisors of N
  - `sigma/1` - Sigma-1 function of factors of N
  - `sigma/2` - Generalized Sigma function
  - `pow/2` - Pure integer exponentiation
  
### New Sequences

 - A000593 - Sum of Odd Divisors of N
 - A000009 - Number of partitions of n into distinct parts
 - A000079 - Powers of 2
 - A000203 - Sigma-1 of N
 - A001057 through A001060 - sigma2 through sigma5 of N
 - A013954 through A013968 - sigma6 through sigma20 of N
 
 
## v0.7.0

### Enhancements

 - `Chunky.Math` - Extended math for integers and floating point
  - `pow/3` - Modular arithmetic exponentiation
  - `is_prime?/1` - Primality test for integers
  - `prime_factors/1` - Factorize an integer to prime factors
  
 - `Chunky.Sequences` - Create, inspect, manipulate, iterate, and compare finite and infinite value sequences
  - New functions:
   - `create/3` - Create a new sequence instance
   - `available/0` - List all loaded sequences from all loaded applications and modules
   - `available/1` - List available sequences from a module
   - `has_next?/1` - Check that a sequence has at least one more available value
   - `is_available?/2` - Check if a specific sequence is available
   - `is_instance/2` - Check if a sequence is an instance of a specific sequence identifier
   - `is_instance/3` - Check if a sequence is an instance of a specific sequence identifier
   - `get_references/1` - Retrieve reference sources and links for a sequence
   - `has_reference?/2 - Check if a sequence has a specific reference source
   - `readable_name/1` - Find the human readable name of a sequence
   - `next/1` - Retrieve the next sequence value and updated sequence struct as a tuple
   - `next!/1` - Retrieve the next sequence as just an updated sequence struct
   - `take/2` - Like `Enum.take/2` - retrieve a list of values from a sequence
   - `take!/2` - Like `take/2`, but only return the updated sequence struct
   - `sequence_for_function/1` - Wrap a function as a sequence - see Developing New Sequences
   - `sequence_for_list/1` - Wrap a list as a sequence - see Developing New Sequences
   - `map/2` - Apply a function to values in a sequence, and collect the result
  - New Sequences:
   - `{Basic, :whole_numbers}` - Whole number sequence, starting from `1` or any other digit
   - `{Basic, :empty}` - The empty sequence
   - `{Basic, :decimal_digits}` - The decimal digits
   - `{OEIS, :a000045}` - OEIS - Fibonacci sequence
   - `{OEIS, :fibonacci}` - OEIS - alternate name, Fibonacci sequence
   - `{OEIS, :keyword_core}` - OEIS - List of core sequences, according to OEIS
   - `{OEIS, :a000041}` - OEIS - Partitions of Integers
   - Various test sequences

 
## v0.6.5

### Enhancements

 - `Chunky.Fractions`
  - added `uniq/2` for finding distinct fractions in a list
  - added `sort/2` for sorting value lists
  - added `clamp/2` for constraining value lists
  
## v0.6.4

### Enhancements

 - `Chunky.Fraction`
  - Most functions now use type coercion to handle any value that can be converted to a fraction via `new/1`
  
## v0.6.3

### Enhancements

 - `Chunky.Fraction`
  - `to_float/2` - convert to a float, with optional precision rounding
  - `min_of/1` - find the smallest from a list of fractions
  - `min_of/2` - find the smallest of two fractions
 - `Chunky.Grid`
  - `put_all/2` - basic function for putting `{x, y, v}` tuples  or `%{x: x, y: y, value: value}` maps into the grid
  - `find_index/2` - Find coordinates in grid of a value
  
## v0.6.2

### Documentation

 - `Chunky.Fraction` - Enhancements to documentation. Extended doctests


## v0.6.1

### Enhancements

 - `Chunky.Grid`
  - `put_at/3` and `put_at/4` - put values into the grid
  
## v0.6.0

### Enhancements

 - `Chunky.Fraction` module for manipulating fractions
  - `new/2` - create a new fraction
  - `new/1` - create a new fraction from a tuple or integer
  - `has_whole?/1` - fractions is greater than 1, and has a whole component
  - `is_whole?/1` - does a fraction exactly represent a whole number
  - `components/1` - tuple of numerator an denominator
  - `get_whole/1` - get reduced whole component of a fraction
  - `get_remainder/1` - get remainder of fraction after removing whole components
  - `split/1` - combine `get_whole/1` and `get_remainder/1` into one call
  - `is_simplified?/1` - is fraction in reduced form?
  - `simplify/1` - reduce fraction
  - `is_zero?/1` - does fraction represent zero?
  - `add/3` - Add two fractions, or a fraction and an integer
  - `subtract/3` - Subtract two fractions, or a fraction and an integer
  - `String.Chars` - Fractions now work properly with IO functions
  - `multiply/3` - Multiply two fractions, or a fraction and an integer
  - `reciprocal/2` - Take the reciprocal of a fraction
  - `divide/3` - Divide two fractions, or a fraction and an integer
  - `normalize/2` - Normalize two fractions to a common denominator
  - `is_positive?/1` - Test if a fraction is positive
  - `is_negative?/2` - Test if a fraction is negative
  - `power/3` - Fractional and integer powers of integers and fractions
  - `gt?/2`, `gte?/2`, `lt?/2`, `lte?/2`, and `eq?/2` added for comparison between fractions and fractions and integers
  - `normalize_all/1` - normalize a list of fractions and integers, like `normalize/2`
  - `sum/2` - sum a list of fractions and integers
  - `lcm/1` - find Least Common Multiple from a list of integers

 - `Chunky.Grid` module for working with two dimensional data
  - `Grid.new/3` - generate a grid from a value or a function
  - `Grid.get_at/2` and `Grid.get_at/3` - access cell value by 2d index
  - `Grid.valid_coordinate/*` and `Grid.valid_coordinate?/*` - determine if a coordinate is within grid bounds
  
## v0.5.0

### Enhancements

 - `Chunky.combinations_size/2` - pre-calculate the size of a combination using a closed form equation, instead of running the combination
 
## v0.4.1

### Documentation

 - Fixes for embedded `@moduledoc` for better Hexdocs layout
 
## v0.4.0

### Enhancements

 - `Chunky.permutations_size/1` - pre-calculate the size of a permutation using a closed form equation, instead of running the permutation
 
## v0.3.0

### Enhancements

 - Added `Chunky.combinations/2` for nCr unordered set generation
 
### Documentation

 - move all TODO items out of Chunky module
 - remove references to incomplete/unimplemented functions

## v0.2.1

### Documentation

 - Fix reference to `Chunky.chunk_length/2` in moduledoc
 
## v0.2.0

### Enhancements

 - `Chunky.chunk_length/2` added. Supports `list`, `tuple`, `binary`, and `range` types
 
### Documentation

 - Cleanup of readme and top level documentation
 - Hexdocs now have embedded readme data
 
## v0.1.1

### Documentation

 - Expanded documentation for `Chunky.permutations/1`
 
## v0.1.0

### Enhancements

 - `Chunky.permutations/1` added. Supports `list`, `tuple`, `binary`, and `range` types