{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":88188361,"defaultBranch":"master","name":"Arraymancer","ownerLogin":"mratsim","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2017-04-13T17:10:19.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/22738317?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1726828354.0","currentOid":""},"activityList":{"items":[{"before":"7a93d3858176e27ab0b1fe3ef39f0814b7f9d4c4","after":"5a28ccfd08eece449276073cbc498a6c63c33906","ref":"refs/heads/allowOpenArrayFixCI","pushedAt":"2024-09-20T10:58:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"use AWS mirror from PyTorch for MNIST download","shortMessageHtmlLink":"use AWS mirror from PyTorch for MNIST download"}},{"before":"836c6b25da5747b46c7ea0063650b9bd0bc63bb0","after":"7a93d3858176e27ab0b1fe3ef39f0814b7f9d4c4","ref":"refs/heads/allowOpenArrayFixCI","pushedAt":"2024-09-20T10:35:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"need a space, duh","shortMessageHtmlLink":"need a space, duh"}},{"before":null,"after":"836c6b25da5747b46c7ea0063650b9bd0bc63bb0","ref":"refs/heads/allowOpenArrayFixCI","pushedAt":"2024-09-20T10:32:34.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"fix CI by compiling tests with `-d:ssl`","shortMessageHtmlLink":"fix CI by compiling tests with -d:ssl"}},{"before":"58abfd1409823351057dff9a068163799da2072c","after":"9cfe7578d2f94719dcbcd5c68c3dfb2656e4f670","ref":"refs/heads/master","pushedAt":"2024-09-20T09:30:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Update arraymancer dependencies (#665)\n\nThe dependency with nim was very out of date (which caused problems with nimble and nim's language server). I'm also taking the chance to make small bumps to some of the other dependencies.","shortMessageHtmlLink":"Update arraymancer dependencies (#665)"}},{"before":"caf0d8d44de137a152d537d46ec0d4851bdf9405","after":"58abfd1409823351057dff9a068163799da2072c","ref":"refs/heads/master","pushedAt":"2024-08-22T09:15:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Add support for running some key `bitops` functions on integer Tensors (#661)\n\nWhile we already supported most of nim's std/math features in Arraymancer, we did not support any of the std/bitops operators and procedures yet. These are very useful to implement some important algorithms such as gray coding and others.\r\n\r\nThis commit adds some of the most important std/bitops features. These will soon be used in `impulse` to implement some new algorithms.","shortMessageHtmlLink":"Add support for running some key bitops functions on integer Tensors ("}},{"before":"35adfc10a21dd54e7695bc653a4c8c0887a3f48e","after":"caf0d8d44de137a152d537d46ec0d4851bdf9405","ref":"refs/heads/master","pushedAt":"2024-08-12T10:00:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Make the output of `ismember` have the same shape as its first input (#657)\n\nAlso add documentation for the `ismember` function.","shortMessageHtmlLink":"Make the output of ismember have the same shape as its first input (#…"}},{"before":"b04691f68043f4ddec52cfb153bc92098fa2e75c","after":"35adfc10a21dd54e7695bc653a4c8c0887a3f48e","ref":"refs/heads/master","pushedAt":"2024-07-17T13:48:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mratsim","name":"Mamy Ratsimbazafy","path":"/mratsim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22738317?s=80&v=4"},"commit":{"message":"Non-contiguous tensor iteration optimization (#659)\n\n* optimized stridedIteration for non-contiguous tensors by explicitly looping over last two axes\r\n\r\n* fixed an introduced stridedIteration bug for iter_offset != 0 or iter_size != tensor size\r\n\r\n* made reshape use map_inline instead of apply2_inline\r\n\r\n* fixed a bug in reshape modification (was returning unintialized tensor when copying)\r\n\r\n* refactored the loop code, added asserts for better clarity\r\n\r\n* added a comment for the stridedIterationLoop","shortMessageHtmlLink":"Non-contiguous tensor iteration optimization (#659)"}},{"before":"c95e1c78048a02eda9ac8ad7bb2dd189dbdc1902","after":"b04691f68043f4ddec52cfb153bc92098fa2e75c","ref":"refs/heads/master","pushedAt":"2024-06-28T12:11:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"mratsim","name":"Mamy Ratsimbazafy","path":"/mratsim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22738317?s=80&v=4"},"commit":{"message":"Create FUNDING.yml","shortMessageHtmlLink":"Create FUNDING.yml"}},{"before":"fa856b07064295ad1db88f942809b063f489e327","after":"c95e1c78048a02eda9ac8ad7bb2dd189dbdc1902","ref":"refs/heads/master","pushedAt":"2024-06-16T17:06:27.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"update changelog, push v0.7.32","shortMessageHtmlLink":"update changelog, push v0.7.32"}},{"before":"28b73d7bd633b89e4f31a7bdca8757fe029c9b0b","after":"fa856b07064295ad1db88f942809b063f489e327","ref":"refs/heads/master","pushedAt":"2024-06-16T17:03:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Specifiy type of set in `toTensor` for `HashSet | OrderedSet` (#656)\n\n* [tensor] avoid usage of `SomeSet` in `toTensor` for sets\r\n\r\nThe generic + generic type class leads the compiler to become drunk\r\nand chooses to compile code that really does not belong in there.\r\n\r\nWe might further want to restrict `T` as well, but I don't want to be\r\ntoo restrictive for now.\r\n\r\n* [tensor] reorder the `sets` `toTensor` to use `len` of produced seq","shortMessageHtmlLink":"Specifiy type of set in toTensor for HashSet | OrderedSet (#656)"}},{"before":"dcc9546fc791584ed4317be1aeef68d9248c4d6c","after":"28b73d7bd633b89e4f31a7bdca8757fe029c9b0b","ref":"refs/heads/master","pushedAt":"2024-06-10T16:04:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Add division gate (#583)","shortMessageHtmlLink":"Add division gate (#583)"}},{"before":"ba9dd187ebdfe24cd667508f263e4b4d9144c30b","after":"dcc9546fc791584ed4317be1aeef68d9248c4d6c","ref":"refs/heads/master","pushedAt":"2024-05-29T10:48:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Improve fix for issue 637 (#654)\n\n* Improve fix for issue #637 (https://github.com/mratsim/Arraymancer/issues/637)\r\n\r\nThe previous fix was incomplete. We could still assert if the input was an empty _tensor_.\r\n\r\nThis change also improves the handling of empty, rank-0 tensors. Up until now we would assert with the wrong message (talking about higher than rank-1 tensors not being supported). Now we don't assert and the code does the right thing.\r\n\r\n* Improve the docs of `append` (use a code block for the examples)","shortMessageHtmlLink":"Improve fix for issue 637 (#654)"}},{"before":"549472f55f90e489997c5d8c545ea0e244128144","after":"ba9dd187ebdfe24cd667508f263e4b4d9144c30b","ref":"refs/heads/master","pushedAt":"2024-05-28T19:59:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"update changelog, push v0.7.31","shortMessageHtmlLink":"update changelog, push v0.7.31"}},{"before":"ce971667b66133c0cd62b869569ed302d991fc3e","after":"549472f55f90e489997c5d8c545ea0e244128144","ref":"refs/heads/master","pushedAt":"2024-05-28T19:57:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Type check accessors `[]`, `[]=` and add `index_select` for multiple values (#653)\n\n* add code to perform type checking on `[]`, `[]=` accessors\r\n\r\n* clean up `index_fill` implementations by reusing common logic\r\n\r\n* add `index_fill` taking sequence / array / tensor\r\n\r\nTo allow\r\n\r\n```nim\r\nt[[0, 2]] = [1, 2] # optionally seq or tensor\r\nt[@[0, 2]] = [1, 2]\r\nt[toTensor [0, 2]] = [1, 2]\r\n```\r\n\r\nfilling multiple indices at same time from a array/seq/tensor.\r\n\r\nPreviously this only supported to set all indices given to the same value.\r\n\r\n* fix `replaceSymsByIdents` for non `nnkSym`\r\n\r\n* [tests] add test case for type safe accessor & index_select w/ seq/array\r\n\r\n* use `len` for both openArray and Tensor in selectors","shortMessageHtmlLink":"Type check accessors [], []= and add index_select for multiple …"}},{"before":"13af280c06da92f2cd773c8bdf2f1691ec6bbd66","after":"ce971667b66133c0cd62b869569ed302d991fc3e","ref":"refs/heads/master","pushedAt":"2024-05-26T11:33:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"update changelog, push v0.7.30\n\nAlso updates the wrong dates of the previous 2 tags :)","shortMessageHtmlLink":"update changelog, push v0.7.30"}},{"before":"534ea98c1ddd2012b276b6c6b6215b3f6e183df9","after":"13af280c06da92f2cd773c8bdf2f1691ec6bbd66","ref":"refs/heads/master","pushedAt":"2024-05-23T09:02:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Improve the performance of convolve (and correlate) (#650)\n\n* Improve the performance of convolve (and correlate)\r\n\r\nThe exising implementation of `convolve` (which is also used for `correlate`) was pretty slow. The slowness was due to the fact that we were using regular tensor element access in the inner loop of the convolution, which was very expensive.\r\n\r\nThe solution was to ensure that the input tensors were contiguous (by cloning them if necessary) and then using `unsafe_raw_buf` for all the tensor element accesses, which is safe because we know that the indexes are all within the tensor boundaries.\r\n\r\nOn my system this change makes a large convolution go from ~1.5 seconds in release mode and ~0.25 seconds in danger mode down to ~65 usecs in both modes (i.e. a x23 reduction in release mode and a x3.8 reduction in danger mode)!\r\n\r\n* Fix small typo in `gemm_strided` comment\r\n\r\n* Further improvements to the convolution / correlation speed by using GEMM\r\n\r\nChange the algorithm used to calculate the convolution and the correlation to one based on using the \"gemm\" blas operation. This is around 3 times faster than the previous \"fast\" algorithm for float and complex input tensors. For integer tensors this new algorithm is as fast as the previous algorithm. The reason it is not faster is that for integers we do not use BLAS' gemm function.\r\n\r\nBy using this new algorithm we were also able to add support for a new `down` argument for the `convolute` and `correlate` procedures. This will be useful to implement an efficient `upfirdn` function in the future.\r\n\r\nThis commit also adds many new tests for the `convolute` and `correlate` procedures. These are needed because to use the gemm based algorithm must handle differently the case in which the first input tensor is shorter than the second input tensor. Another set of tests are added because handling the different convolution / correlation modes using gemm is a bit tricky.\r\n\r\nThanks to @mratsim for the suggestion, and specially to @Vindaar for reviewing these changes and fixing multiple issues.\r\n\r\n* Add an upsample procedure\r\n\r\nThis basic procedure which is missing from Matlab complements the `down` argument of `convolve` and `correlate` (as well as the slicing syntax which can be used to downsample a tensor).","shortMessageHtmlLink":"Improve the performance of convolve (and correlate) (#650)"}},{"before":"2c4f2cd5dfd0d9c2eec10c6de9f6075d48ec5627","after":"534ea98c1ddd2012b276b6c6b6215b3f6e183df9","ref":"refs/heads/master","pushedAt":"2024-05-23T08:08:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Add versions of `toTensor` that take a type as their second argument (#652)\n\nThese are convenience functions which are equivalent to calling the regular `toTensor` followed by `asType`. This makes code that uses this relatively common idiom less verbose.","shortMessageHtmlLink":"Add versions of toTensor that take a type as their second argument (#…"}},{"before":"8faa9cea77db4724cfddc96d9828f7722b8fcdc3","after":"c77c0a90c78fc0434fe2c0c5101e68088d43bf29","ref":"refs/heads/gh-pages","pushedAt":"2024-05-12T14:01:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"b2027098cf2c1c06ad859b24b564340a4cc4d04f","after":"2c4f2cd5dfd0d9c2eec10c6de9f6075d48ec5627","ref":"refs/heads/master","pushedAt":"2024-05-12T13:53:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"More missing numpy and matlab (#649)\n\n* Add a `union` procedure\r\n\r\n`union` returns the unique, unsorted Tensor of values that are found in either of the two input Tensors.\r\n\r\nNote that an equivalent function exists both in `numpy` (where it is called `union1d`) and in `Matlab` (where it is called `union1d`). However, those functions always sort the output, while Arraymancer's version does not. To replicate the same behavior, simply apply `sort` to the output of this function.\r\n\r\n* Add a version of `toTensor` that takes SomeSet as its input\r\n\r\nThis will let us avoid having to convert HashSets into seqs before converting them into tensors.\r\n\r\nNote that this also improves a little the docstrings of a couple of the existing `toTensor` procedures.\r\n\r\n* Add an `intersection` procedure\r\n\r\n`intersection` returns the \"intersection\" of 2 Tensors as an unsorted rank-1 Tensor.\r\n\r\nNote that an equivalent function exists both in `numpy` (where it is called `intersect1d`) and in `Matlab` (where it is called `intersect`). However, those functions always sort the output, while Arraymancer's version does not. To replicate the same behavior, simply apply `sort` to the output of this function.\r\n\r\nAlso note that to implement this feature we moved (and made public) the existing, private toHashSet procedure from spatial/distances.nim into tensor/initialization.nim.\r\n\r\n* Add a `setDiff` procedure\r\n\r\n`setDiff` returns the (symmetric or non symmetric) \"difference\" between 2 Tensors as an unsorted rank-1 Tensor.\r\n\r\nNote that an equivalent function exists both in `numpy` (where it is called `setdiff1d`) and in `Matlab` (where it is called `setdiff`). However, those functions always sort the output, while Arraymancer's version does not. To replicate the same behavior, simply apply `sort` to the output of this function.\r\n\r\n* Add a `contains` function (and thus add support for `in` and `notin`)\r\n\r\n`find` (which is used to implement `contains`) was already supported (since `system.find` is generic and works with Tensors) but was untested, so this also adds a test for it.\r\n\r\n* Add support for `almostEqual`\r\n\r\nThis was a useful std/math function that we did not support yet.\r\n\r\n* Update src/arraymancer/laser/tensor/initialization.nim\r\n\r\nFix typo in export comment & add alternative for reader\r\n\r\n---------\r\n\r\nCo-authored-by: Vindaar ","shortMessageHtmlLink":"More missing numpy and matlab (#649)"}},{"before":"085a9acdce897d0673efea3957fbabd381184452","after":"8faa9cea77db4724cfddc96d9828f7722b8fcdc3","ref":"refs/heads/gh-pages","pushedAt":"2024-05-08T07:43:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"53afa73ff382d8bbf9e6071e2749c2290c1e0ba5","after":"b2027098cf2c1c06ad859b24b564340a4cc4d04f","ref":"refs/heads/master","pushedAt":"2024-05-08T07:35:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mratsim","name":"Mamy Ratsimbazafy","path":"/mratsim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22738317?s=80&v=4"},"commit":{"message":"Add Angel Ezquerra to contributors list (#651)","shortMessageHtmlLink":"Add Angel Ezquerra to contributors list (#651)"}},{"before":"091a1b9f1bc8372e0305c4484f2bf8599cdd5bda","after":"085a9acdce897d0673efea3957fbabd381184452","ref":"refs/heads/gh-pages","pushedAt":"2024-05-07T10:29:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"14486980c7bc46bd688467d80216d9a55844e3f3","after":"53afa73ff382d8bbf9e6071e2749c2290c1e0ba5","ref":"refs/heads/master","pushedAt":"2024-05-07T10:21:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Add `tile` and `repeat_values` procedures (#648)\n\n* Add a (set of) `repeat_values` procedures\r\n\r\nThese procedures let you repeat the values of a Tensor multiple times. This functionality exists both in numpy (`repeat`) and in Matlab (`repelem`).\r\nA different name was chosen here to avoid confusion with nim's `repeat` function, which behaves differently (it repeats the whole input sequence, like numpy's `tile` or Matlab's `repmat` functions), and to make the name more self explanatory.\r\n\r\nThere are two versions of this procedure (with multiple overloads):\r\n\r\n- One that repeats all values the same amount of times over a given axis.\r\n- One that repeats each value a different amount of times, but returns a rank-1 tensor.\r\n\r\nNote that the second one is implemented as 2 procs with different argument types (openArray[int] and Tensor[int]).\r\n\r\nI measured the performance using the timeit library. The results show that the performance is comparable to numpy's `repeat` function. In particular, a small example which takes numpy's `repeat` ~2-3 usec per iteration, takes ~4 usec in --d:release mode, and ~1-2 usec in --d:danger mode.\r\n\r\n* Add a `tile` procedure\r\n\r\nThis procedure lets you construct a new tensor by repeating the input tensor a number of times on one or more axes. This is similar to numpy's `tile` and Matlab's `repmat` functions.\r\n\r\nI measured the performance using the `timeit` library. The results show that the performance is comparable to (but not as good as) numpy's `tile`. In particular, a small example which takes numpy's `tile` ~3-4 usec per iteration, takes ~8-9 usec in --d:release mode, and ~5-6 usec in --d:danger mode.\r\n\r\nI believe that the performance could be improved further by preallocating the result Tensor before the tiling operation. The current implementation is not as efficient as it could be because it is based on calling `concat` multiple times, which requires at least as many tensor allocations (of increasing size).\r\n\r\n* fix docstring typo\r\n\r\n---------\r\n\r\nCo-authored-by: Vindaar ","shortMessageHtmlLink":"Add tile and repeat_values procedures (#648)"}},{"before":"93688e719bebc763a1271a1f584c1f30f21c3204","after":"091a1b9f1bc8372e0305c4484f2bf8599cdd5bda","ref":"refs/heads/gh-pages","pushedAt":"2024-04-17T08:46:57.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"05ae0498fab99ee47c41966a47eef5a13dd03cd6","after":"14486980c7bc46bd688467d80216d9a55844e3f3","ref":"refs/heads/master","pushedAt":"2024-04-17T08:38:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Add `unique` functions to algorithms.nim (#645)\n\nThese functions are similar to but not as fully featured as `numpy.unique`.\r\nThey are missing a way to count the number or returning the indexes of the unique elements.\r\nHowever, they make it possibel to (optionally) sort the output, or to use a more efficient algorithm if the input is already sorted.","shortMessageHtmlLink":"Add unique functions to algorithms.nim (#645)"}},{"before":"c438b6f3ee3ccbf0e8fba0a3b53cb0ec755f47d1","after":"93688e719bebc763a1271a1f584c1f30f21c3204","ref":"refs/heads/gh-pages","pushedAt":"2024-04-15T16:33:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"d21362a7fd3ee58eeeb9dcee02ec9bb6c1590eb5","after":"05ae0498fab99ee47c41966a47eef5a13dd03cd6","ref":"refs/heads/master","pushedAt":"2024-04-15T16:25:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"push v0.7.29","shortMessageHtmlLink":"push v0.7.29"}},{"before":"9f0ba2cbac377a9dd6ea8cea5b0ff6e689bfafa3","after":"c438b6f3ee3ccbf0e8fba0a3b53cb0ec755f47d1","ref":"refs/heads/gh-pages","pushedAt":"2024-04-15T09:39:55.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"3e9f368486f58dc96121bc99a76fb2f578845673","after":"9f0ba2cbac377a9dd6ea8cea5b0ff6e689bfafa3","ref":"refs/heads/gh-pages","pushedAt":"2024-04-15T09:36:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"9867253974559413ba85840973e94f623a1c3087","after":"d21362a7fd3ee58eeeb9dcee02ec9bb6c1590eb5","ref":"refs/heads/master","pushedAt":"2024-04-15T09:32:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Vindaar","name":"Sebastian","path":"/Vindaar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7742232?s=80&v=4"},"commit":{"message":"Add `reshape_infer` procedure (#646)\n\nUnlike numpy, `reshape` does not support having dimensions with value -1 to infer their value. To do so a new `reshape_infer` is added.\r\n\r\nThis is added as a separate procedure to avoid the (small) cost this adds on top of the usual reshape (which could be called relatively frequently).","shortMessageHtmlLink":"Add reshape_infer procedure (#646)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEu9sovwA","startCursor":null,"endCursor":null}},"title":"Activity · mratsim/Arraymancer"}