{"action":"created","comment":{"url":"https://api.github.com/repos/nipy/dipy/pulls/comments/25572858","id":25572858,"diff_hunk":"@@ -288,7 +299,265 @@ def multi_tensor(gtab, mevals, S0=100, angles=[(0, 0), (90, 0)],\n                                                  snr=None)\n \n     return add_noise(S, snr, S0), sticks\n+    \n+def multi_tensor_dki(gtab, mevals, S0=100, angles=[(0., 0.), (90., 0.)],\n+                         fractions=[50, 50], snr=20):\n+    \n+    r\"\"\"Simulate the elements of the diffusion and diffusion kurtosis tensor as\n+    well as the diffusion signal S based on the DKI model (i.e. taylor \n+    accumulante larger than the fourth order are ignored). Simulations are \n+    based on multicompartmental models which assumes that tissue are described\n+    by impermeable diffusion compartments characterized by their only diffusion\n+    tensor.\n+\n+    Parameters\n+    -----------\n+    gtab : GradientTable\n+    mevals : array (K, 3)\n+        eigenvalues of the diffusion tensor for each individual compartment\n+    S0 : float\n+        Unweighted signal value (b0 signal).\n+    angles : array (K,2) or (K,3)\n+        List of K tensor directions of the diffusion tensor of each compartment\n+        in polar angles (in degrees) or unit vectors\n+    fractions : float\n+        Percentage of the contribution of each tensor. The sum of fractions\n+        should be equal to 100%.\n+    snr : float\n+        Signal to noise ratio, assuming Rician noise.  If set to None, no\n+        noise is added.\n+\n+    Returns\n+    --------\n+    dt : (6,)\n+        elements of the diffusion tensor.\n+    kt : (15,)\n+        elements of the kurtosis tensor\n+    S : (N,) ndarray\n+        Simulated signal based on the dki model.\n+            Note: This simulated signal ignores the DW taylor accumulantes \n+                  higher than the 4th order. This simulations are useful to \n+                  test dki fit procedures, since tensors fitted on S have to \n+                  match the diffusion and kurtosis tensor produced here. For \n+                  simulations of S with the higher accumulates please refer to \n+                  the multi_tensor function.\n \n+    Examples\n+    --------\n+    >>> import numpy as np\n+    >>> from dipy.sims.voxel import multi_tensor_dki\n+    >>> from dipy.data import get_data\n+    >>> from dipy.core.gradients import gradient_table\n+    >>> from dipy.io.gradients import read_bvals_bvecs\n+    >>> fimg, fbvals, fbvecs = get_data('small_101D')\n+    >>> bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs)\n+    >>> gtab = gradient_table(bvals, bvecs)\n+    >>> mevals=np.array(([0.0015, 0.0003, 0.0003],[0.0015, 0.0003, 0.0003]))\n+    >>> e0 = np.array([1, 0, 0.])\n+    >>> e1 = np.array([0., 1, 0])\n+    >>> dt, kt, S =  multi_tensor_dki(gtab, mevals)\n+    \n+    References\n+    ----------\n+    .. [1] R. Neto Henriques et al., \"Exploring the 3D geometriy of the \n+           diffusion kurtosis tensor - Impact on the development of robust \n+           tractography procedures and novel biomarkers\", NeuroImage (2015) \n+           111, 85-99.\n+    \"\"\"\n+                             \n+    if np.round(np.sum(fractions), 2) != 100.0:\n+        raise ValueError('Fractions should sum to 100')\n+\n+    fractions = [f / 100. for f in fractions]\n+\n+    S = np.zeros(len(gtab.bvals))\n+    \n+    angles = np.array(angles)\n+    if angles.shape[-1] == 3:\n+        sticks = angles\n+    else:\n+        sticks = [sphere2cart(1, np.deg2rad(pair[0]), np.deg2rad(pair[1]))\n+                  for pair in angles]\n+        sticks = np.array(sticks)\n+    \n+    # computing a 3D matrice containing the individual DT components \n+    mD=np.zeros((len(fractions),3,3))\n+    for i in range(len(fractions)):\n+        R = all_tensor_evecs(sticks[i])\n+        mD[i] = dot(dot(R, np.diag(mevals[i])), R.T)\n+        \n+    # compute DT\n+    D=np.zeros((3,3))\n+    for i in range(len(fractions)):\n+        D=D+fractions[i]*mD[i]    \n+    dt=np.array([D[0][0],D[1][1],D[2][2],D[0][1],D[0][2],D[1][2]])\n+    \n+    # compute KT\n+    kt=np.zeros((15))\n+    kt[0] = compute_Wijkl(mD, fractions, 0,0,0,0, D)\n+    kt[1] = compute_Wijkl(mD, fractions, 1,1,1,1, D)\n+    kt[2] = compute_Wijkl(mD, fractions, 2,2,2,2, D)\n+    kt[3] = compute_Wijkl(mD, fractions, 0,0,0,1, D)\n+    kt[4] = compute_Wijkl(mD, fractions, 0,0,0,2, D)\n+    kt[5] = compute_Wijkl(mD, fractions, 0,1,1,1, D)\n+    kt[6] = compute_Wijkl(mD, fractions, 1,1,1,2, D)\n+    kt[7] = compute_Wijkl(mD, fractions, 0,2,2,2, D)\n+    kt[8] = compute_Wijkl(mD, fractions, 1,2,2,2, D)\n+    kt[9] = compute_Wijkl(mD, fractions, 0,0,1,1, D)\n+    kt[10] = compute_Wijkl(mD, fractions, 0,0,2,2, D)\n+    kt[11] = compute_Wijkl(mD, fractions, 1,1,2,2, D)\n+    kt[12] = compute_Wijkl(mD, fractions, 0,0,1,2, D)\n+    kt[13] = compute_Wijkl(mD, fractions, 0,1,1,2, D)\n+    kt[14]=  compute_Wijkl(mD, fractions, 0,1,2,2, D)\n+    \n+    # compute S based on the DT and KT\n+    S=single_diffkurt_tensors(gtab, S0, dt, kt, snr)\n+\n+    return dt, kt, S\n+    \n+def compute_Wijkl(Dc,frac,i,j,k,el,DT=None):\n+    r\"\"\" # function that computes the elements of KT by especifying their \n+    four indexes i, j, k and el. Each index can be equal to x, y or z which are \n+    codified respectively by 0, 1 and 2. Simulations are based on \n+    multicompartment models. Implementation of this function is based on \n+    equation 8 of:\n+    \n+    [1] R. Neto Henriques et al., \"Exploring the 3D geometriy of the diffusion \n+        kurtosis tensor - Impact on the development of robust tractography \n+        procedures and novel biomarkers\", NeuroImage (2015) 111, 85-99.\n+    \n+    Parameters\n+    -----------\n+    Dc : (6,) ndarray\n+        Elements of the diffusion tensor for each individual compartment on the\n+        multicompartmental model. Assumes the order Dxx, Dyy, Dzz, Dxy, Dxz, \n+        Dyz.\n+    frac : float\n+        Percentage of the contribution of each tensor. The sum of fractions\n+        should be equal to 100%.\n+    i : int\n+        first element index (0 for x, 1 for y, 2 for z)\n+    j : int\n+        Second element index (0 for x, 1 for y, 2 for z)\n+    k : int\n+        Third element index (0 for x, 1 for y, 2 for z)\n+    el: int\n+        Fourth elements index (0 for x, 1 for y, 2 for z)\n+    DT : (6,) ndarray\n+        Elements of the global diffusion tensor.\n+\n+    Returns\n+    --------\n+    wijkl : Kurtosis tensor element\n+    \n+    \"\"\"\n+    if DT is None:\n+        DT=np.zeros((3,3))\n+        for i in range(len(frac)):\n+            DT=DT+frac[i]*Dc[i]\n+\n+    wijkl=0\n+    MD=(DT[0][0]+DT[1][1]+DT[2][2])/3\n+    for f in range(len(frac)):\n+        wijkl=wijkl+frac[f]*(Dc[f][i][j]*Dc[f][k][el]+Dc[f][i][k]*Dc[f][j][el]+\n+                             Dc[f][i][el]*Dc[f][j][k])\n+    wijkl=(wijkl-\n+           DT[i][j]*DT[k][el]-DT[i][k]*DT[j][el]-DT[i][el]*DT[j][k])/(MD**2)\n+    \n+    return wijkl\n+    \n+    \n+def single_diffkurt_tensors(gtab, S0=150, dt=None, kt=None, snr=None):\n+    \"\"\" Simulated signal based on the diffusion and diffusion kurtosis \n+    tensors. Simulations are preformed assuming the DKI model.\n+\n+    Parameters\n+    -----------\n+    gtab : GradientTable\n+        Measurement directions.\n+    S0 : double,\n+        Strength of signal in the presence of no diffusion gradient (also\n+        called the ``b=0`` value).\n+    dt : (6,) ndarray\n+        Elements of the diffusion tensor.\n+    kt : (15, ) ndarray\n+        Elements of the diffusion kurtosis tensor.  \n+    snr : float\n+        Signal to noise ratio, assuming Rician noise.  None implies no noise.\n+\n+    Returns\n+    --------\n+    S : (N,) ndarray\n+        Simulated signal based on the DKI model S=S0*exp(-b*D+1/6*b**2*D**2*K)\n+    \"\"\"\n+    \n+    if dt is None:\n+        dt = diffusion_tensor\n+\n+    if kt is None:\n+        kt = kurtosis_tensor\n+        \n+    A=dki_design_matrix(gtab)\n+    \n+    # define vector of DKI parameters\n+    MD=sum(dt[0:3])/3","path":"dipy/sims/voxel.py","position":223,"original_position":223,"commit_id":"11ff9a97d91e2004537ed71bb07d05553c5bed9e","original_commit_id":"11ff9a97d91e2004537ed71bb07d05553c5bed9e","user":{"login":"arokem","id":118582,"avatar_url":"https://avatars.githubusercontent.com/u/118582?v=3","gravatar_id":"","url":"https://api.github.com/users/arokem","html_url":"https://github.com/arokem","followers_url":"https://api.github.com/users/arokem/followers","following_url":"https://api.github.com/users/arokem/following{/other_user}","gists_url":"https://api.github.com/users/arokem/gists{/gist_id}","starred_url":"https://api.github.com/users/arokem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arokem/subscriptions","organizations_url":"https://api.github.com/users/arokem/orgs","repos_url":"https://api.github.com/users/arokem/repos","events_url":"https://api.github.com/users/arokem/events{/privacy}","received_events_url":"https://api.github.com/users/arokem/received_events","type":"User","site_admin":false},"body":"Is this also MD when the last 3 elements are non-zero? ","created_at":"2015-03-01T22:53:17Z","updated_at":"2015-03-01T22:53:17Z","html_url":"https://github.com/nipy/dipy/pull/582#discussion_r25572858","pull_request_url":"https://api.github.com/repos/nipy/dipy/pulls/582","_links":{"self":{"href":"https://api.github.com/repos/nipy/dipy/pulls/comments/25572858"},"html":{"href":"https://github.com/nipy/dipy/pull/582#discussion_r25572858"},"pull_request":{"href":"https://api.github.com/repos/nipy/dipy/pulls/582"}}},"pull_request":{"url":"https://api.github.com/repos/nipy/dipy/pulls/582","id":30245715,"html_url":"https://github.com/nipy/dipy/pull/582","diff_url":"https://github.com/nipy/dipy/pull/582.diff","patch_url":"https://github.com/nipy/dipy/pull/582.patch","issue_url":"https://api.github.com/repos/nipy/dipy/issues/582","number":582,"state":"open","locked":false,"title":"DKI project: PR#1 Simulations to test DKI","user":{"login":"RafaelNH","id":5492638,"avatar_url":"https://avatars.githubusercontent.com/u/5492638?v=3","gravatar_id":"","url":"https://api.github.com/users/RafaelNH","html_url":"https://github.com/RafaelNH","followers_url":"https://api.github.com/users/RafaelNH/followers","following_url":"https://api.github.com/users/RafaelNH/following{/other_user}","gists_url":"https://api.github.com/users/RafaelNH/gists{/gist_id}","starred_url":"https://api.github.com/users/RafaelNH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RafaelNH/subscriptions","organizations_url":"https://api.github.com/users/RafaelNH/orgs","repos_url":"https://api.github.com/users/RafaelNH/repos","events_url":"https://api.github.com/users/RafaelNH/events{/privacy}","received_events_url":"https://api.github.com/users/RafaelNH/received_events","type":"User","site_admin":false},"body":"I add some functions on dipy.sims.voxel module for DKI simulations (multi_tensor_dki, compute_Wijkl, single_diffkurt_tensors, dki_design_matrix). This PR was discussed to be the first milestone of the DKI project. To see how to use the functions please give a look to the added script on doc/examples/simulations_dki.py. Basically, the objective of the new functions is to produce ground truth DT and KT tensors to test diffusion fits (you can simulate tensors for any single voxel crossing fiber configuration ;) ). DW signals are also simulated from the computed tensors using the DKI model. Future steps on the DKI project can use these simulations to check if the DKI implementation is correct. DKI simulations modules are also relevant for DKI fit comparison studies.\r\n\r\nImplementation was done according to PEP 8 standards and the nomenclature is consistent to previous dipy functions. However, I notice that the order of DT elements is different from previous dipy modules (as dipy.reconst.dti.py), I decided to keep this order since I notice that they are consistent to the in progress DKI implementations. Perhaps is better to transform all new functions to dipy assumed format  - Dxx Dxy Dyy Dxz Dyz Dzz. What do you thing? Please let me know if you need help doing this on the submitted changes after its revision.\r\n\r\nEnjoy,\r\nR Neto Henriques\r\n    ","created_at":"2015-03-01T18:01:31Z","updated_at":"2015-03-01T22:53:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c75870372a6b8129a388e61819f4d54aa84fb739","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/nipy/dipy/pulls/582/commits","review_comments_url":"https://api.github.com/repos/nipy/dipy/pulls/582/comments","review_comment_url":"https://api.github.com/repos/nipy/dipy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nipy/dipy/issues/582/comments","statuses_url":"https://api.github.com/repos/nipy/dipy/statuses/11ff9a97d91e2004537ed71bb07d05553c5bed9e","head":{"label":"RafaelNH:DKI_PR1_test_simulations_RNH","ref":"DKI_PR1_test_simulations_RNH","sha":"11ff9a97d91e2004537ed71bb07d05553c5bed9e","user":{"login":"RafaelNH","id":5492638,"avatar_url":"https://avatars.githubusercontent.com/u/5492638?v=3","gravatar_id":"","url":"https://api.github.com/users/RafaelNH","html_url":"https://github.com/RafaelNH","followers_url":"https://api.github.com/users/RafaelNH/followers","following_url":"https://api.github.com/users/RafaelNH/following{/other_user}","gists_url":"https://api.github.com/users/RafaelNH/gists{/gist_id}","starred_url":"https://api.github.com/users/RafaelNH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RafaelNH/subscriptions","organizations_url":"https://api.github.com/users/RafaelNH/orgs","repos_url":"https://api.github.com/users/RafaelNH/repos","events_url":"https://api.github.com/users/RafaelNH/events{/privacy}","received_events_url":"https://api.github.com/users/RafaelNH/received_events","type":"User","site_admin":false},"repo":{"id":31173991,"name":"dipy","full_name":"RafaelNH/dipy","owner":{"login":"RafaelNH","id":5492638,"avatar_url":"https://avatars.githubusercontent.com/u/5492638?v=3","gravatar_id":"","url":"https://api.github.com/users/RafaelNH","html_url":"https://github.com/RafaelNH","followers_url":"https://api.github.com/users/RafaelNH/followers","following_url":"https://api.github.com/users/RafaelNH/following{/other_user}","gists_url":"https://api.github.com/users/RafaelNH/gists{/gist_id}","starred_url":"https://api.github.com/users/RafaelNH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RafaelNH/subscriptions","organizations_url":"https://api.github.com/users/RafaelNH/orgs","repos_url":"https://api.github.com/users/RafaelNH/repos","events_url":"https://api.github.com/users/RafaelNH/events{/privacy}","received_events_url":"https://api.github.com/users/RafaelNH/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/RafaelNH/dipy","description":"Diffusion MR Imaging in Python","fork":true,"url":"https://api.github.com/repos/RafaelNH/dipy","forks_url":"https://api.github.com/repos/RafaelNH/dipy/forks","keys_url":"https://api.github.com/repos/RafaelNH/dipy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RafaelNH/dipy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RafaelNH/dipy/teams","hooks_url":"https://api.github.com/repos/RafaelNH/dipy/hooks","issue_events_url":"https://api.github.com/repos/RafaelNH/dipy/issues/events{/number}","events_url":"https://api.github.com/repos/RafaelNH/dipy/events","assignees_url":"https://api.github.com/repos/RafaelNH/dipy/assignees{/user}","branches_url":"https://api.github.com/repos/RafaelNH/dipy/branches{/branch}","tags_url":"https://api.github.com/repos/RafaelNH/dipy/tags","blobs_url":"https://api.github.com/repos/RafaelNH/dipy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RafaelNH/dipy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RafaelNH/dipy/git/refs{/sha}","trees_url":"https://api.github.com/repos/RafaelNH/dipy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RafaelNH/dipy/statuses/{sha}","languages_url":"https://api.github.com/repos/RafaelNH/dipy/languages","stargazers_url":"https://api.github.com/repos/RafaelNH/dipy/stargazers","contributors_url":"https://api.github.com/repos/RafaelNH/dipy/contributors","subscribers_url":"https://api.github.com/repos/RafaelNH/dipy/subscribers","subscription_url":"https://api.github.com/repos/RafaelNH/dipy/subscription","commits_url":"https://api.github.com/repos/RafaelNH/dipy/commits{/sha}","git_commits_url":"https://api.github.com/repos/RafaelNH/dipy/git/commits{/sha}","comments_url":"https://api.github.com/repos/RafaelNH/dipy/comments{/number}","issue_comment_url":"https://api.github.com/repos/RafaelNH/dipy/issues/comments{/number}","contents_url":"https://api.github.com/repos/RafaelNH/dipy/contents/{+path}","compare_url":"https://api.github.com/repos/RafaelNH/dipy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RafaelNH/dipy/merges","archive_url":"https://api.github.com/repos/RafaelNH/dipy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RafaelNH/dipy/downloads","issues_url":"https://api.github.com/repos/RafaelNH/dipy/issues{/number}","pulls_url":"https://api.github.com/repos/RafaelNH/dipy/pulls{/number}","milestones_url":"https://api.github.com/repos/RafaelNH/dipy/milestones{/number}","notifications_url":"https://api.github.com/repos/RafaelNH/dipy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RafaelNH/dipy/labels{/name}","releases_url":"https://api.github.com/repos/RafaelNH/dipy/releases{/id}","created_at":"2015-02-22T18:31:46Z","updated_at":"2015-02-22T18:31:47Z","pushed_at":"2015-03-01T16:57:00Z","git_url":"git://github.com/RafaelNH/dipy.git","ssh_url":"git@github.com:RafaelNH/dipy.git","clone_url":"https://github.com/RafaelNH/dipy.git","svn_url":"https://github.com/RafaelNH/dipy","homepage":"http://dipy.org","size":15094,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"nipy:master","ref":"master","sha":"7e3b95e73fd14805b522e083dcf25d0adb506d6f","user":{"login":"nipy","id":233707,"avatar_url":"https://avatars.githubusercontent.com/u/233707?v=3","gravatar_id":"","url":"https://api.github.com/users/nipy","html_url":"https://github.com/nipy","followers_url":"https://api.github.com/users/nipy/followers","following_url":"https://api.github.com/users/nipy/following{/other_user}","gists_url":"https://api.github.com/users/nipy/gists{/gist_id}","starred_url":"https://api.github.com/users/nipy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nipy/subscriptions","organizations_url":"https://api.github.com/users/nipy/orgs","repos_url":"https://api.github.com/users/nipy/repos","events_url":"https://api.github.com/users/nipy/events{/privacy}","received_events_url":"https://api.github.com/users/nipy/received_events","type":"Organization","site_admin":false},"repo":{"id":505209,"name":"dipy","full_name":"nipy/dipy","owner":{"login":"nipy","id":233707,"avatar_url":"https://avatars.githubusercontent.com/u/233707?v=3","gravatar_id":"","url":"https://api.github.com/users/nipy","html_url":"https://github.com/nipy","followers_url":"https://api.github.com/users/nipy/followers","following_url":"https://api.github.com/users/nipy/following{/other_user}","gists_url":"https://api.github.com/users/nipy/gists{/gist_id}","starred_url":"https://api.github.com/users/nipy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nipy/subscriptions","organizations_url":"https://api.github.com/users/nipy/orgs","repos_url":"https://api.github.com/users/nipy/repos","events_url":"https://api.github.com/users/nipy/events{/privacy}","received_events_url":"https://api.github.com/users/nipy/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nipy/dipy","description":"Diffusion MR Imaging in Python","fork":false,"url":"https://api.github.com/repos/nipy/dipy","forks_url":"https://api.github.com/repos/nipy/dipy/forks","keys_url":"https://api.github.com/repos/nipy/dipy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nipy/dipy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nipy/dipy/teams","hooks_url":"https://api.github.com/repos/nipy/dipy/hooks","issue_events_url":"https://api.github.com/repos/nipy/dipy/issues/events{/number}","events_url":"https://api.github.com/repos/nipy/dipy/events","assignees_url":"https://api.github.com/repos/nipy/dipy/assignees{/user}","branches_url":"https://api.github.com/repos/nipy/dipy/branches{/branch}","tags_url":"https://api.github.com/repos/nipy/dipy/tags","blobs_url":"https://api.github.com/repos/nipy/dipy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nipy/dipy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nipy/dipy/git/refs{/sha}","trees_url":"https://api.github.com/repos/nipy/dipy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nipy/dipy/statuses/{sha}","languages_url":"https://api.github.com/repos/nipy/dipy/languages","stargazers_url":"https://api.github.com/repos/nipy/dipy/stargazers","contributors_url":"https://api.github.com/repos/nipy/dipy/contributors","subscribers_url":"https://api.github.com/repos/nipy/dipy/subscribers","subscription_url":"https://api.github.com/repos/nipy/dipy/subscription","commits_url":"https://api.github.com/repos/nipy/dipy/commits{/sha}","git_commits_url":"https://api.github.com/repos/nipy/dipy/git/commits{/sha}","comments_url":"https://api.github.com/repos/nipy/dipy/comments{/number}","issue_comment_url":"https://api.github.com/repos/nipy/dipy/issues/comments{/number}","contents_url":"https://api.github.com/repos/nipy/dipy/contents/{+path}","compare_url":"https://api.github.com/repos/nipy/dipy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nipy/dipy/merges","archive_url":"https://api.github.com/repos/nipy/dipy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nipy/dipy/downloads","issues_url":"https://api.github.com/repos/nipy/dipy/issues{/number}","pulls_url":"https://api.github.com/repos/nipy/dipy/pulls{/number}","milestones_url":"https://api.github.com/repos/nipy/dipy/milestones{/number}","notifications_url":"https://api.github.com/repos/nipy/dipy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nipy/dipy/labels{/name}","releases_url":"https://api.github.com/repos/nipy/dipy/releases{/id}","created_at":"2010-02-06T11:43:08Z","updated_at":"2015-02-27T18:43:31Z","pushed_at":"2015-02-27T18:43:31Z","git_url":"git://github.com/nipy/dipy.git","ssh_url":"git@github.com:nipy/dipy.git","clone_url":"https://github.com/nipy/dipy.git","svn_url":"https://github.com/nipy/dipy","homepage":"http://dipy.org","size":19766,"stargazers_count":54,"watchers_count":54,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":74,"mirror_url":null,"open_issues_count":60,"forks":74,"open_issues":60,"watchers":54,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nipy/dipy/pulls/582"},"html":{"href":"https://github.com/nipy/dipy/pull/582"},"issue":{"href":"https://api.github.com/repos/nipy/dipy/issues/582"},"comments":{"href":"https://api.github.com/repos/nipy/dipy/issues/582/comments"},"review_comments":{"href":"https://api.github.com/repos/nipy/dipy/pulls/582/comments"},"review_comment":{"href":"https://api.github.com/repos/nipy/dipy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nipy/dipy/pulls/582/commits"},"statuses":{"href":"https://api.github.com/repos/nipy/dipy/statuses/11ff9a97d91e2004537ed71bb07d05553c5bed9e"}}}}