Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Consider refactor of testing / benchmarking?
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  18 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Matthew Brett  
View profile  
 More options Nov 17 2012, 8:45 pm
From: Matthew Brett <matthew.br...@gmail.com>
Date: Sat, 17 Nov 2012 17:45:42 -0800
Local: Sat, Nov 17 2012 8:45 pm
Subject: Consider refactor of testing / benchmarking?
Hi,

I've been running into trouble installing sympy with easy_install and
pip on python 2.7 and Python 3.3.

The fact that easy_install / pip is unlikely to work means that sympy
is a considerably heavier burden for our (nipy.org/nipy) users to
install, and I'd very much like to help fix that.

This led me to start editing the sympy setup.py to do the standard
thing of running 2to3 during setu.py install : (e.g numpy, scipy,
matplotlib, our projects).

I immediately found why you haven't done this:  you depend on running

python setup.py run_tests

and

python setup.py run_benchkmarks

in the source tree.   So, there's no way of running these for python 2
and python 3 in the same source tree (unless you go for python 3
compatibility in source - a bit much).

So - I'm writing to ask if you'd consider looking at a refactor that
would change these calls above to:

python setup.py install --user (or whatever)
cd /somewhere
python -c 'import sympy; sympy.test()'

or

python setup.py install --user (or whatever)
cd /somewhere
python -c 'import sympy; sympy.bench()'

This has three advantages:

1) You can run 2to3 in your install.   This is generally very quick
after the first pass.  E.g for our project nipy:

time python setup.py install
->
real    2m7.466s
user    1m51.458s
sys     0m6.254s

time python setup.py install # a second time, only processing modified files
->
real    0m3.428s
user    0m2.614s
sys     0m0.712s

2) You can use the workflow above to develop and test in python3 :

python setup.py install # some longish time say 2 minutes
<edit>
python setup.py install # A few seconds
<test>
etc

2) You can have compiled code in your project without breaking the
tests / benchmarks

3) easy_install / pip will work :)

So - would you consider this change?   If so, I will write a pull
request for it.

Best,

Matthew


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 17 2012, 9:51 pm
From: Aaron Meurer <asmeu...@gmail.com>
Date: Sat, 17 Nov 2012 19:51:36 -0700
Local: Sat, Nov 17 2012 9:51 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
On Nov 17, 2012, at 7:39 PM, Matthew Brett <matthew.br...@gmail.com> wrote:

> Hi,

> I've been running into trouble installing sympy with easy_install and
> pip on python 2.7 and Python 3.3.

What issues with pip are you having?  I thought we fixed pip to do the
right thing.

The problem is that setup.py test runs tests that aren't included in
an install, namely the Sphinx doctests.

> or

> python setup.py install --user (or whatever)
> cd /somewhere
> python -c 'import sympy; sympy.bench()'

Benchmarks from setup.py aren't very important. We can remove them if
they are a hinderance.

Aaron Meurer


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Matthew Brett  
View profile  
 More options Nov 17 2012, 10:46 pm
From: Matthew Brett <matthew.br...@gmail.com>
Date: Sat, 17 Nov 2012 19:46:32 -0800
Local: Sat, Nov 17 2012 10:46 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
Hi,

On Sat, Nov 17, 2012 at 6:51 PM, Aaron Meurer <asmeu...@gmail.com> wrote:
> On Nov 17, 2012, at 7:39 PM, Matthew Brett <matthew.br...@gmail.com> wrote:

>> Hi,

>> I've been running into trouble installing sympy with easy_install and
>> pip on python 2.7 and Python 3.3.

> What issues with pip are you having?  I thought we fixed pip to do the
> right thing.

Ah - I have a strong memory that I had issues with pip, but not now I
test it on this machine.  Broken for easy_install (via distribute):

mb312@mikesilver ~]$ mkvirtualenv py27 --no-site-packages
New python executable in py27/bin/python
Installing setuptools.............done.
Installing pip...............done.
[mb312@mikesilver ~]$ workon py27
(py27)[mb312@mikesilver ~]$ easy_install sympy
Searching for sympy
Reading http://pypi.python.org/simple/sympy/
Reading http://code.google.com/p/sympy
Reading http://sympy.org
Reading http://sympy.org/
Reading http://code.google.com/p/sympy/downloads/detail?name=sympy-0.7.0.tar.gz
Best match: sympy 0.7.2-py3.3
Downloading http://pypi.python.org/packages/source/s/sympy/sympy-0.7.2-py3.3.tar....
Processing sympy-0.7.2-py3.3.tar.gz
Running sympy-0.7.2/setup.py -q bdist_egg --dist-dir
/var/folders/YB/YBjJ+eaQGb0EZfa9PJfcSk+++Tg/-Tmp-/easy_install-n5AKga/sympy -0.7.2/egg-dist-tmp-WFXCnm
Traceback (most recent call last):
  File "/Users/mb312/.virtualenvs/py27/bin/easy_install", line 8, in <module>
    load_entry_point('setuptools==0.6c11', 'console_scripts', 'easy_install')()
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 1712, in main
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 1700, in with_ei_usage
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 1716, in <lambda>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/ core.py",
line 152, in setup
    dist.run_commands()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/ dist.py",
line 953, in run_commands
    self.run_command(cmd)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/ dist.py",
line 972, in run_command
    cmd_obj.run()
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 211, in run
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 446, in easy_install
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 476, in install_item
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 655, in install_eggs
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 930, in build_and_install
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/command/easy_install.py",
line 919, in run_setup
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/sandbox.py",
line 62, in run_setup
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/sandbox.py",
line 105, in run
  File "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c 11-py2.7.egg/setuptools/sandbox.py",
line 64, in <lambda>
  File "setup.py", line 36, in <module>
  File "/var/folders/YB/YBjJ+eaQGb0EZfa9PJfcSk+++Tg/-Tmp-/easy_install-n5AKga/symp y-0.7.2/sympy/__init__.py",
line 27, in <module>
ImportError: It appears 2to3 has been run on the codebase. Use Python
3 or get the original source code.

We use easy_install much more than pip because pip will not install
binaries, and so is more or less useless for compiled packages.

Would it be an option to run these separately?  For example with

python setup.py run_doctests

? Or maybe with

python setup.py run_tests

where ``run_tests`` does something like:

mkdir tmp
cd tmp
python -c 'import sympy; sympy.test()'
cd ..
cd doc
make.py doctest

- if you see what I mean.  This would then fail unless there is an
installation somewhere, perhaps with a nice message to run ``python
setup.py install`` first.

I'm sorry for my ignorance - but how have y'all been doing the edit /
debug cycle in python 3?

Is it a concern that you can't use compiled code this way - or are you
committed to a compile free codebase for the long haul?

Cheers,

Matthew


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 18 2012, 5:06 pm
From: Aaron Meurer <asmeu...@gmail.com>
Date: Sun, 18 Nov 2012 15:06:26 -0700
Local: Sun, Nov 18 2012 5:06 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?

On Sat, Nov 17, 2012 at 8:46 PM, Matthew Brett <matthew.br...@gmail.com>wrote:

That's because pip *was* broken, but we figured out how to fix it.  The
trick was adding -py3.2 and so on to the tarball names so that it was sure
to download the right one.

ARGH! I did not know this.  It seems that the same solution for pip is the
problem for easy_install.  It thinks that sympy-0.7.2-py3.3 is the latest
version.

Any thoughts on how this can be fixed?  I've said this before, but it
deserves reiterating: I as a package maintainer have surprisingly little
control over what pip or easy_install install.  The best I can do is to
manipulate what links are on PyPI and to use naming trickery to make it
install the "latest" version.

I created https://code.google.com/p/sympy/issues/detail?id=3511 for this.

> We use easy_install much more than pip because pip will not install
> binaries, and so is more or less useless for compiled packages.

My best suggestion for this is to use pip for SymPy and easy_install for
the rest.  Or you could just pass the url manually to eas_install. If you
can figure out how to name the tarballs so that pip *and* easy_install do
the right thing, I'd love to hear it.  But I'm very doubtful that a
solution exists.  The Python packaging ecosystem is irrevocably broken as
far as I'm concerned.

setup.py test just runs all combinations of tests, which already have their
individual scripts. I think right now it's equivalent to something like

./bin/test
./bin/doctest
<whatever the sage test script is>
./examples/all.py -q

Actually, it just runs sympy.utilities.runtests.run_all_tests(), which is
itself a wrapper to the above tests.  So there is actually no need for
anything in the setup.py script itself to do tests.  It's just a nice
shortcut for us.

> - if you see what I mean.  This would then fail unless there is an
> installation somewhere, perhaps with a nice message to run ``python
> setup.py install`` first.

> I'm sorry for my ignorance - but how have y'all been doing the edit /
> debug cycle in python 3?

I never use virtualenv to test SymPy, unless I am testing installation.  I
just run ./bin/use2to3 and cd py3k-sympy and work locally.  I guess it's
easy for us because we don't have any dependencies, especially dependencies
that don't work unless installed.

> Is it a concern that you can't use compiled code this way - or are you
> committed to a compile free codebase for the long haul?

I don't see us using compiled code, at least not any time soon.

Aaron Meurer


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Matthew Brett  
View profile  
 More options Nov 18 2012, 5:16 pm
From: Matthew Brett <matthew.br...@gmail.com>
Date: Sun, 18 Nov 2012 14:16:35 -0800
Local: Sun, Nov 18 2012 5:16 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
Hi,

How about having a sympy3 pypi project?

>> We use easy_install much more than pip because pip will not install
>> binaries, and so is more or less useless for compiled packages.

> My best suggestion for this is to use pip for SymPy and easy_install for the
> rest.  Or you could just pass the url manually to eas_install. If you can
> figure out how to name the tarballs so that pip *and* easy_install do the
> right thing, I'd love to hear it.  But I'm very doubtful that a solution
> exists.  The Python packaging ecosystem is irrevocably broken as far as I'm
> concerned.

Tell it brother :)  And yes of course it throws the burden for the
workarounds onto each package maintainer, which is tiring and
wasteful.  But nevertheless, it can be made to work, by doing 2to3 in
the setup.py.

RIght - I think I'm asking whether you'd consider moving from:

python setup.py run_tests

to

python setup.py install
python setup.py run_tests

in order to make it possible to processing the source tree (for
compiled code or 2to3) before running?

>> - if you see what I mean.  This would then fail unless there is an
>> installation somewhere, perhaps with a nice message to run ``python
>> setup.py install`` first.

>> I'm sorry for my ignorance - but how have y'all been doing the edit /
>> debug cycle in python 3?

> I never use virtualenv to test SymPy, unless I am testing installation.  I
> just run ./bin/use2to3 and cd py3k-sympy and work locally.  I guess it's
> easy for us because we don't have any dependencies, especially dependencies
> that don't work unless installed.

I probably wasn't clear; I was thinking that it might be tough to have to do:

./bin/use2to3
cd py3k-sympy
while not Finished:
   <edit>
   <test>
and then have to backport the changes in py3k-sympy to the sympy tree
- but I probably didn't get the workflow.

Best,

Matthew


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 18 2012, 9:48 pm
From: Aaron Meurer <asmeu...@gmail.com>
Date: Sun, 18 Nov 2012 19:48:36 -0700
Local: Sun, Nov 18 2012 9:48 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?

On Sun, Nov 18, 2012 at 3:16 PM, Matthew Brett <matthew.br...@gmail.com>wrote:

I hadn't thought of that.  If we did this, then it would never do the right
thing in Python 3, i.e., the users would have to know to use "pip install
sympy3" instead of "pip install sympy" in Python 3.  It might also
complicated stuff for people whose travis.ini (or whatever) would otherwise
just have a single pip install line.

Am I misunderstanding what you're asking for?  Would you run the tests
against the installed version or the local version?

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Matthew Brett  
View profile  
 More options Nov 19 2012, 1:19 am
From: Matthew Brett <matthew.br...@gmail.com>
Date: Sun, 18 Nov 2012 22:19:24 -0800
Local: Mon, Nov 19 2012 1:19 am
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
Hi,

Maybe it would be OK if there was a suitable error message from an
attempted pip install sympy in python 3?  Sorry - I'm not sure that's
the best solution, just throwing it out there.

I agree it might be more complicated to sort out in travis, but people
in the position of writing a travis file for multiple pythons are
likely to be up to that task I would have thought.

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 19 2012, 3:01 am
From: Aaron Meurer <asmeu...@gmail.com>
Date: Mon, 19 Nov 2012 01:01:16 -0700
Local: Mon, Nov 19 2012 3:01 am
Subject: Re: [sympy] Consider refactor of testing / benchmarking?

On Sun, Nov 18, 2012 at 11:19 PM, Matthew Brett <matthew.br...@gmail.com>wrote:

There is, though admittedly it could be better:

$python3 setup.py # python 2 setup.py
Traceback (most recent call last):
  File "setup.py", line 36, in <module>
    import sympy
  File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/__init__.py",
line 35, in <module>
    raise ImportError("This is the Python 2 version of SymPy. To use SymPy "
ImportError: This is the Python 2 version of SymPy. To use SymPy with
Python 3, please obtain a Python 3 version from http://sympy.org, or use
the bin/use2to3 script if you are using the git version.

$python2 setup.py # python2 setup.py
Traceback (most recent call last):
  File "setup.py", line 36, in <module>
    import sympy
  File
"/Users/aaronmeurer/Documents/Python/sympy/sympy/py3k-sympy/sympy/__init__. py",
line 27, in <module>
    raise ImportError("It appears 2to3 has been run on the codebase. Use "
ImportError: It appears 2to3 has been run on the codebase. Use Python 3 or
get the original source code.

In particular, I don't think users care about use2to3, and it's just
confusing.

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Matthew Brett  
View profile  
 More options Nov 19 2012, 3:11 am
From: Matthew Brett <matthew.br...@gmail.com>
Date: Mon, 19 Nov 2012 00:11:15 -0800
Local: Mon, Nov 19 2012 3:11 am
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
Hi,

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Matthew Brett  
View profile  
 More options Nov 19 2012, 3:31 am
From: Matthew Brett <matthew.br...@gmail.com>
Date: Mon, 19 Nov 2012 00:31:10 -0800
Local: Mon, Nov 19 2012 3:31 am
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
Hi,

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Ondřej Čertík  
View profile  
 More options Nov 19 2012, 5:52 am
From: Ondřej Čertík <ondrej.cer...@gmail.com>
Date: Mon, 19 Nov 2012 02:52:39 -0800
Local: Mon, Nov 19 2012 5:52 am
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
Matthew,

On Sat, Nov 17, 2012 at 5:45 PM, Matthew Brett <matthew.br...@gmail.com> wrote:
> Hi,

> I've been running into trouble installing sympy with easy_install and
> pip on python 2.7 and Python 3.3.

> The fact that easy_install / pip is unlikely to work means that sympy
> is a considerably heavier burden for our (nipy.org/nipy) users to
> install, and I'd very much like to help fix that.

Sorry for such problems, I would like to fix that too. SymPy should
behave just like any other
Python package, and if it doesn't, we have to fix it. So I am ok
with any reasonable solution that fixes it. Aaron is now the guru
on pip. ;)

Ondrej


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 19 2012, 9:16 pm
From: Aaron Meurer <asmeu...@gmail.com>
Date: Mon, 19 Nov 2012 19:16:28 -0700
Local: Mon, Nov 19 2012 9:16 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?

On Mon, Nov 19, 2012 at 1:31 AM, Matthew Brett <matthew.br...@gmail.com>wrote:

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 19 2012, 9:17 pm
From: Aaron Meurer <asmeu...@gmail.com>
Date: Mon, 19 Nov 2012 19:17:12 -0700
Local: Mon, Nov 19 2012 9:17 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?

On Mon, Nov 19, 2012 at 1:11 AM, Matthew Brett <matthew.br...@gmail.com>wrote:

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 19 2012, 9:20 pm
From: Aaron Meurer <asmeu...@gmail.com>
Date: Mon, 19 Nov 2012 19:19:55 -0700
Local: Mon, Nov 19 2012 9:19 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?

On Mon, Nov 19, 2012 at 3:52 AM, Ondřej Čertík <ondrej.cer...@gmail.com>wrote:

Actually, I don't know hardly anything about pip.  All I know is that
unless you are *very* careful how you name your tarballs, it will gladly
install the wrong thing because of its agressive version searching
algorithm that is almost impossible for package maintainers to control.  I
think its done this for SymPy on at least three separate occasions now,
with three separate issues.

Aaron Meurer


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Matthew Brett  
View profile  
 More options Nov 20 2012, 12:43 am
From: Matthew Brett <matthew.br...@gmail.com>
Date: Mon, 19 Nov 2012 21:43:34 -0800
Local: Tues, Nov 20 2012 12:43 am
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
Hi,

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 20 2012, 7:45 pm
From: Aaron Meurer <asmeu...@gmail.com>
Date: Tue, 20 Nov 2012 17:45:08 -0700
Local: Tues, Nov 20 2012 7:45 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?

On Mon, Nov 19, 2012 at 10:43 PM, Matthew Brett <matthew.br...@gmail.com>wrote:

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Matthew Brett  
View profile  
 More options Nov 20 2012, 10:36 pm
From: Matthew Brett <matthew.br...@gmail.com>
Date: Tue, 20 Nov 2012 19:36:13 -0800
Local: Tues, Nov 20 2012 10:36 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?
Hi,

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Meurer  
View profile  
 More options Nov 20 2012, 11:10 pm
From: Aaron Meurer <asmeu...@gmail.com>
Date: Tue, 20 Nov 2012 21:09:56 -0700
Local: Tues, Nov 20 2012 11:09 pm
Subject: Re: [sympy] Consider refactor of testing / benchmarking?

On Tue, Nov 20, 2012 at 8:36 PM, Matthew Brett <matthew.br...@gmail.com>wrote:

...

read more »


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »