Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions sdm/processing/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
RobustScale,
MinMaxScale,
FlipSign,
Asinh,
DropConstantColumns,
PCA,
RandomProjection,
Expand Down Expand Up @@ -93,6 +94,7 @@
"RobustScale",
"MinMaxScale",
"FlipSign",
"Asinh",
"DropConstantColumns",
"PCA",
"RandomProjection",
Expand Down
2 changes: 2 additions & 0 deletions sdm/processing/numerical/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from sdm.processing.numerical.robust_scale import RobustScale
from sdm.processing.numerical.min_max_scale import MinMaxScale
from sdm.processing.numerical.flip_sign import FlipSign
from sdm.processing.numerical.asinh import Asinh
from sdm.processing.numerical.constant import DropConstantColumns
from sdm.processing.numerical.pca import PCA
from sdm.processing.numerical.random_projection import RandomProjection
Expand All @@ -35,6 +36,7 @@
"RobustScale",
"MinMaxScale",
"FlipSign",
"Asinh",
"DropConstantColumns",
"PCA",
"RandomProjection",
Expand Down
18 changes: 18 additions & 0 deletions sdm/processing/numerical/asinh.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

from sdm import Stype, TableTensor
from sdm.processing import InvertibleMixin, Processor


class Asinh(Processor, InvertibleMixin):
r"""Apply the inverse hyperbolic sine to numerical values."""

handles_stypes = (Stype.numerical,)
requires_fit = False

def _transform(self, table: TableTensor) -> TableTensor:
return table.replace_blocks(numerical=table.numerical.asinh())

def _inverse_transform(self, table: TableTensor) -> TableTensor:
return table.replace_blocks(numerical=table.numerical.sinh())
17 changes: 17 additions & 0 deletions test/processing/numerical/test_asinh.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

import torch

from sdm import TableTensor
from sdm.processing import Asinh


def test_asinh_transform_and_inverse() -> None:
table = TableTensor.from_tensor(torch.randn(3, 2))
processor = Asinh()

out = processor.transform(table)
torch.testing.assert_close(out.numerical, table.numerical.asinh())
out = processor.inverse_transform(out)
torch.testing.assert_close(out.numerical, table.numerical)
1 change: 1 addition & 0 deletions test/processing/test_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ def _make_processor_pair(
ProcessorCase(sp.RobustScale()),
ProcessorCase(sp.MinMaxScale()),
ProcessorCase(sp.FlipSign()),
ProcessorCase(sp.Asinh()),
ProcessorCase(sp.DropConstantColumns()),
ProcessorCase(sp.PCA(2)),
ProcessorCase(sp.RandomProjection(2)),
Expand Down
Loading