{"action":"created","comment":{"url":"https://api.github.com/repos/materialsproject/pymatgen/pulls/comments/201894517","pull_request_review_id":136485658,"id":201894517,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMTg5NDUxNw==","diff_hunk":"@@ -0,0 +1,1647 @@\n+# coding: utf-8\n+# !/usr/bin/env python\n+\n+from __future__ import division, unicode_literals\n+import numpy as np\n+from fractions import Fraction\n+from math import gcd, floor\n+from functools import reduce\n+from pymatgen import Structure, Lattice\n+from monty.fractions import lcm\n+from pymatgen.symmetry.analyzer import SpacegroupAnalyzer\n+\n+\n+class GBGenerator(object):\n+    \"\"\"\n+    This class provides two methods to generate grain boundaries (GBs) from bulk\n+    conventional cell (fcc, bcc can from the primitive cell), and works for Cubic,\n+    Tetragonal, Orthorhombic, Rhombohedral, and Hexagonal systems.\n+    The first one is to generate GBs from given parameters, which includes\n+    GB plane, rotation axis, rotation angle.\n+    The second one is to generate GBs from given transformation matrices for each\n+    grain.\n+\n+    This class works for any general GB, including both twist and tilt GBs.\n+    The three parameters, rotation axis, GB plane and rotation angle, are\n+    sufficient to identify one unique GB. While sometimes, users may not be able\n+    to tell what exactly rotation angle is but prefer to use sigma as an parameter,\n+    this class also provides the function that is able to return all possible\n+    rotation angles for a specific sigma value.\n+    The same sigma value (with rotation axis fixed) can correspond to\n+    multiple rotation angles.\n+    Users can use structure matcher in pymatgen to get rid of the redundant structures.\n+    \"\"\"\n+__author__ = \"Xiang-Guo Li\"\n+__copyright__ = \"Copyright 2018, The Materials Virtual Lab\"\n+__version__ = \"0.1\"\n+__maintainer__ = \"Xiang-Guo Li\"\n+__email__ = \"xil110@ucsd.edu\"\n+__date__ = \"7/10/18\"\n+\n+    def __init__(self, initial_structure):\n+\n+        \"\"\"\n+        initial_structure (Structure): Initial input structure. It can\n+               be conventional or primitive cell (primitive cell works for bcc and fcc).\n+               For fcc and bcc, using conventional cell can lead to a non-primitive\n+               grain boundary structure.\n+               This code supplies Cubic, Tetragonal, Orthorhombic, Rhombohedral, and\n+               Hexagonal systems.\n+               For Tetragonal and Hexagonal systems, keep the structure's third direction\n+               as c axis, the first two axis as a axis.\n+        \"\"\"\n+\n+        self.initial_structure = initial_structure\n+\n+    def gb_from_parameters(self, rotation_axis, rotation_angle, expand_times=4, vacuum_thickness=0.0,\n+                           normal=False, ratio=None, plane=None, tol=1.e-4):\n+\n+        \"\"\"\n+        Args:\n+           rotation_axis (list): Rotation axis of GB in the form of a list of integer\n+                e.g.: [1, 1, 0]\n+           rotation_angle (float, in unit of degree): rotation angle used to generate GB.\n+                Make sure the angle is accurate enough. You can use the enum* functions\n+                in this class to extract the accurate angle.\n+                e.g.: The rotation angle of sigma 3 twist GB with the rotation axis\n+                [1, 1, 1] and GB plane (1, 1, 1) can be 60.000000000 degree.\n+                If you do not know the rotation angle, but know the sigma value, we have\n+                provide the function get_rotation_angle_from_sigma which is able to return\n+                all the rotation angles of sigma value you provided.\n+           expand_times (int): The multiple times used to expand one unit grain to larger grain.\n+                This is used to tune the grain length of GB to warrant that the two GBs in one\n+                cell do not interact with each other. Default set to 4.\n+           vacuum_thickness (float): The thickness of vacuum that you want to insert between\n+                two grains of the GB. Default to 0.\n+            normal (logic):\n+                determine if need to require the c axis of top grain (first transformation matrix)\n+                perperdicular to the surface or not.\n+                default to false.\n+            ratio (list of integers):\n+                    lattice axial ratio.\n+                    For cubic system, ratio is not needed.\n+                    For tetragonal system, ratio = [mu, mv], list of two integers,\n+                    that is, mu/mv = c2/a2. If it is irrational, set it to none.\n+                    For orthorhombic system, ratio = [mu, lam, mv], list of three integers,\n+                    that is, mu:lam:mv = c2:b2:a2. If irrational for one axis, set it to None.\n+                    e.g. mu:lam:mv = c2,None,a2, means b2 is irrational.\n+                    For rhombohedral system, ratio = [mu, mv], list of two integers,\n+                    that is, mu/mv is the ratio of (1+2*cos(alpha))/cos(alpha).\n+                    If irrational, set it to None.\n+                    For hexagonal system, ratio = [mu, mv], list of two integers,\n+                    that is, mu/mv = c2/a2. If it is irrational, set it to none.\n+            plane (list): Grain boundary plane in the form of a list of integers\n+                e.g.: [1, 2, 3]. If none, we set it as twist GB. The plane will be perpendicular\n+                to the rotation axis.\n+            tol (float): tolerance to determine the type of inital structure.\n+        Returns:\n+           Grain boundary structure (structure object).\n+               \"\"\"\n+        # angle tolerance should be looser.\n+        tol_angle = 100 * tol\n+        # if the initial structure is primitive cell in cubic system,\n+        # calculate the transformation matrix from its conventional cell\n+        # to primitive cell, basically for bcc and fcc systems.\n+        init_str = self.initial_structure\n+        alpha, beta, gamma = init_str.lattice.angles\n+        a, b, c = init_str.lattice.abc\n+        analyzer = SpacegroupAnalyzer(init_str)\n+        convention_cell = analyzer.get_conventional_standard_structure()\n+        vol_ratio = init_str.volume / convention_cell.volume\n+        # bcc primitive cell, belong to cubic system\n+        if abs(vol_ratio - 0.5) < tol * vol_ratio:\n+            trans_cry = np.array([[0.5, 0.5, -0.5], [-0.5, 0.5, 0.5], [0.5, -0.5, 0.5]])\n+            lat_type = 'c'\n+            print('Make sure this is for cubic system with bcc primitive cell')\n+        # fcc primitive cell, belong to cubic system\n+        elif abs(vol_ratio - 0.25) < tol * vol_ratio:\n+            trans_cry = np.array([[0.5, 0.5, 0], [0, 0.5, 0.5], [0.5, 0, 0.5]])\n+            lat_type = 'c'\n+            print('Make sure this is for cubic system with fcc primitive cell')\n+        else:\n+            trans_cry = np.eye(3)\n+            if abs(alpha - 90) < tol_angle and (abs(beta - 90) < tol_angle) and \\\n+                    (abs(gamma - 90) < tol_angle):\n+                if abs(a - b) < tol and (abs(a - c) < tol):\n+                    lat_type = 'c'\n+                    print('Make sure this is for cubic system with conventional cell')\n+                elif abs(a - b) < tol:\n+                    lat_type = 't'\n+                    print('Make sure this is for tetragonal system')\n+                    if ratio is None:\n+                        print('Make sure this is for irrational c2/a2')\n+                    elif len(ratio) != 2:\n+                        raise RuntimeError('Tetragonal system needs correct c2/a2 ratio')\n+                else:\n+                    lat_type = 'o'\n+                    print('Make sure this is for orthorhombic system')\n+                    if ratio is None:\n+                        raise RuntimeError('CSL donot exist if all axial ratios are irrational'\n+                                           'for orthorhombic system')\n+                    elif len(ratio) != 3:\n+                        raise RuntimeError('Orthorhombic system needs correct c2:b2:a2 ratio')\n+            elif abs(alpha - 90) < tol_angle and ((beta - 90) < tol_angle) and \\\n+                    (abs(gamma - 120) < tol_angle or abs(gamma - 60) < tol_angle) and \\\n+                            abs(a - b) < tol:\n+                lat_type = 'h'\n+                print('Make sure this is for hexagonal system')\n+                if ratio is None:\n+                    print('Make sure this is for irrational c2/a2')\n+                elif len(ratio) != 2:\n+                    raise RuntimeError('Hexagonal system needs correct c2/a2 ratio')\n+            elif abs(alpha - beta) < tol_angle and ((alpha - gamma) < tol_angle) and \\\n+                    (abs(a - b) < tol) and abs(a - c) < tol:\n+                lat_type = 'r'\n+                print('Make sure this is for rhombohedral system')\n+                if ratio is None:\n+                    print('Make sure this is for irrational (1+2*cos(alpha)/cos(alpha) ratio')\n+                elif len(ratio) != 2:\n+                    raise RuntimeError('Rhombohedral system needs correct '\n+                                       '(1+2*cos(alpha)/cos(alpha) ratio')\n+            else:\n+                raise RuntimeError('Lattice type not implemented. This code works for cubic, '\n+                                   'tetragonal, orthorhombic, rhombehedral, hexagonal systems')\n+\n+        t1, t2 = self.get_trans_mat(r_axis=rotation_axis, angle=rotation_angle, normal=normal,\n+                                    trans_cry=trans_cry, lat_type=lat_type, ratio=ratio, surface=plane)\n+\n+        gb_with_vac = self.gb_from_matrices(top_grain_matrix=t1,\n+                                            bottom_grain_matrix=t2,\n+                                            expand_times=expand_times,\n+                                            vacuum_thickness=vacuum_thickness)\n+\n+        return gb_with_vac\n+\n+    def gb_from_matrices(self, top_grain_matrix, bottom_grain_matrix, expand_times, vacuum_thickness):\n+\n+        \"\"\"\n+        This function is used to generate GB structures from the given transformation matrices.\n+        The idea here is to use a generic descriptor for a specific type of GB define by\n+        spacegroup and the matrix only. This descriptor will then work for any material of\n+        a particular spacegroup.\n+        E.g. for sigma 5 (001) fcc GB, we know beforehand matrix to describe the two\n+        grains of this GB, which can be used to generate GB structure for all kinds of systems\n+        with fcc lattice. To be used for the high throughput effort.\n+\n+        Args:\n+           top_grain_matrix (3 by 3 array): The transformation matrix used to operate on top grain.\n+           bottom_grain_matrix (3 by 3 array): The transformation matrix used to operate on bottom grain.\n+           expand_times (int): The multiple times used to expand one unit grain to larger grain.\n+               This is used to tune the grain length of GB to warrant that the two GBs in one cell do\n+               not interact with each other.\n+           vacuum_thickness (float): The thickness of vacuum that you want to insert between\n+                two grains of the GB.\n+        Returns:\n+           Grain boundary structure.\n+        \"\"\"\n+\n+        parent_structure = self.initial_structure.copy()\n+        # top grain\n+        top_grain = fix_pbc(parent_structure * top_grain_matrix)\n+        top_grain_init = top_grain.lattice.matrix\n+        top_grain.make_supercell([1, 1, expand_times])\n+        top_grain = fix_pbc(top_grain)\n+\n+        # bottom grain, using top grain's lattice matrix\n+        bottom_grain = fix_pbc(parent_structure * bottom_grain_matrix, top_grain_init)\n+        bottom_grain.make_supercell([1, 1, expand_times])\n+        bottom_grain = fix_pbc(bottom_grain, top_grain.lattice.matrix)\n+\n+        # construct all species\n+        all_species = []\n+        all_species.extend([site.specie for site in bottom_grain])\n+        all_species.extend([site.specie for site in top_grain])\n+\n+        half_lattice = top_grain.lattice\n+        # calculate translation vector, perpendicular to the plane\n+        normal_v_plane = np.cross(half_lattice.matrix[0], half_lattice.matrix[1])\n+        unit_normal_v = normal_v_plane / np.linalg.norm(normal_v_plane)\n+        translation_v = unit_normal_v * vacuum_thickness\n+\n+        # construct the final lattice\n+        whole_matrix_no_vac = half_lattice.matrix\n+        whole_matrix_no_vac[2] = half_lattice.matrix[2] * 2\n+        whole_matrix_with_vac = whole_matrix_no_vac.copy()\n+        whole_matrix_with_vac[2] = whole_matrix_no_vac[2] + translation_v * 2\n+        whole_lat = Lattice(whole_matrix_with_vac)\n+\n+        # construct the coords, move top grain with translation_v\n+        all_coords = []\n+        for site in bottom_grain:\n+            all_coords.append(site.coords)\n+        for site in top_grain:","path":"pymatgen/core/grain_boundary_generator.py","position":null,"original_position":232,"commit_id":"0d27ddf6f2acaffbb532d381dc46fdfca9e61208","original_commit_id":"ecdf9fd0bb1810ed16e741acbf3fbb53b8488e3e","user":{"login":"Tinaatucsd","id":22058433,"node_id":"MDQ6VXNlcjIyMDU4NDMz","avatar_url":"https://avatars1.githubusercontent.com/u/22058433?v=4","gravatar_id":"","url":"https://api.github.com/users/Tinaatucsd","html_url":"https://github.com/Tinaatucsd","followers_url":"https://api.github.com/users/Tinaatucsd/followers","following_url":"https://api.github.com/users/Tinaatucsd/following{/other_user}","gists_url":"https://api.github.com/users/Tinaatucsd/gists{/gist_id}","starred_url":"https://api.github.com/users/Tinaatucsd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tinaatucsd/subscriptions","organizations_url":"https://api.github.com/users/Tinaatucsd/orgs","repos_url":"https://api.github.com/users/Tinaatucsd/repos","events_url":"https://api.github.com/users/Tinaatucsd/events{/privacy}","received_events_url":"https://api.github.com/users/Tinaatucsd/received_events","type":"User","site_admin":false},"body":"Hi Matt, that's a pretty visualization~~ I guess the atoms with yellow and purple colors are the coincidence sites? Do you think using one color for all the coincidence sites would be easier for the users to locate these coincidence sites? For me, the first figure is actually more obvious to recognize these coincidence sites, since they line up across two grains. Thank you for your efficient work!","created_at":"2018-07-12T02:44:29Z","updated_at":"2018-07-12T02:44:30Z","html_url":"https://github.com/materialsproject/pymatgen/pull/1200#discussion_r201894517","pull_request_url":"https://api.github.com/repos/materialsproject/pymatgen/pulls/1200","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/materialsproject/pymatgen/pulls/comments/201894517"},"html":{"href":"https://github.com/materialsproject/pymatgen/pull/1200#discussion_r201894517"},"pull_request":{"href":"https://api.github.com/repos/materialsproject/pymatgen/pulls/1200"}},"in_reply_to_id":201561657},"pull_request":{"url":"https://api.github.com/repos/materialsproject/pymatgen/pulls/1200","id":200550846,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAwNTUwODQ2","html_url":"https://github.com/materialsproject/pymatgen/pull/1200","diff_url":"https://github.com/materialsproject/pymatgen/pull/1200.diff","patch_url":"https://github.com/materialsproject/pymatgen/pull/1200.patch","issue_url":"https://api.github.com/repos/materialsproject/pymatgen/issues/1200","number":1200,"state":"open","locked":false,"title":"Add grain boundary generator","user":{"login":"ucsdlxg","id":29713353,"node_id":"MDQ6VXNlcjI5NzEzMzUz","avatar_url":"https://avatars1.githubusercontent.com/u/29713353?v=4","gravatar_id":"","url":"https://api.github.com/users/ucsdlxg","html_url":"https://github.com/ucsdlxg","followers_url":"https://api.github.com/users/ucsdlxg/followers","following_url":"https://api.github.com/users/ucsdlxg/following{/other_user}","gists_url":"https://api.github.com/users/ucsdlxg/gists{/gist_id}","starred_url":"https://api.github.com/users/ucsdlxg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ucsdlxg/subscriptions","organizations_url":"https://api.github.com/users/ucsdlxg/orgs","repos_url":"https://api.github.com/users/ucsdlxg/repos","events_url":"https://api.github.com/users/ucsdlxg/events{/privacy}","received_events_url":"https://api.github.com/users/ucsdlxg/received_events","type":"User","site_admin":false},"body":"## Summary\r\n\r\nThis generator provides two methods to generate grain boundaries (GBs) from bulk conventional cell (fcc, bcc can from the primitive cell), and works for Cubic, Tetragonal, Orthorhombic, Rhombohedral, and Hexagonal systems. The first one is to generate GBs from given parameters, which includes\r\nGB plane, rotation axis, rotation angle. The second one is to generate GBs from given transformation matrices for each grain. It works for any general GB, including both twist, tilt GBs, etc.\r\n\r\nIt also contains functions that can generate all possible sigma values and from sigma value to generate rotation angles needed for the GB generator.","created_at":"2018-07-10T23:33:25Z","updated_at":"2018-07-12T02:44:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"72affdff5032277f90888e670582f4140f5ba4c8","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/materialsproject/pymatgen/pulls/1200/commits","review_comments_url":"https://api.github.com/repos/materialsproject/pymatgen/pulls/1200/comments","review_comment_url":"https://api.github.com/repos/materialsproject/pymatgen/pulls/comments{/number}","comments_url":"https://api.github.com/repos/materialsproject/pymatgen/issues/1200/comments","statuses_url":"https://api.github.com/repos/materialsproject/pymatgen/statuses/0d27ddf6f2acaffbb532d381dc46fdfca9e61208","head":{"label":"ucsdlxg:master","ref":"master","sha":"0d27ddf6f2acaffbb532d381dc46fdfca9e61208","user":{"login":"ucsdlxg","id":29713353,"node_id":"MDQ6VXNlcjI5NzEzMzUz","avatar_url":"https://avatars1.githubusercontent.com/u/29713353?v=4","gravatar_id":"","url":"https://api.github.com/users/ucsdlxg","html_url":"https://github.com/ucsdlxg","followers_url":"https://api.github.com/users/ucsdlxg/followers","following_url":"https://api.github.com/users/ucsdlxg/following{/other_user}","gists_url":"https://api.github.com/users/ucsdlxg/gists{/gist_id}","starred_url":"https://api.github.com/users/ucsdlxg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ucsdlxg/subscriptions","organizations_url":"https://api.github.com/users/ucsdlxg/orgs","repos_url":"https://api.github.com/users/ucsdlxg/repos","events_url":"https://api.github.com/users/ucsdlxg/events{/privacy}","received_events_url":"https://api.github.com/users/ucsdlxg/received_events","type":"User","site_admin":false},"repo":{"id":140496692,"node_id":"MDEwOlJlcG9zaXRvcnkxNDA0OTY2OTI=","name":"pymatgen","full_name":"ucsdlxg/pymatgen","owner":{"login":"ucsdlxg","id":29713353,"node_id":"MDQ6VXNlcjI5NzEzMzUz","avatar_url":"https://avatars1.githubusercontent.com/u/29713353?v=4","gravatar_id":"","url":"https://api.github.com/users/ucsdlxg","html_url":"https://github.com/ucsdlxg","followers_url":"https://api.github.com/users/ucsdlxg/followers","following_url":"https://api.github.com/users/ucsdlxg/following{/other_user}","gists_url":"https://api.github.com/users/ucsdlxg/gists{/gist_id}","starred_url":"https://api.github.com/users/ucsdlxg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ucsdlxg/subscriptions","organizations_url":"https://api.github.com/users/ucsdlxg/orgs","repos_url":"https://api.github.com/users/ucsdlxg/repos","events_url":"https://api.github.com/users/ucsdlxg/events{/privacy}","received_events_url":"https://api.github.com/users/ucsdlxg/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ucsdlxg/pymatgen","description":"Python Materials Genomics (pymatgen) is a robust materials analysis code that defines core object representations for structures and molecules with support for many electronic structure codes. It is currently the core analysis code powering the Materials Project.","fork":true,"url":"https://api.github.com/repos/ucsdlxg/pymatgen","forks_url":"https://api.github.com/repos/ucsdlxg/pymatgen/forks","keys_url":"https://api.github.com/repos/ucsdlxg/pymatgen/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ucsdlxg/pymatgen/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ucsdlxg/pymatgen/teams","hooks_url":"https://api.github.com/repos/ucsdlxg/pymatgen/hooks","issue_events_url":"https://api.github.com/repos/ucsdlxg/pymatgen/issues/events{/number}","events_url":"https://api.github.com/repos/ucsdlxg/pymatgen/events","assignees_url":"https://api.github.com/repos/ucsdlxg/pymatgen/assignees{/user}","branches_url":"https://api.github.com/repos/ucsdlxg/pymatgen/branches{/branch}","tags_url":"https://api.github.com/repos/ucsdlxg/pymatgen/tags","blobs_url":"https://api.github.com/repos/ucsdlxg/pymatgen/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ucsdlxg/pymatgen/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ucsdlxg/pymatgen/git/refs{/sha}","trees_url":"https://api.github.com/repos/ucsdlxg/pymatgen/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ucsdlxg/pymatgen/statuses/{sha}","languages_url":"https://api.github.com/repos/ucsdlxg/pymatgen/languages","stargazers_url":"https://api.github.com/repos/ucsdlxg/pymatgen/stargazers","contributors_url":"https://api.github.com/repos/ucsdlxg/pymatgen/contributors","subscribers_url":"https://api.github.com/repos/ucsdlxg/pymatgen/subscribers","subscription_url":"https://api.github.com/repos/ucsdlxg/pymatgen/subscription","commits_url":"https://api.github.com/repos/ucsdlxg/pymatgen/commits{/sha}","git_commits_url":"https://api.github.com/repos/ucsdlxg/pymatgen/git/commits{/sha}","comments_url":"https://api.github.com/repos/ucsdlxg/pymatgen/comments{/number}","issue_comment_url":"https://api.github.com/repos/ucsdlxg/pymatgen/issues/comments{/number}","contents_url":"https://api.github.com/repos/ucsdlxg/pymatgen/contents/{+path}","compare_url":"https://api.github.com/repos/ucsdlxg/pymatgen/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ucsdlxg/pymatgen/merges","archive_url":"https://api.github.com/repos/ucsdlxg/pymatgen/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ucsdlxg/pymatgen/downloads","issues_url":"https://api.github.com/repos/ucsdlxg/pymatgen/issues{/number}","pulls_url":"https://api.github.com/repos/ucsdlxg/pymatgen/pulls{/number}","milestones_url":"https://api.github.com/repos/ucsdlxg/pymatgen/milestones{/number}","notifications_url":"https://api.github.com/repos/ucsdlxg/pymatgen/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ucsdlxg/pymatgen/labels{/name}","releases_url":"https://api.github.com/repos/ucsdlxg/pymatgen/releases{/id}","deployments_url":"https://api.github.com/repos/ucsdlxg/pymatgen/deployments","created_at":"2018-07-10T23:13:20Z","updated_at":"2018-07-12T00:00:04Z","pushed_at":"2018-07-12T00:00:01Z","git_url":"git://github.com/ucsdlxg/pymatgen.git","ssh_url":"git@github.com:ucsdlxg/pymatgen.git","clone_url":"https://github.com/ucsdlxg/pymatgen.git","svn_url":"https://github.com/ucsdlxg/pymatgen","homepage":"http://www.pymatgen.org","size":467546,"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":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"materialsproject:master","ref":"master","sha":"74392faa826c4fe98713817b9c6556c0641a908a","user":{"login":"materialsproject","id":867057,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg2NzA1Nw==","avatar_url":"https://avatars3.githubusercontent.com/u/867057?v=4","gravatar_id":"","url":"https://api.github.com/users/materialsproject","html_url":"https://github.com/materialsproject","followers_url":"https://api.github.com/users/materialsproject/followers","following_url":"https://api.github.com/users/materialsproject/following{/other_user}","gists_url":"https://api.github.com/users/materialsproject/gists{/gist_id}","starred_url":"https://api.github.com/users/materialsproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/materialsproject/subscriptions","organizations_url":"https://api.github.com/users/materialsproject/orgs","repos_url":"https://api.github.com/users/materialsproject/repos","events_url":"https://api.github.com/users/materialsproject/events{/privacy}","received_events_url":"https://api.github.com/users/materialsproject/received_events","type":"Organization","site_admin":false},"repo":{"id":2629302,"node_id":"MDEwOlJlcG9zaXRvcnkyNjI5MzAy","name":"pymatgen","full_name":"materialsproject/pymatgen","owner":{"login":"materialsproject","id":867057,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg2NzA1Nw==","avatar_url":"https://avatars3.githubusercontent.com/u/867057?v=4","gravatar_id":"","url":"https://api.github.com/users/materialsproject","html_url":"https://github.com/materialsproject","followers_url":"https://api.github.com/users/materialsproject/followers","following_url":"https://api.github.com/users/materialsproject/following{/other_user}","gists_url":"https://api.github.com/users/materialsproject/gists{/gist_id}","starred_url":"https://api.github.com/users/materialsproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/materialsproject/subscriptions","organizations_url":"https://api.github.com/users/materialsproject/orgs","repos_url":"https://api.github.com/users/materialsproject/repos","events_url":"https://api.github.com/users/materialsproject/events{/privacy}","received_events_url":"https://api.github.com/users/materialsproject/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/materialsproject/pymatgen","description":"Python Materials Genomics (pymatgen) is a robust materials analysis code that defines core object representations for structures and molecules with support for many electronic structure codes. It is currently the core analysis code powering the Materials Project.","fork":false,"url":"https://api.github.com/repos/materialsproject/pymatgen","forks_url":"https://api.github.com/repos/materialsproject/pymatgen/forks","keys_url":"https://api.github.com/repos/materialsproject/pymatgen/keys{/key_id}","collaborators_url":"https://api.github.com/repos/materialsproject/pymatgen/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/materialsproject/pymatgen/teams","hooks_url":"https://api.github.com/repos/materialsproject/pymatgen/hooks","issue_events_url":"https://api.github.com/repos/materialsproject/pymatgen/issues/events{/number}","events_url":"https://api.github.com/repos/materialsproject/pymatgen/events","assignees_url":"https://api.github.com/repos/materialsproject/pymatgen/assignees{/user}","branches_url":"https://api.github.com/repos/materialsproject/pymatgen/branches{/branch}","tags_url":"https://api.github.com/repos/materialsproject/pymatgen/tags","blobs_url":"https://api.github.com/repos/materialsproject/pymatgen/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/materialsproject/pymatgen/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/materialsproject/pymatgen/git/refs{/sha}","trees_url":"https://api.github.com/repos/materialsproject/pymatgen/git/trees{/sha}","statuses_url":"https://api.github.com/repos/materialsproject/pymatgen/statuses/{sha}","languages_url":"https://api.github.com/repos/materialsproject/pymatgen/languages","stargazers_url":"https://api.github.com/repos/materialsproject/pymatgen/stargazers","contributors_url":"https://api.github.com/repos/materialsproject/pymatgen/contributors","subscribers_url":"https://api.github.com/repos/materialsproject/pymatgen/subscribers","subscription_url":"https://api.github.com/repos/materialsproject/pymatgen/subscription","commits_url":"https://api.github.com/repos/materialsproject/pymatgen/commits{/sha}","git_commits_url":"https://api.github.com/repos/materialsproject/pymatgen/git/commits{/sha}","comments_url":"https://api.github.com/repos/materialsproject/pymatgen/comments{/number}","issue_comment_url":"https://api.github.com/repos/materialsproject/pymatgen/issues/comments{/number}","contents_url":"https://api.github.com/repos/materialsproject/pymatgen/contents/{+path}","compare_url":"https://api.github.com/repos/materialsproject/pymatgen/compare/{base}...{head}","merges_url":"https://api.github.com/repos/materialsproject/pymatgen/merges","archive_url":"https://api.github.com/repos/materialsproject/pymatgen/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/materialsproject/pymatgen/downloads","issues_url":"https://api.github.com/repos/materialsproject/pymatgen/issues{/number}","pulls_url":"https://api.github.com/repos/materialsproject/pymatgen/pulls{/number}","milestones_url":"https://api.github.com/repos/materialsproject/pymatgen/milestones{/number}","notifications_url":"https://api.github.com/repos/materialsproject/pymatgen/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/materialsproject/pymatgen/labels{/name}","releases_url":"https://api.github.com/repos/materialsproject/pymatgen/releases{/id}","deployments_url":"https://api.github.com/repos/materialsproject/pymatgen/deployments","created_at":"2011-10-23T04:10:39Z","updated_at":"2018-07-11T01:28:15Z","pushed_at":"2018-07-12T00:00:02Z","git_url":"git://github.com/materialsproject/pymatgen.git","ssh_url":"git@github.com:materialsproject/pymatgen.git","clone_url":"https://github.com/materialsproject/pymatgen.git","svn_url":"https://github.com/materialsproject/pymatgen","homepage":"http://www.pymatgen.org","size":467577,"stargazers_count":281,"watchers_count":281,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":278,"mirror_url":null,"archived":false,"open_issues_count":51,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":278,"open_issues":51,"watchers":281,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/materialsproject/pymatgen/pulls/1200"},"html":{"href":"https://github.com/materialsproject/pymatgen/pull/1200"},"issue":{"href":"https://api.github.com/repos/materialsproject/pymatgen/issues/1200"},"comments":{"href":"https://api.github.com/repos/materialsproject/pymatgen/issues/1200/comments"},"review_comments":{"href":"https://api.github.com/repos/materialsproject/pymatgen/pulls/1200/comments"},"review_comment":{"href":"https://api.github.com/repos/materialsproject/pymatgen/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/materialsproject/pymatgen/pulls/1200/commits"},"statuses":{"href":"https://api.github.com/repos/materialsproject/pymatgen/statuses/0d27ddf6f2acaffbb532d381dc46fdfca9e61208"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Tinaatucsd"}}