###############################################################################
# 0.2.16
  - Hotfix: Including README-pypi.rst in MANIFEST.in
###############################################################################
# 0.2.15
  - Bugfix: requests.Response.raise_for_status() doesn't accept args.
  - Removed NotYetImplementedError, exposing Model.setNotes()
###############################################################################
# 0.2.14
  - Hotfix: requests.session()-related call arguments
  - Update numenta.com references to groksolutions.com
  - Travis-CI build configuration for grok-py
###############################################################################
# 0.2.13
  - Removing bundled requests module in favor of using setuptools to manage
    dependencies.
  - Handle empty responses gracefully now that DELETE responses will return
    `204 No Content` and no body.
  - Properly assert dict instance instead of comparing type().  Use `with`
    statement when handling file in grokpy.client.Client._handelAmbiguousSpec()
###############################################################################
# 0.2.12
  - Remove run_tests in favor of run_tests.sh
  - When adding data to a stream, handle TypeError and check for NoneType,
    interpret as missing value.
  - grokpy.stream.Stream._parseRecord() will now attempt to convert scalar
    fields into floats() when generating a request to append data to a stream
    in grokpy.stream.Stream.addRecords().  If a scalar field cannot be
    converted into a float, and is recognized as one of the possible missing
    values, then it is ultimately sent as a null value in the API request.
    Otherwise, if a scalar field cannot be represented as a number according to
    the json specification (http://www.ietf.org/rfc/rfc4627.txt), then a
    ValueError exception is raised.
###############################################################################
# 0.2.11
  - Added stop command to grokpy.model.Model
  - Added early exit to speed up swarm
  - Simplified HelloGrokAnomaly example and output format
###############################################################################
# 0.2.10
  - Cleanup grokpy.stream.Stream.addRecords to minimize redundant iterations and support generators.
  - Updated in-line documentation to support reStructuredText-based docs build
  - Updated download url to point to PyPi, since github doesn't do generic file hosting any more.
###############################################################################
# 0.2.9
  - Adds tests for model commands get/setAnomalyAutoDetectWaitRecords
  - Adds get/setAutoDetectWaitRecord to model command API and updates HelloGrokAnomaly to use setAutoDetectWaitRecords
  - BUGFIX in connection.py to avoid infinite loop with 503 HTTP error
###############################################################################
# 0.2.8
  - HelloGrokAnomaly.py uses getLabels() and set the threshold after swarm.
###############################################################################
# 0.2.7
  - getAnomalyAutoDetectThreshold and setAnomalyAutoDetectThreshold added to models
  - Changed aggregation 'average' to 'mean'
###############################################################################
# 0.2.6
  - Added startAt parameter to method getModelOutput in model.py
  - Accept python datetime objects as part of records, convertingly them silently to strings before POSTing to API
  - Add support for actions and unit tests for same
  - Fix bug with requesting a user by id
  - The API supports additional (optional) params for model commands.  This change allows you to optionally specify those params as kwargs.

  For example, to start a model from a checkpoint:

      model.start(checkpointId='some checkpoint id')

  or:

      model._runCommand('start', checkpointId='some checkpoint id')

  - For consistency, derive baseURL from GROK_API_URL environment var in the same way that key is derived from GROK_API_KEY environment var.
  - Fixed bug handling 0 min and max values in grok-py getSpec
  - Added model commands for addLabel, getLabels, and removeLabels
  - hello grok anomaly
###############################################################################
# 0.2.5
  - Add support for proxies.
###############################################################################
# 0.2.4
  - HelloGrokPart3.py removed.  Weather public data provider is no longer supported
###############################################################################
# 0.2.3
  - Fix bug in handling of resultMetadata return value in grok-py and HelloGrok examples
###############################################################################
# 0.2.2
  - Bump version number
  - Update CHANGES files
  - Print out the model id earlier in the example apps. This is useful for debugging
  - Remove stated httplib2 dependency from client; Update CHANGES to reflect move to v2 api
  - Add support for "limit" parameter in getModelOutput()
  - Add in ModelSpecification class to mirror StreamSpecification class; Minor tweaks to doc formatting
  - Reduce default number of records we will will send to a stream at a time from 5000 to 500. The larger size was timing out
  - When building the output Hello Grok examples now explicitly request a max of 2500 records. This overcomes the small (1k) default on the server
  - Added ability to set aggregation functions for local data_source_fields
  - Stream objects now have a .getSpecDict() method that will return a python dict representation of the stream specification. This doesnt quite work yet due to a missing property in the API stream schema, but should work soon.
  - Make default connection https vs. http.
###############################################################################
# 0.2.1

- Bump version number
- Update CHANGES file

###############################################################################
# 0.2.0 - MAJOR

- Updates client to work with the version 2 HTTP API
-- See grok.numenta.com -> Resources -> API for full overview of new API
-- There are substantial breaking changes in this update.
-- The v1 API has been removed so you MUST update your scripts to use this verion of the client.

###############################################################################
# 0.0.8

- Re-enable learning methods on models
- Expose field rankings at end of Swarm
- Fix .listModels() method. Looks like this never got updated when I changed how models are initialized.
- Add experimental multistep prediction method to models. Make getPredictions() method smarter.
- Remove test_suite option from setup.py. Throws a warning under 2.7.2 win

###############################################################################
# 0.0.7

- Change default output of sample apps to show progress rather than errors.
- Deprecate File Provider (we hardly knew yee)
- Add StreamMonitor class for use with Swarm and Production monitoring
- Disable model learning toggles until implemented in API

###############################################################################
# 0.0.6

- Complete HelloGrokPart3
- Add data and specs to support part 3
- Add the ability to use Public Data Sources
- Add the ability to use Join Files
- Shrink size of swarm inputs to focus more on stream training
- model.promote() will now retry 3 times automatically
- Add new objects: joinFile and publicDataSource

###############################################################################
# 0.0.5

- Add experimental streaming class
- Rename grokpy/grokpy.py to client.py to reduce confusion.
- Second part of Hello Grok sample app
- Can now promote models to production, send records, and get new predictions
- Decrease request timeout to a reasonable 10 seconds
- Handle 'information' level responses to requests
- Helper method to re-align predictions in output csv

###############################################################################
# 0.0.4

- Install regression fix

###############################################################################
# 0.0.3

- Move to object model more closely mimicking the API object model
- Extend HelloPrediction script through project configurationy

###############################################################################
# 0.0.2

- Populate client.py with stubs for API services
- Populate exceptions.py with stubs for ntabetaError subclasses
- Start an example application, HelloPredictions!

###############################################################################
# 0.0.1

- Create installer
