{"action":"created","comment":{"url":"https://api.github.com/repos/sympy/symengine/pulls/comments/37361060","id":37361060,"diff_hunk":"@@ -0,0 +1,368 @@\n+#include <symengine/polys.h>\n+#include <symengine/add.h>\n+#include <symengine/mul.h>\n+#include <symengine/pow.h>\n+#include <symengine/symbol.h>\n+#include <symengine/dict.h>\n+\n+namespace SymEngine {\n+\n+#ifdef HAVE_SYMENGINE_PIRANHA\n+Polynomial::Polynomial(const vec_symbol &vars, hash_set polys_set)\n+    : vars_{vars}, polys_set_(polys_set) {\n+\n+    SYMENGINE_ASSERT(is_canonical(polys_set_))\n+}\n+Polynomial::Polynomial() {}\n+#else\n+Polynomial::Polynomial(const vec_symbol &vars, unordered_set polys_set)\n+    : vars_{vars}, polys_set_(polys_set) {\n+\n+    SYMENGINE_ASSERT(is_canonical(polys_set_))\n+}\n+#endif\n+\n+Polynomial::Polynomial(const RCP<const Basic> &p, umap_basic_num &vars) {\n+    //! TODO: Make more robust\n+    umap_vec_mpz P;\n+    if (is_a<Add>(*p)) {\n+        int n = vars.size();\n+        const umap_basic_num &d = rcp_static_cast<const Add>(p)->dict_;\n+        vec_int exp;\n+        mpz_class coef;\n+        for (auto &p: d) {\n+            if (!is_a<Integer>(*p.second))\n+                    throw std::runtime_error(\"Not implemented.\");\n+            coef = rcp_static_cast<const Integer>(p.second)->as_mpz();\n+            exp.assign(n, 0); // Initialize to [0]*n\n+            if (is_a<Mul>(*p.first)) {\n+                const map_basic_basic &term = rcp_static_cast<const Mul>(p.first)->dict_;\n+                for (auto &q: term) {\n+                    RCP<const Basic> sym = q.first;\n+                    if (!is_a<Integer>(*vars.at(sym)))\n+                            throw std::runtime_error(\"Not implemented.\");\n+                    int i = rcp_static_cast<const Integer>(vars.at(sym))->as_int();\n+                    if (is_a<Integer>(*q.second)) {\n+                        exp[i] = rcp_static_cast<const Integer>(q.second)->as_int();\n+                    } else {\n+                        throw std::runtime_error(\"Cannot convert symbolic exponents to sparse polynomials with integer exponents.\");\n+                    }\n+                }\n+            } else if (is_a<Pow>(*p.first)) {\n+                RCP<const Basic> sym = rcp_static_cast<const Pow>(p.first)->base_;\n+                RCP<const Basic> exp_ = rcp_static_cast<const Pow>(p.first)->exp_;\n+                if (!is_a<Integer>(*vars.at(sym)))\n+                        throw std::runtime_error(\"Not implemented.\");\n+                int i = rcp_static_cast<const Integer>(vars.at(sym))->as_int();\n+                if (!is_a<Integer>(*exp_))\n+                    throw std::runtime_error(\"Not implemented.\");\n+                exp[i] = rcp_static_cast<const Integer>(exp_)->as_int();\n+            } else if (is_a<Symbol>(*p.first)) {\n+                RCP<const Basic> sym = p.first;\n+                if (!is_a<Integer>(*vars.at(sym)))\n+                        throw std::runtime_error(\"Not implemented.\");\n+                int i = rcp_static_cast<const Integer>(vars.at(sym))->as_int();\n+                exp[i] = 1;\n+            } else {\n+                throw std::runtime_error(\"Not implemented.\");\n+            }\n+\n+            P[exp] = coef;\n+        }\n+    } else {\n+        throw std::runtime_error(\"Not implemented.\");\n+    }\n+\n+    for (auto &a: vars) {\n+        vars_.push_back(rcp_static_cast<const Symbol>(a.first));\n+    }\n+\n+    for (auto &a: P) {\n+        m_pair temp;\n+#ifdef HAVE_SYMENGINE_PIRANHA\n+        using ka = piranha::kronecker_array<long long>;\n+        temp.first = ka::encode(a.first);\n+        temp.second = piranha::integer{a.second.get_str()};\n+#else\n+        temp.first = vec_encode(a.first);\n+        temp.second = (a.second).get_ui();\n+#endif\n+        polys_set_.insert(temp);\n+    }\n+}\n+\n+#ifdef HAVE_SYMENGINE_PIRANHA\n+bool Polynomial::is_canonical(const hash_set& set)\n+#else\n+bool Polynomial::is_canonical(const unordered_set& set)\n+#endif\n+{\n+    for(auto &a: set) {\n+        int count = 0;\n+        for(auto &b: set) {\n+            if (b.first == a.first)\n+                count++;\n+            if (count == 2)\n+                return false;\n+        }\n+    }\n+    return true;\n+}\n+\n+std::size_t Polynomial::__hash__() const\n+{\n+    std::hash<std::string> hash_string;\n+    std::size_t seed = POLYNOMIAL;\n+\n+    for (auto &it: vars_)\n+        seed += hash_string(it->get_name());\n+\n+    for (auto &it : polys_set_)\n+    {\n+        std::size_t temp = POLYNOMIAL;\n+        hash_combine<long long>(temp, it.first);\n+#ifdef HAVE_SYMENGINE_PIRANHA\n+        hash_combine<long long>(temp, mpz_get_si(it.second.get_mpz_view()));\n+#else\n+        hash_combine<long long>(temp, (it.second).get_ui());\n+#endif\n+        seed += temp;\n+    }\n+    return seed;\n+}\n+\n+bool Polynomial::__eq__(const Basic &o) const\n+{\n+    const Polynomial &s = static_cast<const Polynomial &>(o);\n+\n+    for (unsigned int i = 0; i < vars_.size(); i++) {\n+        if (!vars_[i]->__eq__(*s.vars_[i]))\n+            return false;\n+    }\n+\n+    #ifdef HAVE_SYMENGINE_PIRANHA\n+    if (hash_set_eq(polys_set_, s.polys_set_))\n+        return true;\n+    #else\n+    if (unordered_set_eq(polys_set_, s.polys_set_))\n+        return true;\n+    #endif\n+\n+    return false;\n+}\n+\n+int Polynomial::compare(const Basic &o) const\n+{\n+    const Polynomial &s = static_cast<const Polynomial &>(o);\n+\n+    if (polys_set_.size() != s.polys_set_.size())\n+        return (polys_set_.size() < s.polys_set_.size()) ? -1 : 1;\n+\n+    for (unsigned int i = 0; i < vars_.size(); i++) {\n+        int cmp = vars_[i]->compare(*s.vars_[i]);\n+        if (cmp != 0)\n+            return cmp;\n+    }\n+\n+    #ifdef HAVE_SYMENGINE_PIRANHA\n+    return hash_set_compare(polys_set_, s.polys_set_);\n+    #else\n+    throw::std::runtime_error(\"Not Implemented\");\n+    #endif\n+}\n+\n+//TODO\n+vec_basic Polynomial::get_args() const\n+{\n+    vec_basic args;\n+    return args;\n+}\n+\n+//TODO\n+RCP<const Basic> Polynomial::diff(const RCP<const Symbol> &x) const\n+{\n+    return x;\n+}\n+\n+RCP<const Polynomial> add_poly(const Polynomial &a, const Polynomial &b) {\n+#ifdef HAVE_SYMENGINE_PIRANHA\n+    hash_set res = a.polys_set_;\n+#else\n+    unordered_set res = a.polys_set_;\n+#endif\n+\n+    m_pair temp;\n+    for (auto &it : b.polys_set_) {\n+        temp.first = it.first;\n+        auto it2 = res.find(temp);\n+        if (it2 == res.end()) {\n+            temp.second = it.second;\n+            res.insert(temp);\n+        }\n+        else {\n+            it2->second = it2->second + it.second;\n+        }\n+    }\n+\n+    RCP<const Polynomial> c = polynomial(a.vars_, std::move(res));\n+    return c;\n+}\n+\n+RCP<const Polynomial> sub_poly(const Polynomial &a, const Polynomial &b) {\n+#ifdef HAVE_SYMENGINE_PIRANHA\n+    hash_set res = a.polys_set_;\n+#else\n+    unordered_set res = a.polys_set_;\n+#endif\n+    m_pair temp;\n+    for (auto &it : b.polys_set_) {\n+        temp.first = it.first;\n+        auto it2 = res.find(temp);\n+        if (it2 == res.end()) {\n+            temp.second = it.second;\n+            res.insert(temp);\n+        }\n+        else {\n+            it2->second = it2->second - it.second;\n+        }\n+    }\n+\n+    RCP<const Polynomial> c = polynomial(a.vars_, std::move(res));\n+    return c;\n+}\n+\n+RCP<const Polynomial> neg_poly(const Polynomial &a) {\n+#ifdef HAVE_SYMENGINE_PIRANHA\n+    hash_set res;\n+#else\n+    unordered_set res;\n+#endif\n+    m_pair temp;\n+    for (auto &it: a.polys_set_) {\n+        temp.first = it.first;\n+        temp.second = -1 * it.second;\n+        res.insert(temp);\n+    }\n+    return polynomial(a.vars_, res);\n+}\n+\n+#ifdef HAVE_SYMENGINE_PIRANHA\n+void _normalise_polymul(RCP <const Polynomial> &p, RCP <const Polynomial> &q, vec_symbol &vars_,\n+    Polynomial &p_new, Polynomial &q_new) {\n+    using ka = piranha::kronecker_array<long long>;\n+    vars_ = p->vars_;\n+    int c_1 = p->vars_.size();\n+    int c_2 = 0;\n+    bool present = false;\n+    for (auto i = q->vars_.begin(); i < q->vars_.end(); i++) {\n+        for (auto j = p->vars_.begin(); j < p->vars_.end(); j++) {\n+            if ((*i)->get_name() == (*j)->get_name()) {\n+                present = true;\n+            }\n+        }\n+        if (present == false) {\n+            vars_.push_back(*i);\n+            c_2++;\n+        }\n+        present = false;\n+    }\n+    for (auto &a: p->polys_set_) {\n+        std::vector<long long> old(p->vars_.size());\n+        m_pair temp;\n+\n+        ka::decode(old, a.first);\n+        for (int i = 0; i < c_2; i++) {\n+            old.push_back(0);\n+        }\n+        temp.first = ka::encode(old);\n+        temp.second = a.second;\n+        p_new.polys_set_.insert(temp);\n+    }\n+    for (auto &a: q->polys_set_) {\n+        if (p->vars_.empty()) {\n+            q_new.polys_set_ = q->polys_set_;\n+        } else {\n+            std::vector<long long> new_(c_1);\n+            std::vector<long long> old(q->vars_.size());\n+            m_pair temp;\n+            ka::decode(old, a.first);\n+            auto i = new_.begin();\n+            bool present = false;\n+            int j_c = 0, k_c = 0;\n+            for (auto j = vars_.begin(); j < vars_.end(); j++) {\n+                for (auto k = q->vars_.begin(); k < q->vars_.end(); k++) {\n+                    if ((*j)->get_name() == (*k)->get_name()) {\n+                        present = true;\n+                        new_[j_c] = old[k_c];\n+                    }\n+                    k_c++;\n+                }\n+                if (present == false)\n+                    new_.insert(i, 0);\n+                if (i != new_.end())\n+                    i++;\n+                present = false;\n+                j_c++;\n+                k_c = 0;\n+            }            \n+            temp.first = ka::encode(new_);\n+            temp.second = a.second;\n+            q_new.polys_set_.insert(temp);\n+        }\n+    }\n+}\n+\n+void _mul_hashset(const hash_set &A, const hash_set &B, hash_set &C) {\n+    m_pair temp;\n+    int count = 0;\n+    for (auto &a: A) {\n+        for (auto &b: B) {\n+            temp.first = a.first + b.first;\n+            size_t bucket = C._bucket(temp);\n+            auto it = C.end();\n+            if (!C.empty())\n+                it = C._find(temp, bucket);\n+            if (it == C.end()) {\n+                // Check it the load factor of C is too large.","path":"symengine/polys.cpp","position":326,"original_position":326,"commit_id":"a8c3aede497247e1c6ec79d4131f3464df12e227","original_commit_id":"a8c3aede497247e1c6ec79d4131f3464df12e227","user":{"login":"certik","id":20568,"avatar_url":"https://avatars.githubusercontent.com/u/20568?v=3","gravatar_id":"","url":"https://api.github.com/users/certik","html_url":"https://github.com/certik","followers_url":"https://api.github.com/users/certik/followers","following_url":"https://api.github.com/users/certik/following{/other_user}","gists_url":"https://api.github.com/users/certik/gists{/gist_id}","starred_url":"https://api.github.com/users/certik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/certik/subscriptions","organizations_url":"https://api.github.com/users/certik/orgs","repos_url":"https://api.github.com/users/certik/repos","events_url":"https://api.github.com/users/certik/events{/privacy}","received_events_url":"https://api.github.com/users/certik/received_events","type":"User","site_admin":false},"body":"it -> if","created_at":"2015-08-18T22:21:44Z","updated_at":"2015-08-18T22:21:44Z","html_url":"https://github.com/sympy/symengine/pull/597#discussion_r37361060","pull_request_url":"https://api.github.com/repos/sympy/symengine/pulls/597","_links":{"self":{"href":"https://api.github.com/repos/sympy/symengine/pulls/comments/37361060"},"html":{"href":"https://github.com/sympy/symengine/pull/597#discussion_r37361060"},"pull_request":{"href":"https://api.github.com/repos/sympy/symengine/pulls/597"}}},"pull_request":{"url":"https://api.github.com/repos/sympy/symengine/pulls/597","id":42750418,"html_url":"https://github.com/sympy/symengine/pull/597","diff_url":"https://github.com/sympy/symengine/pull/597.diff","patch_url":"https://github.com/sympy/symengine/pull/597.patch","issue_url":"https://api.github.com/repos/sympy/symengine/issues/597","number":597,"state":"open","locked":false,"title":"Polys hash set","user":{"login":"Sumith1896","id":9217608,"avatar_url":"https://avatars.githubusercontent.com/u/9217608?v=3","gravatar_id":"","url":"https://api.github.com/users/Sumith1896","html_url":"https://github.com/Sumith1896","followers_url":"https://api.github.com/users/Sumith1896/followers","following_url":"https://api.github.com/users/Sumith1896/following{/other_user}","gists_url":"https://api.github.com/users/Sumith1896/gists{/gist_id}","starred_url":"https://api.github.com/users/Sumith1896/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Sumith1896/subscriptions","organizations_url":"https://api.github.com/users/Sumith1896/orgs","repos_url":"https://api.github.com/users/Sumith1896/repos","events_url":"https://api.github.com/users/Sumith1896/events{/privacy}","received_events_url":"https://api.github.com/users/Sumith1896/received_events","type":"User","site_admin":false},"body":"* Added expand2c\r\n\r\nTodo:\r\n- [ ] Add more `mul_poly` tests ","created_at":"2015-08-18T21:21:30Z","updated_at":"2015-08-18T22:21:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"11c101af48360a5ef376f5cee59bb83d441fc698","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/sympy/symengine/pulls/597/commits","review_comments_url":"https://api.github.com/repos/sympy/symengine/pulls/597/comments","review_comment_url":"https://api.github.com/repos/sympy/symengine/pulls/comments{/number}","comments_url":"https://api.github.com/repos/sympy/symengine/issues/597/comments","statuses_url":"https://api.github.com/repos/sympy/symengine/statuses/a8c3aede497247e1c6ec79d4131f3464df12e227","head":{"label":"Sumith1896:polys_hash_set","ref":"polys_hash_set","sha":"a8c3aede497247e1c6ec79d4131f3464df12e227","user":{"login":"Sumith1896","id":9217608,"avatar_url":"https://avatars.githubusercontent.com/u/9217608?v=3","gravatar_id":"","url":"https://api.github.com/users/Sumith1896","html_url":"https://github.com/Sumith1896","followers_url":"https://api.github.com/users/Sumith1896/followers","following_url":"https://api.github.com/users/Sumith1896/following{/other_user}","gists_url":"https://api.github.com/users/Sumith1896/gists{/gist_id}","starred_url":"https://api.github.com/users/Sumith1896/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Sumith1896/subscriptions","organizations_url":"https://api.github.com/users/Sumith1896/orgs","repos_url":"https://api.github.com/users/Sumith1896/repos","events_url":"https://api.github.com/users/Sumith1896/events{/privacy}","received_events_url":"https://api.github.com/users/Sumith1896/received_events","type":"User","site_admin":false},"repo":{"id":29534532,"name":"csympy","full_name":"Sumith1896/csympy","owner":{"login":"Sumith1896","id":9217608,"avatar_url":"https://avatars.githubusercontent.com/u/9217608?v=3","gravatar_id":"","url":"https://api.github.com/users/Sumith1896","html_url":"https://github.com/Sumith1896","followers_url":"https://api.github.com/users/Sumith1896/followers","following_url":"https://api.github.com/users/Sumith1896/following{/other_user}","gists_url":"https://api.github.com/users/Sumith1896/gists{/gist_id}","starred_url":"https://api.github.com/users/Sumith1896/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Sumith1896/subscriptions","organizations_url":"https://api.github.com/users/Sumith1896/orgs","repos_url":"https://api.github.com/users/Sumith1896/repos","events_url":"https://api.github.com/users/Sumith1896/events{/privacy}","received_events_url":"https://api.github.com/users/Sumith1896/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Sumith1896/csympy","description":"Fast symbolic manipulation library, written in C++","fork":true,"url":"https://api.github.com/repos/Sumith1896/csympy","forks_url":"https://api.github.com/repos/Sumith1896/csympy/forks","keys_url":"https://api.github.com/repos/Sumith1896/csympy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Sumith1896/csympy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Sumith1896/csympy/teams","hooks_url":"https://api.github.com/repos/Sumith1896/csympy/hooks","issue_events_url":"https://api.github.com/repos/Sumith1896/csympy/issues/events{/number}","events_url":"https://api.github.com/repos/Sumith1896/csympy/events","assignees_url":"https://api.github.com/repos/Sumith1896/csympy/assignees{/user}","branches_url":"https://api.github.com/repos/Sumith1896/csympy/branches{/branch}","tags_url":"https://api.github.com/repos/Sumith1896/csympy/tags","blobs_url":"https://api.github.com/repos/Sumith1896/csympy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Sumith1896/csympy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Sumith1896/csympy/git/refs{/sha}","trees_url":"https://api.github.com/repos/Sumith1896/csympy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Sumith1896/csympy/statuses/{sha}","languages_url":"https://api.github.com/repos/Sumith1896/csympy/languages","stargazers_url":"https://api.github.com/repos/Sumith1896/csympy/stargazers","contributors_url":"https://api.github.com/repos/Sumith1896/csympy/contributors","subscribers_url":"https://api.github.com/repos/Sumith1896/csympy/subscribers","subscription_url":"https://api.github.com/repos/Sumith1896/csympy/subscription","commits_url":"https://api.github.com/repos/Sumith1896/csympy/commits{/sha}","git_commits_url":"https://api.github.com/repos/Sumith1896/csympy/git/commits{/sha}","comments_url":"https://api.github.com/repos/Sumith1896/csympy/comments{/number}","issue_comment_url":"https://api.github.com/repos/Sumith1896/csympy/issues/comments{/number}","contents_url":"https://api.github.com/repos/Sumith1896/csympy/contents/{+path}","compare_url":"https://api.github.com/repos/Sumith1896/csympy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Sumith1896/csympy/merges","archive_url":"https://api.github.com/repos/Sumith1896/csympy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Sumith1896/csympy/downloads","issues_url":"https://api.github.com/repos/Sumith1896/csympy/issues{/number}","pulls_url":"https://api.github.com/repos/Sumith1896/csympy/pulls{/number}","milestones_url":"https://api.github.com/repos/Sumith1896/csympy/milestones{/number}","notifications_url":"https://api.github.com/repos/Sumith1896/csympy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Sumith1896/csympy/labels{/name}","releases_url":"https://api.github.com/repos/Sumith1896/csympy/releases{/id}","created_at":"2015-01-20T14:46:11Z","updated_at":"2015-03-26T16:28:05Z","pushed_at":"2015-08-17T16:39:53Z","git_url":"git://github.com/Sumith1896/csympy.git","ssh_url":"git@github.com:Sumith1896/csympy.git","clone_url":"https://github.com/Sumith1896/csympy.git","svn_url":"https://github.com/Sumith1896/csympy","homepage":"http://sympy.org","size":3742,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"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":"sympy:master","ref":"master","sha":"ca72df2bc236da1bf2dc7b06521bce297d037c4d","user":{"login":"sympy","id":260832,"avatar_url":"https://avatars.githubusercontent.com/u/260832?v=3","gravatar_id":"","url":"https://api.github.com/users/sympy","html_url":"https://github.com/sympy","followers_url":"https://api.github.com/users/sympy/followers","following_url":"https://api.github.com/users/sympy/following{/other_user}","gists_url":"https://api.github.com/users/sympy/gists{/gist_id}","starred_url":"https://api.github.com/users/sympy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sympy/subscriptions","organizations_url":"https://api.github.com/users/sympy/orgs","repos_url":"https://api.github.com/users/sympy/repos","events_url":"https://api.github.com/users/sympy/events{/privacy}","received_events_url":"https://api.github.com/users/sympy/received_events","type":"Organization","site_admin":false},"repo":{"id":42376,"name":"symengine","full_name":"sympy/symengine","owner":{"login":"sympy","id":260832,"avatar_url":"https://avatars.githubusercontent.com/u/260832?v=3","gravatar_id":"","url":"https://api.github.com/users/sympy","html_url":"https://github.com/sympy","followers_url":"https://api.github.com/users/sympy/followers","following_url":"https://api.github.com/users/sympy/following{/other_user}","gists_url":"https://api.github.com/users/sympy/gists{/gist_id}","starred_url":"https://api.github.com/users/sympy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sympy/subscriptions","organizations_url":"https://api.github.com/users/sympy/orgs","repos_url":"https://api.github.com/users/sympy/repos","events_url":"https://api.github.com/users/sympy/events{/privacy}","received_events_url":"https://api.github.com/users/sympy/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sympy/symengine","description":"SymEngine is a fast symbolic manipulation library, written in C++ (SymEngine was previously called CSymPy)","fork":false,"url":"https://api.github.com/repos/sympy/symengine","forks_url":"https://api.github.com/repos/sympy/symengine/forks","keys_url":"https://api.github.com/repos/sympy/symengine/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sympy/symengine/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sympy/symengine/teams","hooks_url":"https://api.github.com/repos/sympy/symengine/hooks","issue_events_url":"https://api.github.com/repos/sympy/symengine/issues/events{/number}","events_url":"https://api.github.com/repos/sympy/symengine/events","assignees_url":"https://api.github.com/repos/sympy/symengine/assignees{/user}","branches_url":"https://api.github.com/repos/sympy/symengine/branches{/branch}","tags_url":"https://api.github.com/repos/sympy/symengine/tags","blobs_url":"https://api.github.com/repos/sympy/symengine/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sympy/symengine/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sympy/symengine/git/refs{/sha}","trees_url":"https://api.github.com/repos/sympy/symengine/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sympy/symengine/statuses/{sha}","languages_url":"https://api.github.com/repos/sympy/symengine/languages","stargazers_url":"https://api.github.com/repos/sympy/symengine/stargazers","contributors_url":"https://api.github.com/repos/sympy/symengine/contributors","subscribers_url":"https://api.github.com/repos/sympy/symengine/subscribers","subscription_url":"https://api.github.com/repos/sympy/symengine/subscription","commits_url":"https://api.github.com/repos/sympy/symengine/commits{/sha}","git_commits_url":"https://api.github.com/repos/sympy/symengine/git/commits{/sha}","comments_url":"https://api.github.com/repos/sympy/symengine/comments{/number}","issue_comment_url":"https://api.github.com/repos/sympy/symengine/issues/comments{/number}","contents_url":"https://api.github.com/repos/sympy/symengine/contents/{+path}","compare_url":"https://api.github.com/repos/sympy/symengine/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sympy/symengine/merges","archive_url":"https://api.github.com/repos/sympy/symengine/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sympy/symengine/downloads","issues_url":"https://api.github.com/repos/sympy/symengine/issues{/number}","pulls_url":"https://api.github.com/repos/sympy/symengine/pulls{/number}","milestones_url":"https://api.github.com/repos/sympy/symengine/milestones{/number}","notifications_url":"https://api.github.com/repos/sympy/symengine/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sympy/symengine/labels{/name}","releases_url":"https://api.github.com/repos/sympy/symengine/releases{/id}","created_at":"2008-08-13T18:40:14Z","updated_at":"2015-08-11T16:28:23Z","pushed_at":"2015-08-18T21:21:31Z","git_url":"git://github.com/sympy/symengine.git","ssh_url":"git@github.com:sympy/symengine.git","clone_url":"https://github.com/sympy/symengine.git","svn_url":"https://github.com/sympy/symengine","homepage":"http://sympy.org","size":23507,"stargazers_count":73,"watchers_count":73,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":62,"mirror_url":null,"open_issues_count":93,"forks":62,"open_issues":93,"watchers":73,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/sympy/symengine/pulls/597"},"html":{"href":"https://github.com/sympy/symengine/pull/597"},"issue":{"href":"https://api.github.com/repos/sympy/symengine/issues/597"},"comments":{"href":"https://api.github.com/repos/sympy/symengine/issues/597/comments"},"review_comments":{"href":"https://api.github.com/repos/sympy/symengine/pulls/597/comments"},"review_comment":{"href":"https://api.github.com/repos/sympy/symengine/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/sympy/symengine/pulls/597/commits"},"statuses":{"href":"https://api.github.com/repos/sympy/symengine/statuses/a8c3aede497247e1c6ec79d4131f3464df12e227"}}}}