We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
hanning


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `ivy/functional/frontends/jax/numpy/manipulations.py`
Content:
```
1 # local
2 import ivy
3 from ivy.functional.frontends.jax.func_wrapper import (
4     to_ivy_arrays_and_back,
5     handle_jax_dtype,
6 )
7 from ivy.functional.frontends.jax.numpy import promote_types_of_jax_inputs
8 
9 
10 @to_ivy_arrays_and_back
11 def clip(a, a_min=None, a_max=None, out=None):
12     ivy.utils.assertions.check_all_or_any_fn(
13         a_min,
14         a_max,
15         fn=ivy.exists,
16         type="any",
17         limit=[1, 2],
18         message="at most one of a_min or a_max can be None",
19     )
20     a = ivy.array(a)
21     if a_min is None:
22         a, a_max = promote_types_of_jax_inputs(a, a_max)
23         return ivy.minimum(a, a_max, out=out)
24     if a_max is None:
25         a, a_min = promote_types_of_jax_inputs(a, a_min)
26         return ivy.maximum(a, a_min, out=out)
27     return ivy.clip(a, a_min, a_max, out=out)
28 
29 
30 @handle_jax_dtype
31 @to_ivy_arrays_and_back
32 def concatenate(arrays, axis=0, dtype=None):
33     ret = ivy.concat(arrays, axis=axis)
34     if dtype:
35         ret = ivy.array(ret, dtype=dtype)
36     return ret
37 
38 
39 @to_ivy_arrays_and_back
40 def repeat(a, repeats, axis=None, *, total_repeat_length=None):
41     return ivy.repeat(a, repeats, axis=axis)
42 
43 
44 @to_ivy_arrays_and_back
45 def reshape(a, newshape, order="C"):
46     return ivy.reshape(a, shape=newshape, order=order)
47 
48 
49 @to_ivy_arrays_and_back
50 def ravel(a, order="C"):
51     return ivy.reshape(a, shape=(-1,), order=order)
52 
53 
54 @to_ivy_arrays_and_back
55 def resize(a, new_shape):
56     a = ivy.array(a)
57     resized_a = ivy.reshape(a, new_shape)
58     return resized_a
59 
60 
61 @to_ivy_arrays_and_back
62 def moveaxis(a, source, destination):
63     return ivy.moveaxis(a, source, destination)
64 
65 
66 @to_ivy_arrays_and_back
67 def flipud(m):
68     return ivy.flipud(m, out=None)
69 
70 
71 @to_ivy_arrays_and_back
72 def transpose(a, axes=None):
73     if not axes:
74         axes = list(range(len(a.shape)))[::-1]
75     if type(axes) is int:
76         axes = [axes]
77     if (len(a.shape) == 0 and not axes) or (len(a.shape) == 1 and axes[0] == 0):
78         return a
79     return ivy.permute_dims(a, axes, out=None)
80 
81 
82 @to_ivy_arrays_and_back
83 def flip(m, axis=None):
84     return ivy.flip(m, axis=axis)
85 
86 
87 @to_ivy_arrays_and_back
88 def fliplr(m):
89     return ivy.fliplr(m)
90 
91 
92 @to_ivy_arrays_and_back
93 def expand_dims(a, axis):
94     return ivy.expand_dims(a, axis=axis)
95 
96 
97 @to_ivy_arrays_and_back
98 def stack(arrays, axis=0, out=None, dtype=None):
99     if dtype:
100         return ivy.astype(
101             ivy.stack(arrays, axis=axis, out=out), ivy.as_ivy_dtype(dtype)
102         )
103     return ivy.stack(arrays, axis=axis, out=out)
104 
105 
106 @to_ivy_arrays_and_back
107 def take(
108     a,
109     indices,
110     axis=None,
111     out=None,
112     mode=None,
113     unique_indices=False,
114     indices_are_sorted=False,
115     fill_value=None,
116 ):
117     return ivy.take_along_axis(a, indices, axis, out=out)
118 
119 
120 @to_ivy_arrays_and_back
121 def broadcast_arrays(*args):
122     return ivy.broadcast_arrays(*args)
123 
124 
125 @to_ivy_arrays_and_back
126 def broadcast_shapes(*shapes):
127     return ivy.broadcast_shapes(*shapes)
128 
129 
130 @to_ivy_arrays_and_back
131 def broadcast_to(arr, shape):
132     return ivy.broadcast_to(arr, shape)
133 
134 
135 @to_ivy_arrays_and_back
136 def append(arr, values, axis=None):
137     if axis is None:
138         return ivy.concat((ivy.flatten(arr), ivy.flatten(values)), axis=0)
139     else:
140         return ivy.concat((arr, values), axis=axis)
141 
142 
143 @to_ivy_arrays_and_back
144 def swapaxes(a, axis1, axis2):
145     return ivy.swapaxes(a, axis1, axis2)
146 
147 
148 @to_ivy_arrays_and_back
149 def atleast_3d(*arys):
150     return ivy.atleast_3d(*arys)
151 
152 
153 @to_ivy_arrays_and_back
154 def atleast_1d(*arys):
155     return ivy.atleast_1d(*arys)
156 
157 
158 @to_ivy_arrays_and_back
159 def atleast_2d(*arys):
160     return ivy.atleast_2d(*arys)
161 
162 
163 @to_ivy_arrays_and_back
164 def tril(m, k=0):
165     return ivy.tril(m, k=k)
166 
167 
168 @to_ivy_arrays_and_back
169 def block(arr, block_size):
170     if isinstance(arr, ivy.Array):
171         arr_blocks = ivy.reshape(
172             arr, ivy.concat([ivy.shape(arr)[:-1], [-1, block_size]], 0)
173         )
174         return arr_blocks
175 
176 
177 @to_ivy_arrays_and_back
178 def squeeze(a, axis=None):
179     return ivy.squeeze(a, axis)
180 
181 
182 @to_ivy_arrays_and_back
183 def rot90(m, k=1, axes=(0, 1)):
184     return ivy.rot90(m, k=k, axes=axes)
185 
186 
187 @to_ivy_arrays_and_back
188 def split(ary, indices_or_sections, axis=0):
189     if isinstance(indices_or_sections, (list, tuple)):
190         indices_or_sections = (
191             ivy.diff(indices_or_sections, prepend=[0], append=[ary.shape[axis]])
192             .astype(ivy.int8)
193             .to_list()
194         )
195     return ivy.split(
196         ary, num_or_size_splits=indices_or_sections, axis=axis, with_remainder=False
197     )
198 
199 
200 @to_ivy_arrays_and_back
201 def array_split(ary, indices_or_sections, axis=0):
202     if isinstance(indices_or_sections, (list, tuple)):
203         indices_or_sections = (
204             ivy.diff(indices_or_sections, prepend=[0], append=[ary.shape[axis]])
205             .astype(ivy.int8)
206             .to_list()
207         )
208     return ivy.split(
209         ary, num_or_size_splits=indices_or_sections, axis=axis, with_remainder=True
210     )
211 
212 
213 @to_ivy_arrays_and_back
214 def tile(A, reps):
215     return ivy.tile(A, reps)
216 
217 
218 @to_ivy_arrays_and_back
219 def dsplit(ary, indices_or_sections):
220     return ivy.dsplit(ary, indices_or_sections)
221 
222 
223 @to_ivy_arrays_and_back
224 def dstack(tup, dtype=None):
225     return ivy.dstack(tup)
226 
227 
228 @to_ivy_arrays_and_back
229 def vsplit(ary, indices_or_sections):
230     return ivy.vsplit(ary, indices_or_sections)
231 
232 
233 @to_ivy_arrays_and_back
234 def hsplit(ary, indices_or_sections):
235     return ivy.hsplit(ary, indices_or_sections)
236 
237 
238 @to_ivy_arrays_and_back
239 def roll(a, shift, axis=None):
240     return ivy.roll(a, shift, axis=axis)
241 
242 
243 @to_ivy_arrays_and_back
244 def row_stack(tup):
245     if len(ivy.shape(tup[0])) == 1:
246         xs = []
247         for t in tup:
248             xs += [ivy.reshape(t, (1, ivy.shape(t)[0]))]
249         return ivy.concat(xs, axis=0)
250     return ivy.concat(tup, axis=0)
251 
252 
253 @to_ivy_arrays_and_back
254 def hamming(M):
255     if M <= 1:
256         return ivy.ones([M], dtype=ivy.float64)
257     n = ivy.arange(M)
258     ret = 0.54 - 0.46 * ivy.cos(2.0 * ivy.pi * n / (M - 1))
259     return ret
260
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/ivy/functional/frontends/jax/numpy/manipulations.py b/ivy/functional/frontends/jax/numpy/manipulations.py
--- a/ivy/functional/frontends/jax/numpy/manipulations.py
+++ b/ivy/functional/frontends/jax/numpy/manipulations.py
@@ -257,3 +257,12 @@
     n = ivy.arange(M)
     ret = 0.54 - 0.46 * ivy.cos(2.0 * ivy.pi * n / (M - 1))
     return ret
+
+
+@to_ivy_arrays_and_back
+def hanning(M):
+    if M <= 1:
+        return ivy.ones([M], dtype=ivy.float64)
+    n = ivy.arange(M)
+    ret = 0.5 * (1 - ivy.cos(2.0 * ivy.pi * n / (M - 1)))
+    return ret

{"golden_diff": "diff --git a/ivy/functional/frontends/jax/numpy/manipulations.py b/ivy/functional/frontends/jax/numpy/manipulations.py\n--- a/ivy/functional/frontends/jax/numpy/manipulations.py\n+++ b/ivy/functional/frontends/jax/numpy/manipulations.py\n@@ -257,3 +257,12 @@\n     n = ivy.arange(M)\n     ret = 0.54 - 0.46 * ivy.cos(2.0 * ivy.pi * n / (M - 1))\n     return ret\n+\n+\n+@to_ivy_arrays_and_back\n+def hanning(M):\n+    if M <= 1:\n+        return ivy.ones([M], dtype=ivy.float64)\n+    n = ivy.arange(M)\n+    ret = 0.5 * (1 - ivy.cos(2.0 * ivy.pi * n / (M - 1)))\n+    return ret\n", "issue": "hanning\n\n", "before_files": [{"content": "# local\nimport ivy\nfrom ivy.functional.frontends.jax.func_wrapper import (\n    to_ivy_arrays_and_back,\n    handle_jax_dtype,\n)\nfrom ivy.functional.frontends.jax.numpy import promote_types_of_jax_inputs\n\n\n@to_ivy_arrays_and_back\ndef clip(a, a_min=None, a_max=None, out=None):\n    ivy.utils.assertions.check_all_or_any_fn(\n        a_min,\n        a_max,\n        fn=ivy.exists,\n        type=\"any\",\n        limit=[1, 2],\n        message=\"at most one of a_min or a_max can be None\",\n    )\n    a = ivy.array(a)\n    if a_min is None:\n        a, a_max = promote_types_of_jax_inputs(a, a_max)\n        return ivy.minimum(a, a_max, out=out)\n    if a_max is None:\n        a, a_min = promote_types_of_jax_inputs(a, a_min)\n        return ivy.maximum(a, a_min, out=out)\n    return ivy.clip(a, a_min, a_max, out=out)\n\n\n@handle_jax_dtype\n@to_ivy_arrays_and_back\ndef concatenate(arrays, axis=0, dtype=None):\n    ret = ivy.concat(arrays, axis=axis)\n    if dtype:\n        ret = ivy.array(ret, dtype=dtype)\n    return ret\n\n\n@to_ivy_arrays_and_back\ndef repeat(a, repeats, axis=None, *, total_repeat_length=None):\n    return ivy.repeat(a, repeats, axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef reshape(a, newshape, order=\"C\"):\n    return ivy.reshape(a, shape=newshape, order=order)\n\n\n@to_ivy_arrays_and_back\ndef ravel(a, order=\"C\"):\n    return ivy.reshape(a, shape=(-1,), order=order)\n\n\n@to_ivy_arrays_and_back\ndef resize(a, new_shape):\n    a = ivy.array(a)\n    resized_a = ivy.reshape(a, new_shape)\n    return resized_a\n\n\n@to_ivy_arrays_and_back\ndef moveaxis(a, source, destination):\n    return ivy.moveaxis(a, source, destination)\n\n\n@to_ivy_arrays_and_back\ndef flipud(m):\n    return ivy.flipud(m, out=None)\n\n\n@to_ivy_arrays_and_back\ndef transpose(a, axes=None):\n    if not axes:\n        axes = list(range(len(a.shape)))[::-1]\n    if type(axes) is int:\n        axes = [axes]\n    if (len(a.shape) == 0 and not axes) or (len(a.shape) == 1 and axes[0] == 0):\n        return a\n    return ivy.permute_dims(a, axes, out=None)\n\n\n@to_ivy_arrays_and_back\ndef flip(m, axis=None):\n    return ivy.flip(m, axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef fliplr(m):\n    return ivy.fliplr(m)\n\n\n@to_ivy_arrays_and_back\ndef expand_dims(a, axis):\n    return ivy.expand_dims(a, axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef stack(arrays, axis=0, out=None, dtype=None):\n    if dtype:\n        return ivy.astype(\n            ivy.stack(arrays, axis=axis, out=out), ivy.as_ivy_dtype(dtype)\n        )\n    return ivy.stack(arrays, axis=axis, out=out)\n\n\n@to_ivy_arrays_and_back\ndef take(\n    a,\n    indices,\n    axis=None,\n    out=None,\n    mode=None,\n    unique_indices=False,\n    indices_are_sorted=False,\n    fill_value=None,\n):\n    return ivy.take_along_axis(a, indices, axis, out=out)\n\n\n@to_ivy_arrays_and_back\ndef broadcast_arrays(*args):\n    return ivy.broadcast_arrays(*args)\n\n\n@to_ivy_arrays_and_back\ndef broadcast_shapes(*shapes):\n    return ivy.broadcast_shapes(*shapes)\n\n\n@to_ivy_arrays_and_back\ndef broadcast_to(arr, shape):\n    return ivy.broadcast_to(arr, shape)\n\n\n@to_ivy_arrays_and_back\ndef append(arr, values, axis=None):\n    if axis is None:\n        return ivy.concat((ivy.flatten(arr), ivy.flatten(values)), axis=0)\n    else:\n        return ivy.concat((arr, values), axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef swapaxes(a, axis1, axis2):\n    return ivy.swapaxes(a, axis1, axis2)\n\n\n@to_ivy_arrays_and_back\ndef atleast_3d(*arys):\n    return ivy.atleast_3d(*arys)\n\n\n@to_ivy_arrays_and_back\ndef atleast_1d(*arys):\n    return ivy.atleast_1d(*arys)\n\n\n@to_ivy_arrays_and_back\ndef atleast_2d(*arys):\n    return ivy.atleast_2d(*arys)\n\n\n@to_ivy_arrays_and_back\ndef tril(m, k=0):\n    return ivy.tril(m, k=k)\n\n\n@to_ivy_arrays_and_back\ndef block(arr, block_size):\n    if isinstance(arr, ivy.Array):\n        arr_blocks = ivy.reshape(\n            arr, ivy.concat([ivy.shape(arr)[:-1], [-1, block_size]], 0)\n        )\n        return arr_blocks\n\n\n@to_ivy_arrays_and_back\ndef squeeze(a, axis=None):\n    return ivy.squeeze(a, axis)\n\n\n@to_ivy_arrays_and_back\ndef rot90(m, k=1, axes=(0, 1)):\n    return ivy.rot90(m, k=k, axes=axes)\n\n\n@to_ivy_arrays_and_back\ndef split(ary, indices_or_sections, axis=0):\n    if isinstance(indices_or_sections, (list, tuple)):\n        indices_or_sections = (\n            ivy.diff(indices_or_sections, prepend=[0], append=[ary.shape[axis]])\n            .astype(ivy.int8)\n            .to_list()\n        )\n    return ivy.split(\n        ary, num_or_size_splits=indices_or_sections, axis=axis, with_remainder=False\n    )\n\n\n@to_ivy_arrays_and_back\ndef array_split(ary, indices_or_sections, axis=0):\n    if isinstance(indices_or_sections, (list, tuple)):\n        indices_or_sections = (\n            ivy.diff(indices_or_sections, prepend=[0], append=[ary.shape[axis]])\n            .astype(ivy.int8)\n            .to_list()\n        )\n    return ivy.split(\n        ary, num_or_size_splits=indices_or_sections, axis=axis, with_remainder=True\n    )\n\n\n@to_ivy_arrays_and_back\ndef tile(A, reps):\n    return ivy.tile(A, reps)\n\n\n@to_ivy_arrays_and_back\ndef dsplit(ary, indices_or_sections):\n    return ivy.dsplit(ary, indices_or_sections)\n\n\n@to_ivy_arrays_and_back\ndef dstack(tup, dtype=None):\n    return ivy.dstack(tup)\n\n\n@to_ivy_arrays_and_back\ndef vsplit(ary, indices_or_sections):\n    return ivy.vsplit(ary, indices_or_sections)\n\n\n@to_ivy_arrays_and_back\ndef hsplit(ary, indices_or_sections):\n    return ivy.hsplit(ary, indices_or_sections)\n\n\n@to_ivy_arrays_and_back\ndef roll(a, shift, axis=None):\n    return ivy.roll(a, shift, axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef row_stack(tup):\n    if len(ivy.shape(tup[0])) == 1:\n        xs = []\n        for t in tup:\n            xs += [ivy.reshape(t, (1, ivy.shape(t)[0]))]\n        return ivy.concat(xs, axis=0)\n    return ivy.concat(tup, axis=0)\n\n\n@to_ivy_arrays_and_back\ndef hamming(M):\n    if M <= 1:\n        return ivy.ones([M], dtype=ivy.float64)\n    n = ivy.arange(M)\n    ret = 0.54 - 0.46 * ivy.cos(2.0 * ivy.pi * n / (M - 1))\n    return ret\n", "path": "ivy/functional/frontends/jax/numpy/manipulations.py"}], "after_files": [{"content": "# local\nimport ivy\nfrom ivy.functional.frontends.jax.func_wrapper import (\n    to_ivy_arrays_and_back,\n    handle_jax_dtype,\n)\nfrom ivy.functional.frontends.jax.numpy import promote_types_of_jax_inputs\n\n\n@to_ivy_arrays_and_back\ndef clip(a, a_min=None, a_max=None, out=None):\n    ivy.utils.assertions.check_all_or_any_fn(\n        a_min,\n        a_max,\n        fn=ivy.exists,\n        type=\"any\",\n        limit=[1, 2],\n        message=\"at most one of a_min or a_max can be None\",\n    )\n    a = ivy.array(a)\n    if a_min is None:\n        a, a_max = promote_types_of_jax_inputs(a, a_max)\n        return ivy.minimum(a, a_max, out=out)\n    if a_max is None:\n        a, a_min = promote_types_of_jax_inputs(a, a_min)\n        return ivy.maximum(a, a_min, out=out)\n    return ivy.clip(a, a_min, a_max, out=out)\n\n\n@handle_jax_dtype\n@to_ivy_arrays_and_back\ndef concatenate(arrays, axis=0, dtype=None):\n    ret = ivy.concat(arrays, axis=axis)\n    if dtype:\n        ret = ivy.array(ret, dtype=dtype)\n    return ret\n\n\n@to_ivy_arrays_and_back\ndef repeat(a, repeats, axis=None, *, total_repeat_length=None):\n    return ivy.repeat(a, repeats, axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef reshape(a, newshape, order=\"C\"):\n    return ivy.reshape(a, shape=newshape, order=order)\n\n\n@to_ivy_arrays_and_back\ndef ravel(a, order=\"C\"):\n    return ivy.reshape(a, shape=(-1,), order=order)\n\n\n@to_ivy_arrays_and_back\ndef resize(a, new_shape):\n    a = ivy.array(a)\n    resized_a = ivy.reshape(a, new_shape)\n    return resized_a\n\n\n@to_ivy_arrays_and_back\ndef moveaxis(a, source, destination):\n    return ivy.moveaxis(a, source, destination)\n\n\n@to_ivy_arrays_and_back\ndef flipud(m):\n    return ivy.flipud(m, out=None)\n\n\n@to_ivy_arrays_and_back\ndef transpose(a, axes=None):\n    if not axes:\n        axes = list(range(len(a.shape)))[::-1]\n    if type(axes) is int:\n        axes = [axes]\n    if (len(a.shape) == 0 and not axes) or (len(a.shape) == 1 and axes[0] == 0):\n        return a\n    return ivy.permute_dims(a, axes, out=None)\n\n\n@to_ivy_arrays_and_back\ndef flip(m, axis=None):\n    return ivy.flip(m, axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef fliplr(m):\n    return ivy.fliplr(m)\n\n\n@to_ivy_arrays_and_back\ndef expand_dims(a, axis):\n    return ivy.expand_dims(a, axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef stack(arrays, axis=0, out=None, dtype=None):\n    if dtype:\n        return ivy.astype(\n            ivy.stack(arrays, axis=axis, out=out), ivy.as_ivy_dtype(dtype)\n        )\n    return ivy.stack(arrays, axis=axis, out=out)\n\n\n@to_ivy_arrays_and_back\ndef take(\n    a,\n    indices,\n    axis=None,\n    out=None,\n    mode=None,\n    unique_indices=False,\n    indices_are_sorted=False,\n    fill_value=None,\n):\n    return ivy.take_along_axis(a, indices, axis, out=out)\n\n\n@to_ivy_arrays_and_back\ndef broadcast_arrays(*args):\n    return ivy.broadcast_arrays(*args)\n\n\n@to_ivy_arrays_and_back\ndef broadcast_shapes(*shapes):\n    return ivy.broadcast_shapes(*shapes)\n\n\n@to_ivy_arrays_and_back\ndef broadcast_to(arr, shape):\n    return ivy.broadcast_to(arr, shape)\n\n\n@to_ivy_arrays_and_back\ndef append(arr, values, axis=None):\n    if axis is None:\n        return ivy.concat((ivy.flatten(arr), ivy.flatten(values)), axis=0)\n    else:\n        return ivy.concat((arr, values), axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef swapaxes(a, axis1, axis2):\n    return ivy.swapaxes(a, axis1, axis2)\n\n\n@to_ivy_arrays_and_back\ndef atleast_3d(*arys):\n    return ivy.atleast_3d(*arys)\n\n\n@to_ivy_arrays_and_back\ndef atleast_1d(*arys):\n    return ivy.atleast_1d(*arys)\n\n\n@to_ivy_arrays_and_back\ndef atleast_2d(*arys):\n    return ivy.atleast_2d(*arys)\n\n\n@to_ivy_arrays_and_back\ndef tril(m, k=0):\n    return ivy.tril(m, k=k)\n\n\n@to_ivy_arrays_and_back\ndef block(arr, block_size):\n    if isinstance(arr, ivy.Array):\n        arr_blocks = ivy.reshape(\n            arr, ivy.concat([ivy.shape(arr)[:-1], [-1, block_size]], 0)\n        )\n        return arr_blocks\n\n\n@to_ivy_arrays_and_back\ndef squeeze(a, axis=None):\n    return ivy.squeeze(a, axis)\n\n\n@to_ivy_arrays_and_back\ndef rot90(m, k=1, axes=(0, 1)):\n    return ivy.rot90(m, k=k, axes=axes)\n\n\n@to_ivy_arrays_and_back\ndef split(ary, indices_or_sections, axis=0):\n    if isinstance(indices_or_sections, (list, tuple)):\n        indices_or_sections = (\n            ivy.diff(indices_or_sections, prepend=[0], append=[ary.shape[axis]])\n            .astype(ivy.int8)\n            .to_list()\n        )\n    return ivy.split(\n        ary, num_or_size_splits=indices_or_sections, axis=axis, with_remainder=False\n    )\n\n\n@to_ivy_arrays_and_back\ndef array_split(ary, indices_or_sections, axis=0):\n    if isinstance(indices_or_sections, (list, tuple)):\n        indices_or_sections = (\n            ivy.diff(indices_or_sections, prepend=[0], append=[ary.shape[axis]])\n            .astype(ivy.int8)\n            .to_list()\n        )\n    return ivy.split(\n        ary, num_or_size_splits=indices_or_sections, axis=axis, with_remainder=True\n    )\n\n\n@to_ivy_arrays_and_back\ndef tile(A, reps):\n    return ivy.tile(A, reps)\n\n\n@to_ivy_arrays_and_back\ndef dsplit(ary, indices_or_sections):\n    return ivy.dsplit(ary, indices_or_sections)\n\n\n@to_ivy_arrays_and_back\ndef dstack(tup, dtype=None):\n    return ivy.dstack(tup)\n\n\n@to_ivy_arrays_and_back\ndef vsplit(ary, indices_or_sections):\n    return ivy.vsplit(ary, indices_or_sections)\n\n\n@to_ivy_arrays_and_back\ndef hsplit(ary, indices_or_sections):\n    return ivy.hsplit(ary, indices_or_sections)\n\n\n@to_ivy_arrays_and_back\ndef roll(a, shift, axis=None):\n    return ivy.roll(a, shift, axis=axis)\n\n\n@to_ivy_arrays_and_back\ndef row_stack(tup):\n    if len(ivy.shape(tup[0])) == 1:\n        xs = []\n        for t in tup:\n            xs += [ivy.reshape(t, (1, ivy.shape(t)[0]))]\n        return ivy.concat(xs, axis=0)\n    return ivy.concat(tup, axis=0)\n\n\n@to_ivy_arrays_and_back\ndef hamming(M):\n    if M <= 1:\n        return ivy.ones([M], dtype=ivy.float64)\n    n = ivy.arange(M)\n    ret = 0.54 - 0.46 * ivy.cos(2.0 * ivy.pi * n / (M - 1))\n    return ret\n\n\n@to_ivy_arrays_and_back\ndef hanning(M):\n    if M <= 1:\n        return ivy.ones([M], dtype=ivy.float64)\n    n = ivy.arange(M)\n    ret = 0.5 * (1 - ivy.cos(2.0 * ivy.pi * n / (M - 1)))\n    return ret\n", "path": "ivy/functional/frontends/jax/numpy/manipulations.py"}]}