{"action":"created","comment":{"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/comments/177727002","pull_request_review_id":107648579,"id":177727002,"diff_hunk":"@@ -25,417 +49,155 @@ def __init__(self, name, ptype, unit, default, value=None, dtype=None):\n             The type of parameter object, should be one of 'compile' or 'run'\n             to mark parameter as PIConGPU run/compile-time parameter\n         unit: string\n-            The measurement unit of this parameter\n-        default: float\n-            The default value for this parameter used when no 'value' parameter\n-            is passed.\n-        value: float (optional)\n-            The value of the parameter object. If it is not provided, the value\n-            of the 'default' argument is used.\n-        dtype: type (optional)\n-            The data type of the parameter value. If it is not provided, the\n-            type of the 'default' argument is used.\n+            The measurement unit of this parameter as shown on the UI side.\n+            Implicitely we assume the pic unit is SI. If this is not possible,\n+            the converter needs to translate those scales.\n+        default: float, int or string\n+            The default value for this parameter (on the UI scale) used when\\\n+            no 'values' or 'range' parameter is passed.\n+        values: list\n+            list of discrete options for the parameter as shown on UI side.\n+            Only one of the attributes range/value can be given.\n+        range: tuple\n+            start and stop value for the selectable range on UI side.\n+            Only one of the attributes range/value can be given.\n+        label: string [optional]\n+            Overwrite the name for UI\n+        pic_to_SI: callable, e.g. lambda function\n+            Specifies how to transform a value on the pic scale to an\\\n+            appropriate SI value. Usually given via a Converter object.\n+        pic_from_SI: callable, e.g. lambda function\n+            Specifies how to transform an SI value to the internal pic scale.\n         \"\"\"\n+\n         self.name = name\n         self.type = ptype\n-        self.unit = unit\n+        self.unit = ureg.parse_units(unit)\n+        self.base_unit = ureg.get_base_units(self.unit)[1]\n         self.default = default\n \n-        self.dtype = dtype if dtype is not None else type(default)\n-        # use the dtype to cast the value to the correct type\n-        self.value = self.dtype(\n-            value) if value is not None else self.dtype(default)\n-\n-    def as_dict(self):\n-        \"\"\"\n-        Convert Parameter object into a plain dictionary\n-\n-        Returns\n-        --------\n-        A dictionary with the member variables as (key, value) pairs.\n-        \"\"\"\n-        d = dict(\n-            cls=type(self).__name__,\n-            name=self.name,\n-            type=self.type,\n-            unit=self.unit,\n-            default=self.default,\n-            value=self.value,\n-            dtype=self.dtype.__name__)\n-\n-        return d\n-\n-    def __str__(self):\n-        \"\"\"\n-        Enable use of print() function with Parameter objects.\n-\n-        Returns\n-        -------\n-        A string representation of the Parameter objects member values.\n-        \"\"\"\n-        return self.as_dict().__str__()\n-\n-    def macro_name(self):\n-        \"\"\"\n-        Returns\n-        -------\n-        A string containing the objects name as it will be used within cmake\n-        defines and cpp headers.\n-        \"\"\"\n-        return \"PARAM_\" + self.name.upper()\n-\n-    def dict_name(self):\n-        \"\"\"\n-        Returns\n-        -------\n-        A string containing the objects name in upper case.\n-        \"\"\"\n-        return self.name.upper()\n-\n-    def new_with_default(self):\n-        \"\"\"\n-        Returns\n-        -------\n-        A new Parameter object with the same name, type and unit but whose\n-        value is set to the default value.\n-        \"\"\"\n-        return Parameter(self.name, self.type, self.unit, self.default)\n-\n-\n-class UiParameter(Parameter):\n-    \"\"\"\n-    Parameter that can be displayed and modified through slider widgets\n-    in jupyter notebooks.\n-    \"\"\"\n-\n-    def __init__(self, name, ptype, unit, default, slider_min, slider_max,\n-                 slider_step, label=None, formatter=None,\n-                 value=None, dtype=None):\n-        \"\"\"\n-        Parameters\n-        ----------\n-        In addition to base class parameters:\n-\n-        slider_min: float\n-            The minimal value of the slider widget\n-        slider_max: float\n-            The maximal value of the slider widget\n-        slider_step: float\n-            The stepsize when adjusting the slider\n-        label: string [optional]\n-            Overwrite the name for UI\n-        formatter: function or lambda of form f(x) -> string [optional]\n-            representation of the current value for UI\n-\n-        \"\"\"\n-        Parameter.__init__(self, name, ptype, unit, default, value, dtype)\n-\n         # for slider widget creation\n-        self.min = slider_min\n-        self.max = slider_max\n-        self.step = slider_step\n-\n-        if label is None:\n-            self.label = name\n-        else:\n-            self.label = label\n-        if formatter is None:\n-            self.formatter = lambda x: str(x)\n-        else:\n-            self.formatter = formatter\n-\n-        # explicitely call the set_value function to handle\n-        # scaling and transformation in derived classes\n-        # already on initialization. if this was missing, then\n-        # parameter values would possibly be on the wrong scale\n-        self.set_value(self.value)\n-\n-    def convert_value_to_internal_scale(self, x):\n-        \"\"\"\n-        Computes for a given value x its corresponding\n-        representation on the 'internal scale' of the parameter\n-        after taking into account the possible transformation operation.\n-        For UiParameters it just returns the identity, but derived\n-        classes might perform e.g. scaling or exponential transformation\n-        to convert values to the internal scale of the parameters\n-        for usage within picongpu.\n-\n-        Parameters\n-        ----------\n-        x: float\n-            The value whose corresponding representation\n-            needs to be computed.\n-\n-        Returns\n-        -------\n-        The value cast to the parameters dtype\n-        \"\"\"\n-\n-        return self.dtype(x)\n-\n-    def set_value(self, x):\n-        \"\"\"\n-        Updates the objects 'value' attribute to (a possibly transformed)\n-        internal representation\n+        self.label = label or name\n+\n+        self.values = values\n+        self.range = range\n+        # either set range or values\n+        if values is not None and range is not None:\n+            raise ValueError(\"Can only set either 'values' or 'range'!\")\n+        if values is None and range is None:\n+            # raise ValueError(\"Need either 'values' or 'range' parameter!\")\n+            self.values = [self.default]\n+            print(\"WARNING: Neither 'values' nor 'range' was given, setting\"\n+                  \" 'values' to \", self.values)\n+        if values is not None:\n+            if not isinstance(values, collections.Iterable):\n+                self.values = [values]\n+            if not self.values:\n+                self.values = [self.default]\n+                print(\"WARNING: Values attribute can not be an empty\\\n+                    iterable! Settting values to\", self.values)\n+\n+        if range is not None:\n+            if len(range) != 2:\n+                raise ValueError(\"Range needs to be a tuple of length 2!\")\n+            else:\n+                self.range = tuple(range)\n+\n+        self.pic_to_SI = pic_to_SI\n+        self.pic_from_SI = pic_from_SI\n+\n+    def _check_input(self, vals):\n+        \"\"\"\n+        For values that are assumed to be on the UI scale (i.e. with unit =\n+        self.unit), checks whether they are in the allowed range or the\n+        allowed discrete values.\n+        Raises a ValueError if a value value outside the range is detected.\n \n         Parameters\n         ----------\n-        x: float\n-            The current value of the slider widget\n-\n-        Returns\n-        -------\n-        A float containing the updated 'value' attribute. Is printed\n-        below the slider-widget for user-feedback.\n-        \"\"\"\n-\n-        self.value = self.convert_value_to_internal_scale(x)\n-        return self.formatter(self.value)\n-\n-    def on_value_change(self, change):\n-        \"\"\"\n-        Callback function used with observe() function of ipython widgets.\n-        Just a wrapper of the set_value function.\n+        vals: float or list of floats\n+            values on the parameters UI scale which will be checked.\n \n-        Parameters\n-        ----------\n-        change: dict\n-                  As passed by the Ipython widgets framework.\n \n-        Returns\n-        -------\n-        Whatever the set_value function returns.\n         \"\"\"\n+        if self.values is not None:\n+            # check for valid values\n+            res = all([v in self.values for v in vals])\n+            if not res:\n+                raise ValueError(\n+                    \"Invalid values found! Values should be elements of\\\n+                     self.values!\")\n+        else:\n+            # check for valid range\n+            res = all([self.range[0] <= v <= self.range[1] for v in vals])\n+            if not res:\n+                raise ValueError(\"Invalid values found! Values should be\\","path":"lib/python/picongpu/input/parameters.py","position":302,"original_position":302,"commit_id":"bce0ca6e5bcf93e70baab6ab9f557626a668edb3","original_commit_id":"bce0ca6e5bcf93e70baab6ab9f557626a668edb3","user":{"login":"ax3l","id":1353258,"avatar_url":"https://avatars3.githubusercontent.com/u/1353258?v=4","gravatar_id":"","url":"https://api.github.com/users/ax3l","html_url":"https://github.com/ax3l","followers_url":"https://api.github.com/users/ax3l/followers","following_url":"https://api.github.com/users/ax3l/following{/other_user}","gists_url":"https://api.github.com/users/ax3l/gists{/gist_id}","starred_url":"https://api.github.com/users/ax3l/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ax3l/subscriptions","organizations_url":"https://api.github.com/users/ax3l/orgs","repos_url":"https://api.github.com/users/ax3l/repos","events_url":"https://api.github.com/users/ax3l/events{/privacy}","received_events_url":"https://api.github.com/users/ax3l/received_events","type":"User","site_admin":false},"body":"see above","created_at":"2018-03-28T12:11:42Z","updated_at":"2018-03-28T12:12:54Z","html_url":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/2550#discussion_r177727002","pull_request_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/2550","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/comments/177727002"},"html":{"href":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/2550#discussion_r177727002"},"pull_request":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/2550"}}},"pull_request":{"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/2550","id":174712294,"html_url":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/2550","diff_url":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/2550.diff","patch_url":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/2550.patch","issue_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/2550","number":2550,"state":"open","locked":false,"title":"Simpler Python Parameter class","user":{"login":"codingS3b","id":31093529,"avatar_url":"https://avatars1.githubusercontent.com/u/31093529?v=4","gravatar_id":"","url":"https://api.github.com/users/codingS3b","html_url":"https://github.com/codingS3b","followers_url":"https://api.github.com/users/codingS3b/followers","following_url":"https://api.github.com/users/codingS3b/following{/other_user}","gists_url":"https://api.github.com/users/codingS3b/gists{/gist_id}","starred_url":"https://api.github.com/users/codingS3b/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codingS3b/subscriptions","organizations_url":"https://api.github.com/users/codingS3b/orgs","repos_url":"https://api.github.com/users/codingS3b/repos","events_url":"https://api.github.com/users/codingS3b/events{/privacy}","received_events_url":"https://api.github.com/users/codingS3b/received_events","type":"User","site_admin":false},"body":"This PR gets rid of `UiParameter`, `LinearScaledParameter` and `LogScaledParameter` and instead introduces a single `Parameter` class which has the option to pass in arbitrary conversion functions to handle different scales on the UI and on the internal PIC scale of each parameter.\r\nIt also makes use of the `pint` package for easier unit conversion.","created_at":"2018-03-13T16:15:05Z","updated_at":"2018-03-28T12:12:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6989524fd0c2e2a57046ca19ee8304b9801107a9","assignee":{"login":"ax3l","id":1353258,"avatar_url":"https://avatars3.githubusercontent.com/u/1353258?v=4","gravatar_id":"","url":"https://api.github.com/users/ax3l","html_url":"https://github.com/ax3l","followers_url":"https://api.github.com/users/ax3l/followers","following_url":"https://api.github.com/users/ax3l/following{/other_user}","gists_url":"https://api.github.com/users/ax3l/gists{/gist_id}","starred_url":"https://api.github.com/users/ax3l/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ax3l/subscriptions","organizations_url":"https://api.github.com/users/ax3l/orgs","repos_url":"https://api.github.com/users/ax3l/repos","events_url":"https://api.github.com/users/ax3l/events{/privacy}","received_events_url":"https://api.github.com/users/ax3l/received_events","type":"User","site_admin":false},"assignees":[{"login":"ax3l","id":1353258,"avatar_url":"https://avatars3.githubusercontent.com/u/1353258?v=4","gravatar_id":"","url":"https://api.github.com/users/ax3l","html_url":"https://github.com/ax3l","followers_url":"https://api.github.com/users/ax3l/followers","following_url":"https://api.github.com/users/ax3l/following{/other_user}","gists_url":"https://api.github.com/users/ax3l/gists{/gist_id}","starred_url":"https://api.github.com/users/ax3l/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ax3l/subscriptions","organizations_url":"https://api.github.com/users/ax3l/orgs","repos_url":"https://api.github.com/users/ax3l/repos","events_url":"https://api.github.com/users/ax3l/events{/privacy}","received_events_url":"https://api.github.com/users/ax3l/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":50988421,"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/labels/component:%20tools","name":"component: tools","color":"009800","default":false}],"milestone":{"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/milestones/10","html_url":"https://github.com/ComputationalRadiationPhysics/picongpu/milestone/10","labels_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/milestones/10/labels","id":2455699,"number":10,"title":"0.4.0 / 1.0.0: Next Stable","description":"Possible topics:\r\n- finalize central parts of the Sphinx docs & migrate most of the wiki\r\n- official cupla (alpaka) support\r\n- particle merging","creator":{"login":"ax3l","id":1353258,"avatar_url":"https://avatars3.githubusercontent.com/u/1353258?v=4","gravatar_id":"","url":"https://api.github.com/users/ax3l","html_url":"https://github.com/ax3l","followers_url":"https://api.github.com/users/ax3l/followers","following_url":"https://api.github.com/users/ax3l/following{/other_user}","gists_url":"https://api.github.com/users/ax3l/gists{/gist_id}","starred_url":"https://api.github.com/users/ax3l/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ax3l/subscriptions","organizations_url":"https://api.github.com/users/ax3l/orgs","repos_url":"https://api.github.com/users/ax3l/repos","events_url":"https://api.github.com/users/ax3l/events{/privacy}","received_events_url":"https://api.github.com/users/ax3l/received_events","type":"User","site_admin":false},"open_issues":39,"closed_issues":447,"state":"open","created_at":"2017-04-13T15:44:52Z","updated_at":"2018-03-28T11:57:26Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/2550/commits","review_comments_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/2550/comments","review_comment_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/2550/comments","statuses_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/statuses/bce0ca6e5bcf93e70baab6ab9f557626a668edb3","head":{"label":"codingS3b:param_refactor","ref":"param_refactor","sha":"bce0ca6e5bcf93e70baab6ab9f557626a668edb3","user":{"login":"codingS3b","id":31093529,"avatar_url":"https://avatars1.githubusercontent.com/u/31093529?v=4","gravatar_id":"","url":"https://api.github.com/users/codingS3b","html_url":"https://github.com/codingS3b","followers_url":"https://api.github.com/users/codingS3b/followers","following_url":"https://api.github.com/users/codingS3b/following{/other_user}","gists_url":"https://api.github.com/users/codingS3b/gists{/gist_id}","starred_url":"https://api.github.com/users/codingS3b/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codingS3b/subscriptions","organizations_url":"https://api.github.com/users/codingS3b/orgs","repos_url":"https://api.github.com/users/codingS3b/repos","events_url":"https://api.github.com/users/codingS3b/events{/privacy}","received_events_url":"https://api.github.com/users/codingS3b/received_events","type":"User","site_admin":false},"repo":{"id":105862089,"name":"picongpu","full_name":"codingS3b/picongpu","owner":{"login":"codingS3b","id":31093529,"avatar_url":"https://avatars1.githubusercontent.com/u/31093529?v=4","gravatar_id":"","url":"https://api.github.com/users/codingS3b","html_url":"https://github.com/codingS3b","followers_url":"https://api.github.com/users/codingS3b/followers","following_url":"https://api.github.com/users/codingS3b/following{/other_user}","gists_url":"https://api.github.com/users/codingS3b/gists{/gist_id}","starred_url":"https://api.github.com/users/codingS3b/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codingS3b/subscriptions","organizations_url":"https://api.github.com/users/codingS3b/orgs","repos_url":"https://api.github.com/users/codingS3b/repos","events_url":"https://api.github.com/users/codingS3b/events{/privacy}","received_events_url":"https://api.github.com/users/codingS3b/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/codingS3b/picongpu","description":"A particle-in-cell code for GPGPUs :sparkles:","fork":true,"url":"https://api.github.com/repos/codingS3b/picongpu","forks_url":"https://api.github.com/repos/codingS3b/picongpu/forks","keys_url":"https://api.github.com/repos/codingS3b/picongpu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codingS3b/picongpu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codingS3b/picongpu/teams","hooks_url":"https://api.github.com/repos/codingS3b/picongpu/hooks","issue_events_url":"https://api.github.com/repos/codingS3b/picongpu/issues/events{/number}","events_url":"https://api.github.com/repos/codingS3b/picongpu/events","assignees_url":"https://api.github.com/repos/codingS3b/picongpu/assignees{/user}","branches_url":"https://api.github.com/repos/codingS3b/picongpu/branches{/branch}","tags_url":"https://api.github.com/repos/codingS3b/picongpu/tags","blobs_url":"https://api.github.com/repos/codingS3b/picongpu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codingS3b/picongpu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codingS3b/picongpu/git/refs{/sha}","trees_url":"https://api.github.com/repos/codingS3b/picongpu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codingS3b/picongpu/statuses/{sha}","languages_url":"https://api.github.com/repos/codingS3b/picongpu/languages","stargazers_url":"https://api.github.com/repos/codingS3b/picongpu/stargazers","contributors_url":"https://api.github.com/repos/codingS3b/picongpu/contributors","subscribers_url":"https://api.github.com/repos/codingS3b/picongpu/subscribers","subscription_url":"https://api.github.com/repos/codingS3b/picongpu/subscription","commits_url":"https://api.github.com/repos/codingS3b/picongpu/commits{/sha}","git_commits_url":"https://api.github.com/repos/codingS3b/picongpu/git/commits{/sha}","comments_url":"https://api.github.com/repos/codingS3b/picongpu/comments{/number}","issue_comment_url":"https://api.github.com/repos/codingS3b/picongpu/issues/comments{/number}","contents_url":"https://api.github.com/repos/codingS3b/picongpu/contents/{+path}","compare_url":"https://api.github.com/repos/codingS3b/picongpu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codingS3b/picongpu/merges","archive_url":"https://api.github.com/repos/codingS3b/picongpu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codingS3b/picongpu/downloads","issues_url":"https://api.github.com/repos/codingS3b/picongpu/issues{/number}","pulls_url":"https://api.github.com/repos/codingS3b/picongpu/pulls{/number}","milestones_url":"https://api.github.com/repos/codingS3b/picongpu/milestones{/number}","notifications_url":"https://api.github.com/repos/codingS3b/picongpu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codingS3b/picongpu/labels{/name}","releases_url":"https://api.github.com/repos/codingS3b/picongpu/releases{/id}","deployments_url":"https://api.github.com/repos/codingS3b/picongpu/deployments","created_at":"2017-10-05T07:38:31Z","updated_at":"2017-10-05T07:38:36Z","pushed_at":"2018-03-16T14:16:09Z","git_url":"git://github.com/codingS3b/picongpu.git","ssh_url":"git@github.com:codingS3b/picongpu.git","clone_url":"https://github.com/codingS3b/picongpu.git","svn_url":"https://github.com/codingS3b/picongpu","homepage":"https://picongpu.readthedocs.io","size":18169,"stargazers_count":0,"watchers_count":0,"language":"C++","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":"ComputationalRadiationPhysics:dev","ref":"dev","sha":"1a1ad65c8d3d1971161146c42858b34a0ba0e81d","user":{"login":"ComputationalRadiationPhysics","id":5120388,"avatar_url":"https://avatars0.githubusercontent.com/u/5120388?v=4","gravatar_id":"","url":"https://api.github.com/users/ComputationalRadiationPhysics","html_url":"https://github.com/ComputationalRadiationPhysics","followers_url":"https://api.github.com/users/ComputationalRadiationPhysics/followers","following_url":"https://api.github.com/users/ComputationalRadiationPhysics/following{/other_user}","gists_url":"https://api.github.com/users/ComputationalRadiationPhysics/gists{/gist_id}","starred_url":"https://api.github.com/users/ComputationalRadiationPhysics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ComputationalRadiationPhysics/subscriptions","organizations_url":"https://api.github.com/users/ComputationalRadiationPhysics/orgs","repos_url":"https://api.github.com/users/ComputationalRadiationPhysics/repos","events_url":"https://api.github.com/users/ComputationalRadiationPhysics/events{/privacy}","received_events_url":"https://api.github.com/users/ComputationalRadiationPhysics/received_events","type":"Organization","site_admin":false},"repo":{"id":11764461,"name":"picongpu","full_name":"ComputationalRadiationPhysics/picongpu","owner":{"login":"ComputationalRadiationPhysics","id":5120388,"avatar_url":"https://avatars0.githubusercontent.com/u/5120388?v=4","gravatar_id":"","url":"https://api.github.com/users/ComputationalRadiationPhysics","html_url":"https://github.com/ComputationalRadiationPhysics","followers_url":"https://api.github.com/users/ComputationalRadiationPhysics/followers","following_url":"https://api.github.com/users/ComputationalRadiationPhysics/following{/other_user}","gists_url":"https://api.github.com/users/ComputationalRadiationPhysics/gists{/gist_id}","starred_url":"https://api.github.com/users/ComputationalRadiationPhysics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ComputationalRadiationPhysics/subscriptions","organizations_url":"https://api.github.com/users/ComputationalRadiationPhysics/orgs","repos_url":"https://api.github.com/users/ComputationalRadiationPhysics/repos","events_url":"https://api.github.com/users/ComputationalRadiationPhysics/events{/privacy}","received_events_url":"https://api.github.com/users/ComputationalRadiationPhysics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ComputationalRadiationPhysics/picongpu","description":"A particle-in-cell code for GPGPUs :sparkles:","fork":false,"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu","forks_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/forks","keys_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/teams","hooks_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/hooks","issue_events_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/events{/number}","events_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/events","assignees_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/assignees{/user}","branches_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/branches{/branch}","tags_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/tags","blobs_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/refs{/sha}","trees_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/statuses/{sha}","languages_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/languages","stargazers_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/stargazers","contributors_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/contributors","subscribers_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/subscribers","subscription_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/subscription","commits_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/commits{/sha}","git_commits_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/commits{/sha}","comments_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/comments{/number}","issue_comment_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/comments{/number}","contents_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/contents/{+path}","compare_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/merges","archive_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/downloads","issues_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues{/number}","pulls_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls{/number}","milestones_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/milestones{/number}","notifications_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/labels{/name}","releases_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/releases{/id}","deployments_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/deployments","created_at":"2013-07-30T12:28:20Z","updated_at":"2018-03-23T14:40:59Z","pushed_at":"2018-03-28T07:50:11Z","git_url":"git://github.com/ComputationalRadiationPhysics/picongpu.git","ssh_url":"git@github.com:ComputationalRadiationPhysics/picongpu.git","clone_url":"https://github.com/ComputationalRadiationPhysics/picongpu.git","svn_url":"https://github.com/ComputationalRadiationPhysics/picongpu","homepage":"https://picongpu.readthedocs.io","size":18227,"stargazers_count":301,"watchers_count":301,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":128,"mirror_url":null,"archived":false,"open_issues_count":313,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":128,"open_issues":313,"watchers":301,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/2550"},"html":{"href":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/2550"},"issue":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/2550"},"comments":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/2550/comments"},"review_comments":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/2550/comments"},"review_comment":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/2550/commits"},"statuses":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/statuses/bce0ca6e5bcf93e70baab6ab9f557626a668edb3"}},"author_association":"NONE"}}
{"actor":{"display_login":"ax3l"}}