{"action":"created","comment":{"url":"https://api.github.com/repos/slgentil/croco/pulls/comments/331046530","pull_request_review_id":296880783,"id":331046530,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDMzMTA0NjUzMA==","diff_hunk":"@@ -0,0 +1,631 @@\n+\"\"\"\n+Module postp\n+ - CROCOrun class holds metadata about a CROCO run\n+\"\"\"\n+#rom lpolib.grid import CGrid, s_coordinate\n+#rom lpolib.utils import tofloat, get_gradp, rho2u, rho2v\n+#rom lpolib.scDataset import scDataset\n+import os, fnmatch\n+import numpy as np\n+from numpy import ma\n+import pandas as pd\n+import xarray as xr\n+from glob import glob\n+#rom IPython import embed\n+\n+second2day = 1./86400.\n+\n+def tofloat(x):\n+    \"\"\"\n+    Python doesn't recognise the fortran d/D for floating point numbers...\n+    \"\"\"\n+    return float(x.replace('d','e').replace('D','e'))\n+\n+class CROCOrun(object):\n+    \"\"\"\n+    Class CROCOrun contains several xarray classes for each netCDF file type\n+    (ave, his, etc.), a grid object, and online output diagnostics (e.g. energy, ...).\n+    \"\"\"\n+    def __init__(self, dirname, verbose=False, open_nc=['ave','inst','sta1','sta2'], tdir_max=0):\n+        \"\"\"\n+        Constructor; we inspect a run directory and assemble scDataset\n+                     classes for ave, his, etc., construct a CGrid class, and\n+                     read the energy diagnostics from output.mpi\n+        Parameters: dirname - directory to search for model output\n+                    verbose - if True, prints diagnostics as it works\n+                    open_nc - a list of nc files to open in addition to 'his',\n+                              which may be an empty list.\n+        \"\"\"\n+        self.dirname = os.path.expanduser(dirname)\n+        self.verbose = verbose\n+        self.open_nc = ['his'] + open_nc   # Ensure that we always open 'his'\n+        self.tdir_max = tdir_max # limits the number of t directories\n+        self._findfiles()   # Find files that we know how to handle\n+        self._readparams()  # Scan croco.in for parameters\n+        self._readstats()   # Scan output.mpi for parameters and stats\n+        self._openfiles()   # Open the NetCDF files as scDatasets\n+        #self._readgrid()    # Read the horizontal grid\n+\n+    def __del__(self):\n+        \"\"\"\n+        Destructor: close the netcdf files upon destruction\n+        \"\"\"\n+        self.close()\n+\n+    def _findfiles(self):\n+        if self.verbose:\n+            print(\"Analysing directory \" + self.dirname)\n+\n+        # Find the list of segments (t1, t2, ...), a.k.a. chains\n+        self.segs = []\n+        for item in os.listdir(self.dirname):\n+            if os.path.isdir(os.path.join(self.dirname, item)):\n+                if item != \"t0\" and item[0] == \"t\" and item[1:].isdigit():\n+                    # Drop the 't' prefix so we can sort by increasing integer\n+                    if (self.tdir_max>0 and int(item[1:])<=self.tdir_max) or (self.tdir_max==0):\n+                        self.segs.append(int(item[1:]))\n+        # Sort and restore the 't'\n+        self.segs = ['t' + str(x) for x in sorted(self.segs)]\n+        if self.verbose:\n+            print(\"Found \" + str(len(self.segs)) + \" segments\")\n+\n+        # Now loop over segments in sequential order\n+        self.fave, self.fhis, self.finst, self.fsta1, self.fsta2, self.flog = [], [], [], [], [], []\n+        for segname in self.segs:\n+            if os.path.isfile(os.path.join(self.dirname, segname, \"output.mpi\")):\n+                self.flog.extend([(segname, \"output.mpi\")])\n+            # We use intermediate lists for each segment so we can sort them\n+            ave, his, inst, sta1, sta2 = [], [], [], [], []\n+            for cfile in os.listdir(os.path.join(self.dirname, segname)):\n+                if fnmatch.fnmatchcase(cfile, \"file*.nc\"):\n+                    if fnmatch.fnmatchcase(cfile, \"file_ave_*.nc\"):\n+                        ave.extend([(segname, cfile)])\n+                    if fnmatch.fnmatchcase(cfile, \"file_his_*.nc\"):\n+                        his.extend([(segname, cfile)])\n+                    if fnmatch.fnmatchcase(cfile, \"file_inst_*.nc\"):\n+                        inst.extend([(segname, cfile)])\n+                    if fnmatch.fnmatchcase(cfile, \"file_sta1_*.nc\"):\n+                        sta1.extend([(segname, cfile)])\n+                    if fnmatch.fnmatchcase(cfile, \"file_sta2_*.nc\"):\n+                        sta2.extend([(segname, cfile)])\n+            # Append sorted intermediate lists, such that the entire list is\n+            # in the correct order for accumulation with scDataset\n+            self.fave.extend(sorted(ave))\n+            self.fhis.extend(sorted(his))\n+            self.finst.extend(sorted(inst))\n+            self.fsta1.extend(sorted(sta1))\n+            self.fsta2.extend(sorted(sta2))\n+        if self.verbose:\n+            print(\"Found \" + str(len(self.fave)) + \" average files\")\n+            print(\"Found \" + str(len(self.fhis)) + \" history files\")\n+            print(\"Found \" + str(len(self.finst)) + \" inst files\")\n+            print(\"Found \" + str(len(self.fsta1)) + \" station1 files\")\n+            print(\"Found \" + str(len(self.fsta2)) + \" station2 files\")\n+            print(\"Found \" + str(len(self.flog)) + \" log files\")\n+\n+    def _openfiles(self):\n+        \"\"\"\n+        Constructs xarray datasets for each list in self.open_nc\n+        \"\"\"\n+        # Open datasets found in list self.open_nc\n+        if self.verbose:\n+            print(\"Opening NC datasets: \", self.open_nc)\n+        if 'his' in self.open_nc:\n+            self.his  = self._create_xrDataset(self.fhis)\n+        if 'ave' in self.open_nc:\n+            self.ave  = self._create_xrDataset(self.fave)\n+        if 'inst' in self.open_nc:\n+            self.inst = self._create_xrDataset(self.finst)\n+        if 'sta1' in self.open_nc:\n+            self.sta1 = self._create_xrDataset(self.fsta1)\n+        if 'sta2' in self.open_nc:\n+            self.sta2 = self._create_xrDataset(self.fsta2)\n+\n+    def _create_xrDataset(self, ncset):\n+        # Helper function to synthesise inputs and call xarray\n+        offsets = [self.t0[x[0]] for x in ncset]\n+        files = [os.path.join(self.dirname, x[0], x[1]) for x in ncset]\n+        datasets = []\n+        for f, dt in zip(files, offsets):\n+            ds = xr.open_dataset(f, chunks={'time_counter': 1, 's_rho': 1})\n+            if 'time_counter' in ds:\n+                t = ds['time_counter']\n+                t0 = t.isel(time_counter=0)\n+                t = ((t-t0)/np.timedelta64(1, 's') + dt)*second2day\n+                ds['time_counter'] = t\n+            if 'time_center' in ds:\n+                t = ds['time_center']\n+                t = ((t-t0)/np.timedelta64(1, 's') + dt)*second2day\n+                ds['time_center'] = t\n+            # drop coordinates for easier concatenation\n+            ds = ds.drop([k for k in ds.coords \\\n+                            if k not in ['time_counter','time_centered']])\n+            datasets.append(ds)\n+        return xr.concat(datasets, dim='time_counter')\n+\n+    def _readparams(self):\n+        \"\"\"\n+        Short function to find parameters from a croco run directory.\n+        Currently we only examine croco.in.\n+        \"\"\"\n+        # Read croco.in to extract parameters\n+        romsfile=os.path.join(self.dirname, self.segs[0], \"croco.in\")\n+        f = open(romsfile)\n+        pline=[] #previous line\n+        params = {}\n+        for line in iter(f):\n+            if 'time_stepping:' in pline:\n+                params['dt']=tofloat(line.split()[1])\n+            elif 'S-coord:' in pline:\n+                tmp = [tofloat(x) for x in line.split()]\n+                params['theta_s'], params['theta_b'] = tmp[0], tmp[1]\n+                params['Hc'] = tmp[2]\n+            elif 'rho0:' in pline:\n+                params['rho0']=tofloat(line.split()[0])\n+            elif 'tidal_diag:' in pline:\n+                params['omega']=tofloat(line.split()[0])\n+            elif 'jet_ywidth' in pline:\n+                params['jet_ywidth'] = tofloat(line.split()[2])\n+                params['jet_weight'] = tofloat(line.split()[3])\n+            elif 'y_itide' in pline:\n+                params['y_itide'] = tofloat(line.split()[4])\n+            pline=line\n+        f.close()\n+        if self.verbose:\n+            print(\"Detected time step of \" + str(params['dt']) + \" s\")\n+            print(\"Detected theta_s = \" + str(params['theta_s']))\n+            print(\"Detected theta_b = \" + str(self.theta_b))\n+            print(\"Detected Hc = \" + str(params['Hc']) + \" m\")\n+            print(\"Detected rho0 = \" + str(params['rho0']) + \" kg/m^3\")\n+            print(\"Detected omega = \" + str(params['omega']) + \" 1/s\")\n+            print(\"Detected jet_ywidth = \" + str(params['jet_ywidth']) + \" m\")\n+            print(\"Detected jet_weight = \" + str(params['jet_weight']))\n+            print(\"Detected y_itide = \" + str(params['y_itide']) + \" m\")\n+        self.params = params\n+\n+    def _readstats(self):\n+        # Now read each output.mpi and get the energy diagnostics\n+        self.t0 = dict()\n+        n=0\n+        for ii, cfile in enumerate(self.flog):\n+            f = open(os.path.join(self.dirname, cfile[0], cfile[1]))\n+            search = False\n+            firstline = True\n+            skipfirstline = ii>0\n+            pline=[] # previous line\n+            for line in iter(f):\n+                if ii==0 and 'hmax' in pline and 'grdmin' in pline:\n+                    self.H=tofloat(line.split()[1])\n+                    if self.verbose:\n+                        print(\"Detected H = \" + str(self.H) + \" m\")\n+                if 'MAIN' in line and 'started' in line:\n+                    search = True # Enable conversions\n+                if 'MAIN' in line and 'DONE' in line:\n+                    break # We're done with this file\n+                if search and ii==0 and 'STEP' in line:\n+                    # Found header; save titles and create empty storage array\n+                    statnames = line.split()\n+                    statdata  = np.empty([5000,len(statnames)])\n+                    if self.verbose:\n+                        print(\"Found \" + str(len(statnames)) + \" columns in output.mpi:\")\n+                        print(statnames)\n+                elif search and len(line)==114 and not 'report' in line:\n+                    # The 114 condition may be fragile. ToDo: better condition\n+                    if firstline:\n+                        # record the model starting offset\n+                        idx = [i for i, x in enumerate(statnames) if x==\"time[DAYS]\"][0]\n+                        tmpdata = [float(x) for x in line.split()]\n+                        self.t0[cfile[0]] = tmpdata[idx]*86400 # convert days to seconds\n+                        firstline=False\n+                    if skipfirstline:\n+                        # We skip the first line of data for the second file\n+                        # onwards because it is duplicated at the end of the\n+                        # previous file.\n+                        skipfirstline = False\n+                    else:\n+                        # Expand the array if needed\n+                        if n >= statdata.shape[0]:\n+                            statdata.resize((statdata.shape[0]*2, len(statnames)))\n+                        # Add these values to the arrays\n+                        statdata[n,:] = [float(x) for x in line.split()]\n+                        n=n+1\n+                pline=line\n+            f.close()\n+        # Truncate unused end of the array\n+        statdata.resize((n, len(statnames)))\n+        self.stats = pd.DataFrame(statdata, columns=statnames).set_index('time[DAYS]')\n+\n+\n+    def _readgrid(self, check=False):\n+        # Synthesize the x_vert and y_vert that the pyroms CGrid class requests\n+        # Get 1D vector of x and y points on cell box sides\n+        xx=self.his.variables['nav_lon_dom_U'][0,:]\n+        yy=self.his.variables['nav_lat_dom_V'][:,0]\n+        # Extrapolate by one at each end (assumes equal grid spacing at the ends)\n+        xxx=np.append(np.append(2*xx[0]-xx[1],xx),2*xx[-1]-xx[-2])\n+        yyy=np.append(np.append(2*yy[0]-yy[1],yy),2*yy[-1]-yy[-2])\n+\n+        x_vert, y_vert = np.meshgrid(xxx,yyy)\n+        self.hgrid = CGrid(x_vert, y_vert)\n+\n+        if check:\n+            # Verify that CGrid class regenerated the right grid\n+            a=np.max(np.abs(self.hgrid.x_u-self.his.variables['nav_lon_dom_U'][:]))","path":"croco_osi/postp.py","position":null,"original_position":253,"commit_id":"53efba16d1088384ab71a4f77a80c7224215f39f","original_commit_id":"6d985847a8a9ad6fc78f09c082f63d9905298091","user":{"login":"apatlpo","id":11750960,"node_id":"MDQ6VXNlcjExNzUwOTYw","avatar_url":"https://avatars3.githubusercontent.com/u/11750960?v=4","gravatar_id":"","url":"https://api.github.com/users/apatlpo","html_url":"https://github.com/apatlpo","followers_url":"https://api.github.com/users/apatlpo/followers","following_url":"https://api.github.com/users/apatlpo/following{/other_user}","gists_url":"https://api.github.com/users/apatlpo/gists{/gist_id}","starred_url":"https://api.github.com/users/apatlpo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apatlpo/subscriptions","organizations_url":"https://api.github.com/users/apatlpo/orgs","repos_url":"https://api.github.com/users/apatlpo/repos","events_url":"https://api.github.com/users/apatlpo/events{/privacy}","received_events_url":"https://api.github.com/users/apatlpo/received_events","type":"User","site_admin":false},"body":"this is now tretated in `_adjust_grid`","created_at":"2019-10-03T13:44:36Z","updated_at":"2019-10-03T13:44:36Z","html_url":"https://github.com/slgentil/croco/pull/1#discussion_r331046530","pull_request_url":"https://api.github.com/repos/slgentil/croco/pulls/1","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/slgentil/croco/pulls/comments/331046530"},"html":{"href":"https://github.com/slgentil/croco/pull/1#discussion_r331046530"},"pull_request":{"href":"https://api.github.com/repos/slgentil/croco/pulls/1"}},"in_reply_to_id":330047886},"pull_request":{"url":"https://api.github.com/repos/slgentil/croco/pulls/1","id":323219886,"node_id":"MDExOlB1bGxSZXF1ZXN0MzIzMjE5ODg2","html_url":"https://github.com/slgentil/croco/pull/1","diff_url":"https://github.com/slgentil/croco/pull/1.diff","patch_url":"https://github.com/slgentil/croco/pull/1.patch","issue_url":"https://api.github.com/repos/slgentil/croco/issues/1","number":1,"state":"open","locked":false,"title":"Add library + conda env + tuto dir","user":{"login":"apatlpo","id":11750960,"node_id":"MDQ6VXNlcjExNzUwOTYw","avatar_url":"https://avatars3.githubusercontent.com/u/11750960?v=4","gravatar_id":"","url":"https://api.github.com/users/apatlpo","html_url":"https://github.com/apatlpo","followers_url":"https://api.github.com/users/apatlpo/followers","following_url":"https://api.github.com/users/apatlpo/following{/other_user}","gists_url":"https://api.github.com/users/apatlpo/gists{/gist_id}","starred_url":"https://api.github.com/users/apatlpo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apatlpo/subscriptions","organizations_url":"https://api.github.com/users/apatlpo/orgs","repos_url":"https://api.github.com/users/apatlpo/repos","events_url":"https://api.github.com/users/apatlpo/events{/privacy}","received_events_url":"https://api.github.com/users/apatlpo/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-10-01T11:24:06Z","updated_at":"2019-10-03T13:44:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0261703735862360ebe74c2567c199ef2db01372","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/slgentil/croco/pulls/1/commits","review_comments_url":"https://api.github.com/repos/slgentil/croco/pulls/1/comments","review_comment_url":"https://api.github.com/repos/slgentil/croco/pulls/comments{/number}","comments_url":"https://api.github.com/repos/slgentil/croco/issues/1/comments","statuses_url":"https://api.github.com/repos/slgentil/croco/statuses/53efba16d1088384ab71a4f77a80c7224215f39f","head":{"label":"slgentil:add_library","ref":"add_library","sha":"53efba16d1088384ab71a4f77a80c7224215f39f","user":{"login":"slgentil","id":11751783,"node_id":"MDQ6VXNlcjExNzUxNzgz","avatar_url":"https://avatars0.githubusercontent.com/u/11751783?v=4","gravatar_id":"","url":"https://api.github.com/users/slgentil","html_url":"https://github.com/slgentil","followers_url":"https://api.github.com/users/slgentil/followers","following_url":"https://api.github.com/users/slgentil/following{/other_user}","gists_url":"https://api.github.com/users/slgentil/gists{/gist_id}","starred_url":"https://api.github.com/users/slgentil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slgentil/subscriptions","organizations_url":"https://api.github.com/users/slgentil/orgs","repos_url":"https://api.github.com/users/slgentil/repos","events_url":"https://api.github.com/users/slgentil/events{/privacy}","received_events_url":"https://api.github.com/users/slgentil/received_events","type":"User","site_admin":false},"repo":{"id":117823053,"node_id":"MDEwOlJlcG9zaXRvcnkxMTc4MjMwNTM=","name":"croco","full_name":"slgentil/croco","private":false,"owner":{"login":"slgentil","id":11751783,"node_id":"MDQ6VXNlcjExNzUxNzgz","avatar_url":"https://avatars0.githubusercontent.com/u/11751783?v=4","gravatar_id":"","url":"https://api.github.com/users/slgentil","html_url":"https://github.com/slgentil","followers_url":"https://api.github.com/users/slgentil/followers","following_url":"https://api.github.com/users/slgentil/following{/other_user}","gists_url":"https://api.github.com/users/slgentil/gists{/gist_id}","starred_url":"https://api.github.com/users/slgentil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slgentil/subscriptions","organizations_url":"https://api.github.com/users/slgentil/orgs","repos_url":"https://api.github.com/users/slgentil/repos","events_url":"https://api.github.com/users/slgentil/events{/privacy}","received_events_url":"https://api.github.com/users/slgentil/received_events","type":"User","site_admin":false},"html_url":"https://github.com/slgentil/croco","description":"Code CROCO de base + CONFIGS qui contient les différentes configurations","fork":false,"url":"https://api.github.com/repos/slgentil/croco","forks_url":"https://api.github.com/repos/slgentil/croco/forks","keys_url":"https://api.github.com/repos/slgentil/croco/keys{/key_id}","collaborators_url":"https://api.github.com/repos/slgentil/croco/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/slgentil/croco/teams","hooks_url":"https://api.github.com/repos/slgentil/croco/hooks","issue_events_url":"https://api.github.com/repos/slgentil/croco/issues/events{/number}","events_url":"https://api.github.com/repos/slgentil/croco/events","assignees_url":"https://api.github.com/repos/slgentil/croco/assignees{/user}","branches_url":"https://api.github.com/repos/slgentil/croco/branches{/branch}","tags_url":"https://api.github.com/repos/slgentil/croco/tags","blobs_url":"https://api.github.com/repos/slgentil/croco/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/slgentil/croco/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/slgentil/croco/git/refs{/sha}","trees_url":"https://api.github.com/repos/slgentil/croco/git/trees{/sha}","statuses_url":"https://api.github.com/repos/slgentil/croco/statuses/{sha}","languages_url":"https://api.github.com/repos/slgentil/croco/languages","stargazers_url":"https://api.github.com/repos/slgentil/croco/stargazers","contributors_url":"https://api.github.com/repos/slgentil/croco/contributors","subscribers_url":"https://api.github.com/repos/slgentil/croco/subscribers","subscription_url":"https://api.github.com/repos/slgentil/croco/subscription","commits_url":"https://api.github.com/repos/slgentil/croco/commits{/sha}","git_commits_url":"https://api.github.com/repos/slgentil/croco/git/commits{/sha}","comments_url":"https://api.github.com/repos/slgentil/croco/comments{/number}","issue_comment_url":"https://api.github.com/repos/slgentil/croco/issues/comments{/number}","contents_url":"https://api.github.com/repos/slgentil/croco/contents/{+path}","compare_url":"https://api.github.com/repos/slgentil/croco/compare/{base}...{head}","merges_url":"https://api.github.com/repos/slgentil/croco/merges","archive_url":"https://api.github.com/repos/slgentil/croco/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/slgentil/croco/downloads","issues_url":"https://api.github.com/repos/slgentil/croco/issues{/number}","pulls_url":"https://api.github.com/repos/slgentil/croco/pulls{/number}","milestones_url":"https://api.github.com/repos/slgentil/croco/milestones{/number}","notifications_url":"https://api.github.com/repos/slgentil/croco/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/slgentil/croco/labels{/name}","releases_url":"https://api.github.com/repos/slgentil/croco/releases{/id}","deployments_url":"https://api.github.com/repos/slgentil/croco/deployments","created_at":"2018-01-17T10:45:57Z","updated_at":"2019-10-02T07:23:22Z","pushed_at":"2019-10-03T13:35:01Z","git_url":"git://github.com/slgentil/croco.git","ssh_url":"git@github.com:slgentil/croco.git","clone_url":"https://github.com/slgentil/croco.git","svn_url":"https://github.com/slgentil/croco","homepage":null,"size":40100,"stargazers_count":0,"watchers_count":0,"language":"Fortran","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":null,"forks":1,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"slgentil:master","ref":"master","sha":"d30aa07e1e0baea1f5b65dc2b50ec23e4e13b0ae","user":{"login":"slgentil","id":11751783,"node_id":"MDQ6VXNlcjExNzUxNzgz","avatar_url":"https://avatars0.githubusercontent.com/u/11751783?v=4","gravatar_id":"","url":"https://api.github.com/users/slgentil","html_url":"https://github.com/slgentil","followers_url":"https://api.github.com/users/slgentil/followers","following_url":"https://api.github.com/users/slgentil/following{/other_user}","gists_url":"https://api.github.com/users/slgentil/gists{/gist_id}","starred_url":"https://api.github.com/users/slgentil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slgentil/subscriptions","organizations_url":"https://api.github.com/users/slgentil/orgs","repos_url":"https://api.github.com/users/slgentil/repos","events_url":"https://api.github.com/users/slgentil/events{/privacy}","received_events_url":"https://api.github.com/users/slgentil/received_events","type":"User","site_admin":false},"repo":{"id":117823053,"node_id":"MDEwOlJlcG9zaXRvcnkxMTc4MjMwNTM=","name":"croco","full_name":"slgentil/croco","private":false,"owner":{"login":"slgentil","id":11751783,"node_id":"MDQ6VXNlcjExNzUxNzgz","avatar_url":"https://avatars0.githubusercontent.com/u/11751783?v=4","gravatar_id":"","url":"https://api.github.com/users/slgentil","html_url":"https://github.com/slgentil","followers_url":"https://api.github.com/users/slgentil/followers","following_url":"https://api.github.com/users/slgentil/following{/other_user}","gists_url":"https://api.github.com/users/slgentil/gists{/gist_id}","starred_url":"https://api.github.com/users/slgentil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slgentil/subscriptions","organizations_url":"https://api.github.com/users/slgentil/orgs","repos_url":"https://api.github.com/users/slgentil/repos","events_url":"https://api.github.com/users/slgentil/events{/privacy}","received_events_url":"https://api.github.com/users/slgentil/received_events","type":"User","site_admin":false},"html_url":"https://github.com/slgentil/croco","description":"Code CROCO de base + CONFIGS qui contient les différentes configurations","fork":false,"url":"https://api.github.com/repos/slgentil/croco","forks_url":"https://api.github.com/repos/slgentil/croco/forks","keys_url":"https://api.github.com/repos/slgentil/croco/keys{/key_id}","collaborators_url":"https://api.github.com/repos/slgentil/croco/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/slgentil/croco/teams","hooks_url":"https://api.github.com/repos/slgentil/croco/hooks","issue_events_url":"https://api.github.com/repos/slgentil/croco/issues/events{/number}","events_url":"https://api.github.com/repos/slgentil/croco/events","assignees_url":"https://api.github.com/repos/slgentil/croco/assignees{/user}","branches_url":"https://api.github.com/repos/slgentil/croco/branches{/branch}","tags_url":"https://api.github.com/repos/slgentil/croco/tags","blobs_url":"https://api.github.com/repos/slgentil/croco/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/slgentil/croco/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/slgentil/croco/git/refs{/sha}","trees_url":"https://api.github.com/repos/slgentil/croco/git/trees{/sha}","statuses_url":"https://api.github.com/repos/slgentil/croco/statuses/{sha}","languages_url":"https://api.github.com/repos/slgentil/croco/languages","stargazers_url":"https://api.github.com/repos/slgentil/croco/stargazers","contributors_url":"https://api.github.com/repos/slgentil/croco/contributors","subscribers_url":"https://api.github.com/repos/slgentil/croco/subscribers","subscription_url":"https://api.github.com/repos/slgentil/croco/subscription","commits_url":"https://api.github.com/repos/slgentil/croco/commits{/sha}","git_commits_url":"https://api.github.com/repos/slgentil/croco/git/commits{/sha}","comments_url":"https://api.github.com/repos/slgentil/croco/comments{/number}","issue_comment_url":"https://api.github.com/repos/slgentil/croco/issues/comments{/number}","contents_url":"https://api.github.com/repos/slgentil/croco/contents/{+path}","compare_url":"https://api.github.com/repos/slgentil/croco/compare/{base}...{head}","merges_url":"https://api.github.com/repos/slgentil/croco/merges","archive_url":"https://api.github.com/repos/slgentil/croco/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/slgentil/croco/downloads","issues_url":"https://api.github.com/repos/slgentil/croco/issues{/number}","pulls_url":"https://api.github.com/repos/slgentil/croco/pulls{/number}","milestones_url":"https://api.github.com/repos/slgentil/croco/milestones{/number}","notifications_url":"https://api.github.com/repos/slgentil/croco/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/slgentil/croco/labels{/name}","releases_url":"https://api.github.com/repos/slgentil/croco/releases{/id}","deployments_url":"https://api.github.com/repos/slgentil/croco/deployments","created_at":"2018-01-17T10:45:57Z","updated_at":"2019-10-02T07:23:22Z","pushed_at":"2019-10-03T13:35:01Z","git_url":"git://github.com/slgentil/croco.git","ssh_url":"git@github.com:slgentil/croco.git","clone_url":"https://github.com/slgentil/croco.git","svn_url":"https://github.com/slgentil/croco","homepage":null,"size":40100,"stargazers_count":0,"watchers_count":0,"language":"Fortran","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":null,"forks":1,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/slgentil/croco/pulls/1"},"html":{"href":"https://github.com/slgentil/croco/pull/1"},"issue":{"href":"https://api.github.com/repos/slgentil/croco/issues/1"},"comments":{"href":"https://api.github.com/repos/slgentil/croco/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/slgentil/croco/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/slgentil/croco/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/slgentil/croco/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/slgentil/croco/statuses/53efba16d1088384ab71a4f77a80c7224215f39f"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"apatlpo"}}