{"action":"closed","number":1,"pull_request":{"url":"https://api.github.com/repos/kkroy36/RFGB/pulls/1","id":159240818,"html_url":"https://github.com/kkroy36/RFGB/pull/1","diff_url":"https://github.com/kkroy36/RFGB/pull/1.diff","patch_url":"https://github.com/kkroy36/RFGB/pull/1.patch","issue_url":"https://api.github.com/repos/kkroy36/RFGB/issues/1","number":1,"state":"closed","locked":false,"title":"Python 2/3 compatibility. Unit Testing Framework.","user":{"login":"batflyer","id":11916674,"avatar_url":"https://avatars3.githubusercontent.com/u/11916674?v=4","gravatar_id":"","url":"https://api.github.com/users/batflyer","html_url":"https://github.com/batflyer","followers_url":"https://api.github.com/users/batflyer/followers","following_url":"https://api.github.com/users/batflyer/following{/other_user}","gists_url":"https://api.github.com/users/batflyer/gists{/gist_id}","starred_url":"https://api.github.com/users/batflyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/batflyer/subscriptions","organizations_url":"https://api.github.com/users/batflyer/orgs","repos_url":"https://api.github.com/users/batflyer/repos","events_url":"https://api.github.com/users/batflyer/events{/privacy}","received_events_url":"https://api.github.com/users/batflyer/received_events","type":"User","site_admin":false},"body":"## New files\r\n\r\n* `.gitignore`: Added a fairly standard .gitignore for Python projects, with a few exceptions to make sure .DS_Store, and a possible rst README would not get pushed.\r\n* `tests/__init__.py`\r\n* `tests/requirements.txt`: requirements for doing unit tests, useful for code coverage and continuous integration.\r\n* `tests.py`: Mostly a demo for now, but this is a place where future unit tests can be added to verify that code is working as intended.\r\n\r\n## Summary of Changes\r\n\r\n**Compatibility:**\r\n\r\nChanges should make the code compatible for both Python 2 and Python 3. In summary, changes include standardizing print statements (using `__future__ ... print_function`), using `string.ascii_uppercase` in place of `string.uppercase`, and forcing dictionary keys to return as lists (in Python 2 they return lists by default, whereas in Python 3 they return as dictionary views).\r\n\r\n**Unit Testing:**\r\n\r\n`tests/` directory is based on the [Travis Continuous Integration](https://travis-ci.org/) requirements that I have used in the past. The two tests that are currently written are more in the vein of \"Hello World\" than actual unit tests for the software, but they can be extended further.\r\n\r\n## Closing Comments\r\n\r\nChanges were tested on the three testDomains (TicTacToe, XOR, and Insurance) with Python versions 3.6.3 and 2.7.14.\r\n\r\n```shell\r\n[batflyer@localhost RFGB]$ python --version\r\nPython 3.6.3 :: Anaconda, Inc.\r\n[batflyer@localhost RFGB]$ source activate python2\r\n(python2) [batflyer@localhost RFGB]$ python --version\r\nPython 2.7.14 :: Anaconda, Inc.\r\n```","created_at":"2017-12-19T18:35:49Z","updated_at":"2017-12-19T22:55:44Z","closed_at":"2017-12-19T22:55:44Z","merged_at":"2017-12-19T22:55:44Z","merge_commit_sha":"2bb01570203e3ff38969f34dfccdd7b228f3a310","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/kkroy36/RFGB/pulls/1/commits","review_comments_url":"https://api.github.com/repos/kkroy36/RFGB/pulls/1/comments","review_comment_url":"https://api.github.com/repos/kkroy36/RFGB/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kkroy36/RFGB/issues/1/comments","statuses_url":"https://api.github.com/repos/kkroy36/RFGB/statuses/3365c5375ea270b2a72fa51fedeac133c8686196","head":{"label":"batflyer:master","ref":"master","sha":"3365c5375ea270b2a72fa51fedeac133c8686196","user":{"login":"batflyer","id":11916674,"avatar_url":"https://avatars3.githubusercontent.com/u/11916674?v=4","gravatar_id":"","url":"https://api.github.com/users/batflyer","html_url":"https://github.com/batflyer","followers_url":"https://api.github.com/users/batflyer/followers","following_url":"https://api.github.com/users/batflyer/following{/other_user}","gists_url":"https://api.github.com/users/batflyer/gists{/gist_id}","starred_url":"https://api.github.com/users/batflyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/batflyer/subscriptions","organizations_url":"https://api.github.com/users/batflyer/orgs","repos_url":"https://api.github.com/users/batflyer/repos","events_url":"https://api.github.com/users/batflyer/events{/privacy}","received_events_url":"https://api.github.com/users/batflyer/received_events","type":"User","site_admin":false},"repo":{"id":114684714,"name":"RFGB","full_name":"batflyer/RFGB","owner":{"login":"batflyer","id":11916674,"avatar_url":"https://avatars3.githubusercontent.com/u/11916674?v=4","gravatar_id":"","url":"https://api.github.com/users/batflyer","html_url":"https://github.com/batflyer","followers_url":"https://api.github.com/users/batflyer/followers","following_url":"https://api.github.com/users/batflyer/following{/other_user}","gists_url":"https://api.github.com/users/batflyer/gists{/gist_id}","starred_url":"https://api.github.com/users/batflyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/batflyer/subscriptions","organizations_url":"https://api.github.com/users/batflyer/orgs","repos_url":"https://api.github.com/users/batflyer/repos","events_url":"https://api.github.com/users/batflyer/events{/privacy}","received_events_url":"https://api.github.com/users/batflyer/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/batflyer/RFGB","description":"Developing gradient boosting for relational data","fork":true,"url":"https://api.github.com/repos/batflyer/RFGB","forks_url":"https://api.github.com/repos/batflyer/RFGB/forks","keys_url":"https://api.github.com/repos/batflyer/RFGB/keys{/key_id}","collaborators_url":"https://api.github.com/repos/batflyer/RFGB/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/batflyer/RFGB/teams","hooks_url":"https://api.github.com/repos/batflyer/RFGB/hooks","issue_events_url":"https://api.github.com/repos/batflyer/RFGB/issues/events{/number}","events_url":"https://api.github.com/repos/batflyer/RFGB/events","assignees_url":"https://api.github.com/repos/batflyer/RFGB/assignees{/user}","branches_url":"https://api.github.com/repos/batflyer/RFGB/branches{/branch}","tags_url":"https://api.github.com/repos/batflyer/RFGB/tags","blobs_url":"https://api.github.com/repos/batflyer/RFGB/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/batflyer/RFGB/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/batflyer/RFGB/git/refs{/sha}","trees_url":"https://api.github.com/repos/batflyer/RFGB/git/trees{/sha}","statuses_url":"https://api.github.com/repos/batflyer/RFGB/statuses/{sha}","languages_url":"https://api.github.com/repos/batflyer/RFGB/languages","stargazers_url":"https://api.github.com/repos/batflyer/RFGB/stargazers","contributors_url":"https://api.github.com/repos/batflyer/RFGB/contributors","subscribers_url":"https://api.github.com/repos/batflyer/RFGB/subscribers","subscription_url":"https://api.github.com/repos/batflyer/RFGB/subscription","commits_url":"https://api.github.com/repos/batflyer/RFGB/commits{/sha}","git_commits_url":"https://api.github.com/repos/batflyer/RFGB/git/commits{/sha}","comments_url":"https://api.github.com/repos/batflyer/RFGB/comments{/number}","issue_comment_url":"https://api.github.com/repos/batflyer/RFGB/issues/comments{/number}","contents_url":"https://api.github.com/repos/batflyer/RFGB/contents/{+path}","compare_url":"https://api.github.com/repos/batflyer/RFGB/compare/{base}...{head}","merges_url":"https://api.github.com/repos/batflyer/RFGB/merges","archive_url":"https://api.github.com/repos/batflyer/RFGB/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/batflyer/RFGB/downloads","issues_url":"https://api.github.com/repos/batflyer/RFGB/issues{/number}","pulls_url":"https://api.github.com/repos/batflyer/RFGB/pulls{/number}","milestones_url":"https://api.github.com/repos/batflyer/RFGB/milestones{/number}","notifications_url":"https://api.github.com/repos/batflyer/RFGB/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/batflyer/RFGB/labels{/name}","releases_url":"https://api.github.com/repos/batflyer/RFGB/releases{/id}","deployments_url":"https://api.github.com/repos/batflyer/RFGB/deployments","created_at":"2017-12-18T20:29:15Z","updated_at":"2017-12-18T20:29:17Z","pushed_at":"2017-12-19T18:21:24Z","git_url":"git://github.com/batflyer/RFGB.git","ssh_url":"git@github.com:batflyer/RFGB.git","clone_url":"https://github.com/batflyer/RFGB.git","svn_url":"https://github.com/batflyer/RFGB","homepage":"","size":98,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kkroy36:master","ref":"master","sha":"211dfc3d1ca95b3a0755cdb2092ae41720b484e5","user":{"login":"kkroy36","id":10759670,"avatar_url":"https://avatars0.githubusercontent.com/u/10759670?v=4","gravatar_id":"","url":"https://api.github.com/users/kkroy36","html_url":"https://github.com/kkroy36","followers_url":"https://api.github.com/users/kkroy36/followers","following_url":"https://api.github.com/users/kkroy36/following{/other_user}","gists_url":"https://api.github.com/users/kkroy36/gists{/gist_id}","starred_url":"https://api.github.com/users/kkroy36/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kkroy36/subscriptions","organizations_url":"https://api.github.com/users/kkroy36/orgs","repos_url":"https://api.github.com/users/kkroy36/repos","events_url":"https://api.github.com/users/kkroy36/events{/privacy}","received_events_url":"https://api.github.com/users/kkroy36/received_events","type":"User","site_admin":false},"repo":{"id":114203861,"name":"RFGB","full_name":"kkroy36/RFGB","owner":{"login":"kkroy36","id":10759670,"avatar_url":"https://avatars0.githubusercontent.com/u/10759670?v=4","gravatar_id":"","url":"https://api.github.com/users/kkroy36","html_url":"https://github.com/kkroy36","followers_url":"https://api.github.com/users/kkroy36/followers","following_url":"https://api.github.com/users/kkroy36/following{/other_user}","gists_url":"https://api.github.com/users/kkroy36/gists{/gist_id}","starred_url":"https://api.github.com/users/kkroy36/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kkroy36/subscriptions","organizations_url":"https://api.github.com/users/kkroy36/orgs","repos_url":"https://api.github.com/users/kkroy36/repos","events_url":"https://api.github.com/users/kkroy36/events{/privacy}","received_events_url":"https://api.github.com/users/kkroy36/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kkroy36/RFGB","description":"Developing gradient boosting for relational data","fork":false,"url":"https://api.github.com/repos/kkroy36/RFGB","forks_url":"https://api.github.com/repos/kkroy36/RFGB/forks","keys_url":"https://api.github.com/repos/kkroy36/RFGB/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kkroy36/RFGB/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kkroy36/RFGB/teams","hooks_url":"https://api.github.com/repos/kkroy36/RFGB/hooks","issue_events_url":"https://api.github.com/repos/kkroy36/RFGB/issues/events{/number}","events_url":"https://api.github.com/repos/kkroy36/RFGB/events","assignees_url":"https://api.github.com/repos/kkroy36/RFGB/assignees{/user}","branches_url":"https://api.github.com/repos/kkroy36/RFGB/branches{/branch}","tags_url":"https://api.github.com/repos/kkroy36/RFGB/tags","blobs_url":"https://api.github.com/repos/kkroy36/RFGB/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kkroy36/RFGB/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kkroy36/RFGB/git/refs{/sha}","trees_url":"https://api.github.com/repos/kkroy36/RFGB/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kkroy36/RFGB/statuses/{sha}","languages_url":"https://api.github.com/repos/kkroy36/RFGB/languages","stargazers_url":"https://api.github.com/repos/kkroy36/RFGB/stargazers","contributors_url":"https://api.github.com/repos/kkroy36/RFGB/contributors","subscribers_url":"https://api.github.com/repos/kkroy36/RFGB/subscribers","subscription_url":"https://api.github.com/repos/kkroy36/RFGB/subscription","commits_url":"https://api.github.com/repos/kkroy36/RFGB/commits{/sha}","git_commits_url":"https://api.github.com/repos/kkroy36/RFGB/git/commits{/sha}","comments_url":"https://api.github.com/repos/kkroy36/RFGB/comments{/number}","issue_comment_url":"https://api.github.com/repos/kkroy36/RFGB/issues/comments{/number}","contents_url":"https://api.github.com/repos/kkroy36/RFGB/contents/{+path}","compare_url":"https://api.github.com/repos/kkroy36/RFGB/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kkroy36/RFGB/merges","archive_url":"https://api.github.com/repos/kkroy36/RFGB/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kkroy36/RFGB/downloads","issues_url":"https://api.github.com/repos/kkroy36/RFGB/issues{/number}","pulls_url":"https://api.github.com/repos/kkroy36/RFGB/pulls{/number}","milestones_url":"https://api.github.com/repos/kkroy36/RFGB/milestones{/number}","notifications_url":"https://api.github.com/repos/kkroy36/RFGB/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kkroy36/RFGB/labels{/name}","releases_url":"https://api.github.com/repos/kkroy36/RFGB/releases{/id}","deployments_url":"https://api.github.com/repos/kkroy36/RFGB/deployments","created_at":"2017-12-14T04:49:15Z","updated_at":"2017-12-18T04:20:03Z","pushed_at":"2017-12-19T22:55:44Z","git_url":"git://github.com/kkroy36/RFGB.git","ssh_url":"git@github.com:kkroy36/RFGB.git","clone_url":"https://github.com/kkroy36/RFGB.git","svn_url":"https://github.com/kkroy36/RFGB","homepage":"","size":83,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":1,"open_issues":1,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kkroy36/RFGB/pulls/1"},"html":{"href":"https://github.com/kkroy36/RFGB/pull/1"},"issue":{"href":"https://api.github.com/repos/kkroy36/RFGB/issues/1"},"comments":{"href":"https://api.github.com/repos/kkroy36/RFGB/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/kkroy36/RFGB/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/kkroy36/RFGB/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kkroy36/RFGB/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/kkroy36/RFGB/statuses/3365c5375ea270b2a72fa51fedeac133c8686196"}},"author_association":"NONE","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"kkroy36","id":10759670,"avatar_url":"https://avatars0.githubusercontent.com/u/10759670?v=4","gravatar_id":"","url":"https://api.github.com/users/kkroy36","html_url":"https://github.com/kkroy36","followers_url":"https://api.github.com/users/kkroy36/followers","following_url":"https://api.github.com/users/kkroy36/following{/other_user}","gists_url":"https://api.github.com/users/kkroy36/gists{/gist_id}","starred_url":"https://api.github.com/users/kkroy36/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kkroy36/subscriptions","organizations_url":"https://api.github.com/users/kkroy36/orgs","repos_url":"https://api.github.com/users/kkroy36/repos","events_url":"https://api.github.com/users/kkroy36/events{/privacy}","received_events_url":"https://api.github.com/users/kkroy36/received_events","type":"User","site_admin":false},"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":5,"additions":157,"deletions":19,"changed_files":8}}
{"actor":{"display_login":"kkroy36"}}