{"action":"created","comment":{"url":"https://api.github.com/repos/QuantStack/xtensor/pulls/comments/167319050","pull_request_review_id":95520653,"id":167319050,"diff_hunk":"@@ -0,0 +1,307 @@\n+.. Copyright (c) 2016, Johan Mabille, Sylvain Corlay and Wolf Vollprecht\n+\n+   Distributed under the terms of the BSD 3-Clause License.\n+\n+   The full license is in the file LICENSE, distributed with this software.\n+\n+.. _concepts-label:\n+\n+Concepts\n+========\n+\n+`xtensor`'s core is built upon key concepts captured in interfaces that are put together in\n+derived classes through CRTP and multiple inheritance. Interfaces and classes that model\n+expressions implement value semantic. CRTP and value semantic achieve static polymorphism and\n+avoids performance overhead of virtual methods and dynamic dispatching.\n+\n+xexpression\n+~~~~~~~~~~~\n+\n+``xexpression`` is the base class for all expression classes. It is a CRTP base whose template\n+parameter must be the most derived class in the hierarchy. For instance, if ``A`` inherits\n+from ``B`` which in turn inherits from ``xexpression``, then ``B`` should be a template\n+class whose template parameter is ``A`` and should forward this parameter to ``xexpression``:\n+\n+.. code::\n+\n+    #include \"xtensor/xexpression.hpp\"\n+\n+    template <class T>\n+    class B : public xexpression<T>\n+    {\n+        // ...\n+    };\n+\n+    class A : public B<A>\n+    {\n+        // ...\n+    };\n+\n+``xexpression`` only provides three overloads of a same function, that cast an ``xexpression``\n+object to the most inheriting type, depending on the nature of the object (lvalue,\n+const lvalue or rvalue):\n+\n+.. code::\n+\n+    derived_type& derived_cast() & noexcept;\n+    const derived_type& derived_cast() & noexcept;\n+    derived_type derived_cast() && noexcept;\n+\n+.. _xiterable-concept-label:\n+\n+xiterable\n+~~~~~~~~~\n+\n+The iterable concept is modeled by two classes, ``xconst_iterable`` and ``xiterable``, defined\n+in ``xtensor/xiterable.hpp``. ``xconst_iterable`` provides types and methods for iterating on\n+constant expressions, similar to the ones provided by the STL containers. Unlike the STL, the\n+methods of ``xconst_iterable`` and ``xiterable`` are templated by a layout parameter that allows\n+you to iterate over a N-dimensional expression in row-major or column-major.\n+\n+.. code::\n+\n+    template <class L>\n+    const_iterator begin() const noexcept;\n+    template <class L>\n+    const_iterator end() const noexcept;\n+    template <class L>\n+    const_iterator cbegin() const noexcept;\n+    template <class L>\n+    const_iterator cend() const noexcept;\n+\n+    template <class L>\n+    const_reverse_iterator rbegin() const noexcept;\n+    template <class L>\n+    const_reverse_iterator rend() const noexcept;\n+    template <class L>\n+    const_reverse_iterator crbegin() const noexcept;\n+    template <class L>\n+    const_reverse_iterator crend() const noexcept;\n+\n+.. image:: iteration.svg\n+\n+This template parameter is defaulted to ``DEFAULT_LAYOUT`` (see :ref:`configuration-label`), so\n+that `xtensor` expressions can be used in generic code such as:\n+\n+.. code::\n+\n+    std::copy(a.cbegin(), a.cend(), b.begin());\n+\n+where ``a`` and ``b`` can be arbitrary types (from `xtensor`, the STL or any external library)\n+supporting standard iteration.\n+\n+``xiterable`` inherits from ``xconst_iterable`` and provides non-const counterpart of methods\n+defined in ``xconst_iterable``. Like ``xexpression``, both are CRTP classes whose template\n+parameter must be the most derived type.\n+\n+Besides traditional methods for iterating, ``xconst_iterable`` and ``xiterable`` provide overloads\n+taking a shape parameter. This allows to iterate over an expression as if it was broadcast to the\n+given shape:\n+\n+.. code::\n+\n+    #include <algorithm>\n+    #include <iterator>\n+    #include <iostream>\n+    #include \"xtensor/xarray.hpp\"\n+\n+    int main(int argc, char* argv[])\n+    {\n+        xt::xarray<int> a = { 1, 2, 3 };\n+        std::vector<std::size_t> shape = { 2, 3 };\n+        std::copy(a.cbegin(shape), a.cend(shape), std::output_iterator(std::cout, \" \"));\n+        // output: 1 2 3 1 2 3\n+    }\n+\n+Iterators returned by methods defined in ``xconst_iterable`` and ``xiterable`` are random access\n+iterators.\n+\n+.. _xsemantic-concept-label:\n+\n+xsemantic\n+~~~~~~~~~\n+\n+The ``xsemantic_base`` interface provides methods for assigning an expression:\n+\n+.. code::\n+\n+    template <class E>\n+    disable_xexpression<E, derived_type&> operator+=(const E&);\n+\n+    template <class E>\n+    derived_type& operator+=(const xexpression<E>&);\n+\n+and similar methods for ``operator-=``, ``operator*=``, ``operator/=``, ``operator%=``,\n+``operator&=``, ``operator|=`` and ``operator^=``.\n+\n+The first overload is meant for computed assignment involving a scalar; it allows to write code like\n+\n+.. code::\n+\n+    #include \"xtensor/xarray.hpp\"\n+    #include \"xio.hpp\"\n+\n+    int main(int argc, char* argv)\n+    {\n+        xarray<int> a = { 1, 2, 3 };\n+        a += 4;\n+        std::cout << a << std::endl;\n+        // outputs { 5, 6, 7 }\n+    }\n+\n+We rely on SFINAE to remove this overload from the overload resolution set when the parameter that we want\n+to assign is not a scalar, avoiding ambiguity.\n+\n+All operator-based methods taking an ``xexpression`` parameter do not perform a direct assignment, instead\n+they compute a temporary before calling the ``assign`` method. Thus, if ``a`` and ``b`` are expressions,\n+the following\n+\n+.. code::\n+\n+    a += b\n+\n+is equivalent to\n+\n+.. code::\n+\n+    temporary_type tmp = a + b;\n+    a.assign(tmp);\n+\n+Temporaries can be avoided with the assign-based methods:\n+\n+.. code::\n+\n+    template <class E>\n+    derived_type& plus_assign(const xexpression<E>&);\n+    template <class E>\n+    derived_type&> minus_assign(const xexpression<E>&);\n+    template <class E>\n+    derived_type& multiplies_assign(const xexpression<E>&);\n+    template <class E>\n+    derived_type& divides_assign(const xexpression<E>&);\n+    template <class E>\n+    derived_type& modulus_assign(const xexpression<E>&);\n+\n+``xsemantic_base`` is a CRTP class whose parameter must be the most derived type in the hierarchy. It inherits\n+from ``xexpression`` and forwards its template parameter to this latter one.\n+\n+``xsemantic_base`` also provides a assignment operator that takes an ``xexpression`` in its protected section:\n+\n+.. code::\n+\n+    template <class E>\n+    derived_type& operator=(const xexpression<E>&);\n+\n+Like computed assignment operators, it evaluates the expression inside a temporary before calling the ``assign``\n+method. Classes inheriting from ``xsemantic_base`` must redeclare this method either in their protected section\n+(if they are not final classes) or in their public section. In both cases, they should forward the call to their\n+base class.\n+\n+Two refinements of this concept are provided, ``xcontainer_semantic`` and ``xview_semantic``. Refer to the\n+:ref:`xtensor-assign-label` section for more details about semantic classes and how they're involved in expression\n+assignment.\n+\n+xsemantic classes hierarchy:\n+\n+.. image:: xsemantic_classes.svg\n+\n+.. _xcontainer-concept-label:\n+\n+xcontainer\n+~~~~~~~~~~\n+\n+The ``xcontainer`` class provides methods for container-based expressions. It does not hold any data, this is delegated\n+to inheriting classes. It assumes the data are stored using a strided-index scheme. ``xcontainer`` defines the following\n+methods:\n+\n+**Shape, strides and size**\n+\n+.. code::\n+\n+    size_type size() const noexcept;\n+    size_type dimension() const noexcept;\n+\n+    const inner_shpae_type& shape() const noexcept;\n+    const inner_strides_type& strides() const noexcept;\n+    const inner_backstrides_type& backstrides() const noexcept;\n+\n+**Data access methods**\n+\n+.. code::\n+\n+    template <class... Args>\n+    const_reference operator()(Args... args) const;\n+\n+    template <class... Args>\n+    const_reference at(Args... args) const;\n+\n+    template <class S>\n+    disable_integral_t<S, const_reference> operator[](const S& index) const;\n+\n+    template <class I>\n+    const_reference operator[](std::initialize_list<I> index) const;\n+\n+    template <class It>\n+    const_reference element(It first, It last) const;\n+\n+    const container_type& data() const;\n+\n+(and their non-const counterpart)\n+\n+**Broadcasting methods**\n+\n+.. code::\n+\n+    template <class S>\n+    bool broadcast_shape(const S& shape) const;\n+\n+    template <class S>\n+    bool is_trivial_broadcast(const S& strides) const;\n+\n+Lower-level methods are also provided, meant for optimized assignment and BLAS bindings.\n+They are covered in the :ref:`xtensor-assign-label` section.\n+\n+If you read the entire code of ``xcontainer``, you'll notice that two types are defined for shape,\n+strides and backstrides: ``shape_type`` and ``inner_shape_type``, ``strides_type`` and\n+``inner_strides_type``, and ``backstrides_type`` and ``inner_backstrides_type``.\n+\n+The inner types are used for storing data, while the other ones are used for reshape and resize\n+APIs. This way, it is possible to write in C++ a wrapper of a python structure that holds the shape,\n+strides and backstrides allocated on the python side, and provide methods for resizing and reshaping\n+that accept structures allocated on the C++ side.\n+\n+``xstrided_container`` inherits from ``xcontainer``; it represents a container that holds its shape\n+and strides. It provides methods for reshaping the container:\n+\n+.. code::\n+\n+    template <class S = shape_type>\n+    void resize(D&& shape, bool force = false);\n+\n+    template <class S = shape_type>\n+    void resize(S&& shape, layout_type l);\n+\n+    template <class S = shape_type>\n+    void resize(S&& shape, const strides_type& strides);\n+\n+    template <class S = shape_type>\n+    void reshape(S&& shape, layout_type l);\n+\n+Both ``xstrided_container`` and ``xcontainer`` are CRTP classes whose template parameter must be\n+the most derived type in the hierarchy. Besides, ``xcontainer`` inherits from ``xiterable``,\n+thus providing iteration methods.\n+\n+.. image:: xcontainer_classes.svg\n+\n+xfunction_base\n+~~~~~~~~~~~~~~\n+\n+The ``xfunction_base`` is used to model mathematical operations and functions. It provides similar\n+methods to the ones defined in ``xcontainer``, and embeds the functor describing the operation and\n+its operands.\n+\n+Like other interfaces, it is a CRTP class whose template parameter must be the most derived type of\n+the hierarchy. It inherits from ``xconst_iterable``, thus providing iteration methods.\n+\n+The fact that ``xfunction_base`` is not a final class and needs to be inherited allows to define function","path":"docs/source/developer/concepts.rst","position":306,"original_position":306,"commit_id":"a1a2866a536f1467ef816f3fa8b7a9f0e5bbb5a2","original_commit_id":"a1a2866a536f1467ef816f3fa8b7a9f0e5bbb5a2","user":{"login":"SylvainCorlay","id":2397974,"avatar_url":"https://avatars0.githubusercontent.com/u/2397974?v=4","gravatar_id":"","url":"https://api.github.com/users/SylvainCorlay","html_url":"https://github.com/SylvainCorlay","followers_url":"https://api.github.com/users/SylvainCorlay/followers","following_url":"https://api.github.com/users/SylvainCorlay/following{/other_user}","gists_url":"https://api.github.com/users/SylvainCorlay/gists{/gist_id}","starred_url":"https://api.github.com/users/SylvainCorlay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SylvainCorlay/subscriptions","organizations_url":"https://api.github.com/users/SylvainCorlay/orgs","repos_url":"https://api.github.com/users/SylvainCorlay/repos","events_url":"https://api.github.com/users/SylvainCorlay/events{/privacy}","received_events_url":"https://api.github.com/users/SylvainCorlay/received_events","type":"User","site_admin":false},"body":"needs to be inherited from allows","created_at":"2018-02-09T19:09:51Z","updated_at":"2018-02-09T19:24:26Z","html_url":"https://github.com/QuantStack/xtensor/pull/633#discussion_r167319050","pull_request_url":"https://api.github.com/repos/QuantStack/xtensor/pulls/633","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/QuantStack/xtensor/pulls/comments/167319050"},"html":{"href":"https://github.com/QuantStack/xtensor/pull/633#discussion_r167319050"},"pull_request":{"href":"https://api.github.com/repos/QuantStack/xtensor/pulls/633"}}},"pull_request":{"url":"https://api.github.com/repos/QuantStack/xtensor/pulls/633","id":168252356,"html_url":"https://github.com/QuantStack/xtensor/pull/633","diff_url":"https://github.com/QuantStack/xtensor/pull/633.diff","patch_url":"https://github.com/QuantStack/xtensor/pull/633.patch","issue_url":"https://api.github.com/repos/QuantStack/xtensor/issues/633","number":633,"state":"open","locked":false,"title":"Dev doc","user":{"login":"JohanMabille","id":6754742,"avatar_url":"https://avatars0.githubusercontent.com/u/6754742?v=4","gravatar_id":"","url":"https://api.github.com/users/JohanMabille","html_url":"https://github.com/JohanMabille","followers_url":"https://api.github.com/users/JohanMabille/followers","following_url":"https://api.github.com/users/JohanMabille/following{/other_user}","gists_url":"https://api.github.com/users/JohanMabille/gists{/gist_id}","starred_url":"https://api.github.com/users/JohanMabille/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohanMabille/subscriptions","organizations_url":"https://api.github.com/users/JohanMabille/orgs","repos_url":"https://api.github.com/users/JohanMabille/repos","events_url":"https://api.github.com/users/JohanMabille/events{/privacy}","received_events_url":"https://api.github.com/users/JohanMabille/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-02-09T14:25:11Z","updated_at":"2018-02-09T19:24:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"af383654191afbd9c4958943955ee2d45d6b4413","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/QuantStack/xtensor/pulls/633/commits","review_comments_url":"https://api.github.com/repos/QuantStack/xtensor/pulls/633/comments","review_comment_url":"https://api.github.com/repos/QuantStack/xtensor/pulls/comments{/number}","comments_url":"https://api.github.com/repos/QuantStack/xtensor/issues/633/comments","statuses_url":"https://api.github.com/repos/QuantStack/xtensor/statuses/a1a2866a536f1467ef816f3fa8b7a9f0e5bbb5a2","head":{"label":"JohanMabille:dev_doc","ref":"dev_doc","sha":"a1a2866a536f1467ef816f3fa8b7a9f0e5bbb5a2","user":{"login":"JohanMabille","id":6754742,"avatar_url":"https://avatars0.githubusercontent.com/u/6754742?v=4","gravatar_id":"","url":"https://api.github.com/users/JohanMabille","html_url":"https://github.com/JohanMabille","followers_url":"https://api.github.com/users/JohanMabille/followers","following_url":"https://api.github.com/users/JohanMabille/following{/other_user}","gists_url":"https://api.github.com/users/JohanMabille/gists{/gist_id}","starred_url":"https://api.github.com/users/JohanMabille/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohanMabille/subscriptions","organizations_url":"https://api.github.com/users/JohanMabille/orgs","repos_url":"https://api.github.com/users/JohanMabille/repos","events_url":"https://api.github.com/users/JohanMabille/events{/privacy}","received_events_url":"https://api.github.com/users/JohanMabille/received_events","type":"User","site_admin":false},"repo":{"id":72729403,"name":"xtensor","full_name":"JohanMabille/xtensor","owner":{"login":"JohanMabille","id":6754742,"avatar_url":"https://avatars0.githubusercontent.com/u/6754742?v=4","gravatar_id":"","url":"https://api.github.com/users/JohanMabille","html_url":"https://github.com/JohanMabille","followers_url":"https://api.github.com/users/JohanMabille/followers","following_url":"https://api.github.com/users/JohanMabille/following{/other_user}","gists_url":"https://api.github.com/users/JohanMabille/gists{/gist_id}","starred_url":"https://api.github.com/users/JohanMabille/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohanMabille/subscriptions","organizations_url":"https://api.github.com/users/JohanMabille/orgs","repos_url":"https://api.github.com/users/JohanMabille/repos","events_url":"https://api.github.com/users/JohanMabille/events{/privacy}","received_events_url":"https://api.github.com/users/JohanMabille/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/JohanMabille/xtensor","description":"Multi-dimensional Arrays with Broadcasting and Lazy Computing","fork":true,"url":"https://api.github.com/repos/JohanMabille/xtensor","forks_url":"https://api.github.com/repos/JohanMabille/xtensor/forks","keys_url":"https://api.github.com/repos/JohanMabille/xtensor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JohanMabille/xtensor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JohanMabille/xtensor/teams","hooks_url":"https://api.github.com/repos/JohanMabille/xtensor/hooks","issue_events_url":"https://api.github.com/repos/JohanMabille/xtensor/issues/events{/number}","events_url":"https://api.github.com/repos/JohanMabille/xtensor/events","assignees_url":"https://api.github.com/repos/JohanMabille/xtensor/assignees{/user}","branches_url":"https://api.github.com/repos/JohanMabille/xtensor/branches{/branch}","tags_url":"https://api.github.com/repos/JohanMabille/xtensor/tags","blobs_url":"https://api.github.com/repos/JohanMabille/xtensor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JohanMabille/xtensor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JohanMabille/xtensor/git/refs{/sha}","trees_url":"https://api.github.com/repos/JohanMabille/xtensor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JohanMabille/xtensor/statuses/{sha}","languages_url":"https://api.github.com/repos/JohanMabille/xtensor/languages","stargazers_url":"https://api.github.com/repos/JohanMabille/xtensor/stargazers","contributors_url":"https://api.github.com/repos/JohanMabille/xtensor/contributors","subscribers_url":"https://api.github.com/repos/JohanMabille/xtensor/subscribers","subscription_url":"https://api.github.com/repos/JohanMabille/xtensor/subscription","commits_url":"https://api.github.com/repos/JohanMabille/xtensor/commits{/sha}","git_commits_url":"https://api.github.com/repos/JohanMabille/xtensor/git/commits{/sha}","comments_url":"https://api.github.com/repos/JohanMabille/xtensor/comments{/number}","issue_comment_url":"https://api.github.com/repos/JohanMabille/xtensor/issues/comments{/number}","contents_url":"https://api.github.com/repos/JohanMabille/xtensor/contents/{+path}","compare_url":"https://api.github.com/repos/JohanMabille/xtensor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JohanMabille/xtensor/merges","archive_url":"https://api.github.com/repos/JohanMabille/xtensor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JohanMabille/xtensor/downloads","issues_url":"https://api.github.com/repos/JohanMabille/xtensor/issues{/number}","pulls_url":"https://api.github.com/repos/JohanMabille/xtensor/pulls{/number}","milestones_url":"https://api.github.com/repos/JohanMabille/xtensor/milestones{/number}","notifications_url":"https://api.github.com/repos/JohanMabille/xtensor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JohanMabille/xtensor/labels{/name}","releases_url":"https://api.github.com/repos/JohanMabille/xtensor/releases{/id}","deployments_url":"https://api.github.com/repos/JohanMabille/xtensor/deployments","created_at":"2016-11-03T09:29:23Z","updated_at":"2016-11-03T09:29:25Z","pushed_at":"2018-02-09T14:24:26Z","git_url":"git://github.com/JohanMabille/xtensor.git","ssh_url":"git@github.com:JohanMabille/xtensor.git","clone_url":"https://github.com/JohanMabille/xtensor.git","svn_url":"https://github.com/JohanMabille/xtensor","homepage":null,"size":2922,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"QuantStack:master","ref":"master","sha":"42f2f2c01cc4976d9e1e4f7e429bdee349317906","user":{"login":"QuantStack","id":19627246,"avatar_url":"https://avatars1.githubusercontent.com/u/19627246?v=4","gravatar_id":"","url":"https://api.github.com/users/QuantStack","html_url":"https://github.com/QuantStack","followers_url":"https://api.github.com/users/QuantStack/followers","following_url":"https://api.github.com/users/QuantStack/following{/other_user}","gists_url":"https://api.github.com/users/QuantStack/gists{/gist_id}","starred_url":"https://api.github.com/users/QuantStack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/QuantStack/subscriptions","organizations_url":"https://api.github.com/users/QuantStack/orgs","repos_url":"https://api.github.com/users/QuantStack/repos","events_url":"https://api.github.com/users/QuantStack/events{/privacy}","received_events_url":"https://api.github.com/users/QuantStack/received_events","type":"Organization","site_admin":false},"repo":{"id":72343220,"name":"xtensor","full_name":"QuantStack/xtensor","owner":{"login":"QuantStack","id":19627246,"avatar_url":"https://avatars1.githubusercontent.com/u/19627246?v=4","gravatar_id":"","url":"https://api.github.com/users/QuantStack","html_url":"https://github.com/QuantStack","followers_url":"https://api.github.com/users/QuantStack/followers","following_url":"https://api.github.com/users/QuantStack/following{/other_user}","gists_url":"https://api.github.com/users/QuantStack/gists{/gist_id}","starred_url":"https://api.github.com/users/QuantStack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/QuantStack/subscriptions","organizations_url":"https://api.github.com/users/QuantStack/orgs","repos_url":"https://api.github.com/users/QuantStack/repos","events_url":"https://api.github.com/users/QuantStack/events{/privacy}","received_events_url":"https://api.github.com/users/QuantStack/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/QuantStack/xtensor","description":"Multi-dimensional arrays with broadcasting and lazy computing","fork":false,"url":"https://api.github.com/repos/QuantStack/xtensor","forks_url":"https://api.github.com/repos/QuantStack/xtensor/forks","keys_url":"https://api.github.com/repos/QuantStack/xtensor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/QuantStack/xtensor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/QuantStack/xtensor/teams","hooks_url":"https://api.github.com/repos/QuantStack/xtensor/hooks","issue_events_url":"https://api.github.com/repos/QuantStack/xtensor/issues/events{/number}","events_url":"https://api.github.com/repos/QuantStack/xtensor/events","assignees_url":"https://api.github.com/repos/QuantStack/xtensor/assignees{/user}","branches_url":"https://api.github.com/repos/QuantStack/xtensor/branches{/branch}","tags_url":"https://api.github.com/repos/QuantStack/xtensor/tags","blobs_url":"https://api.github.com/repos/QuantStack/xtensor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/QuantStack/xtensor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/QuantStack/xtensor/git/refs{/sha}","trees_url":"https://api.github.com/repos/QuantStack/xtensor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/QuantStack/xtensor/statuses/{sha}","languages_url":"https://api.github.com/repos/QuantStack/xtensor/languages","stargazers_url":"https://api.github.com/repos/QuantStack/xtensor/stargazers","contributors_url":"https://api.github.com/repos/QuantStack/xtensor/contributors","subscribers_url":"https://api.github.com/repos/QuantStack/xtensor/subscribers","subscription_url":"https://api.github.com/repos/QuantStack/xtensor/subscription","commits_url":"https://api.github.com/repos/QuantStack/xtensor/commits{/sha}","git_commits_url":"https://api.github.com/repos/QuantStack/xtensor/git/commits{/sha}","comments_url":"https://api.github.com/repos/QuantStack/xtensor/comments{/number}","issue_comment_url":"https://api.github.com/repos/QuantStack/xtensor/issues/comments{/number}","contents_url":"https://api.github.com/repos/QuantStack/xtensor/contents/{+path}","compare_url":"https://api.github.com/repos/QuantStack/xtensor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/QuantStack/xtensor/merges","archive_url":"https://api.github.com/repos/QuantStack/xtensor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/QuantStack/xtensor/downloads","issues_url":"https://api.github.com/repos/QuantStack/xtensor/issues{/number}","pulls_url":"https://api.github.com/repos/QuantStack/xtensor/pulls{/number}","milestones_url":"https://api.github.com/repos/QuantStack/xtensor/milestones{/number}","notifications_url":"https://api.github.com/repos/QuantStack/xtensor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/QuantStack/xtensor/labels{/name}","releases_url":"https://api.github.com/repos/QuantStack/xtensor/releases{/id}","deployments_url":"https://api.github.com/repos/QuantStack/xtensor/deployments","created_at":"2016-10-30T10:40:13Z","updated_at":"2018-02-08T06:51:10Z","pushed_at":"2018-02-09T18:28:15Z","git_url":"git://github.com/QuantStack/xtensor.git","ssh_url":"git@github.com:QuantStack/xtensor.git","clone_url":"https://github.com/QuantStack/xtensor.git","svn_url":"https://github.com/QuantStack/xtensor","homepage":"http://quantstack.net/xtensor","size":2758,"stargazers_count":529,"watchers_count":529,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":65,"mirror_url":null,"archived":false,"open_issues_count":46,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause"},"forks":65,"open_issues":46,"watchers":529,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/QuantStack/xtensor/pulls/633"},"html":{"href":"https://github.com/QuantStack/xtensor/pull/633"},"issue":{"href":"https://api.github.com/repos/QuantStack/xtensor/issues/633"},"comments":{"href":"https://api.github.com/repos/QuantStack/xtensor/issues/633/comments"},"review_comments":{"href":"https://api.github.com/repos/QuantStack/xtensor/pulls/633/comments"},"review_comment":{"href":"https://api.github.com/repos/QuantStack/xtensor/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/QuantStack/xtensor/pulls/633/commits"},"statuses":{"href":"https://api.github.com/repos/QuantStack/xtensor/statuses/a1a2866a536f1467ef816f3fa8b7a9f0e5bbb5a2"}},"author_association":"OWNER"}}
{"actor":{"display_login":"SylvainCorlay"}}