diff --git a/optuna/_experimental.py b/optuna/_experimental.py
index dae7c4887..955414935 100644
--- a/optuna/_experimental.py
+++ b/optuna/_experimental.py
@@ -1,5 +1,6 @@
 import functools
 import inspect
+import textwrap
 from typing import Any
 from typing import Callable
 import warnings
@@ -7,14 +8,11 @@ import warnings
 from optuna.exceptions import ExperimentalWarning
 
 
-# White spaces of each line are necessary to beautifully rendered documentation.
-# NOTE(crcrpar): When `experimental` decorator is applied to member methods, these lines require
-# another four spaces.
-_EXPERIMENTAL_DOCSTRING_TEMPLATE = """
+_EXPERIMENTAL_NOTE_TEMPLATE = """
 
-    .. note::
-        Added in v{ver} as an experimental feature. The interface may change in newer versions
-        without prior notice. See https://github.com/optuna/optuna/releases/tag/v{ver}.
+.. note::
+    Added in v{ver} as an experimental feature. The interface may change in newer versions
+    without prior notice. See https://github.com/optuna/optuna/releases/tag/v{ver}.
 """
 
 
@@ -28,6 +26,10 @@ def _validate_version(version: str) -> None:
         )
 
 
+def _get_docstring_indent(docstring: str) -> str:
+    return docstring.split("\n")[-1] if "\n" in docstring else ""
+
+
 def experimental(version: str, name: str = None) -> Any:
     """Decorate class or function as experimental.
 
@@ -43,16 +45,16 @@ def experimental(version: str, name: str = None) -> Any:
 
         def _experimental_func(func: Callable[[Any], Any]) -> Callable[[Any], Any]:
 
-            docstring = _EXPERIMENTAL_DOCSTRING_TEMPLATE.format(ver=version)
             if func.__doc__ is None:
                 func.__doc__ = ""
-            func.__doc__ += docstring
+
+            note = _EXPERIMENTAL_NOTE_TEMPLATE.format(ver=version)
+            indent = _get_docstring_indent(func.__doc__)
+            func.__doc__ = func.__doc__.strip() + textwrap.indent(note, indent) + indent
 
             # TODO(crcrpar): Annotate this correctly.
             @functools.wraps(func)
             def new_func(*args: Any, **kwargs: Any) -> Any:
-                """Wrapped function."""
-
                 warnings.warn(
                     "{} is experimental (supported from v{}). "
                     "The interface can change in the future.".format(
@@ -70,7 +72,6 @@ def experimental(version: str, name: str = None) -> Any:
 
             This decorator is supposed to be applied to the experimental class.
             """
-
             _original_init = cls.__init__
 
             @functools.wraps(_original_init)
@@ -89,7 +90,11 @@ def experimental(version: str, name: str = None) -> Any:
 
             if cls.__doc__ is None:
                 cls.__doc__ = ""
-            cls.__doc__ += _EXPERIMENTAL_DOCSTRING_TEMPLATE.format(ver=version)
+
+            note = _EXPERIMENTAL_NOTE_TEMPLATE.format(ver=version)
+            indent = _get_docstring_indent(cls.__doc__)
+            cls.__doc__ = cls.__doc__.strip() + textwrap.indent(note, indent) + indent
+
             return cls
 
         return _experimental_class(f) if inspect.isclass(f) else _experimental_func(f)

`experimental` decorator adds extra indents to docs
An extra indent appears in the docs when the [`experimental`](https://github.com/optuna/optuna/blob/2d5f24b06eed56ece72b8dfa878135bb4bb63779/optuna/_experimental.py#L60) decorator is added to a method of a class. This does not happen with a top level (i.e., not nested) class or function.

## Steps to reproduce

1. add an `experimental` decorator to a method of a class
2. make the document

## Reproducible examples
The following figure shows the docs of [`Study.enqueue_trial`](https://optuna.readthedocs.io/en/latest/reference/study.html#optuna.study.Study.enqueue_trial). An extra indent appears after the second paragraph.

![image](https://user-images.githubusercontent.com/1061922/81144389-e6f32f80-8fae-11ea-8dd2-33368293dafa.png)

## Expected behavior
no extra indent is shown after the second paragraph

For example, the docs of [`Study.get_trials`](https://optuna.readthedocs.io/en/latest/reference/study.html#optuna.study.Study.get_trials), which does not have the `experimental` decorator, appears as expected.

![image](https://user-images.githubusercontent.com/1061922/81143489-f1142e80-8fac-11ea-9896-e56086228168.png)

The following figure shows another example. The docs of the [`train`](https://optuna.readthedocs.io/en/latest/reference/integration.html#optuna.integration.lightgbm.train) function of LightGBMTuner has no extra indent. Although the function has an `experimental` decorator, it belongs to the top level classes.

![image](https://user-images.githubusercontent.com/1061922/81146606-98945f80-8fb3-11ea-8d67-5cf1cfbf8768.png)

diff --git a/tests/test_experimental.py b/tests/test_experimental.py
index b13e4913b..0e14ea60d 100644
--- a/tests/test_experimental.py
+++ b/tests/test_experimental.py
@@ -15,53 +15,69 @@ class _Sample(object):
     def __init__(self, a: Any, b: Any, c: Any) -> None:
         pass
 
+    def _method(self) -> None:
+        """summary
 
-@pytest.mark.parametrize("version", ["1.1.0", "1.1", 100, None])
-def test_experimental_decorator(version: str) -> None:
-
-    if version != "1.1.0":
-        with pytest.raises(ValueError):
-            _experimental.experimental(version)
-    else:
-        decorator_experimental = _experimental.experimental(version)
-        assert (
-            callable(decorator_experimental)
-            and decorator_experimental.__name__ == "_experimental_wrapper"
-        )
-
-        decorated_sample_func = decorator_experimental(_sample_func)
-        assert decorated_sample_func.__name__ == "_sample_func"
-        assert (
-            decorated_sample_func.__doc__
-            == _experimental._EXPERIMENTAL_DOCSTRING_TEMPLATE.format(ver=version)
-        )
-
-        with pytest.warns(ExperimentalWarning):
-            decorated_sample_func(None)
-
-
-@pytest.mark.parametrize("version", ["1.1.0", "1.1", 100, None])
-def test_experimental_class_decorator(version: str) -> None:
-
-    if version != "1.1.0":
-        with pytest.raises(ValueError):
-            _experimental.experimental(version)
-    else:
-        decorator_experimental = _experimental.experimental(version)
-        assert (
-            callable(decorator_experimental)
-            and decorator_experimental.__name__ == "_experimental_wrapper"
-        )
-
-        decorated_sample = decorator_experimental(_Sample)
-        assert decorated_sample.__name__ == "_Sample"
-        assert decorated_sample.__init__.__name__ == "__init__"
-        assert decorated_sample.__doc__ == _experimental._EXPERIMENTAL_DOCSTRING_TEMPLATE.format(
-            ver=version
-        )
-
-        with pytest.warns(ExperimentalWarning):
-            decorated_sample("a", "b", "c")
+        detail
+        """
+        pass
+
+    def _method_expected(self) -> None:
+        """summary
+
+        detail
+
+        .. note::
+            Added in v1.1.0 as an experimental feature. The interface may change in newer versions
+            without prior notice. See https://github.com/optuna/optuna/releases/tag/v1.1.0.
+        """
+        pass
+
+
+@pytest.mark.parametrize("version", ["1.1", 100, None])
+def test_experimental_raises_error_for_invalid_version(version: Any) -> None:
+    with pytest.raises(ValueError):
+        _experimental.experimental(version)
+
+
+def test_experimental_decorator() -> None:
+    version = "1.1.0"
+    decorator_experimental = _experimental.experimental(version)
+    assert callable(decorator_experimental)
+
+    decorated_func = decorator_experimental(_sample_func)
+    assert decorated_func.__name__ == _sample_func.__name__
+    assert decorated_func.__doc__ == _experimental._EXPERIMENTAL_NOTE_TEMPLATE.format(ver=version)
+
+    with pytest.warns(ExperimentalWarning):
+        decorated_func(None)
+
+
+def test_experimental_method_decorator() -> None:
+    version = "1.1.0"
+    decorator_experimental = _experimental.experimental(version)
+    assert callable(decorator_experimental)
+
+    decorated_method = decorator_experimental(_Sample._method)
+    assert decorated_method.__name__ == _Sample._method.__name__
+    assert decorated_method.__doc__ == _Sample._method_expected.__doc__
+
+    with pytest.warns(ExperimentalWarning):
+        decorated_method(None)
+
+
+def test_experimental_class_decorator() -> None:
+    version = "1.1.0"
+    decorator_experimental = _experimental.experimental(version)
+    assert callable(decorator_experimental)
+
+    decorated_class = decorator_experimental(_Sample)
+    assert decorated_class.__name__ == "_Sample"
+    assert decorated_class.__init__.__name__ == "__init__"
+    assert decorated_class.__doc__ == _experimental._EXPERIMENTAL_NOTE_TEMPLATE.format(ver=version)
+
+    with pytest.warns(ExperimentalWarning):
+        decorated_class("a", "b", "c")
 
 
 def test_experimental_decorator_name() -> None:

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov
apt-get update apt-get install -y openmpi-bin libopenmpi-dev swig
3.7
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alembic==1.12.1
attrs==24.2.0
autopage==0.5.2
certifi @ file:///croot/certifi_1671487769961/work/certifi
cliff==3.10.1
cmaes==0.11.1
cmd2==2.4.3
colorlog==6.9.0
coverage==7.2.7
exceptiongroup==1.2.2
greenlet==3.1.1
importlib-metadata==6.7.0
importlib-resources==5.12.0
iniconfig==2.0.0
joblib==1.3.2
Mako==1.2.4
MarkupSafe==2.1.5
numpy==1.21.6
-e git+https://github.com/optuna/optuna.git@e23ef651206815601c0910203bd78ad5d1a01cbb#egg=optuna
packaging==24.0
pbr==6.1.1
pluggy==1.2.0
prettytable==3.7.0
pyparsing==3.1.4
pyperclip==1.9.0
pytest==7.4.4
pytest-cov==4.1.0
PyYAML==6.0.1
scipy==1.7.3
SQLAlchemy==2.0.40
stevedore==3.5.2
tomli==2.0.1
tqdm==4.67.1
typing_extensions==4.7.1
wcwidth==0.2.13
zipp==3.15.0

name: optuna
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alembic==1.12.1
      - attrs==24.2.0
      - autopage==0.5.2
      - cliff==3.10.1
      - cmaes==0.11.1
      - cmd2==2.4.3
      - colorlog==6.9.0
      - coverage==7.2.7
      - exceptiongroup==1.2.2
      - greenlet==3.1.1
      - importlib-metadata==6.7.0
      - importlib-resources==5.12.0
      - iniconfig==2.0.0
      - joblib==1.3.2
      - mako==1.2.4
      - markupsafe==2.1.5
      - numpy==1.21.6
      - packaging==24.0
      - pbr==6.1.1
      - pluggy==1.2.0
      - prettytable==3.7.0
      - pyparsing==3.1.4
      - pyperclip==1.9.0
      - pytest==7.4.4
      - pytest-cov==4.1.0
      - pyyaml==6.0.1
      - scipy==1.7.3
      - sqlalchemy==2.0.40
      - stevedore==3.5.2
      - tomli==2.0.1
      - tqdm==4.67.1
      - typing-extensions==4.7.1
      - wcwidth==0.2.13
      - zipp==3.15.0
prefix: /opt/conda/envs/optuna

tests/test_experimental.py::test_experimental_decorator tests/test_experimental.py::test_experimental_method_decorator tests/test_experimental.py::test_experimental_class_decorator
tests/test_experimental.py::test_experimental_raises_error_for_invalid_version[1.1] tests/test_experimental.py::test_experimental_raises_error_for_invalid_version[100] tests/test_experimental.py::test_experimental_raises_error_for_invalid_version[None] tests/test_experimental.py::test_experimental_decorator_name tests/test_experimental.py::test_experimental_class_decorator_name
optuna/_experimental.py
optuna/_experimental.py