{"action":"created","comment":{"url":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/comments/31880172","id":31880172,"diff_hunk":"@@ -900,6 +782,198 @@ namespace galsim {\n         return result;\n     }\n \n+\n+    ///////////////////////////////////////////////////////////////////////////////////////////////\n+    // SBInterpolatedKImage methods\n+\n+    template <typename T>\n+    SBInterpolatedKImage::SBInterpolatedKImage(\n+        const BaseImage<T>& realImage,\n+        const BaseImage<T>& imagImage,\n+        double dk, double stepk,\n+        boost::shared_ptr<Interpolant> kInterp,\n+        const GSParamsPtr& gsparams) :\n+        SBInterpolated(new SBInterpolatedKImageImpl(realImage, imagImage, dk, stepk,\n+                boost::shared_ptr<Interpolant2d>(new InterpolantXY(kInterp)), gsparams)\n+        ) {}\n+\n+    template <typename T>\n+    SBInterpolatedKImage::SBInterpolatedKImage(\n+        const BaseImage<T>& realImage,\n+        const BaseImage<T>& imagImage,\n+        double dk, double stepk,\n+        boost::shared_ptr<Interpolant2d> kInterp,\n+        const GSParamsPtr& gsparams) :\n+        SBInterpolated(new SBInterpolatedKImageImpl(realImage, imagImage, dk, stepk,\n+                                                    kInterp, gsparams)\n+        ) {}\n+\n+    SBInterpolatedKImage::SBInterpolatedKImage(const SBInterpolatedKImage& rhs)\n+        : SBInterpolated(rhs) {}\n+\n+    SBInterpolatedKImage::~SBInterpolatedKImage() {}\n+\n+    ConstImageView<double> SBInterpolatedKImage::getRealKImage() const\n+    {\n+        assert(dynamic_cast<const SBInterpolatedKImageImpl*>(_pimpl.get()));\n+        return static_cast<const SBInterpolatedKImageImpl&>(*_pimpl).getRealKImage();\n+    }\n+\n+    ConstImageView<double> SBInterpolatedKImage::getImagKImage() const\n+    {\n+        assert(dynamic_cast<const SBInterpolatedKImageImpl*>(_pimpl.get()));\n+        return static_cast<const SBInterpolatedKImageImpl&>(*_pimpl).getImagKImage();\n+    }\n+\n+    ///////////////////////////////////////////////////////////////////////////////////////////////\n+    // SBInterpolatedKImageImpl methods\n+\n+    template <typename T>\n+    SBInterpolatedKImage::SBInterpolatedKImageImpl::SBInterpolatedKImageImpl(\n+        const BaseImage<T>& realKImage, const BaseImage<T>& imagKImage,\n+        double dk, double stepk, boost::shared_ptr<Interpolant2d> kInterp,\n+        const GSParamsPtr& gsparams) :\n+        SBInterpolatedImpl(kInterp, stepk, 0., gsparams), //fill in maxk below\n+        _dk(dk)\n+    {\n+        dbg<<\"stepk = \"<<stepk<<std::endl;\n+        dbg<<\"kimage bounds = \"<<realKImage.getBounds()<<std::endl;\n+        assert(_kInterp.get());\n+\n+        Ninitial = std::max(realKImage.getXMax()-realKImage.getXMin()+1,\n+                            realKImage.getYMax()-realKImage.getYMin()+1);\n+        dbg<<\"Ninitial = \"<<Ninitial<<std::endl;\n+        Nk = goodFFTSize(int(Ninitial));\n+        dbg<<\"Nk = \"<<Nk<<std::endl;\n+\n+        _ktab = boost::shared_ptr<KTable>(new KTable(Nk, _dk));\n+        _maxk = Ninitial/2 * _dk;\n+        dbg<<\"_dk = \"<<_dk<<std::endl;\n+        dbg<<\"_maxk = \"<<_maxk<<std::endl;\n+\n+        // Only need to fill in x>=0 since the negative x's are the Hermitian\n+        // conjugates of the positive x's.\n+        int kxStart = 0;\n+        int ikxStart = (realKImage.getXMin()+realKImage.getXMax()+1)/2;\n+        int ky = -((realKImage.getYMax()-realKImage.getYMin()+1)/2);\n+        dbg<<\"kxStart = \"<<kxStart<<\", kyStart = \"<<ky<<std::endl;\n+        for (int iky = realKImage.getYMin(); iky<= realKImage.getYMax(); ++iky, ++ky) {\n+             int kx = kxStart;\n+             for (int ikx = ikxStart; ikx<= realKImage.getXMax(); ++ikx, ++kx) {\n+                 std::complex<double> kvalue(realKImage(ikx, iky), imagKImage(ikx, iky));\n+                 _ktab->kSet(kx, ky, kvalue);\n+                 xxdbg<<\"ikx,iky,kx,ky = \"<<ikx<<','<<iky<<','<<kx<<','<<ky<<std::endl;\n+                 xxdbg<<\"kvalue = \"<<kvalue<<std::endl;\n+             }\n+        }\n+        _flux = kValue(Position<double>(0.,0.)).real();\n+        dbg<<\"flux = \"<<_flux<<std::endl;\n+\n+        xcentroid = NAN;\n+        ycentroid = NAN;\n+    }\n+\n+    SBInterpolatedKImage::SBInterpolatedKImageImpl::~SBInterpolatedKImageImpl() {}\n+\n+    std::complex<double> SBInterpolatedKImage::SBInterpolatedKImageImpl::kValue(\n+        const Position<double>& k) const\n+    {\n+        xdbg<<\"evaluating kValue(\"<<k.x<<\",\"<<k.y<<\")\"<<std::endl;\n+        xdbg<<\"_maxk = \"<<_maxk<<std::endl;\n+        if (std::abs(k.x) > _maxk || std::abs(k.y) > _maxk) return std::complex<double>(0.,0.);\n+        return _ktab->interpolate(k.x, k.y, *_kInterp);\n+    }\n+\n+    Position<double> SBInterpolatedKImage::SBInterpolatedKImageImpl::centroid() const {\n+        double flux = getFlux();\n+        if (flux == 0.) throw std::runtime_error(\"Flux == 0.  Centroid is undefined.\");\n+        if (std::isnan(xcentroid)) {\n+            /*  int x f(x) dx = (x conv f)|x=0 = int FT(x conv f)(k) dk\n+                              = int FT(x) FT(f) dk\n+                FT(x) is divergent, but really we want the first integral above to be\n+                int(x f(x) dx, -L/2..L/2) since f(x) is formally periodic once it's put on a\n+                grid.  So in the last integral, we really want FT(x if |x|<L/2 else 0),\n+                which works out to\n+                2 i ( kx L cos(kx L/2) - 2 sin(kx L/2)) sin (ky L/2) / kx^2 / ky.\n+                Noting that kx L/2 = ikx pi, the cosines are -1^ikx and the sines are 0.\n+                Of course, lim kx->0 sin(kx)/kx is 1 though, so that term survives.  Algebra\n+                eventually reduces the above expression to what's in the code below.\n+             */\n+            double xsum(0.0), ysum(0.0);\n+            for (int iky = -Ninitial/2; iky < Ninitial/2; iky++) {\n+                if (iky == 0) continue;\n+                ysum += std::pow(-1.0, iky) / iky * _ktab->kval(0, iky).imag();","path":"src/SBInterpolatedImage.cpp","position":733,"original_position":733,"commit_id":"caa69f96cca4ee577d22ebc6449090a6ec131ec8","original_commit_id":"caa69f96cca4ee577d22ebc6449090a6ec131ec8","user":{"login":"rmjarvis","id":623887,"avatar_url":"https://avatars.githubusercontent.com/u/623887?v=3","gravatar_id":"","url":"https://api.github.com/users/rmjarvis","html_url":"https://github.com/rmjarvis","followers_url":"https://api.github.com/users/rmjarvis/followers","following_url":"https://api.github.com/users/rmjarvis/following{/other_user}","gists_url":"https://api.github.com/users/rmjarvis/gists{/gist_id}","starred_url":"https://api.github.com/users/rmjarvis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rmjarvis/subscriptions","organizations_url":"https://api.github.com/users/rmjarvis/orgs","repos_url":"https://api.github.com/users/rmjarvis/repos","events_url":"https://api.github.com/users/rmjarvis/events{/privacy}","received_events_url":"https://api.github.com/users/rmjarvis/received_events","type":"User","site_admin":false},"body":"A minor efficiency point here.  Rather than `pow(-1.0, iky)`, you can just keep a variable that keeps track of this and update it each time through the loop.\r\n```\r\nint iky = -Ninitial/2\r\ndouble sign = (iky % 2 == 0) ? 1.0 : -1.0;\r\nfor (; iky < Ninitial/2; iky++) {\r\n    sign = -sign;\r\n    ...\r\n```","created_at":"2015-06-07T20:18:04Z","updated_at":"2015-06-07T20:18:04Z","html_url":"https://github.com/GalSim-developers/GalSim/pull/662#discussion_r31880172","pull_request_url":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/662","_links":{"self":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/comments/31880172"},"html":{"href":"https://github.com/GalSim-developers/GalSim/pull/662#discussion_r31880172"},"pull_request":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/662"}}},"pull_request":{"url":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/662","id":34218753,"html_url":"https://github.com/GalSim-developers/GalSim/pull/662","diff_url":"https://github.com/GalSim-developers/GalSim/pull/662.diff","patch_url":"https://github.com/GalSim-developers/GalSim/pull/662.patch","issue_url":"https://api.github.com/repos/GalSim-developers/GalSim/issues/662","number":662,"state":"open","locked":false,"title":"#642 InterpolatedKImage","user":{"login":"jmeyers314","id":3650485,"avatar_url":"https://avatars.githubusercontent.com/u/3650485?v=3","gravatar_id":"","url":"https://api.github.com/users/jmeyers314","html_url":"https://github.com/jmeyers314","followers_url":"https://api.github.com/users/jmeyers314/followers","following_url":"https://api.github.com/users/jmeyers314/following{/other_user}","gists_url":"https://api.github.com/users/jmeyers314/gists{/gist_id}","starred_url":"https://api.github.com/users/jmeyers314/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jmeyers314/subscriptions","organizations_url":"https://api.github.com/users/jmeyers314/orgs","repos_url":"https://api.github.com/users/jmeyers314/repos","events_url":"https://api.github.com/users/jmeyers314/events{/privacy}","received_events_url":"https://api.github.com/users/jmeyers314/received_events","type":"User","site_admin":false},"body":"Hi all,\r\n\r\nThis PR adds the InterpolatedKImage object, which can be used to create a GSObject by specifying samples of the Fourier-transform of a surface brightness profile.  \r\n\r\nA few notes:\r\n- In the c++ layer, I created the class `SBInterpolated`, which serves as the parent class for both `SBInterpolatedImage` and `SBInterpolatedKImage`.  In hindsight, there is actually quite a bit less in common between these two classes than I had initially anticipated, so it might make sense to take out this added layer of abstraction, though I didn't bother for the moment.\r\n- I completely removed the MultipleImageHelper class from the c++ layer, which I thought made the SBInterpolatedImage code easier to understand.  If desired, I could put this back now that I've figured out what's going on.\r\n- Since I don't currently have a use-case for real-space convolution or photon-shooting with InterpolatedKImage, I followed Mike's suggestion and didn't implement these or the SBInterpolatedKImage.xValue() methods.\r\n- I computed (and then cached) the centroid by computing the DFT.  If there's an easier way, I'd love to hear it!\r\n- There's nothing analogous in InterpolatedKImage to noise_pad in InterpolatedImage.\r\n\r\n-Josh","created_at":"2015-04-27T22:54:49Z","updated_at":"2015-06-07T20:18:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7b7d879a90f7c3d45400396eb393735754c03f81","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/662/commits","review_comments_url":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/662/comments","review_comment_url":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GalSim-developers/GalSim/issues/662/comments","statuses_url":"https://api.github.com/repos/GalSim-developers/GalSim/statuses/caa69f96cca4ee577d22ebc6449090a6ec131ec8","head":{"label":"GalSim-developers:#642","ref":"#642","sha":"caa69f96cca4ee577d22ebc6449090a6ec131ec8","user":{"login":"GalSim-developers","id":1462196,"avatar_url":"https://avatars.githubusercontent.com/u/1462196?v=3","gravatar_id":"","url":"https://api.github.com/users/GalSim-developers","html_url":"https://github.com/GalSim-developers","followers_url":"https://api.github.com/users/GalSim-developers/followers","following_url":"https://api.github.com/users/GalSim-developers/following{/other_user}","gists_url":"https://api.github.com/users/GalSim-developers/gists{/gist_id}","starred_url":"https://api.github.com/users/GalSim-developers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GalSim-developers/subscriptions","organizations_url":"https://api.github.com/users/GalSim-developers/orgs","repos_url":"https://api.github.com/users/GalSim-developers/repos","events_url":"https://api.github.com/users/GalSim-developers/events{/privacy}","received_events_url":"https://api.github.com/users/GalSim-developers/received_events","type":"Organization","site_admin":false},"repo":{"id":3510804,"name":"GalSim","full_name":"GalSim-developers/GalSim","owner":{"login":"GalSim-developers","id":1462196,"avatar_url":"https://avatars.githubusercontent.com/u/1462196?v=3","gravatar_id":"","url":"https://api.github.com/users/GalSim-developers","html_url":"https://github.com/GalSim-developers","followers_url":"https://api.github.com/users/GalSim-developers/followers","following_url":"https://api.github.com/users/GalSim-developers/following{/other_user}","gists_url":"https://api.github.com/users/GalSim-developers/gists{/gist_id}","starred_url":"https://api.github.com/users/GalSim-developers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GalSim-developers/subscriptions","organizations_url":"https://api.github.com/users/GalSim-developers/orgs","repos_url":"https://api.github.com/users/GalSim-developers/repos","events_url":"https://api.github.com/users/GalSim-developers/events{/privacy}","received_events_url":"https://api.github.com/users/GalSim-developers/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GalSim-developers/GalSim","description":"The modular galaxy image simulation toolkit","fork":false,"url":"https://api.github.com/repos/GalSim-developers/GalSim","forks_url":"https://api.github.com/repos/GalSim-developers/GalSim/forks","keys_url":"https://api.github.com/repos/GalSim-developers/GalSim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GalSim-developers/GalSim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GalSim-developers/GalSim/teams","hooks_url":"https://api.github.com/repos/GalSim-developers/GalSim/hooks","issue_events_url":"https://api.github.com/repos/GalSim-developers/GalSim/issues/events{/number}","events_url":"https://api.github.com/repos/GalSim-developers/GalSim/events","assignees_url":"https://api.github.com/repos/GalSim-developers/GalSim/assignees{/user}","branches_url":"https://api.github.com/repos/GalSim-developers/GalSim/branches{/branch}","tags_url":"https://api.github.com/repos/GalSim-developers/GalSim/tags","blobs_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/refs{/sha}","trees_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GalSim-developers/GalSim/statuses/{sha}","languages_url":"https://api.github.com/repos/GalSim-developers/GalSim/languages","stargazers_url":"https://api.github.com/repos/GalSim-developers/GalSim/stargazers","contributors_url":"https://api.github.com/repos/GalSim-developers/GalSim/contributors","subscribers_url":"https://api.github.com/repos/GalSim-developers/GalSim/subscribers","subscription_url":"https://api.github.com/repos/GalSim-developers/GalSim/subscription","commits_url":"https://api.github.com/repos/GalSim-developers/GalSim/commits{/sha}","git_commits_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/commits{/sha}","comments_url":"https://api.github.com/repos/GalSim-developers/GalSim/comments{/number}","issue_comment_url":"https://api.github.com/repos/GalSim-developers/GalSim/issues/comments{/number}","contents_url":"https://api.github.com/repos/GalSim-developers/GalSim/contents/{+path}","compare_url":"https://api.github.com/repos/GalSim-developers/GalSim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GalSim-developers/GalSim/merges","archive_url":"https://api.github.com/repos/GalSim-developers/GalSim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GalSim-developers/GalSim/downloads","issues_url":"https://api.github.com/repos/GalSim-developers/GalSim/issues{/number}","pulls_url":"https://api.github.com/repos/GalSim-developers/GalSim/pulls{/number}","milestones_url":"https://api.github.com/repos/GalSim-developers/GalSim/milestones{/number}","notifications_url":"https://api.github.com/repos/GalSim-developers/GalSim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GalSim-developers/GalSim/labels{/name}","releases_url":"https://api.github.com/repos/GalSim-developers/GalSim/releases{/id}","created_at":"2012-02-22T02:51:45Z","updated_at":"2015-06-07T10:48:31Z","pushed_at":"2015-06-03T13:50:18Z","git_url":"git://github.com/GalSim-developers/GalSim.git","ssh_url":"git@github.com:GalSim-developers/GalSim.git","clone_url":"https://github.com/GalSim-developers/GalSim.git","svn_url":"https://github.com/GalSim-developers/GalSim","homepage":"","size":94734,"stargazers_count":33,"watchers_count":33,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":22,"mirror_url":null,"open_issues_count":54,"forks":22,"open_issues":54,"watchers":33,"default_branch":"releases/1.2"}},"base":{"label":"GalSim-developers:master","ref":"master","sha":"51de3aa4aff8c7678499932d7201016625ac73fd","user":{"login":"GalSim-developers","id":1462196,"avatar_url":"https://avatars.githubusercontent.com/u/1462196?v=3","gravatar_id":"","url":"https://api.github.com/users/GalSim-developers","html_url":"https://github.com/GalSim-developers","followers_url":"https://api.github.com/users/GalSim-developers/followers","following_url":"https://api.github.com/users/GalSim-developers/following{/other_user}","gists_url":"https://api.github.com/users/GalSim-developers/gists{/gist_id}","starred_url":"https://api.github.com/users/GalSim-developers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GalSim-developers/subscriptions","organizations_url":"https://api.github.com/users/GalSim-developers/orgs","repos_url":"https://api.github.com/users/GalSim-developers/repos","events_url":"https://api.github.com/users/GalSim-developers/events{/privacy}","received_events_url":"https://api.github.com/users/GalSim-developers/received_events","type":"Organization","site_admin":false},"repo":{"id":3510804,"name":"GalSim","full_name":"GalSim-developers/GalSim","owner":{"login":"GalSim-developers","id":1462196,"avatar_url":"https://avatars.githubusercontent.com/u/1462196?v=3","gravatar_id":"","url":"https://api.github.com/users/GalSim-developers","html_url":"https://github.com/GalSim-developers","followers_url":"https://api.github.com/users/GalSim-developers/followers","following_url":"https://api.github.com/users/GalSim-developers/following{/other_user}","gists_url":"https://api.github.com/users/GalSim-developers/gists{/gist_id}","starred_url":"https://api.github.com/users/GalSim-developers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GalSim-developers/subscriptions","organizations_url":"https://api.github.com/users/GalSim-developers/orgs","repos_url":"https://api.github.com/users/GalSim-developers/repos","events_url":"https://api.github.com/users/GalSim-developers/events{/privacy}","received_events_url":"https://api.github.com/users/GalSim-developers/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GalSim-developers/GalSim","description":"The modular galaxy image simulation toolkit","fork":false,"url":"https://api.github.com/repos/GalSim-developers/GalSim","forks_url":"https://api.github.com/repos/GalSim-developers/GalSim/forks","keys_url":"https://api.github.com/repos/GalSim-developers/GalSim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GalSim-developers/GalSim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GalSim-developers/GalSim/teams","hooks_url":"https://api.github.com/repos/GalSim-developers/GalSim/hooks","issue_events_url":"https://api.github.com/repos/GalSim-developers/GalSim/issues/events{/number}","events_url":"https://api.github.com/repos/GalSim-developers/GalSim/events","assignees_url":"https://api.github.com/repos/GalSim-developers/GalSim/assignees{/user}","branches_url":"https://api.github.com/repos/GalSim-developers/GalSim/branches{/branch}","tags_url":"https://api.github.com/repos/GalSim-developers/GalSim/tags","blobs_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/refs{/sha}","trees_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GalSim-developers/GalSim/statuses/{sha}","languages_url":"https://api.github.com/repos/GalSim-developers/GalSim/languages","stargazers_url":"https://api.github.com/repos/GalSim-developers/GalSim/stargazers","contributors_url":"https://api.github.com/repos/GalSim-developers/GalSim/contributors","subscribers_url":"https://api.github.com/repos/GalSim-developers/GalSim/subscribers","subscription_url":"https://api.github.com/repos/GalSim-developers/GalSim/subscription","commits_url":"https://api.github.com/repos/GalSim-developers/GalSim/commits{/sha}","git_commits_url":"https://api.github.com/repos/GalSim-developers/GalSim/git/commits{/sha}","comments_url":"https://api.github.com/repos/GalSim-developers/GalSim/comments{/number}","issue_comment_url":"https://api.github.com/repos/GalSim-developers/GalSim/issues/comments{/number}","contents_url":"https://api.github.com/repos/GalSim-developers/GalSim/contents/{+path}","compare_url":"https://api.github.com/repos/GalSim-developers/GalSim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GalSim-developers/GalSim/merges","archive_url":"https://api.github.com/repos/GalSim-developers/GalSim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GalSim-developers/GalSim/downloads","issues_url":"https://api.github.com/repos/GalSim-developers/GalSim/issues{/number}","pulls_url":"https://api.github.com/repos/GalSim-developers/GalSim/pulls{/number}","milestones_url":"https://api.github.com/repos/GalSim-developers/GalSim/milestones{/number}","notifications_url":"https://api.github.com/repos/GalSim-developers/GalSim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GalSim-developers/GalSim/labels{/name}","releases_url":"https://api.github.com/repos/GalSim-developers/GalSim/releases{/id}","created_at":"2012-02-22T02:51:45Z","updated_at":"2015-06-07T10:48:31Z","pushed_at":"2015-06-03T13:50:18Z","git_url":"git://github.com/GalSim-developers/GalSim.git","ssh_url":"git@github.com:GalSim-developers/GalSim.git","clone_url":"https://github.com/GalSim-developers/GalSim.git","svn_url":"https://github.com/GalSim-developers/GalSim","homepage":"","size":94734,"stargazers_count":33,"watchers_count":33,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":22,"mirror_url":null,"open_issues_count":54,"forks":22,"open_issues":54,"watchers":33,"default_branch":"releases/1.2"}},"_links":{"self":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/662"},"html":{"href":"https://github.com/GalSim-developers/GalSim/pull/662"},"issue":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/issues/662"},"comments":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/issues/662/comments"},"review_comments":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/662/comments"},"review_comment":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/pulls/662/commits"},"statuses":{"href":"https://api.github.com/repos/GalSim-developers/GalSim/statuses/caa69f96cca4ee577d22ebc6449090a6ec131ec8"}}}}