- 1.28.0 (latest)
- 1.27.0
- 1.26.0
- 1.25.0
- 1.24.0
- 1.22.0
- 1.21.0
- 1.20.0
- 1.19.0
- 1.18.0
- 1.17.0
- 1.16.0
- 1.15.0
- 1.14.0
- 1.13.0
- 1.12.0
- 1.11.1
- 1.10.0
- 1.9.0
- 1.8.0
- 1.7.0
- 1.6.0
- 1.5.0
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.0
- 0.26.0
- 0.25.0
- 0.24.0
- 0.23.0
- 0.22.0
- 0.21.0
- 0.20.1
- 0.19.2
- 0.18.0
- 0.17.0
- 0.16.0
- 0.15.0
- 0.14.1
- 0.13.0
- 0.12.0
- 0.11.0
- 0.10.0
- 0.9.0
- 0.8.0
- 0.7.0
- 0.6.0
- 0.5.0
- 0.4.0
- 0.3.0
- 0.2.0
Index(data=None, dtype=None, *, name=None, session=None)
Immutable sequence used for indexing and alignment.
The basic object storing axis labels for all objects.
Parameters |
|
---|---|
Name | Description |
data |
pandas.Series pandas.Index bigframes.series.Series bigframes.core.indexes.base.Index
Labels (1-dimensional). |
session |
Optional[bigframes.session.Session]
BigQuery DataFrames session where queries are run. If not set, a default session is used. |
Properties
T
Return the transpose, which is by definition self.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> s = bpd.Series(['Ant', 'Bear', 'Cow'])
>>> s
0 Ant
1 Bear
2 Cow
dtype: string
>>> s.T
0 Ant
1 Bear
2 Cow
dtype: string
For Index:
>>> idx = bpd.Index([1, 2, 3])
>>> idx.T
Index([1, 2, 3], dtype='Int64')
Returns | |
---|---|
Type | Description |
bigframes.pandas.Index |
Index |
dtype
Return the dtype object of the underlying data.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1, 2, 3])
>>> idx
Index([1, 2, 3], dtype='Int64')
>>> idx.dtype
Int64Dtype()
dtypes
Return the dtypes as a Series for the underlying MultiIndex.
Returns | |
---|---|
Type | Description |
Pandas.Series |
Pandas.Series of the MultiIndex dtypes. |
empty
Returns True if the Index is empty, otherwise returns False.
has_duplicates
Check if the Index has duplicate values.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1, 5, 7, 7])
>>> bool(idx.has_duplicates)
True
>>> idx = bpd.Index([1, 5, 7])
>>> bool(idx.has_duplicates)
False
Returns | |
---|---|
Type | Description |
bool |
Whether or not the Index has duplicate values. |
is_monotonic_decreasing
Return a boolean if the values are equal or decreasing.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> bool(bpd.Index([3, 2, 1]).is_monotonic_decreasing)
True
>>> bool(bpd.Index([3, 2, 2]).is_monotonic_decreasing)
True
>>> bool(bpd.Index([3, 1, 2]).is_monotonic_decreasing)
False
Returns | |
---|---|
Type | Description |
bool |
True, if the values monotonically decreasing, otherwise False. |
is_monotonic_increasing
Return a boolean if the values are equal or increasing.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> bool(bpd.Index([1, 2, 3]).is_monotonic_increasing)
True
>>> bool(bpd.Index([1, 2, 2]).is_monotonic_increasing)
True
>>> bool(bpd.Index([1, 3, 2]).is_monotonic_increasing)
False
Returns | |
---|---|
Type | Description |
bool |
True, if the values monotonically increasing, otherwise False. |
is_unique
Return if the index has unique values.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1, 5, 7, 7])
>>> idx.is_unique
False
>>> idx = bpd.Index([1, 5, 7])
>>> idx.is_unique
True
Returns | |
---|---|
Type | Description |
bool |
True if the index has unique values, otherwise False. |
name
Returns Index name.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1, 2, 3], name='x')
>>> idx
Index([1, 2, 3], dtype='Int64', name='x')
>>> idx.name
'x'
Returns | |
---|---|
Type | Description |
blocks.Label |
Index or MultiIndex name |
names
Returns the names of the Index.
Returns | |
---|---|
Type | Description |
Sequence[blocks.Label] |
A Sequence of Index or MultiIndex name |
ndim
Number of dimensions of the underlying data, by definition 1.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> s = bpd.Series(['Ant', 'Bear', 'Cow'])
>>> s
0 Ant
1 Bear
2 Cow
dtype: string
>>> s.ndim
1
For Index:
>>> idx = bpd.Index([1, 2, 3])
>>> idx
Index([1, 2, 3], dtype='Int64')
>>> idx.ndim
1
Returns | |
---|---|
Type | Description |
int |
Number or dimensions. |
nlevels
Integer number of levels in this MultiIndex
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> mi = bpd.MultiIndex.from_arrays([['a'], ['b'], ['c']])
>>> mi
MultiIndex([('a', 'b', 'c')],
)
>>> mi.nlevels
3
Returns | |
---|---|
Type | Description |
int |
Number of levels. |
query_job
BigQuery job metadata for the most recent query.
shape
Return a tuple of the shape of the underlying data.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1, 2, 3])
>>> idx
Index([1, 2, 3], dtype='Int64')
>>> idx.shape
(3,)
Returns | |
---|---|
Type | Description |
Tuple[int] |
A Tuple of integers representing the shape. |
size
Return the number of elements in the underlying data.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
For Series:
>>> s = bpd.Series(['Ant', 'Bear', 'Cow'])
>>> s
0 Ant
1 Bear
2 Cow
dtype: string
For Index:
>>> idx = bpd.Index([1, 2, 3])
>>> idx
Index([1, 2, 3], dtype='Int64')
Returns | |
---|---|
Type | Description |
int |
Number of elements |
values
Return an array representing the data in the Index.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1, 2, 3])
>>> idx
Index([1, 2, 3], dtype='Int64')
>>> idx.values
array([1, 2, 3])
Returns | |
---|---|
Type | Description |
array |
Numpy.ndarray or ExtensionArray |
Methods
all
all() -> bool
Return whether all elements are Truthy.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
True, because nonzero integers are considered True.
>>> bool(bpd.Index([1, 2, 3]).all())
True
False, because 0 is considered False.
>>> bool(bpd.Index([0, 1, 2]).all())
False
Exceptions | |
---|---|
Type | Description |
TypeError |
MultiIndex with more than 1 level does not support all . |
Returns | |
---|---|
Type | Description |
bool |
A single element array-like may be converted to bool. |
any
any() -> bool
Return whether any element is Truthy.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> index = bpd.Index([0, 1, 2])
>>> bool(index.any())
True
>>> index = bpd.Index([0, 0, 0])
>>> bool(index.any())
False
Exceptions | |
---|---|
Type | Description |
TypeError |
MultiIndex with more than 1 level does not support any . |
Returns | |
---|---|
Type | Description |
bool |
A single element array-like may be converted to bool. |
argmax
argmax() -> int
Return int position of the largest value in the Series.
If the maximum is achieved in multiple locations, the first row position is returned.
Examples:
Consider dataset containing cereal calories
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> s = bpd.Series({'Corn Flakes': 100.0, 'Almond Delight': 110.0,
... 'Cinnamon Toast Crunch': 120.0, 'Cocoa Puff': 110.0})
>>> s
Corn Flakes 100.0
Almond Delight 110.0
Cinnamon Toast Crunch 120.0
Cocoa Puff 110.0
dtype: Float64
>>> int(s.argmax())
2
>>> int(s.argmin())
0
The maximum cereal calories is the third element and the minimum cereal calories is the first element, since series is zero-indexed.
Returns | |
---|---|
Type | Description |
int |
Row position of the maximum value. |
argmin
argmin() -> int
Return int position of the smallest value in the series.
If the minimum is achieved in multiple locations, the first row position is returned.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
Consider dataset containing cereal calories
>>> s = bpd.Series({'Corn Flakes': 100.0, 'Almond Delight': 110.0,
... 'Cinnamon Toast Crunch': 120.0, 'Cocoa Puff': 110.0})
>>> s
Corn Flakes 100.0
Almond Delight 110.0
Cinnamon Toast Crunch 120.0
Cocoa Puff 110.0
dtype: Float64
>>> int(s.argmax())
2
>>> int(s.argmin())
0
The maximum cereal calories is the third element and the minimum cereal calories is the first element, since series is zero-indexed.
Returns | |
---|---|
Type | Description |
int |
Row position of the minimum value. |
astype
astype(
dtype: typing.Union[
typing.Literal[
"boolean",
"Float64",
"Int64",
"int64[pyarrow]",
"string",
"string[pyarrow]",
"timestamp[us, tz=UTC][pyarrow]",
"timestamp[us][pyarrow]",
"date32[day][pyarrow]",
"time64[us][pyarrow]",
"decimal128(38, 9)[pyarrow]",
"decimal256(76, 38)[pyarrow]",
"binary[pyarrow]",
],
pandas.core.arrays.boolean.BooleanDtype,
pandas.core.arrays.floating.Float64Dtype,
pandas.core.arrays.integer.Int64Dtype,
pandas.core.arrays.string_.StringDtype,
pandas.core.dtypes.dtypes.ArrowDtype,
geopandas.array.GeometryDtype,
],
*,
errors: typing.Literal["raise", "null"] = "raise"
) -> bigframes.core.indexes.base.Index
Create an Index with values cast to dtypes.
The class of a new Index is determined by dtype. When conversion is impossible, a TypeError exception is raised.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1, 2, 3])
>>> idx
Index([1, 2, 3], dtype='Int64')
Parameters | |
---|---|
Name | Description |
dtype |
str or pandas.ExtensionDtype
A dtype supported by BigQuery DataFrame include |
errors |
{'raise', 'null'}, default 'raise'
Control raising of exceptions on invalid data for provided dtype. If 'raise', allow exceptions to be raised if any value fails cast If 'null', will assign null value if value fails cast |
Exceptions | |
---|---|
Type | Description |
ValueError |
If errors is not one of raise . |
TypeError |
MultiIndex with more than 1 level does not support astype . |
Returns | |
---|---|
Type | Description |
bigframes.pandas.Index |
Index with values cast to specified dtype. |
copy
copy(name: typing.Optional[typing.Hashable] = None)
Make a copy of this object.
Name is set on the new object.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index(['a', 'b', 'c'])
>>> new_idx = idx.copy()
>>> idx is new_idx
False
Parameter | |
---|---|
Name | Description |
name |
Label, optional
Set name for new object. |
Returns | |
---|---|
Type | Description |
bigframes.pandas.Index |
Index reference to new object, which is a copy of this object. |
drop
drop(labels: typing.Any) -> bigframes.core.indexes.base.Index
Make new Index with passed list of labels deleted.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index(['a', 'b', 'c'])
>>> idx.drop(['a'])
Index(['b', 'c'], dtype='string')
Returns | |
---|---|
Type | Description |
Index |
Will be same type as self. |
drop_duplicates
drop_duplicates(*, keep: str = "first") -> bigframes.core.indexes.base.Index
Return Index with duplicate values removed.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
Generate an pandas.Index with duplicate values.
>>> idx = bpd.Index(['lama', 'cow', 'lama', 'beetle', 'lama', 'hippo'])
The keep parameter controls which duplicate values are removed.
The value first
keeps the first occurrence for each set of
duplicated entries. The default value of keep is first
.
>>> idx.drop_duplicates(keep='first')
Index(['lama', 'cow', 'beetle', 'hippo'], dtype='string')
The value last
keeps the last occurrence for each set of
duplicated entries.
>>> idx.drop_duplicates(keep='last')
Index(['cow', 'beetle', 'lama', 'hippo'], dtype='string')
The value False
discards all sets of duplicated entries.
>>> idx.drop_duplicates(keep=False)
Index(['cow', 'beetle', 'hippo'], dtype='string')
Parameter | |
---|---|
Name | Description |
keep |
{'first', 'last',
One of: 'first' : Drop duplicates except for the first occurrence. 'last' : Drop duplicates except for the last occurrence. |
dropna
dropna(
how: typing.Literal["all", "any"] = "any"
) -> bigframes.core.indexes.base.Index
Return Index without NA/NaN values.
Examples:
>>> import bigframes.pandas as bpd
>>> import numpy as np
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1, np.nan, 3])
>>> idx.dropna()
Index([1.0, 3.0], dtype='Float64')
Parameter | |
---|---|
Name | Description |
how |
{'any', 'all'}, default 'any'
If the Index is a MultiIndex, drop the value when any or all levels are NaN. |
Exceptions | |
---|---|
Type | Description |
ValueError |
If how is not any or all |
fillna
fillna(value=None) -> bigframes.core.indexes.base.Index
Fill NA/NaN values with the specified value.
Examples:
>>> import bigframes.pandas as bpd
>>> import numpy as np
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([np.nan, np.nan, 3])
>>> idx.fillna(0)
Index([0.0, 0.0, 3.0], dtype='Float64')
Parameter | |
---|---|
Name | Description |
value |
scalar
Scalar value to use to fill holes (e.g. 0). This value cannot be a list-likes. |
Exceptions | |
---|---|
Type | Description |
TypeError |
MultiIndex with more than 1 level does not support fillna . |
from_frame
from_frame(
frame: typing.Union[bigframes.series.Series, bigframes.dataframe.DataFrame]
) -> bigframes.core.indexes.base.Index
Make a MultiIndex from a DataFrame.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> df = bpd.DataFrame([['HI', 'Temp'], ['HI', 'Precip'],
... ['NJ', 'Temp'], ['NJ', 'Precip']],
... columns=['a', 'b'])
>>> df
a b
0 HI Temp
1 HI Precip
2 NJ Temp
3 NJ Precip
<BLANKLINE>
[4 rows x 2 columns]
>>> bpd.MultiIndex.from_frame(df)
Index([0, 1, 2, 3], dtype='Int64')
Parameter | |
---|---|
Name | Description |
frame |
Union[bigframes.pandas.Series, bigframes.pandas.DataFrame]
bigframes.pandas.Series or bigframes.pandas.DataFrame to convert to bigframes.pandas.Index. |
Exceptions | |
---|---|
Type | Description |
bigframes.exceptions.NullIndexError |
If Index is Null. |
Returns | |
---|---|
Type | Description |
bigframes.pandas.Index |
The Index representation of the given Series or DataFrame. |
get_level_values
get_level_values(level) -> bigframes.core.indexes.base.Index
Return an Index of values for requested level.
This is primarily useful to get an individual level of values from a MultiIndex, but is provided on Index as well for compatibility.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index(list('abc'))
>>> idx
Index(['a', 'b', 'c'], dtype='string')
Get level values by supplying level as integer:
>>> idx.get_level_values(0)
Index(['a', 'b', 'c'], dtype='string')
Parameter | |
---|---|
Name | Description |
level |
int or str
It is either the integer position or the name of the level. |
Returns | |
---|---|
Type | Description |
bigframes.pandas.Index |
Calling object, as there is only one level in the Index. |
isin
isin(values) -> bigframes.core.indexes.base.Index
Return a boolean array where the index values are in values
.
Compute boolean array to check whether each index value is found in the passed set of values. The length of the returned boolean array matches the length of the index.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([1,2,3])
>>> idx
Index([1, 2, 3], dtype='Int64')
Check whether each index value in a list of values.
>>> idx.isin([1, 4])
Index([True, False, False], dtype='boolean')
>>> midx = bpd.MultiIndex.from_arrays([[1,2,3],
... ['red', 'blue', 'green']],
... names=('number', 'color'))
>>> midx
MultiIndex([(1, 'red'),
(2, 'blue'),
(3, 'green')],
names=['number', 'color'])
Parameter | |
---|---|
Name | Description |
values |
set or list-like
Sought values. |
Exceptions | |
---|---|
Type | Description |
TypeError |
If object passed to isin() is not a list-like |
Returns | |
---|---|
Type | Description |
bigframes.pandas.Series |
Series of boolean values. |
max
max() -> typing.Any
Return the maximum value of the Index.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([3, 2, 1])
>>> int(idx.max())
3
>>> idx = bpd.Index(['c', 'b', 'a'])
>>> idx.max()
'c'
Returns | |
---|---|
Type | Description |
scalar |
Maximum value. |
min
min() -> typing.Any
Return the minimum value of the Index.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([3, 2, 1])
>>> int(idx.min())
1
>>> idx = bpd.Index(['c', 'b', 'a'])
>>> idx.min()
'a'
Returns | |
---|---|
Type | Description |
scalar |
Minimum value. |
nunique
nunique() -> int
Return number of unique elements in the object.
Excludes NA values by default.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> s = bpd.Series([1, 3, 5, 7, 7])
>>> s
0 1
1 3
2 5
3 7
4 7
dtype: Int64
>>> int(s.nunique())
4
Returns | |
---|---|
Type | Description |
int |
Number of unique elements |
rename
rename(
name: typing.Union[str, typing.Sequence[str]]
) -> bigframes.core.indexes.base.Index
Alter Index or MultiIndex name.
Able to set new names without level. Defaults to returning new index. Length of names must match number of levels in MultiIndex.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index(['A', 'C', 'A', 'B'], name='score')
>>> idx.rename('grade')
Index(['A', 'C', 'A', 'B'], dtype='string', name='grade')
Parameter | |
---|---|
Name | Description |
name |
label or list of labels
Name(s) to set. |
Exceptions | |
---|---|
Type | Description |
ValueError |
If name is not the same length as levels. |
Returns | |
---|---|
Type | Description |
bigframes.pandas.Index |
The same type as the caller. |
sort_values
sort_values(*, ascending: bool = True, na_position: str = "last")
Return a sorted copy of the index.
Return a sorted copy of the index, and optionally return the indices that sorted the index itself.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index([10, 100, 1, 1000])
>>> idx
Index([10, 100, 1, 1000], dtype='Int64')
Sort values in ascending order (default behavior).
>>> idx.sort_values()
Index([1, 10, 100, 1000], dtype='Int64')
Parameters | |
---|---|
Name | Description |
ascending |
bool, default True
Should the index values be sorted in an ascending order. |
na_position |
{'first' or 'last'}, default 'last'
Argument 'first' puts NaNs at the beginning, 'last' puts NaNs at the end. |
Exceptions | |
---|---|
Type | Description |
ValueError |
If no_position is not one of first or last . |
Returns | |
---|---|
Type | Description |
pandas.Index |
Sorted copy of the index. |
to_numpy
to_numpy(dtype=None, **kwargs) -> numpy.ndarray
A NumPy ndarray representing the values in this Series or Index.
to_pandas
to_pandas() -> pandas.core.indexes.base.Index
Gets the Index as a pandas Index.
Returns | |
---|---|
Type | Description |
pandas.Index |
A pandas Index with all of the labels from this Index. |
to_series
to_series(
index: typing.Optional[bigframes.core.indexes.base.Index] = None,
name: typing.Optional[typing.Hashable] = None,
) -> bigframes.series.Series
Create a Series with both index and values equal to the index keys.
Useful with map for returning an indexer based on an index.
Examples:
>>> import bigframes.pandas as bpd
>>> bpd.options.display.progress_bar = None
>>> idx = bpd.Index(['Ant', 'Bear', 'Cow'], name='animal')
By default, the original index and original name is reused.
>>> idx.to_series()
animal
Ant Ant
Bear Bear
Cow Cow
Name: animal, dtype: string
To enforce a new index, specify new labels to index:
>>> idx.to_series(index=[0, 1, 2])
0 Ant
1 Bear
2 Cow
Name: animal, dtype: string
To override the name of the resulting column, specify name:
>>> idx.to_series(name='zoo')
animal
Ant Ant
Bear Bear
Cow Cow
Name: zoo, dtype: string
Parameters | |
---|---|
Name | Description |
index |
Index, optional
Index of resulting Series. If None, defaults to original index. |
name |
str, optional
Name of resulting Series. If None, defaults to name of original index. |
Returns | |
---|---|
Type | Description |
bigframes.pandas.Series |
The dtype will be based on the type of the Index values. |
transpose
transpose() -> bigframes.core.indexes.base.Index
Return the transpose, which is by definition self.
value_counts
value_counts(
normalize: bool = False,
sort: bool = True,
ascending: bool = False,
*,
dropna: bool = True
)
Return a Series containing counts of unique values.
The resulting object will be in descending order so that the first element is the most frequently-occurring element. Excludes NA values by default.
Examples:
>>> import bigframes.pandas as bpd
>>> import numpy as np
>>> bpd.options.display.progress_bar = None
>>> index = bpd.Index([3, 1, 2, 3, 4, np.nan])
>>> index.value_counts()
3.0 2
1.0 1
2.0 1
4.0 1
Name: count, dtype: Int64
With normalize set to True, returns the relative frequency by dividing all values by the sum of values.
>>> s = bpd.Series([3, 1, 2, 3, 4, np.nan])
>>> s.value_counts(normalize=True)
3.0 0.4
1.0 0.2
2.0 0.2
4.0 0.2
Name: proportion, dtype: Float64
dropna
With dropna set to False we can also see NaN index values.
>>> s.value_counts(dropna=False)
3.0 2
1.0 1
2.0 1
4.0 1
<NA> 1
Name: count, dtype: Int64
Parameters | |
---|---|
Name | Description |
normalize |
bool, default False
If True, then the object returned will contain the relative frequencies of the unique values. |
sort |
bool, default True
Sort by frequencies. |
ascending |
bool, default False
Sort in ascending order. |
dropna |
bool, default True
Don't include counts of NaN. |