Repository: rany2/edge-tts Branch: master Commit: b45c019b9948 Files: 43 Total size: 345.6 KB Directory structure: gitextract_lm04wmz4/ ├── .github/ │ ├── FUNDING.yml │ ├── dependabot.yml │ └── workflows/ │ ├── code-quality.yml │ └── codeql-analysis.yml ├── .gitignore ├── .isort.cfg ├── LICENSE ├── README.md ├── build_and_publish.sh ├── examples/ │ ├── async_audio_gen_with_dynamic_voice_selection.py │ ├── async_audio_gen_with_predefined_voice.py │ ├── async_audio_streaming_with_predefined_voice_and_subtitles.py │ ├── sync_audio_gen_with_predefined_voice.py │ ├── sync_audio_streaming_with_predefined_voice_subtitles.py │ └── sync_audio_streaming_with_predefined_voice_subtitles_print2stdout.py ├── format.sh ├── gpl-3.0.txt ├── lint.sh ├── mypy.ini ├── pylintrc ├── setup.cfg ├── setup.py ├── src/ │ ├── edge_playback/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── py.typed │ │ ├── util.py │ │ └── win32_playback.py │ └── edge_tts/ │ ├── __init__.py │ ├── __main__.py │ ├── communicate.py │ ├── constants.py │ ├── data_classes.py │ ├── drm.py │ ├── exceptions.py │ ├── py.typed │ ├── srt_composer.py │ ├── submaker.py │ ├── typing.py │ ├── util.py │ ├── version.py │ └── voices.py └── tests/ ├── 001-long-text.sh └── 001-long-text.txt ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/FUNDING.yml ================================================ github: rany2 ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: "pip" directory: "/" schedule: interval: "daily" ================================================ FILE: .github/workflows/code-quality.yml ================================================ name: "Check code quality" on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: lint: runs-on: ubuntu-latest name: "Lint" steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: 3.x - name: Install all dependencies run: pip install .[dev] - name: Run mypy run: mypy --pretty src examples - name: Run pylint run: pylint examples src - name: Run isort run: isort --check-only --diff . - name: Run black run: black --check --diff . ================================================ FILE: .github/workflows/codeql-analysis.yml ================================================ name: "CodeQL" on: push: branches: [ "master" ] pull_request: # The branches below must be a subset of the branches above branches: [ "master" ] schedule: - cron: '31 0 * * 1' jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'python' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. # - run: | # echo "Run, Build Application using script" # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 ================================================ FILE: .gitignore ================================================ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock # pdm # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. #pdm.lock # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it # in version control. # https://pdm.fming.dev/#use-with-ide .pdm.toml # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ # Edge-TTS specific ignores *.mp3 *.srt /.idea/ ================================================ FILE: .isort.cfg ================================================ [settings] multi_line_output = 3 include_trailing_comma = True force_grid_wrap = 0 use_parentheses = True ensure_newline_before_comments = True line_length = 88 ================================================ FILE: LICENSE ================================================ The MIT license is used for 'src/edge_tts/srt_composer.py' only. All remaining files are licensed under the LGPLv3. ----------------------------------------------------------------------- The MIT License Copyright (c) 2014-2023 Christopher Down Copyright (c) 2025- rany Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------------------------------------------------------------- GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. ================================================ FILE: README.md ================================================ # edge-tts `edge-tts` is a Python module that allows you to use Microsoft Edge's online text-to-speech service from within your Python code or using the provided `edge-tts` or `edge-playback` command. ## Installation To install it, run the following command: $ pip install edge-tts If you only want to use the `edge-tts` and `edge-playback` commands, it would be better to use `pipx`: $ pipx install edge-tts ## Usage ### Basic usage If you want to use the `edge-tts` command, you can simply run it with the following command: $ edge-tts --text "Hello, world!" --write-media hello.mp3 --write-subtitles hello.srt If you wish to play it back immediately with subtitles, you could use the `edge-playback` command: $ edge-playback --text "Hello, world!" Note that `edge-playback` requires the installation of the [`mpv` command line player](https://mpv.io/), except on Windows. All `edge-tts` commands work with `edge-playback` with the exception of the `--write-media`, `--write-subtitles` and `--list-voices` options. ### Changing the voice You can change the voice used by the text-to-speech service by using the `--voice` option. The `--list-voices` option can be used to list all available voices. $ edge-tts --list-voices Name Gender ContentCategories VoicePersonalities --------------------------------- -------- --------------------- -------------------------------------- af-ZA-AdriNeural Female General Friendly, Positive af-ZA-WillemNeural Male General Friendly, Positive am-ET-AmehaNeural Male General Friendly, Positive am-ET-MekdesNeural Female General Friendly, Positive ar-AE-FatimaNeural Female General Friendly, Positive ar-AE-HamdanNeural Male General Friendly, Positive ar-BH-AliNeural Male General Friendly, Positive ar-BH-LailaNeural Female General Friendly, Positive ar-DZ-AminaNeural Female General Friendly, Positive ar-DZ-IsmaelNeural Male General Friendly, Positive ar-EG-SalmaNeural Female General Friendly, Positive ... $ edge-tts --voice ar-EG-SalmaNeural --text "مرحبا كيف حالك؟" --write-media hello_in_arabic.mp3 --write-subtitles hello_in_arabic.srt ### Custom SSML Support for custom SSML was removed because Microsoft prevents the use of any SSML that could not be generated by Microsoft Edge itself. This means that all the cases where custom SSML would be useful cannot be supported as the service only permits a single `` tag with a single `` tag inside it. Any available customization options that could be used in the `` tag are already available from the library or the command line itself. ### Changing rate, volume and pitch You can change the rate, volume and pitch of the generated speech by using the `--rate`, `--volume` and `--pitch` options. When using a negative value, you will need to use `--[option]=-50%` instead of `--[option] -50%` to avoid the option being interpreted as a command line option. $ edge-tts --rate=-50% --text "Hello, world!" --write-media hello_with_rate_lowered.mp3 --write-subtitles hello_with_rate_lowered.srt $ edge-tts --volume=-50% --text "Hello, world!" --write-media hello_with_volume_lowered.mp3 --write-subtitles hello_with_volume_lowered.srt $ edge-tts --pitch=-50Hz --text "Hello, world!" --write-media hello_with_pitch_lowered.mp3 --write-subtitles hello_with_pitch_lowered.srt ## Python module It is possible to use the `edge-tts` module directly from Python. Examples from the project itself include: * [/examples/](/examples/) * [/src/edge_tts/util.py](/src/edge_tts/util.py) Other projects that use the `edge-tts` module include: * [hass-edge-tts](https://github.com/hasscc/hass-edge-tts/blob/main/custom_components/edge_tts/tts.py) * [Podcastfy](https://github.com/souzatharsis/podcastfy/blob/main/podcastfy/tts/providers/edge.py) * [tts-samples](https://github.com/yaph/tts-samples/blob/main/bin/create_sound_samples.py) - a collection of [mp3 sound samples](https://github.com/yaph/tts-samples/tree/main/mp3) to facilitate picking a voice for your project. ================================================ FILE: build_and_publish.sh ================================================ #!/bin/sh set -eux rm -rf build dist src/*.egg-info python3 setup.py sdist bdist_wheel twine check dist/* twine upload dist/* --verbose ================================================ FILE: examples/async_audio_gen_with_dynamic_voice_selection.py ================================================ #!/usr/bin/env python3 """Simple example to generate an audio file with randomized dynamic voice selection based on attributes such as Gender, Language, or Locale.""" import asyncio import random import edge_tts from edge_tts import VoicesManager TEXT = "Hoy es un buen día." OUTPUT_FILE = "spanish.mp3" async def amain() -> None: """Main function""" voices = await VoicesManager.create() voice = voices.find(Gender="Male", Language="es") # Also supports Locales # voice = voices.find(Gender="Female", Locale="es-AR") communicate = edge_tts.Communicate(TEXT, random.choice(voice)["Name"]) await communicate.save(OUTPUT_FILE) if __name__ == "__main__": asyncio.run(amain()) ================================================ FILE: examples/async_audio_gen_with_predefined_voice.py ================================================ #!/usr/bin/env python3 """Simple example to generate audio with preset voice using async/await""" import asyncio import edge_tts TEXT = "Hello World!" VOICE = "en-GB-SoniaNeural" OUTPUT_FILE = "test.mp3" async def amain() -> None: """Main function""" communicate = edge_tts.Communicate(TEXT, VOICE) await communicate.save(OUTPUT_FILE) if __name__ == "__main__": asyncio.run(amain()) ================================================ FILE: examples/async_audio_streaming_with_predefined_voice_and_subtitles.py ================================================ #!/usr/bin/env python3 """Example showing how to use use .stream() method to get audio chunks and feed them to SubMaker to generate subtitles""" import asyncio import edge_tts TEXT = "Hello World!" VOICE = "en-GB-SoniaNeural" OUTPUT_FILE = "test.mp3" SRT_FILE = "test.srt" async def amain() -> None: """Main function""" communicate = edge_tts.Communicate(TEXT, VOICE) submaker = edge_tts.SubMaker() with open(OUTPUT_FILE, "wb") as file: async for chunk in communicate.stream(): if chunk["type"] == "audio": file.write(chunk["data"]) elif chunk["type"] in ("WordBoundary", "SentenceBoundary"): submaker.feed(chunk) with open(SRT_FILE, "w", encoding="utf-8") as file: file.write(submaker.get_srt()) if __name__ == "__main__": asyncio.run(amain()) ================================================ FILE: examples/sync_audio_gen_with_predefined_voice.py ================================================ #!/usr/bin/env python3 """Sync variant of the example for generating audio with a predefined voice""" import edge_tts TEXT = "Hello World!" VOICE = "en-GB-SoniaNeural" OUTPUT_FILE = "test.mp3" def main() -> None: """Main function""" communicate = edge_tts.Communicate(TEXT, VOICE) communicate.save_sync(OUTPUT_FILE) if __name__ == "__main__": main() ================================================ FILE: examples/sync_audio_streaming_with_predefined_voice_subtitles.py ================================================ #!/usr/bin/env python3 """Sync variant of the async .stream() method to get audio chunks and feed them to SubMaker to generate subtitles""" import edge_tts TEXT = "Hello World!" VOICE = "en-GB-SoniaNeural" OUTPUT_FILE = "test.mp3" SRT_FILE = "test.srt" def main() -> None: """Main function""" communicate = edge_tts.Communicate(TEXT, VOICE) submaker = edge_tts.SubMaker() with open(OUTPUT_FILE, "wb") as file: for chunk in communicate.stream_sync(): if chunk["type"] == "audio": file.write(chunk["data"]) elif chunk["type"] in ("WordBoundary", "SentenceBoundary"): submaker.feed(chunk) with open(SRT_FILE, "w", encoding="utf-8") as file: file.write(submaker.get_srt()) if __name__ == "__main__": main() ================================================ FILE: examples/sync_audio_streaming_with_predefined_voice_subtitles_print2stdout.py ================================================ #!/usr/bin/env python3 """Sync variant of the async .stream() method to get audio chunks and feed them to SubMaker to generate subtitles""" import sys import edge_tts TEXT = """君不见,黄河之水天上来,奔流到海不复回。 君不见,高堂明镜悲白发,朝如青丝暮成雪。 人生得意须尽欢,莫使金樽空对月。 天生我材必有用,千金散尽还复来。 烹羊宰牛且为乐,会须一饮三百杯。 岑夫子,丹丘生,将进酒,杯莫停。 与君歌一曲,请君为我倾耳听。 钟鼓馔玉不足贵,但愿长醉不复醒。 古来圣贤皆寂寞,惟有饮者留其名。 陈王昔时宴平乐,斗酒十千恣欢谑。 主人何为言少钱,径须沽取对君酌。 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。""" VOICE = "zh-CN-YunjianNeural" def main() -> None: """Main function""" communicate = edge_tts.Communicate(TEXT, VOICE, boundary="SentenceBoundary") submaker = edge_tts.SubMaker() stdout = sys.stdout audio_bytes = [] for chunk in communicate.stream_sync(): if chunk["type"] == "audio": audio_bytes.append(chunk["data"]) elif chunk["type"] in ("WordBoundary", "SentenceBoundary"): submaker.feed(chunk) stdout.write(f"audio file length: {len(audio_bytes)}") stdout.write(submaker.get_srt()) if __name__ == "__main__": main() ================================================ FILE: format.sh ================================================ set -eux find src examples -name '*.py' | xargs black find src examples -name '*.py' | xargs isort ================================================ FILE: gpl-3.0.txt ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: lint.sh ================================================ #!/bin/sh set -ux find src examples -name '*.py' | xargs pylint find src examples -name '*.py' | xargs mypy ================================================ FILE: mypy.ini ================================================ [mypy] disallow_any_unimported = True disallow_any_expr = False disallow_any_decorated = True disallow_any_explicit = False disallow_any_generics = True disallow_subclassing_any = True disallow_untyped_calls = True disallow_untyped_defs = True disallow_incomplete_defs = True check_untyped_defs = True disallow_untyped_decorators = True warn_redundant_casts = True warn_unused_ignores = True warn_no_return = True warn_return_any = True warn_unreachable = True strict_equality = True strict = True ================================================ FILE: pylintrc ================================================ [MAIN] # Analyse import fallback blocks. This can be used to support both Python 2 and # 3 compatible code, which means that the block might have code that exists # only in one or another interpreter, leading to false positives when analysed. analyse-fallback-blocks=no # Clear in-memory caches upon conclusion of linting. Useful if running pylint # in a server-like mode. clear-cache-post-run=no # Load and enable all available extensions. Use --list-extensions to see a list # all available extensions. #enable-all-extensions= # In error mode, messages with a category besides ERROR or FATAL are # suppressed, and no reports are done by default. Error mode is compatible with # disabling specific errors. #errors-only= # Always return a 0 (non-error) status code, even if lint errors are found. # This is primarily useful in continuous integration scripts. #exit-zero= # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code. extension-pkg-allow-list= # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code. (This is an alternative name to extension-pkg-allow-list # for backward compatibility.) extension-pkg-whitelist= # Return non-zero exit code if any of these messages/categories are detected, # even if score is above --fail-under value. Syntax same as enable. Messages # specified are enabled, while categories only check already-enabled messages. fail-on= # Specify a score threshold under which the program will exit with error. fail-under=10 # Interpret the stdin as a python script, whose filename needs to be passed as # the module_or_package argument. #from-stdin= # Files or directories to be skipped. They should be base names, not paths. ignore=CVS # Add files or directories matching the regular expressions patterns to the # ignore-list. The regex matches against paths and can be in Posix or Windows # format. Because '\\' represents the directory delimiter on Windows systems, # it can't be used as an escape character. ignore-paths= # Files or directories matching the regular expression patterns are skipped. # The regex matches against base names, not paths. The default value ignores # Emacs file locks ignore-patterns=^\.# # List of module names for which member attributes should not be checked # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis). It # supports qualified module names, as well as Unix pattern matching. ignored-modules= # Python code to execute, usually for sys.path manipulation such as # pygtk.require(). #init-hook= # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the # number of processors available to use, and will cap the count on Windows to # avoid hangs. jobs=1 # Control the amount of potential inferred values when inferring a single # object. This can help the performance when dealing with large functions or # complex, nested conditions. limit-inference-results=100 # List of plugins (as comma separated values of python module names) to load, # usually to register additional checkers. load-plugins= # Pickle collected data for later comparisons. persistent=yes # Minimum Python version to use for version dependent checks. Will default to # the version used to run pylint. py-version=3.11 # Discover python modules and packages in the file system subtree. recursive=no # Add paths to the list of the source roots. Supports globbing patterns. The # source root is an absolute path or a path relative to the current working # directory used to determine a package namespace for modules located under the # source root. source-roots= # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. unsafe-load-any-extension=no # In verbose mode, extra non-checker-related info will be displayed. #verbose= [BASIC] # Naming style matching correct argument names. argument-naming-style=snake_case # Regular expression matching correct argument names. Overrides argument- # naming-style. If left empty, argument names will be checked with the set # naming style. #argument-rgx= # Naming style matching correct attribute names. attr-naming-style=snake_case # Regular expression matching correct attribute names. Overrides attr-naming- # style. If left empty, attribute names will be checked with the set naming # style. #attr-rgx= # Bad variable names which should always be refused, separated by a comma. bad-names=foo, bar, baz, toto, tutu, tata # Bad variable names regexes, separated by a comma. If names match any regex, # they will always be refused bad-names-rgxs= # Naming style matching correct class attribute names. class-attribute-naming-style=any # Regular expression matching correct class attribute names. Overrides class- # attribute-naming-style. If left empty, class attribute names will be checked # with the set naming style. #class-attribute-rgx= # Naming style matching correct class constant names. class-const-naming-style=UPPER_CASE # Regular expression matching correct class constant names. Overrides class- # const-naming-style. If left empty, class constant names will be checked with # the set naming style. #class-const-rgx= # Naming style matching correct class names. class-naming-style=PascalCase # Regular expression matching correct class names. Overrides class-naming- # style. If left empty, class names will be checked with the set naming style. #class-rgx= # Naming style matching correct constant names. const-naming-style=UPPER_CASE # Regular expression matching correct constant names. Overrides const-naming- # style. If left empty, constant names will be checked with the set naming # style. #const-rgx= # Minimum line length for functions/classes that require docstrings, shorter # ones are exempt. docstring-min-length=-1 # Naming style matching correct function names. function-naming-style=snake_case # Regular expression matching correct function names. Overrides function- # naming-style. If left empty, function names will be checked with the set # naming style. #function-rgx= # Good variable names which should always be accepted, separated by a comma. good-names=i, j, k, ex, Run, _ # Good variable names regexes, separated by a comma. If names match any regex, # they will always be accepted good-names-rgxs= # Include a hint for the correct naming format with invalid-name. include-naming-hint=no # Naming style matching correct inline iteration names. inlinevar-naming-style=any # Regular expression matching correct inline iteration names. Overrides # inlinevar-naming-style. If left empty, inline iteration names will be checked # with the set naming style. #inlinevar-rgx= # Naming style matching correct method names. method-naming-style=snake_case # Regular expression matching correct method names. Overrides method-naming- # style. If left empty, method names will be checked with the set naming style. #method-rgx= # Naming style matching correct module names. module-naming-style=snake_case # Regular expression matching correct module names. Overrides module-naming- # style. If left empty, module names will be checked with the set naming style. #module-rgx= # Colon-delimited sets of names that determine each other's naming style when # the name regexes allow several styles. name-group= # Regular expression which should only match function or class names that do # not require a docstring. no-docstring-rgx=^_ # List of decorators that produce properties, such as abc.abstractproperty. Add # to this list to register other decorators that produce valid properties. # These decorators are taken in consideration only for invalid-name. property-classes=abc.abstractproperty # Regular expression matching correct type alias names. If left empty, type # alias names will be checked with the set naming style. #typealias-rgx= # Regular expression matching correct type variable names. If left empty, type # variable names will be checked with the set naming style. #typevar-rgx= # Naming style matching correct variable names. variable-naming-style=snake_case # Regular expression matching correct variable names. Overrides variable- # naming-style. If left empty, variable names will be checked with the set # naming style. #variable-rgx= [CLASSES] # Warn about protected attribute access inside special methods check-protected-access-in-special-methods=no # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__, __new__, setUp, asyncSetUp, __post_init__ # List of member names, which should be excluded from the protected access # warning. exclude-protected=_asdict,_fields,_replace,_source,_make,os._exit # List of valid names for the first argument in a class method. valid-classmethod-first-arg=cls # List of valid names for the first argument in a metaclass class method. valid-metaclass-classmethod-first-arg=mcs [DESIGN] # List of regular expressions of class ancestor names to ignore when counting # public methods (see R0903) exclude-too-few-public-methods= # List of qualified class names to ignore when counting class parents (see # R0901) ignored-parents= # Maximum number of arguments for function / method. max-args=10 # Maximum number of attributes for a class (see R0902). max-attributes=7 # Maximum number of boolean expressions in an if statement (see R0916). max-bool-expr=5 # Maximum number of branch for function / method body. max-branches=20 # Maximum number of locals for function / method body. max-locals=20 # Maximum number of parents for a class (see R0901). max-parents=7 # Maximum number of public methods for a class (see R0904). max-public-methods=20 # Maximum number of return / yield for function / method body. max-returns=6 # Maximum number of statements in function / method body. max-statements=50 # Minimum number of public methods for a class (see R0903). min-public-methods=2 [EXCEPTIONS] # Exceptions that will emit a warning when caught. overgeneral-exceptions=builtins.BaseException,builtins.Exception [FORMAT] # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. expected-line-ending-format= # Regexp for a line that is allowed to be longer than the limit. ignore-long-lines=^\s*(# )??$ # Number of spaces of indent required inside a hanging or continued line. indent-after-paren=4 # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string=' ' # Maximum number of characters on a single line. max-line-length=100 # Maximum number of lines in a module. max-module-lines=1000 # Allow the body of a class to be on the same line as the declaration if body # contains single statement. single-line-class-stmt=no # Allow the body of an if to be on the same line as the test if there is no # else. single-line-if-stmt=no [IMPORTS] # List of modules that can be imported at any level, not just the top level # one. allow-any-import-level= # Allow explicit reexports by alias from a package __init__. allow-reexport-from-package=no # Allow wildcard imports from modules that define __all__. allow-wildcard-with-all=no # Deprecated modules which should not be used, separated by a comma. deprecated-modules= # Output a graph (.gv or any supported image format) of external dependencies # to the given file (report RP0402 must not be disabled). ext-import-graph= # Output a graph (.gv or any supported image format) of all (i.e. internal and # external) dependencies to the given file (report RP0402 must not be # disabled). import-graph= # Output a graph (.gv or any supported image format) of internal dependencies # to the given file (report RP0402 must not be disabled). int-import-graph= # Force import order to recognize a module as part of the standard # compatibility libraries. known-standard-library= # Force import order to recognize a module as part of a third party library. known-third-party=enchant # Couples of modules and preferred modules, separated by a comma. preferred-modules= [LOGGING] # The type of string formatting that logging methods do. `old` means using % # formatting, `new` is for `{}` formatting. logging-format-style=old # Logging modules to check that the string format arguments are in logging # function parameter format. logging-modules=logging [MESSAGES CONTROL] # Only show warnings with the listed confidence levels. Leave empty to show # all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, # UNDEFINED. confidence=HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifiers separated by comma (,) or put this # option multiple times (only on the command line, not in the configuration # file where it should appear only once). You can also use "--disable=all" to # disable everything first and then re-enable specific checks. For example, if # you want to run only the similarities checker, you can use "--disable=all # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use "--disable=all --enable=classes # --disable=W". disable=raw-checker-failed, bad-inline-option, locally-disabled, file-ignored, suppressed-message, useless-suppression, deprecated-pragma, use-symbolic-message-instead, use-implicit-booleaness-not-comparison-to-string, use-implicit-booleaness-not-comparison-to-zero, duplicate-code, consider-using-with # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). See also the "--disable" option for examples. enable= [METHOD_ARGS] # List of qualified names (i.e., library.method) which require a timeout # parameter e.g. 'requests.api.get,requests.api.post' timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. notes=FIXME, XXX, TODO # Regular expression of note tags to take in consideration. notes-rgx= [REFACTORING] # Maximum number of nested blocks for function / method body max-nested-blocks=5 # Complete name of functions that never returns. When checking for # inconsistent-return-statements if a never returning function is called then # it will be considered as an explicit return statement and no message will be # printed. never-returning-functions=sys.exit,argparse.parse_error [REPORTS] # Python expression which should return a score less than or equal to 10. You # have access to the variables 'fatal', 'error', 'warning', 'refactor', # 'convention', and 'info' which contain the number of messages in each # category, as well as 'statement' which is the total number of statements # analyzed. This score is used by the global evaluation report (RP0004). evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) # Template used to display messages. This is a python new-style format string # used to format the message information. See doc for all details. msg-template= # Set the output format. Available formats are: text, parseable, colorized, # json2 (improved json format), json (old json format) and msvs (visual # studio). You can also give a reporter class, e.g. # mypackage.mymodule.MyReporterClass. #output-format= # Tells whether to display a full report or only the messages. reports=no # Activate the evaluation score. score=yes [SIMILARITIES] # Comments are removed from the similarity computation ignore-comments=yes # Docstrings are removed from the similarity computation ignore-docstrings=yes # Imports are removed from the similarity computation ignore-imports=yes # Signatures are removed from the similarity computation ignore-signatures=yes # Minimum lines number of a similarity. min-similarity-lines=4 [SPELLING] # Limits count of emitted suggestions for spelling mistakes. max-spelling-suggestions=4 # Spelling dictionary name. No available dictionaries : You need to install # both the python package and the system dependency for enchant to work. spelling-dict= # List of comma separated words that should be considered directives if they # appear at the beginning of a comment and should not be checked. spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: # List of comma separated words that should not be checked. spelling-ignore-words= # A path to a file that contains the private dictionary; one word per line. spelling-private-dict-file= # Tells whether to store unknown words to the private dictionary (see the # --spelling-private-dict-file option) instead of raising a message. spelling-store-unknown-words=no [STRING] # This flag controls whether inconsistent-quotes generates a warning when the # character used as a quote delimiter is used inconsistently within a module. check-quote-consistency=no # This flag controls whether the implicit-str-concat should generate a warning # on implicit string concatenation in sequences defined over several lines. check-str-concat-over-line-jumps=no [TYPECHECK] # List of decorators that produce context managers, such as # contextlib.contextmanager. Add to this list to register other decorators that # produce valid context managers. contextmanager-decorators=contextlib.contextmanager # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E1101 when accessed. Python regular # expressions are accepted. generated-members= # Tells whether to warn about missing members when the owner of the attribute # is inferred to be None. ignore-none=yes # This flag controls whether pylint should warn about no-member and similar # checks whenever an opaque object is returned when inferring. The inference # can return multiple potential results while evaluating a Python object, but # some branches might not be evaluated, which results in partial inference. In # that case, it might be useful to still emit no-member and other checks for # the rest of the inferred objects. ignore-on-opaque-inference=yes # List of symbolic message names to ignore for Mixin members. ignored-checks-for-mixins=no-member, not-async-context-manager, not-context-manager, attribute-defined-outside-init # List of class names for which member attributes should not be checked (useful # for classes with dynamically set attributes). This supports the use of # qualified names. ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace # Show a hint with possible names when a member name was not found. The aspect # of finding the hint is based on edit distance. missing-member-hint=yes # The minimum edit distance a name should have in order to be considered a # similar match for a missing member name. missing-member-hint-distance=1 # The total number of similar names that should be taken in consideration when # showing a hint for a missing member. missing-member-max-choices=1 # Regex pattern to define which classes are considered mixins. mixin-class-rgx=.*[Mm]ixin # List of decorators that change the signature of a decorated function. signature-mutators= [VARIABLES] # List of additional names supposed to be defined in builtins. Remember that # you should avoid defining new builtins when possible. additional-builtins= # Tells whether unused global variables should be treated as a violation. allow-global-unused-variables=yes # List of names allowed to shadow builtins allowed-redefined-builtins= # List of strings which can identify a callback function by name. A callback # name must start or end with one of those strings. callbacks=cb_, _cb # A regular expression matching the name of dummy variables (i.e. expected to # not be used). dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ # Argument names that match this expression will be ignored. ignored-argument-names=_.*|^ignored_|^unused_ # Tells whether we should check for unused import in __init__ files. init-import=no # List of qualified module names which can have objects that can redefine # builtins. redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io ================================================ FILE: setup.cfg ================================================ [metadata] name = edge-tts version = attr: edge_tts.version.__version__ author = rany author_email = ranygh@riseup.net description = Microsoft Edge's TTS long_description = file: README.md long_description_content_type = text/markdown url = https://github.com/rany2/edge-tts project_urls = Bug Tracker=https://github.com/rany2/edge-tts/issues classifiers = Programming Language :: Python :: 3 License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) Operating System :: OS Independent [options] package_dir= = src packages = find: python_requires = >=3.7 # Dependencies are in setup.py for GitHub's dependency graph. [options.packages.find] where=src [options.entry_points] console_scripts = edge-tts = edge_tts.__main__:main edge-playback = edge_playback.__main__:_main [options.extras_require] dev = black isort mypy pylint types-tabulate ================================================ FILE: setup.py ================================================ from setuptools import setup # Metadata goes in setup.cfg. These are here for GitHub's dependency graph. setup( name="edge-tts", install_requires=[ "aiohttp>=3.8.0,<4.0.0", "certifi>=2023.11.17", "tabulate>=0.4.4,<1.0.0", "typing-extensions>=4.1.0,<5.0.0", ], ) ================================================ FILE: src/edge_playback/__init__.py ================================================ """The edge_playback package wraps the functionality of mpv and edge-tts to generate text-to-speech (TTS) using edge-tts and then plays back the generated audio using mpv. """ from .__main__ import _main __all__ = ["_main"] ================================================ FILE: src/edge_playback/__main__.py ================================================ """Main entrypoint for the edge-playback package.""" import argparse import os import subprocess import sys import tempfile from shutil import which from typing import List, Optional, Tuple from .util import pr_err def _parse_args() -> Tuple[bool, List[str]]: parser = argparse.ArgumentParser( prog="edge-playback", description="Speak text using Microsoft Edge's online text-to-speech API", epilog="See `edge-tts` for additional arguments", ) parser.add_argument( "--mpv", action="store_true", help="Use mpv to play audio. By default, false on Windows and true on all other platforms", ) args, tts_args = parser.parse_known_args() use_mpv = sys.platform != "win32" or args.mpv return use_mpv, tts_args def _check_deps(use_mpv: bool) -> None: depcheck_failed = False deps = ["edge-tts"] if use_mpv: deps.append("mpv") for dep in deps: if not which(dep): pr_err(f"{dep} is not installed.") depcheck_failed = True if depcheck_failed: pr_err("Please install the missing dependencies.") sys.exit(1) def _create_temp_files( use_mpv: bool, mp3_fname: Optional[str], srt_fname: Optional[str], debug: bool ) -> Tuple[str, Optional[str]]: media = subtitle = None if not mp3_fname: media = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) media.close() mp3_fname = media.name if debug: print(f"Media file: {mp3_fname}") if not srt_fname and use_mpv: subtitle = tempfile.NamedTemporaryFile(suffix=".srt", delete=False) subtitle.close() srt_fname = subtitle.name if debug and srt_fname: print(f"Subtitle file: {srt_fname}\n") return mp3_fname, srt_fname def _run_edge_tts( mp3_fname: str, srt_fname: Optional[str], tts_args: List[str] ) -> None: edge_tts_cmd = ["edge-tts", f"--write-media={mp3_fname}"] if srt_fname: edge_tts_cmd.append(f"--write-subtitles={srt_fname}") edge_tts_cmd = edge_tts_cmd + tts_args with subprocess.Popen(edge_tts_cmd) as process: process.communicate() def _play_media(use_mpv: bool, mp3_fname: str, srt_fname: Optional[str]) -> None: if sys.platform == "win32" and not use_mpv: # pylint: disable-next=import-outside-toplevel from .win32_playback import play_mp3_win32 play_mp3_win32(mp3_fname) return mpv_cmd = [ "mpv", "--msg-level=all=error,statusline=status", ] if srt_fname: mpv_cmd.append(f"--sub-file={srt_fname}") mpv_cmd.append(mp3_fname) with subprocess.Popen(mpv_cmd) as process: process.communicate() def _cleanup(mp3_fname: Optional[str], srt_fname: Optional[str], keep: bool) -> None: if keep and mp3_fname is not None: print(f"\nKeeping temporary files: {mp3_fname}", end="") if srt_fname: print(f" and {srt_fname}", end="") print() return if mp3_fname is not None and os.path.exists(mp3_fname): os.unlink(mp3_fname) if srt_fname is not None and os.path.exists(srt_fname): os.unlink(srt_fname) def _main() -> None: use_mpv, tts_args = _parse_args() _check_deps(use_mpv) debug = os.environ.get("EDGE_PLAYBACK_DEBUG") is not None keep = os.environ.get("EDGE_PLAYBACK_KEEP_TEMP") is not None mp3_fname = os.environ.get("EDGE_PLAYBACK_MP3_FILE") srt_fname = os.environ.get("EDGE_PLAYBACK_SRT_FILE") try: mp3_fname, srt_fname = _create_temp_files(use_mpv, mp3_fname, srt_fname, debug) _run_edge_tts(mp3_fname, srt_fname, tts_args) _play_media(use_mpv, mp3_fname, srt_fname) finally: _cleanup(mp3_fname, srt_fname, keep) if __name__ == "__main__": _main() ================================================ FILE: src/edge_playback/py.typed ================================================ ================================================ FILE: src/edge_playback/util.py ================================================ """Utility functions for edge-playback""" import sys def pr_err(msg: str) -> None: """Print to stderr.""" print(msg, file=sys.stderr) ================================================ FILE: src/edge_playback/win32_playback.py ================================================ """Functions to play audio on Windows using native win32 APIs""" import sys from .util import pr_err def play_mp3_win32(mp3_fname: str) -> None: """Play mp3 file with given path using win32 API""" if sys.platform != "win32": raise NotImplementedError("Function only available on Windows") # pylint: disable-next=import-outside-toplevel from ctypes import create_unicode_buffer, windll, wintypes # type: ignore _get_short_path_name_w = windll.kernel32.GetShortPathNameW _get_short_path_name_w.argtypes = [ wintypes.LPCWSTR, wintypes.LPWSTR, wintypes.DWORD, ] _get_short_path_name_w.restype = wintypes.DWORD def get_short_path_name(long_name: str) -> str: """ Gets the DOS-safe short path name of a given long path. http://stackoverflow.com/a/23598461/200291 """ output_buf_size = 0 while True: output_buf = create_unicode_buffer(output_buf_size) needed = _get_short_path_name_w(long_name, output_buf, output_buf_size) if output_buf_size >= needed: return output_buf.value output_buf_size = needed mci_send_string_w = windll.winmm.mciSendStringW def mci_send(msg: str) -> None: """Send MCI command string""" result = mci_send_string_w(msg, 0, 0, 0) if result != 0: pr_err(f"Error {result} in mciSendString {msg}. Exiting.") sys.exit(1) mp3_shortname = get_short_path_name(mp3_fname) mci_send("Close All") mci_send(f'Open "{mp3_shortname}" Type MPEGVideo Alias theMP3') mci_send("Play theMP3 Wait") mci_send("Close theMP3") ================================================ FILE: src/edge_tts/__init__.py ================================================ """edge-tts allows you to use Microsoft Edge's online text-to-speech service without needing Windows or the Edge browser.""" from . import exceptions from .communicate import Communicate from .submaker import SubMaker from .version import __version__, __version_info__ from .voices import VoicesManager, list_voices __all__ = [ "Communicate", "SubMaker", "exceptions", "__version__", "__version_info__", "VoicesManager", "list_voices", ] ================================================ FILE: src/edge_tts/__main__.py ================================================ """Main entrypoint for the edge-tts package.""" from .util import main if __name__ == "__main__": main() ================================================ FILE: src/edge_tts/communicate.py ================================================ """Communicate with the service. Only the Communicate class should be used by end-users. The other classes and functions are for internal use only.""" import asyncio import concurrent.futures import json import ssl import time import uuid from contextlib import nullcontext from io import TextIOWrapper from queue import Queue from typing import ( AsyncGenerator, ContextManager, Dict, Generator, List, Optional, Tuple, Union, ) from xml.sax.saxutils import escape, unescape import aiohttp import certifi from typing_extensions import Literal from .constants import DEFAULT_VOICE, SEC_MS_GEC_VERSION, WSS_HEADERS, WSS_URL from .data_classes import TTSConfig from .drm import DRM from .exceptions import ( NoAudioReceived, UnexpectedResponse, UnknownResponse, WebSocketError, ) from .typing import CommunicateState, TTSChunk def get_headers_and_data( data: bytes, header_length: int ) -> Tuple[Dict[bytes, bytes], bytes]: """ Returns the headers and data from the given data. Args: data (bytes): The data to be parsed. header_length (int): The length of the header. Returns: tuple: The headers and data to be used in the request. """ if not isinstance(data, bytes): raise TypeError("data must be bytes") headers = {} for line in data[:header_length].split(b"\r\n"): key, value = line.split(b":", 1) headers[key] = value return headers, data[header_length + 2 :] def remove_incompatible_characters(string: Union[str, bytes]) -> str: """ The service does not support a couple character ranges. Most important being the vertical tab character which is commonly present in OCR-ed PDFs. Not doing this will result in an error from the service. Args: string (str or bytes): The string to be cleaned. Returns: str: The cleaned string. """ if isinstance(string, bytes): string = string.decode("utf-8") if not isinstance(string, str): raise TypeError("string must be str or bytes") chars: List[str] = list(string) for idx, char in enumerate(chars): code: int = ord(char) if (0 <= code <= 8) or (11 <= code <= 12) or (14 <= code <= 31): chars[idx] = " " return "".join(chars) def connect_id() -> str: """ Returns a UUID without dashes. Returns: str: A UUID without dashes. """ return uuid.uuid4().hex def _find_last_newline_or_space_within_limit(text: bytes, limit: int) -> int: """ Finds the index of the rightmost preferred split character (newline or space) within the initial `limit` bytes of the text. This helps find a natural word or sentence boundary for splitting, prioritizing newlines over spaces. Args: text (bytes): The byte string to search within. limit (int): The maximum index (exclusive) to search up to. Returns: int: The index of the last found newline or space within the limit, or -1 if neither is found in that range. """ # Prioritize finding a newline character split_at = text.rfind(b"\n", 0, limit) # If no newline is found, search for a space if split_at < 0: split_at = text.rfind(b" ", 0, limit) return split_at def _find_safe_utf8_split_point(text_segment: bytes) -> int: """ Finds the rightmost possible byte index such that the segment `text_segment[:index]` is a valid UTF-8 sequence. This prevents splitting in the middle of a multi-byte UTF-8 character. Args: text_segment (bytes): The byte segment being considered for splitting. Returns: int: The index of the safe split point. Returns 0 if no valid split point is found (e.g., if the first byte is part of a multi-byte sequence longer than the limit allows). """ split_at = len(text_segment) while split_at > 0: try: text_segment[:split_at].decode("utf-8") # Found the largest valid UTF-8 sequence return split_at except UnicodeDecodeError: # The byte at split_at-1 is part of an incomplete multi-byte char, try earlier split_at -= 1 return split_at def _adjust_split_point_for_xml_entity(text: bytes, split_at: int) -> int: """ Adjusts a proposed split point backward to prevent splitting inside an XML entity. For example, if `text` is `b"this & that"` and `split_at` falls between `&` and `;`, this function moves `split_at` to the index before `&`. Args: text (bytes): The text segment being considered. split_at (int): The proposed split point index, determined by whitespace or UTF-8 safety. Returns: int: The adjusted split point index. It will be moved to the '&' if an unterminated entity is detected right before the original `split_at`. Otherwise, the original `split_at` is returned. """ while split_at > 0 and b"&" in text[:split_at]: ampersand_index = text.rindex(b"&", 0, split_at) # Check if a semicolon exists between the ampersand and the split point if text.find(b";", ampersand_index, split_at) != -1: # Found a terminated entity (like &), safe to break at original split_at break # Ampersand is not terminated before split_at, move split_at to it split_at = ampersand_index return split_at def split_text_by_byte_length( text: Union[str, bytes], byte_length: int ) -> Generator[bytes, None, None]: """ Splits text into chunks, each not exceeding a maximum byte length. This function prioritizes splitting at natural boundaries (newlines, spaces) while ensuring that: 1. No chunk exceeds `byte_length` bytes. 2. Chunks do not end with an incomplete UTF-8 multi-byte character. 3. Chunks do not split XML entities (like `&`) in the middle. Args: text (str or bytes): The input text. If str, it's encoded to UTF-8. byte_length (int): The maximum allowed byte length for any yielded chunk. Must be positive. Yields: bytes: Text chunks (UTF-8 encoded, stripped of leading/trailing whitespace) that conform to the byte length and integrity constraints. Raises: TypeError: If `text` is not str or bytes. ValueError: If `byte_length` is not positive, or if a split point cannot be determined (e.g., due to extremely small byte_length relative to character/entity sizes). """ if isinstance(text, str): text = text.encode("utf-8") if not isinstance(text, bytes): raise TypeError("text must be str or bytes") if byte_length <= 0: raise ValueError("byte_length must be greater than 0") while len(text) > byte_length: # Find the initial split point based on whitespace or UTF-8 boundary split_at = _find_last_newline_or_space_within_limit(text, byte_length) if split_at < 0: ## No newline or space found, so we need to find a safe UTF-8 split point split_at = _find_safe_utf8_split_point(text) # Adjust the split point to avoid cutting in the middle of an xml entity, such as '&' split_at = _adjust_split_point_for_xml_entity(text, split_at) if split_at < 0: # This should not happen if byte_length is reasonable, # but guards against edge cases. raise ValueError( "Maximum byte length is too small or " "invalid text structure near '&' or invalid UTF-8" ) # Yield the chunk chunk = text[:split_at].strip() if chunk: yield chunk # Prepare for the next iteration # If split_at became 0 after adjustment, advance by 1 to avoid infinite loop text = text[split_at if split_at > 0 else 1 :] # Yield the remaining part remaining_chunk = text.strip() if remaining_chunk: yield remaining_chunk def mkssml(tc: TTSConfig, escaped_text: Union[str, bytes]) -> str: """ Creates a SSML string from the given parameters. Args: tc (TTSConfig): The TTS configuration. escaped_text (str or bytes): The escaped text. If bytes, it must be UTF-8 encoded. Returns: str: The SSML string. """ if isinstance(escaped_text, bytes): escaped_text = escaped_text.decode("utf-8") return ( "" f"" f"" f"{escaped_text}" "" "" "" ) def date_to_string() -> str: """ Return Javascript-style date string. Returns: str: Javascript-style date string. """ # %Z is not what we want, but it's the only way to get the timezone # without having to use a library. We'll just use UTC and hope for the best. # For example, right now %Z would return EEST when we need it to return # Eastern European Summer Time. return time.strftime( "%a %b %d %Y %H:%M:%S GMT+0000 (Coordinated Universal Time)", time.gmtime() ) def ssml_headers_plus_data(request_id: str, timestamp: str, ssml: str) -> str: """ Returns the headers and data to be used in the request. Returns: str: The headers and data to be used in the request. """ return ( f"X-RequestId:{request_id}\r\n" "Content-Type:application/ssml+xml\r\n" f"X-Timestamp:{timestamp}Z\r\n" # This is not a mistake, Microsoft Edge bug. "Path:ssml\r\n\r\n" f"{ssml}" ) class Communicate: """ Communicate with the service. """ # pylint: disable=too-many-arguments def __init__( self, text: str, voice: str = DEFAULT_VOICE, *, rate: str = "+0%", volume: str = "+0%", pitch: str = "+0Hz", boundary: Literal["WordBoundary", "SentenceBoundary"] = "SentenceBoundary", connector: Optional[aiohttp.BaseConnector] = None, proxy: Optional[str] = None, connect_timeout: Optional[int] = 10, receive_timeout: Optional[int] = 60, ): # Validate TTS settings and store the TTSConfig object. self.tts_config = TTSConfig(voice, rate, volume, pitch, boundary) # Validate the text parameter. if not isinstance(text, str): raise TypeError("text must be str") # Split the text into multiple strings and store them. self.texts = split_text_by_byte_length( escape(remove_incompatible_characters(text)), 4096, ) # Validate the proxy parameter. if proxy is not None and not isinstance(proxy, str): raise TypeError("proxy must be str") self.proxy: Optional[str] = proxy # Validate the timeout parameters. if not isinstance(connect_timeout, int): raise TypeError("connect_timeout must be int") if not isinstance(receive_timeout, int): raise TypeError("receive_timeout must be int") self.session_timeout = aiohttp.ClientTimeout( total=None, connect=None, sock_connect=connect_timeout, sock_read=receive_timeout, ) # Validate the connector parameter. if connector is not None and not isinstance(connector, aiohttp.BaseConnector): raise TypeError("connector must be aiohttp.BaseConnector") self.connector: Optional[aiohttp.BaseConnector] = connector # Store current state of TTS. self.state: CommunicateState = { "partial_text": b"", "offset_compensation": 0, "last_duration_offset": 0, "stream_was_called": False, } def __parse_metadata(self, data: bytes) -> TTSChunk: for meta_obj in json.loads(data)["Metadata"]: meta_type = meta_obj["Type"] if meta_type in ("WordBoundary", "SentenceBoundary"): current_offset = ( meta_obj["Data"]["Offset"] + self.state["offset_compensation"] ) current_duration = meta_obj["Data"]["Duration"] return { "type": meta_type, "offset": current_offset, "duration": current_duration, "text": unescape(meta_obj["Data"]["text"]["Text"]), } if meta_type in ("SessionEnd",): continue raise UnknownResponse(f"Unknown metadata type: {meta_type}") raise UnexpectedResponse("No WordBoundary metadata found") async def __stream(self) -> AsyncGenerator[TTSChunk, None]: async def send_command_request() -> None: """Sends the command request to the service.""" word_boundary = self.tts_config.boundary == "WordBoundary" wd = "true" if word_boundary else "false" sq = "true" if not word_boundary else "false" await websocket.send_str( f"X-Timestamp:{date_to_string()}\r\n" "Content-Type:application/json; charset=utf-8\r\n" "Path:speech.config\r\n\r\n" '{"context":{"synthesis":{"audio":{"metadataoptions":{' f'"sentenceBoundaryEnabled":"{sq}","wordBoundaryEnabled":"{wd}"' "}," '"outputFormat":"audio-24khz-48kbitrate-mono-mp3"' "}}}}\r\n" ) async def send_ssml_request() -> None: """Sends the SSML request to the service.""" await websocket.send_str( ssml_headers_plus_data( connect_id(), date_to_string(), mkssml( self.tts_config, self.state["partial_text"], ), ) ) # audio_was_received indicates whether we have received audio data # from the websocket. This is so we can raise an exception if we # don't receive any audio data. audio_was_received = False # Create a new connection to the service. ssl_ctx = ssl.create_default_context(cafile=certifi.where()) async with aiohttp.ClientSession( connector=self.connector, trust_env=True, timeout=self.session_timeout, ) as session, session.ws_connect( f"{WSS_URL}&ConnectionId={connect_id()}" f"&Sec-MS-GEC={DRM.generate_sec_ms_gec()}" f"&Sec-MS-GEC-Version={SEC_MS_GEC_VERSION}", compress=15, proxy=self.proxy, headers=DRM.headers_with_muid(WSS_HEADERS), ssl=ssl_ctx, ) as websocket: await send_command_request() await send_ssml_request() async for received in websocket: if received.type == aiohttp.WSMsgType.TEXT: encoded_data: bytes = received.data.encode("utf-8") parameters, data = get_headers_and_data( encoded_data, encoded_data.find(b"\r\n\r\n") ) path = parameters.get(b"Path", None) if path == b"audio.metadata": # Parse the metadata and yield it. parsed_metadata = self.__parse_metadata(data) yield parsed_metadata # Update the last duration offset for use by the next SSML request. self.state["last_duration_offset"] = ( parsed_metadata["offset"] + parsed_metadata["duration"] ) elif path == b"turn.end": # Update the offset compensation for the next SSML request. self.state["offset_compensation"] = self.state[ "last_duration_offset" ] # Use average padding typically added by the service # to the end of the audio data. This seems to work pretty # well for now, but we might ultimately need to use a # more sophisticated method like using ffmpeg to get # the actual duration of the audio data. self.state["offset_compensation"] += 8_750_000 # Exit the loop so we can send the next SSML request. break elif path not in (b"response", b"turn.start"): raise UnknownResponse("Unknown path received") elif received.type == aiohttp.WSMsgType.BINARY: # Message is too short to contain header length. if len(received.data) < 2: raise UnexpectedResponse( "We received a binary message, but it is missing the header length." ) # The first two bytes of the binary message contain the header length. header_length = int.from_bytes(received.data[:2], "big") if header_length > len(received.data): raise UnexpectedResponse( "The header length is greater than the length of the data." ) # Parse the headers and data from the binary message. parameters, data = get_headers_and_data( received.data, header_length ) # Check if the path is audio. if parameters.get(b"Path") != b"audio": raise UnexpectedResponse( "Received binary message, but the path is not audio." ) # At termination of the stream, the service sends a binary message # with no Content-Type; this is expected. What is not expected is for # an audio stream to be sent with no data. content_type = parameters.get(b"Content-Type", None) if content_type not in (b"audio/mpeg", None): raise UnexpectedResponse( "Received binary message, but with an unexpected Content-Type." ) # We only allow no Content-Type if there is no data. if content_type is None: if len(data) == 0: continue # If the data is not empty, then we need to raise an exception. raise UnexpectedResponse( "Received binary message with no Content-Type, but with data." ) # If the data is empty now, then we need to raise an exception. if len(data) == 0: raise UnexpectedResponse( "Received binary message, but it is missing the audio data." ) # Yield the audio data. audio_was_received = True yield {"type": "audio", "data": data} elif received.type == aiohttp.WSMsgType.ERROR: raise WebSocketError( received.data if received.data else "Unknown error" ) if not audio_was_received: raise NoAudioReceived( "No audio was received. Please verify that your parameters are correct." ) async def stream( self, ) -> AsyncGenerator[TTSChunk, None]: """ Streams audio and metadata from the service. Raises: NoAudioReceived: If no audio is received from the service. UnexpectedResponse: If the response from the service is unexpected. UnknownResponse: If the response from the service is unknown. WebSocketError: If there is an error with the websocket. """ # Check if stream was called before. if self.state["stream_was_called"]: raise RuntimeError("stream can only be called once.") self.state["stream_was_called"] = True # Stream the audio and metadata from the service. for self.state["partial_text"] in self.texts: try: async for message in self.__stream(): yield message except aiohttp.ClientResponseError as e: if e.status != 403: raise DRM.handle_client_response_error(e) async for message in self.__stream(): yield message async def save( self, audio_fname: Union[str, bytes], metadata_fname: Optional[Union[str, bytes]] = None, ) -> None: """ Save the audio and metadata to the specified files. """ metadata: Union[TextIOWrapper, ContextManager[None]] = ( open(metadata_fname, "w", encoding="utf-8") if metadata_fname is not None else nullcontext() ) with metadata, open(audio_fname, "wb") as audio: async for message in self.stream(): if message["type"] == "audio": audio.write(message["data"]) elif isinstance(metadata, TextIOWrapper) and message["type"] in ( "WordBoundary", "SentenceBoundary", ): json.dump(message, metadata) metadata.write("\n") def stream_sync(self) -> Generator[TTSChunk, None, None]: """Synchronous interface for async stream method""" def fetch_async_items(queue: Queue) -> None: # type: ignore async def get_items() -> None: async for item in self.stream(): queue.put(item) queue.put(None) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(get_items()) loop.close() queue: Queue = Queue() # type: ignore with concurrent.futures.ThreadPoolExecutor() as executor: executor.submit(fetch_async_items, queue) while True: item = queue.get() if item is None: break yield item def save_sync( self, audio_fname: Union[str, bytes], metadata_fname: Optional[Union[str, bytes]] = None, ) -> None: """Synchronous interface for async save method.""" with concurrent.futures.ThreadPoolExecutor() as executor: future = executor.submit( asyncio.run, self.save(audio_fname, metadata_fname) ) future.result() ================================================ FILE: src/edge_tts/constants.py ================================================ """Constants for the edge_tts package.""" BASE_URL = "speech.platform.bing.com/consumer/speech/synthesize/readaloud" TRUSTED_CLIENT_TOKEN = "6A5AA1D4EAFF4E9FB37E23D68491D6F4" WSS_URL = f"wss://{BASE_URL}/edge/v1?TrustedClientToken={TRUSTED_CLIENT_TOKEN}" VOICE_LIST = f"https://{BASE_URL}/voices/list?trustedclienttoken={TRUSTED_CLIENT_TOKEN}" DEFAULT_VOICE = "en-US-EmmaMultilingualNeural" CHROMIUM_FULL_VERSION = "143.0.3650.75" CHROMIUM_MAJOR_VERSION = CHROMIUM_FULL_VERSION.split(".", maxsplit=1)[0] SEC_MS_GEC_VERSION = f"1-{CHROMIUM_FULL_VERSION}" BASE_HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" f" (KHTML, like Gecko) Chrome/{CHROMIUM_MAJOR_VERSION}.0.0.0 Safari/537.36" f" Edg/{CHROMIUM_MAJOR_VERSION}.0.0.0", "Accept-Encoding": "gzip, deflate, br, zstd", "Accept-Language": "en-US,en;q=0.9", } WSS_HEADERS = { "Pragma": "no-cache", "Cache-Control": "no-cache", "Origin": "chrome-extension://jdiccldimpdaibmpdkjnbmckianbfold", "Sec-WebSocket-Version": "13", } WSS_HEADERS.update(BASE_HEADERS) VOICE_HEADERS = { "Authority": "speech.platform.bing.com", "Sec-CH-UA": f'" Not;A Brand";v="99", "Microsoft Edge";v="{CHROMIUM_MAJOR_VERSION}",' f' "Chromium";v="{CHROMIUM_MAJOR_VERSION}"', "Sec-CH-UA-Mobile": "?0", "Accept": "*/*", "Sec-Fetch-Site": "none", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Dest": "empty", } VOICE_HEADERS.update(BASE_HEADERS) ================================================ FILE: src/edge_tts/data_classes.py ================================================ """Data models for edge-tts.""" # pylint: disable=too-few-public-methods import argparse import re from dataclasses import dataclass from typing_extensions import Literal @dataclass class TTSConfig: """ Represents the internal TTS configuration for edge-tts's Communicate class. """ voice: str rate: str volume: str pitch: str boundary: Literal["WordBoundary", "SentenceBoundary"] @staticmethod def validate_string_param(param_name: str, param_value: str, pattern: str) -> str: """ Validates the given string parameter based on type and pattern. Args: param_name (str): The name of the parameter. param_value (str): The value of the parameter. pattern (str): The pattern to validate the parameter against. Returns: str: The validated parameter. """ if not isinstance(param_value, str): raise TypeError(f"{param_name} must be str") if re.match(pattern, param_value) is None: raise ValueError(f"Invalid {param_name} '{param_value}'.") return param_value def __post_init__(self) -> None: """ Validates the TTSConfig object after initialization. """ # Possible values for voice are: # - Microsoft Server Speech Text to Speech Voice (cy-GB, NiaNeural) # - cy-GB-NiaNeural # - fil-PH-AngeloNeural # Always send the first variant as that is what Microsoft Edge does. if not isinstance(self.voice, str): raise TypeError("voice must be str") match = re.match(r"^([a-z]{2,})-([A-Z]{2,})-(.+Neural)$", self.voice) if match is not None: lang = match.group(1) region = match.group(2) name = match.group(3) if name.find("-") != -1: region = f"{region}-{name[:name.find('-')]}" name = name[name.find("-") + 1 :] self.voice = ( "Microsoft Server Speech Text to Speech Voice" + f" ({lang}-{region}, {name})" ) # Validate the rate, volume, and pitch parameters. self.validate_string_param( "voice", self.voice, r"^Microsoft Server Speech Text to Speech Voice \(.+,.+\)$", ) self.validate_string_param("rate", self.rate, r"^[+-]\d+%$") self.validate_string_param("volume", self.volume, r"^[+-]\d+%$") self.validate_string_param("pitch", self.pitch, r"^[+-]\d+Hz$") class UtilArgs(argparse.Namespace): """CLI arguments.""" text: str file: str voice: str list_voices: bool rate: str volume: str pitch: str write_media: str write_subtitles: str proxy: str ================================================ FILE: src/edge_tts/drm.py ================================================ """DRM module is used to handle DRM operations with clock skew correction. Currently the only DRM operation is generating the Sec-MS-GEC token value used in all API requests to Microsoft Edge's online text-to-speech service.""" import hashlib import secrets from datetime import datetime as dt from datetime import timezone as tz from typing import Dict, Optional import aiohttp from .constants import TRUSTED_CLIENT_TOKEN from .exceptions import SkewAdjustmentError WIN_EPOCH = 11644473600 S_TO_NS = 1e9 class DRM: """ Class to handle DRM operations with clock skew correction. """ clock_skew_seconds: float = 0.0 @staticmethod def adj_clock_skew_seconds(skew_seconds: float) -> None: """ Adjust the clock skew in seconds in case the system clock is off. This method updates the `clock_skew_seconds` attribute of the DRM class to the specified number of seconds. Args: skew_seconds (float): The number of seconds to adjust the clock skew to. Returns: None """ DRM.clock_skew_seconds += skew_seconds @staticmethod def get_unix_timestamp() -> float: """ Gets the current timestamp in Unix format with clock skew correction. Returns: float: The current timestamp in Unix format with clock skew correction. """ return dt.now(tz.utc).timestamp() + DRM.clock_skew_seconds @staticmethod def parse_rfc2616_date(date: str) -> Optional[float]: """ Parses an RFC 2616 date string into a Unix timestamp. This function parses an RFC 2616 date string into a Unix timestamp. Args: date (str): RFC 2616 date string to parse. Returns: Optional[float]: Unix timestamp of the parsed date string, or None if parsing failed. """ try: return ( dt.strptime(date, "%a, %d %b %Y %H:%M:%S %Z") .replace(tzinfo=tz.utc) .timestamp() ) except ValueError: return None @staticmethod def handle_client_response_error(e: aiohttp.ClientResponseError) -> None: """ Handle a client response error. This method adjusts the clock skew based on the server date in the response headers and raises a SkewAdjustmentError if the server date is missing or invalid. Args: e (Exception): The client response error to handle. Returns: None """ if e.headers is None: raise SkewAdjustmentError("No server date in headers.") from e server_date: Optional[str] = e.headers.get("Date", None) if server_date is None or not isinstance(server_date, str): raise SkewAdjustmentError("No server date in headers.") from e server_date_parsed: Optional[float] = DRM.parse_rfc2616_date(server_date) if server_date_parsed is None or not isinstance(server_date_parsed, float): raise SkewAdjustmentError( f"Failed to parse server date: {server_date}" ) from e client_date = DRM.get_unix_timestamp() DRM.adj_clock_skew_seconds(server_date_parsed - client_date) @staticmethod def generate_sec_ms_gec() -> str: """ Generates the Sec-MS-GEC token value. This function generates a token value based on the current time in Windows file time format adjusted for clock skew, and rounded down to the nearest 5 minutes. The token is then hashed using SHA256 and returned as an uppercased hex digest. Returns: str: The generated Sec-MS-GEC token value. See Also: https://github.com/rany2/edge-tts/issues/290#issuecomment-2464956570 """ # Get the current timestamp in Unix format with clock skew correction ticks = DRM.get_unix_timestamp() # Switch to Windows file time epoch (1601-01-01 00:00:00 UTC) ticks += WIN_EPOCH # Round down to the nearest 5 minutes (300 seconds) ticks -= ticks % 300 # Convert the ticks to 100-nanosecond intervals (Windows file time format) ticks *= S_TO_NS / 100 # Create the string to hash by concatenating the ticks and the trusted client token str_to_hash = f"{ticks:.0f}{TRUSTED_CLIENT_TOKEN}" # Compute the SHA256 hash and return the uppercased hex digest return hashlib.sha256(str_to_hash.encode("ascii")).hexdigest().upper() @staticmethod def generate_muid() -> str: """ Generates a random MUID. Returns: str: The generated MUID. """ return secrets.token_hex(16).upper() @staticmethod def headers_with_muid(headers: Dict[str, str]) -> Dict[str, str]: """ Returns a copy of the given headers with the MUID header added. Args: headers (dict): The original headers. Returns: dict: The headers with the MUID header added. """ combined_headers = headers.copy() assert "Cookie" not in combined_headers combined_headers["Cookie"] = f"muid={DRM.generate_muid()};" return combined_headers ================================================ FILE: src/edge_tts/exceptions.py ================================================ """Custom exceptions for the edge-tts package.""" class EdgeTTSException(Exception): """Base exception for the edge-tts package.""" class UnknownResponse(EdgeTTSException): """Raised when an unknown response is received from the server.""" class UnexpectedResponse(EdgeTTSException): """Raised when an unexpected response is received from the server. This hasn't happened yet, but it's possible that the server will change its response format in the future.""" class NoAudioReceived(EdgeTTSException): """Raised when no audio is received from the server.""" class WebSocketError(EdgeTTSException): """Raised when a WebSocket error occurs.""" class SkewAdjustmentError(EdgeTTSException): """Raised when an error occurs while adjusting the clock skew.""" ================================================ FILE: src/edge_tts/py.typed ================================================ ================================================ FILE: src/edge_tts/srt_composer.py ================================================ """A tiny library for composing SRT files. Based on https://github.com/cdown/srt with parsing, subtitle modifying functionality and Python 2 support removed. This is because of https://github.com/rany2/edge-tts/issues/383. Typing support was added, and more Python 3 features were used. Copyright (c) 2014-2023 Christopher Down Copyright (c) 2025- rany This file is licensed under the MIT License (MIT). See the LICENSE-MIT file for details. """ import functools import logging import re from datetime import timedelta from typing import Generator, List, Union LOG = logging.getLogger(__name__) MULTI_WS_REGEX = re.compile(r"\n\n+") ZERO_TIMEDELTA = timedelta(0) # Info message if truthy return -> Function taking a Subtitle, skip if True SUBTITLE_SKIP_CONDITIONS = ( ("No content", lambda sub: not sub.content.strip()), ("Start time < 0 seconds", lambda sub: sub.start < ZERO_TIMEDELTA), ("Subtitle start time >= end time", lambda sub: sub.start >= sub.end), ) SECONDS_IN_HOUR = 3600 SECONDS_IN_MINUTE = 60 HOURS_IN_DAY = 24 MICROSECONDS_IN_MILLISECOND = 1000 @functools.total_ordering class Subtitle: r""" The metadata relating to a single subtitle. Subtitles are sorted by start time by default. If no index was provided, index 0 will be used on writing an SRT block. :param index: The SRT index for this subtitle :type index: int or None :param start: The time that the subtitle should start being shown :type start: :py:class:`datetime.timedelta` :param end: The time that the subtitle should stop being shown :type end: :py:class:`datetime.timedelta` :param str content: The subtitle content. Should not contain OS-specific line separators, only \\n. This is taken care of already if you use :py:func:`srt.parse` to generate Subtitle objects. """ # pylint: disable=R0913 def __init__( self, index: Union[int, None], start: timedelta, end: timedelta, content: str ) -> None: self.index = index self.start = start self.end = end self.content = content def __hash__(self) -> int: return hash(frozenset(vars(self).items())) def __eq__(self, other: object) -> bool: if not isinstance(other, Subtitle): return NotImplemented return vars(self) == vars(other) def __lt__(self, other: object) -> bool: if not isinstance(other, Subtitle): return NotImplemented return (self.start, self.end, self.index) < ( other.start, other.end, other.index, ) def __repr__(self) -> str: # Python 2/3 cross compatibility var_items = getattr(vars(self), "iteritems", getattr(vars(self), "items")) item_list = ", ".join(f"{k}={v!r}" for k, v in var_items()) return f"{type(self).__name__}({item_list})" def to_srt(self, eol: Union[str, None] = None) -> str: r""" Convert the current :py:class:`Subtitle` to an SRT block. :param str eol: The end of line string to use (default "\\n") :returns: The metadata of the current :py:class:`Subtitle` object as an SRT formatted subtitle block :rtype: str """ output_content = make_legal_content(self.content) if eol is None: eol = "\n" elif eol != "\n": output_content = output_content.replace("\n", eol) template = "{idx}{eol}{start} --> {end}{eol}{content}{eol}{eol}" return template.format( idx=self.index or 0, start=timedelta_to_srt_timestamp(self.start), end=timedelta_to_srt_timestamp(self.end), content=output_content, eol=eol, ) def make_legal_content(content: str) -> str: r""" Remove illegal content from a content block. Illegal content includes: * Blank lines * Starting or ending with a blank line .. doctest:: >>> make_legal_content('\nfoo\n\nbar\n') 'foo\nbar' :param str content: The content to make legal :returns: The legalised content :rtype: srt """ # Optimisation: Usually the content we get is legally valid. Do a quick # check to see if we really need to do anything here. This saves time from # generating legal_content by about 50%. if content and content[0] != "\n" and "\n\n" not in content: return content legal_content = MULTI_WS_REGEX.sub("\n", content.strip("\n")) LOG.info("Legalised content %r to %r", content, legal_content) return legal_content def timedelta_to_srt_timestamp(timedelta_timestamp: timedelta) -> str: r""" Convert a :py:class:`~datetime.timedelta` to an SRT timestamp. .. doctest:: >>> import datetime >>> delta = datetime.timedelta(hours=1, minutes=23, seconds=4) >>> timedelta_to_srt_timestamp(delta) '01:23:04,000' :param datetime.timedelta timedelta_timestamp: A datetime to convert to an SRT timestamp :returns: The timestamp in SRT format :rtype: str """ hrs, secs_remainder = divmod(timedelta_timestamp.seconds, SECONDS_IN_HOUR) hrs += timedelta_timestamp.days * HOURS_IN_DAY mins, secs = divmod(secs_remainder, SECONDS_IN_MINUTE) msecs = timedelta_timestamp.microseconds // MICROSECONDS_IN_MILLISECOND return f"{int(hrs):02}:{int(mins):02}:{int(secs):02},{int(msecs):03}" def sort_and_reindex( subtitles: Union[Generator[Subtitle, None, None], List[Subtitle]], start_index: int = 1, in_place: bool = False, skip: bool = True, ) -> Generator[Subtitle, None, None]: """ Reorder subtitles to be sorted by start time order, and rewrite the indexes to be in that same order. This ensures that the SRT file will play in an expected fashion after, for example, times were changed in some subtitles and they may need to be resorted. If skip=True, subtitles will also be skipped if they are considered not to be useful. Currently, the conditions to be considered "not useful" are as follows: - Content is empty, or only whitespace - The start time is negative - The start time is equal to or later than the end time .. doctest:: >>> from datetime import timedelta >>> one = timedelta(seconds=1) >>> two = timedelta(seconds=2) >>> three = timedelta(seconds=3) >>> subs = [ ... Subtitle(index=999, start=one, end=two, content='1'), ... Subtitle(index=0, start=two, end=three, content='2'), ... ] >>> list(sort_and_reindex(subs)) # doctest: +ELLIPSIS [Subtitle(...index=1...), Subtitle(...index=2...)] :param subtitles: :py:class:`Subtitle` objects in any order :param int start_index: The index to start from :param bool in_place: Whether to modify subs in-place for performance (version <=1.0.0 behaviour) :param bool skip: Whether to skip subtitles considered not useful (see above for rules) :returns: The sorted subtitles :rtype: :term:`generator` of :py:class:`Subtitle` objects """ skipped_subs = 0 for sub_num, subtitle in enumerate(sorted(subtitles), start=start_index): if not in_place: subtitle = Subtitle(**vars(subtitle)) if skip: try: _should_skip_sub(subtitle) except _ShouldSkipException as thrown_exc: if subtitle.index is None: LOG.info("Skipped subtitle with no index: %s", thrown_exc) else: LOG.info( "Skipped subtitle at index %d: %s", subtitle.index, thrown_exc ) skipped_subs += 1 continue subtitle.index = sub_num - skipped_subs yield subtitle def _should_skip_sub(subtitle: Subtitle) -> None: """ Check if a subtitle should be skipped based on the rules in SUBTITLE_SKIP_CONDITIONS. :param subtitle: A :py:class:`Subtitle` to check whether to skip :raises _ShouldSkipException: If the subtitle should be skipped """ for info_msg, sub_skipper in SUBTITLE_SKIP_CONDITIONS: if sub_skipper(subtitle): raise _ShouldSkipException(info_msg) def compose( subtitles: Union[Generator[Subtitle, None, None], List[Subtitle]], reindex: bool = True, start_index: int = 1, eol: Union[str, None] = None, in_place: bool = False, ) -> str: r""" Convert an iterator of :py:class:`Subtitle` objects to a string of joined SRT blocks. .. doctest:: >>> from datetime import timedelta >>> start = timedelta(seconds=1) >>> end = timedelta(seconds=2) >>> subs = [ ... Subtitle(index=1, start=start, end=end, content='x'), ... Subtitle(index=2, start=start, end=end, content='y'), ... ] >>> compose(subs) # doctest: +ELLIPSIS '1\n00:00:01,000 --> 00:00:02,000\nx\n\n2\n00:00:01,000 --> ...' :param subtitles: The subtitles to convert to SRT blocks :type subtitles: :term:`iterator` of :py:class:`Subtitle` objects :param bool reindex: Whether to reindex subtitles based on start time :param int start_index: If reindexing, the index to start reindexing from :param str eol: The end of line string to use (default "\\n") :returns: A single SRT formatted string, with each input :py:class:`Subtitle` represented as an SRT block :param bool in_place: Whether to reindex subs in-place for performance (version <=1.0.0 behaviour) :rtype: str """ if reindex: subtitles = sort_and_reindex( subtitles, start_index=start_index, in_place=in_place ) return "".join(subtitle.to_srt(eol=eol) for subtitle in subtitles) class _ShouldSkipException(Exception): """ Raised when a subtitle should be skipped. """ ================================================ FILE: src/edge_tts/submaker.py ================================================ """SubMaker module is used to generate subtitles from WordBoundary and SentenceBoundary events.""" from datetime import timedelta from typing import List, Optional from .srt_composer import Subtitle, compose from .typing import TTSChunk class SubMaker: """ SubMaker is used to generate subtitles from WordBoundary and SentenceBoundary messages. """ def __init__(self) -> None: self.cues: List[Subtitle] = [] self.type: Optional[str] = None def feed(self, msg: TTSChunk) -> None: """ Feed a WordBoundary or SentenceBoundary message to the SubMaker object. Args: msg (dict): The WordBoundary or SentenceBoundary message. Returns: None """ if msg["type"] not in ("WordBoundary", "SentenceBoundary"): raise ValueError( "Invalid message type, expected 'WordBoundary' or 'SentenceBoundary'." ) if self.type is None: self.type = msg["type"] elif self.type != msg["type"]: raise ValueError( f"Expected message type '{self.type}', but got '{msg['type']}'." ) self.cues.append( Subtitle( index=len(self.cues) + 1, start=timedelta(microseconds=msg["offset"] / 10), end=timedelta(microseconds=(msg["offset"] + msg["duration"]) / 10), content=msg["text"], ) ) def get_srt(self) -> str: """ Get the SRT formatted subtitles from the SubMaker object. Returns: str: The SRT formatted subtitles. """ return compose(self.cues) def __str__(self) -> str: return self.get_srt() ================================================ FILE: src/edge_tts/typing.py ================================================ """Custom types for edge-tts.""" # pylint: disable=too-few-public-methods from typing import List from typing_extensions import Literal, NotRequired, TypedDict class TTSChunk(TypedDict): """TTS chunk data.""" type: Literal["audio", "WordBoundary", "SentenceBoundary"] data: NotRequired[bytes] # only for audio duration: NotRequired[float] # only for WordBoundary and SentenceBoundary offset: NotRequired[float] # only for WordBoundary and SentenceBoundary text: NotRequired[str] # only for WordBoundary and SentenceBoundary class VoiceTag(TypedDict): """VoiceTag data.""" ContentCategories: List[str] VoicePersonalities: List[str] class Voice(TypedDict): """Voice data.""" Name: str ShortName: str Gender: Literal["Female", "Male"] Locale: str SuggestedCodec: str FriendlyName: str Status: Literal["Deprecated", "GA", "Preview"] VoiceTag: VoiceTag class VoicesManagerVoice(Voice): """Voice data for VoicesManager.""" Language: str class VoicesManagerFind(TypedDict): """Voice data for VoicesManager.find().""" Gender: NotRequired[Literal["Female", "Male"]] Locale: NotRequired[str] Language: NotRequired[str] class CommunicateState(TypedDict): """Communicate state data.""" partial_text: bytes offset_compensation: float last_duration_offset: float stream_was_called: bool ================================================ FILE: src/edge_tts/util.py ================================================ """Utility functions for the command line interface. Used by the main module.""" import argparse import asyncio import sys from typing import Optional, TextIO from tabulate import tabulate from . import Communicate, SubMaker, list_voices from .constants import DEFAULT_VOICE from .data_classes import UtilArgs from .version import __version__ async def _print_voices(*, proxy: Optional[str]) -> None: """Print all available voices.""" voices = await list_voices(proxy=proxy) voices = sorted(voices, key=lambda voice: voice["ShortName"]) headers = ["Name", "Gender", "ContentCategories", "VoicePersonalities"] table = [ [ voice["ShortName"], voice["Gender"], ", ".join(voice["VoiceTag"]["ContentCategories"]), ", ".join(voice["VoiceTag"]["VoicePersonalities"]), ] for voice in voices ] print(tabulate(table, headers)) async def _run_tts(args: UtilArgs) -> None: """Run TTS after parsing arguments from command line.""" try: if sys.stdin.isatty() and sys.stdout.isatty() and not args.write_media: print( "Warning: TTS output will be written to the terminal. " "Use --write-media to write to a file.\n" "Press Ctrl+C to cancel the operation. " "Press Enter to continue.", file=sys.stderr, ) input() except KeyboardInterrupt: print("\nOperation canceled.", file=sys.stderr) return communicate = Communicate( args.text, args.voice, rate=args.rate, volume=args.volume, pitch=args.pitch, proxy=args.proxy, ) submaker = SubMaker() try: audio_file = ( open(args.write_media, "wb") if args.write_media is not None and args.write_media != "-" else sys.stdout.buffer ) sub_file: Optional[TextIO] = ( open(args.write_subtitles, "w", encoding="utf-8") if args.write_subtitles is not None and args.write_subtitles != "-" else None ) if sub_file is None and args.write_subtitles == "-": sub_file = sys.stderr async for chunk in communicate.stream(): if chunk["type"] == "audio": audio_file.write(chunk["data"]) elif chunk["type"] in ("WordBoundary", "SentenceBoundary"): submaker.feed(chunk) if sub_file is not None: sub_file.write(submaker.get_srt()) finally: if audio_file is not sys.stdout.buffer: audio_file.close() if sub_file is not None and sub_file is not sys.stderr: sub_file.close() async def amain() -> None: """Async main function""" parser = argparse.ArgumentParser( description="Text-to-speech using Microsoft Edge's online TTS service." ) group = parser.add_mutually_exclusive_group(required=True) group.add_argument("-t", "--text", help="what TTS will say") group.add_argument("-f", "--file", help="same as --text but read from file") parser.add_argument( "-v", "--voice", help=f"voice for TTS. Default: {DEFAULT_VOICE}", default=DEFAULT_VOICE, ) group.add_argument( "-l", "--list-voices", help="lists available voices and exits", action="store_true", ) parser.add_argument("--rate", help="set TTS rate. Default +0%%.", default="+0%") parser.add_argument("--volume", help="set TTS volume. Default +0%%.", default="+0%") parser.add_argument("--pitch", help="set TTS pitch. Default +0Hz.", default="+0Hz") parser.add_argument( "--write-media", help="send media output to file instead of stdout" ) parser.add_argument( "--write-subtitles", help="send subtitle output to provided file instead of stderr", ) parser.add_argument("--proxy", help="use a proxy for TTS and voice list.") parser.add_argument( "--version", action="version", version=f"edge-tts {__version__}" ) args = parser.parse_args(namespace=UtilArgs()) if args.list_voices: await _print_voices(proxy=args.proxy) sys.exit(0) if args.file is not None: if args.file in ("-", "/dev/stdin"): args.text = sys.stdin.read() else: with open(args.file, encoding="utf-8") as file: args.text = file.read() if args.text is not None: await _run_tts(args) def main() -> None: """Run the main function using asyncio.""" asyncio.run(amain()) if __name__ == "__main__": main() ================================================ FILE: src/edge_tts/version.py ================================================ """Version information for the edge_tts package.""" __version__ = "7.2.7" __version_info__ = tuple(int(num) for num in __version__.split(".")) ================================================ FILE: src/edge_tts/voices.py ================================================ """This module contains functions to list all available voices and a class to find the correct voice based on their attributes.""" import json import ssl from typing import Any, List, Optional import aiohttp import certifi from typing_extensions import Unpack from .constants import SEC_MS_GEC_VERSION, VOICE_HEADERS, VOICE_LIST from .drm import DRM from .typing import Voice, VoicesManagerFind, VoicesManagerVoice async def __list_voices( session: aiohttp.ClientSession, ssl_ctx: ssl.SSLContext, proxy: Optional[str] ) -> List[Voice]: """ Private function that makes the request to the voice list URL and parses the JSON response. This function is used by list_voices() and makes it easier to handle client response errors related to clock skew. Args: session (aiohttp.ClientSession): The aiohttp session to use for the request. ssl_ctx (ssl.SSLContext): The SSL context to use for the request. proxy (Optional[str]): The proxy to use for the request. Returns: List[Voice]: A list of voices and their attributes. """ async with session.get( f"{VOICE_LIST}&Sec-MS-GEC={DRM.generate_sec_ms_gec()}" f"&Sec-MS-GEC-Version={SEC_MS_GEC_VERSION}", headers=DRM.headers_with_muid(VOICE_HEADERS), proxy=proxy, ssl=ssl_ctx, raise_for_status=True, ) as url: data: List[Any] = json.loads(await url.text()) for voice in data: if "VoiceTag" not in voice: voice["VoiceTag"] = {} if "ContentCategories" not in voice["VoiceTag"]: voice["VoiceTag"]["ContentCategories"] = [] if "VoicePersonalities" not in voice["VoiceTag"]: voice["VoiceTag"]["VoicePersonalities"] = [] return data async def list_voices( *, connector: Optional[aiohttp.BaseConnector] = None, proxy: Optional[str] = None ) -> List[Voice]: """ List all available voices and their attributes. This pulls data from the URL used by Microsoft Edge to return a list of all available voices. Args: connector (Optional[aiohttp.BaseConnector]): The connector to use for the request. proxy (Optional[str]): The proxy to use for the request. Returns: List[Voice]: A list of voices and their attributes. """ ssl_ctx = ssl.create_default_context(cafile=certifi.where()) async with aiohttp.ClientSession(connector=connector, trust_env=True) as session: try: data = await __list_voices(session, ssl_ctx, proxy) except aiohttp.ClientResponseError as e: if e.status != 403: raise DRM.handle_client_response_error(e) data = await __list_voices(session, ssl_ctx, proxy) return data class VoicesManager: """ A class to find the correct voice based on their attributes. """ def __init__(self) -> None: self.voices: List[VoicesManagerVoice] = [] self.called_create: bool = False @classmethod async def create( cls, custom_voices: Optional[List[Voice]] = None ) -> "VoicesManager": """ Creates a VoicesManager object and populates it with all available voices. """ self = VoicesManager() voices = await list_voices() if custom_voices is None else custom_voices self.voices = [ {**voice, "Language": voice["Locale"].split("-")[0]} for voice in voices ] self.called_create = True return self def find(self, **kwargs: Unpack[VoicesManagerFind]) -> List[VoicesManagerVoice]: """ Finds all matching voices based on the provided attributes. """ if not self.called_create: raise RuntimeError( "VoicesManager.find() called before VoicesManager.create()" ) matching_voices = [ voice for voice in self.voices if kwargs.items() <= voice.items() ] return matching_voices ================================================ FILE: tests/001-long-text.sh ================================================ #!/usr/bin/env bash # test if prompt file exists if ! [[ -f "tests/001-long-text.txt" ]] then echo "File not found!" exit 1 fi # spawn for i in {a..z} do edge-tts -f tests/001-long-text.txt --write-media "tests/001-long-text_${i}.mp3" --write-subtitles "tests/001-long-text_${i}.srt" & done wait # set return code to 0 ret=0 # compare files to make sure all are the same for i in {b..z} do cmp tests/001-long-text_a.srt "tests/001-long-text_${i}.srt" || ret=1 done # exit with return code exit "${ret}" ================================================ FILE: tests/001-long-text.txt ================================================ en.wikipedia.org Mathematics Contributors to Wikimedia projects 102–130 minutes Mathematics is an area of knowledge that includes the topics of numbers, formulas and related structures, shapes and the spaces in which they are contained, and quantities and their changes. These topics are represented in modern mathematics with the major subdisciplines of number theory,[1] algebra,[2] geometry,[1] and analysis,[3] respectively. There is no general consensus among mathematicians about a common definition for their academic discipline. Most mathematical activity involves the discovery of properties of abstract objects and the use of pure reason to prove them. These objects consist of either abstractions from nature or—in modern mathematics—entities that are stipulated to have certain properties, called axioms. A proof consists of a succession of applications of deductive rules to already established results. These results include previously proved theorems, axioms, and—in case of abstraction from nature—some basic properties that are considered true starting points of the theory under consideration.[4] Mathematics is essential in the natural sciences, engineering, medicine, finance, computer science, and the social sciences. Although mathematics is extensively used for modeling phenomena, the fundamental truths of mathematics are independent from any scientific experimentation. Some areas of mathematics, such as statistics and game theory, are developed in close correlation with their applications and are often grouped under applied mathematics. Other areas are developed independently from any application (and are therefore called pure mathematics), but often later find practical applications.[5][6] Historically, the concept of a proof and its associated mathematical rigour first appeared in Greek mathematics, most notably in Euclid's Elements.[7] Since its beginning, mathematics was primarily divided into geometry and arithmetic (the manipulation of natural numbers and fractions), until the 16th and 17th centuries, when algebra[a] and infinitesimal calculus were introduced as new fields. Since then, the interaction between mathematical innovations and scientific discoveries has led to a correlated increase in the development of both.[8] At the end of the 19th century, the foundational crisis of mathematics led to the systematization of the axiomatic method,[9] which heralded a dramatic increase in the number of mathematical areas and their fields of application. The contemporary Mathematics Subject Classification lists more than sixty first-level areas of mathematics. Etymology The word mathematics comes from Ancient Greek máthēma (μάθημα), meaning "that which is learnt",[10] "what one gets to know", hence also "study" and "science". The word came to have the narrower and more technical meaning of "mathematical study" even in Classical times.[b] Its adjective is mathēmatikós (μαθηματικός), meaning "related to learning" or "studious", which likewise further came to mean "mathematical".[14] In particular, mathēmatikḗ tékhnē (μαθηματικὴ τέχνη; Latin: ars mathematica) meant "the mathematical art".[10] Similarly, one of the two main schools of thought in Pythagoreanism was known as the mathēmatikoi (μαθηματικοί)—which at the time meant "learners" rather than "mathematicians" in the modern sense. The Pythagoreans were likely the first to constrain the use of the word to just the study of arithmetic and geometry. By the time of Aristotle (384–322 BC) this meaning was fully established.[15] In Latin, and in English until around 1700, the term mathematics more commonly meant "astrology" (or sometimes "astronomy") rather than "mathematics"; the meaning gradually changed to its present one from about 1500 to 1800. This change has resulted in several mistranslations: For example, Saint Augustine's warning that Christians should beware of mathematici, meaning "astrologers", is sometimes mistranslated as a condemnation of mathematicians.[16] The apparent plural form in English goes back to the Latin neuter plural mathematica (Cicero), based on the Greek plural ta mathēmatiká (τὰ μαθηματικά) and means roughly "all things mathematical", although it is plausible that English borrowed only the adjective mathematic(al) and formed the noun mathematics anew, after the pattern of physics and metaphysics, inherited from Greek.[17] In English, the noun mathematics takes a singular verb. It is often shortened to maths[18] or, in North America, math.[19] Areas of mathematics Before the Renaissance, mathematics was divided into two main areas: arithmetic, regarding the manipulation of numbers, and geometry, regarding the study of shapes.[20] Some types of pseudoscience, such as numerology and astrology, were not then clearly distinguished from mathematics.[21] During the Renaissance, two more areas appeared. Mathematical notation led to algebra which, roughly speaking, consists of the study and the manipulation of formulas. Calculus, consisting of the two subfields differential calculus and integral calculus, is the study of continuous functions, which model the typically nonlinear relationships between varying quantities, as represented by variables. This division into four main areas–arithmetic, geometry, algebra, calculus[22]–endured until the end of the 19th century. Areas such as celestial mechanics and solid mechanics were then studied by mathematicians, but now are considered as belonging to physics.[23] The subject of combinatorics has been studied for much of recorded history, yet did not become a separate branch of mathematics until the seventeenth century.[24] At the end of the 19th century, the foundational crisis in mathematics and the resulting systematization of the axiomatic method led to an explosion of new areas of mathematics.[25][9] The 2020 Mathematics Subject Classification contains no less than sixty-three first-level areas.[26] Some of these areas correspond to the older division, as is true regarding number theory (the modern name for higher arithmetic) and geometry. Several other first-level areas have "geometry" in their names or are otherwise commonly considered part of geometry. Algebra and calculus do not appear as first-level areas but are respectively split into several first-level areas. Other first-level areas emerged during the 20th century or had not previously been considered as mathematics, such as mathematical logic and foundations.[27] Number theory This is the Ulam spiral, which illustrates the distribution of prime numbers. The dark diagonal lines in the spiral hint at the hypothesized approximate independence between being prime and being a value of a quadratic polynomial, a conjecture now known as Hardy and Littlewood's Conjecture F. Number theory began with the manipulation of numbers, that is, natural numbers {\displaystyle (\mathbb {N} ),} and later expanded to integers {\displaystyle (\mathbb {Z} )} and rational numbers {\displaystyle (\mathbb {Q} ).} Number theory was once called arithmetic, but nowadays this term is mostly used for numerical calculations.[28] Number theory dates back to ancient Babylon and probably China. Two prominent early number theorists were Euclid of ancient Greece and Diophantus of Alexandria.[29] The modern study of number theory in its abstract form is largely attributed to Pierre de Fermat and Leonhard Euler. The field came to full fruition with the contributions of Adrien-Marie Legendre and Carl Friedrich Gauss.[30] Many easily stated number problems have solutions that require sophisticated methods, often from across mathematics. A prominent example is Fermat's Last Theorem. This conjecture was stated in 1637 by Pierre de Fermat, but it was proved only in 1994 by Andrew Wiles, who used tools including scheme theory from algebraic geometry, category theory, and homological algebra.[31] Another example is Goldbach's conjecture, which asserts that every even integer greater than 2 is the sum of two prime numbers. Stated in 1742 by Christian Goldbach, it remains unproven despite considerable effort.[32] Number theory includes several subareas, including analytic number theory, algebraic number theory, geometry of numbers (method oriented), diophantine equations, and transcendence theory (problem oriented).[27] Geometry On the surface of a sphere, Euclidean geometry only applies as a local approximation. For larger scales the sum of the angles of a triangle is not equal to 180°. Geometry is one of the oldest branches of mathematics. It started with empirical recipes concerning shapes, such as lines, angles and circles, which were developed mainly for the needs of surveying and architecture, but has since blossomed out into many other subfields.[33] A fundamental innovation was the ancient Greeks' introduction of the concept of proofs, which require that every assertion must be proved. For example, it is not sufficient to verify by measurement that, say, two lengths are equal; their equality must be proven via reasoning from previously accepted results (theorems) and a few basic statements. The basic statements are not subject to proof because they are self-evident (postulates), or are part of the definition of the subject of study (axioms). This principle, foundational for all mathematics, was first elaborated for geometry, and was systematized by Euclid around 300 BC in his book Elements.[34][35] The resulting Euclidean geometry is the study of shapes and their arrangements constructed from lines, planes and circles in the Euclidean plane (plane geometry) and the three-dimensional Euclidean space.[c][33] Euclidean geometry was developed without change of methods or scope until the 17th century, when René Descartes introduced what is now called Cartesian coordinates. This constituted a major change of paradigm: Instead of defining real numbers as lengths of line segments (see number line), it allowed the representation of points using their coordinates, which are numbers. Algebra (and later, calculus) can thus be used to solve geometrical problems. Geometry was split into two new subfields: synthetic geometry, which uses purely geometrical methods, and analytic geometry, which uses coordinates systemically.[36] Analytic geometry allows the study of curves unrelated to circles and lines. Such curves can be defined as the graph of functions, the study of which led to differential geometry. They can also be defined as implicit equations, often polynomial equations (which spawned algebraic geometry). Analytic geometry also makes it possible to consider Euclidean spaces of higher than three dimensions.[33] In the 19th century, mathematicians discovered non-Euclidean geometries, which do not follow the parallel postulate. By questioning that postulate's truth, this discovery has been viewed as joining Russell's paradox in revealing the foundational crisis of mathematics. This aspect of the crisis was solved by systematizing the axiomatic method, and adopting that the truth of the chosen axioms is not a mathematical problem.[37][9] In turn, the axiomatic method allows for the study of various geometries obtained either by changing the axioms or by considering properties that do not change under specific transformations of the space.[38] Today's subareas of geometry include:[27] Projective geometry, introduced in the 16th century by Girard Desargues, extends Euclidean geometry by adding points at infinity at which parallel lines intersect. This simplifies many aspects of classical geometry by unifying the treatments for intersecting and parallel lines. Affine geometry, the study of properties relative to parallelism and independent from the concept of length. Differential geometry, the study of curves, surfaces, and their generalizations, which are defined using differentiable functions. Manifold theory, the study of shapes that are not necessarily embedded in a larger space. Riemannian geometry, the study of distance properties in curved spaces. Algebraic geometry, the study of curves, surfaces, and their generalizations, which are defined using polynomials. Topology, the study of properties that are kept under continuous deformations. Algebraic topology, the use in topology of algebraic methods, mainly homological algebra. Discrete geometry, the study of finite configurations in geometry. Convex geometry, the study of convex sets, which takes its importance from its applications in optimization. Complex geometry, the geometry obtained by replacing real numbers with complex numbers. Algebra The quadratic formula, which concisely expresses the solutions of all quadratic equations The Rubik's Cube group is a concrete application of group theory.[39] Algebra is the art of manipulating equations and formulas. Diophantus (3rd century) and al-Khwarizmi (9th century) were the two main precursors of algebra.[40][41] Diophantus solved some equations involving unknown natural numbers by deducing new relations until he obtained the solution. Al-Khwarizmi introduced systematic methods for transforming equations, such as moving a term from one side of an equation into the other side. The term algebra is derived from the Arabic word al-jabr meaning 'the reunion of broken parts'[42] that he used for naming one of these methods in the title of his main treatise. Algebra became an area in its own right only with François Viète (1540–1603), who introduced the use of variables for representing unknown or unspecified numbers.[43] Variables allow mathematicians to describe the operations that have to be done on the numbers represented using mathematical formulas. Until the 19th century, algebra consisted mainly of the study of linear equations (presently linear algebra), and polynomial equations in a single unknown, which were called algebraic equations (a term still in use, although it may be ambiguous). During the 19th century, mathematicians began to use variables to represent things other than numbers (such as matrices, modular integers, and geometric transformations), on which generalizations of arithmetic operations are often valid.[44] The concept of algebraic structure addresses this, consisting of a set whose elements are unspecified, of operations acting on the elements of the set, and rules that these operations must follow. The scope of algebra thus grew to include the study of algebraic structures. This object of algebra was called modern algebra or abstract algebra, as established by the influence and works of Emmy Noether.[45] (The latter term appears mainly in an educational context, in opposition to elementary algebra, which is concerned with the older way of manipulating formulas.) Some types of algebraic structures have useful and often fundamental properties, in many areas of mathematics. Their study became autonomous parts of algebra, and include:[27] group theory; field theory; vector spaces, whose study is essentially the same as linear algebra; ring theory; commutative algebra, which is the study of commutative rings, includes the study of polynomials, and is a foundational part of algebraic geometry; homological algebra; Lie algebra and Lie group theory; Boolean algebra, which is widely used for the study of the logical structure of computers. The study of types of algebraic structures as mathematical objects is the purpose of universal algebra and category theory.[46] The latter applies to every mathematical structure (not only algebraic ones). At its origin, it was introduced, together with homological algebra for allowing the algebraic study of non-algebraic objects such as topological spaces; this particular area of application is called algebraic topology.[47] Calculus and analysis A Cauchy sequence consists of elements such that all subsequent terms of a term become arbitrarily close to each other as the sequence progresses (from left to right). Calculus, formerly called infinitesimal calculus, was introduced independently and simultaneously by 17th-century mathematicians Newton and Leibniz.[48] It is fundamentally the study of the relationship of variables that depend on each other. Calculus was expanded in the 18th century by Euler with the introduction of the concept of a function and many other results.[49] Presently, "calculus" refers mainly to the elementary part of this theory, and "analysis" is commonly used for advanced parts. Analysis is further subdivided into real analysis, where variables represent real numbers, and complex analysis, where variables represent complex numbers. Analysis includes many subareas shared by other areas of mathematics which include:[27] Multivariable calculus Functional analysis, where variables represent varying functions; Integration, measure theory and potential theory, all strongly related with probability theory on a continuum; Ordinary differential equations; Partial differential equations; Numerical analysis, mainly devoted to the computation on computers of solutions of ordinary and partial differential equations that arise in many applications. Discrete mathematics A diagram representing a two-state Markov chain. The states are represented by 'A' and 'E'. The numbers are the probability of flipping the state. Discrete mathematics, broadly speaking, is the study of individual, countable mathematical objects. An example is the set of all integers.[50] Because the objects of study here are discrete, the methods of calculus and mathematical analysis do not directly apply.[d] Algorithms—especially their implementation and computational complexity—play a major role in discrete mathematics.[51] The four color theorem and optimal sphere packing were two major problems of discrete mathematics solved in the second half of the 20th century.[52] The P versus NP problem, which remains open to this day, is also important for discrete mathematics, since its solution would potentially impact a large number of computationally difficult problems.[53] Discrete mathematics includes:[27] Combinatorics, the art of enumerating mathematical objects that satisfy some given constraints. Originally, these objects were elements or subsets of a given set; this has been extended to various objects, which establishes a strong link between combinatorics and other parts of discrete mathematics. For example, discrete geometry includes counting configurations of geometric shapes Graph theory and hypergraphs Coding theory, including error correcting codes and a part of cryptography Matroid theory Discrete geometry Discrete probability distributions Game theory (although continuous games are also studied, most common games, such as chess and poker are discrete) Discrete optimization, including combinatorial optimization, integer programming, constraint programming Mathematical logic and set theory The Venn diagram is a commonly used method to illustrate the relations between sets. The two subjects of mathematical logic and set theory have belonged to mathematics since the end of the 19th century.[54][55] Before this period, sets were not considered to be mathematical objects, and logic, although used for mathematical proofs, belonged to philosophy and was not specifically studied by mathematicians.[56] Before Cantor's study of infinite sets, mathematicians were reluctant to consider actually infinite collections, and considered infinity to be the result of endless enumeration. Cantor's work offended many mathematicians not only by considering actually infinite sets[57] but by showing that this implies different sizes of infinity, per Cantor's diagonal argument. This led to the controversy over Cantor's set theory.[58] In the same period, various areas of mathematics concluded the former intuitive definitions of the basic mathematical objects were insufficient for ensuring mathematical rigour. Examples of such intuitive definitions are "a set is a collection of objects", "natural number is what is used for counting", "a point is a shape with a zero length in every direction", "a curve is a trace left by a moving point", etc. This became the foundational crisis of mathematics.[59] It was eventually solved in mainstream mathematics by systematizing the axiomatic method inside a formalized set theory. Roughly speaking, each mathematical object is defined by the set of all similar objects and the properties that these objects must have.[25] For example, in Peano arithmetic, the natural numbers are defined by "zero is a number", "each number has a unique successor", "each number but zero has a unique predecessor", and some rules of reasoning.[60] This mathematical abstraction from reality is embodied in the modern philosophy of formalism, as founded by David Hilbert around 1910.[61] The "nature" of the objects defined this way is a philosophical problem that mathematicians leave to philosophers, even if many mathematicians have opinions on this nature, and use their opinion—sometimes called "intuition"—to guide their study and proofs. The approach allows considering "logics" (that is, sets of allowed deducing rules), theorems, proofs, etc. as mathematical objects, and to prove theorems about them. For example, Gödel's incompleteness theorems assert, roughly speaking that, in every consistent formal system that contains the natural numbers, there are theorems that are true (that is provable in a stronger system), but not provable inside the system.[62] This approach to the foundations of mathematics was challenged during the first half of the 20th century by mathematicians led by Brouwer, who promoted intuitionistic logic, which explicitly lacks the law of excluded middle.[63][64] These problems and debates led to a wide expansion of mathematical logic, with subareas such as model theory (modeling some logical theories inside other theories), proof theory, type theory, computability theory and computational complexity theory.[27] Although these aspects of mathematical logic were introduced before the rise of computers, their use in compiler design, program certification, proof assistants and other aspects of computer science, contributed in turn to the expansion of these logical theories.[65] Statistics and other decision sciences Whatever the form of a random population distribution (μ), the sampling mean (x̄) tends to a Gaussian distribution and its variance (σ) is given by the central limit theorem of probability theory.[66] The field of statistics is a mathematical application that is employed for the collection and processing of data samples, using procedures based on mathematical methods especially probability theory. Statisticians generate data with random sampling or randomized experiments.[67] The design of a statistical sample or experiment determines the analytical methods that will be used. Analysis of data from observational studies is done using statistical models and the theory of inference, using model selection and estimation. The models and consequential predictions should then be tested against new data.[e] Statistical theory studies decision problems such as minimizing the risk (expected loss) of a statistical action, such as using a procedure in, for example, parameter estimation, hypothesis testing, and selecting the best. In these traditional areas of mathematical statistics, a statistical-decision problem is formulated by minimizing an objective function, like expected loss or cost, under specific constraints. For example, designing a survey often involves minimizing the cost of estimating a population mean with a given level of confidence.[68] Because of its use of optimization, the mathematical theory of statistics overlaps with other decision sciences, such as operations research, control theory, and mathematical economics.[69] Computational mathematics Computational mathematics is the study of mathematical problems that are typically too large for human, numerical capacity.[70][71] Numerical analysis studies methods for problems in analysis using functional analysis and approximation theory; numerical analysis broadly includes the study of approximation and discretization with special focus on rounding errors.[72] Numerical analysis and, more broadly, scientific computing also study non-analytic topics of mathematical science, especially algorithmic-matrix-and-graph theory. Other areas of computational mathematics include computer algebra and symbolic computation. History Ancient The history of mathematics is an ever-growing series of abstractions. Evolutionarily speaking, the first abstraction to ever be discovered, one shared by many animals,[73] was probably that of numbers: the realization that, for example, a collection of two apples and a collection of two oranges (say) have something in common, namely that there are two of them. As evidenced by tallies found on bone, in addition to recognizing how to count physical objects, prehistoric peoples may have also known how to count abstract quantities, like time—days, seasons, or years.[74][75] The Babylonian mathematical tablet Plimpton 322, dated to 1800 BC Evidence for more complex mathematics does not appear until around 3000 BC, when the Babylonians and Egyptians began using arithmetic, algebra, and geometry for taxation and other financial calculations, for building and construction, and for astronomy.[76] The oldest mathematical texts from Mesopotamia and Egypt are from 2000 to 1800 BC. Many early texts mention Pythagorean triples and so, by inference, the Pythagorean theorem seems to be the most ancient and widespread mathematical concept after basic arithmetic and geometry. It is in Babylonian mathematics that elementary arithmetic (addition, subtraction, multiplication, and division) first appear in the archaeological record. The Babylonians also possessed a place-value system and used a sexagesimal numeral system which is still in use today for measuring angles and time.[77] In the 6th century BC, Greek mathematics began to emerge as a distinct discipline and some Ancient Greeks such as the Pythagoreans appeared to have considered it a subject in its own right.[78] Around 300 BC, Euclid organized mathematical knowledge by way of postulates and first principles, which evolved into the axiomatic method that is used in mathematics today, consisting of definition, axiom, theorem, and proof.[79] His book, Elements, is widely considered the most successful and influential textbook of all time.[80] The greatest mathematician of antiquity is often held to be Archimedes (c. 287 – c. 212 BC) of Syracuse.[81] He developed formulas for calculating the surface area and volume of solids of revolution and used the method of exhaustion to calculate the area under the arc of a parabola with the summation of an infinite series, in a manner not too dissimilar from modern calculus.[82] Other notable achievements of Greek mathematics are conic sections (Apollonius of Perga, 3rd century BC),[83] trigonometry (Hipparchus of Nicaea, 2nd century BC),[84] and the beginnings of algebra (Diophantus, 3rd century AD).[85] The numerals used in the Bakhshali manuscript, dated between the 2nd century BC and the 2nd century AD The Hindu–Arabic numeral system and the rules for the use of its operations, in use throughout the world today, evolved over the course of the first millennium AD in India and were transmitted to the Western world via Islamic mathematics.[86] Other notable developments of Indian mathematics include the modern definition and approximation of sine and cosine, and an early form of infinite series.[87][88] Medieval and later A page from al-Khwārizmī's Algebra During the Golden Age of Islam, especially during the 9th and 10th centuries, mathematics saw many important innovations building on Greek mathematics. The most notable achievement of Islamic mathematics was the development of Algebra. Other achievements of the Islamic period include advances in spherical trigonometry and the addition of the decimal point to the Arabic numeral system.[89] Many notable mathematicians from this period were Persian, such as Al-Khwarismi, Omar Khayyam and Sharaf al-Dīn al-Ṭūsī.[90] The Greek and Arabic mathematical texts were in turn translated to Latin during the Middle Ages and made available in Europe.[91] During the early modern period, mathematics began to develop at an accelerating pace in Western Europe, with innovations that revolutionized mathematics, such as the introduction of variables and symbolic notation by François Viète (1540–1603), the introduction of logarithms by John Napier in 1614, which greatly simplified numerical calculations, especially for astronomy and marine navigation, the introduction of coordinates by René Descartes (1596–1650) for reducing geometry to algebra, and the development of calculus by Isaac Newton (1642–1726/27) and Gottfried Leibniz (1646–1716). Leonhard Euler (1707–1783), the most notable mathematician of the 18th century, unified these innovations into a single corpus with a standardized terminology, and completed them with the discovery and the proof of numerous theorems. Carl Friedrich Gauss Perhaps the foremost mathematician of the 19th century was the German mathematician Carl Gauss, who made numerous contributions to fields such as algebra, analysis, differential geometry, matrix theory, number theory, and statistics.[92] In the early 20th century, Kurt Gödel transformed mathematics by publishing his incompleteness theorems, which show in part that any consistent axiomatic system—if powerful enough to describe arithmetic—will contain true propositions that cannot be proved.[62] Mathematics has since been greatly extended, and there has been a fruitful interaction between mathematics and science, to the benefit of both. Mathematical discoveries continue to be made to this very day. According to Mikhail B. Sevryuk, in the January 2006 issue of the Bulletin of the American Mathematical Society, "The number of papers and books included in the Mathematical Reviews database since 1940 (the first year of operation of MR) is now more than 1.9 million, and more than 75 thousand items are added to the database each year. The overwhelming majority of works in this ocean contain new mathematical theorems and their proofs."[93] Symbolic notation and terminology An explanation of the sigma (Σ) summation notation Mathematical notation is widely used in science and engineering for representing complex concepts and properties in a concise, unambiguous, and accurate way. This notation consists of symbols used for representing operations, unspecified numbers, relations and any other mathematical objects, and then assembling them into expressions and formulas.[94] More precisely, numbers and other mathematical objects are represented by symbols called variables, which are generally Latin or Greek letters, and often include subscripts. Operation and relations are generally represented by specific symbols or glyphs,[95] such as + (plus), × (multiplication), {\textstyle \int } (integral), = (equal), and < (less than).[96] All these symbols are generally grouped according to specific rules to form expressions and formulas.[97] Normally, expressions and formulas do not appear alone, but are included in sentences of the current language, where expressions play the role of noun phrases and formulas play the role of clauses. Mathematics has developed a rich terminology covering a broad range of fields that study the properties of various abstract, idealized objects and how they interact. It is based on rigorous definitions that provide a standard foundation for communication. An axiom or postulate is a mathematical statement that is taken to be true without need of proof. If a mathematical statement has yet to be proven (or disproven), it is termed a conjecture. Through a series of rigorous arguments employing deductive reasoning, a statement that is proven to be true becomes a theorem. A specialized theorem that is mainly used to prove another theorem is called a lemma. A proven instance that forms part of a more general finding is termed a corollary.[98] Numerous technical terms used in mathematics are neologisms, such as polynomial and homeomorphism.[99] Other technical terms are words of the common language that are used in an accurate meaning that may differ slightly from their common meaning. For example, in mathematics, "or" means "one, the other or both", while, in common language, it is either ambiguous or means "one or the other but not both" (in mathematics, the latter is called "exclusive or"). Finally, many mathematical terms are common words that are used with a completely different meaning.[100] This may lead to sentences that are correct and true mathematical assertions, but appear to be nonsense to people who do not have the required background. For example, "every free module is flat" and "a field is always a ring". Relationship with sciences Mathematics is used in most sciences for modeling phenomena, which then allows predictions to be made from experimental laws.[101] The independence of mathematical truth from any experimentation implies that the accuracy of such predictions depends only on the adequacy of the model.[102] Inaccurate predictions, rather than being caused by invalid mathematical concepts, imply the need to change the mathematical model used.[103] For example, the perihelion precession of Mercury could only be explained after the emergence of Einstein's general relativity, which replaced Newton's law of gravitation as a better mathematical model.[104] There is still a philosophical debate whether mathematics is a science. However, in practice, mathematicians are typically grouped with scientists, and mathematics shares much in common with the physical sciences. Like them, it is falsifiable, which means in mathematics that, if a result or a theory is wrong, this can be proved by providing a counterexample. Similarly as in science, theories and results (theorems) are often obtained from experimentation.[105] In mathematics, the experimentation may consist of computation on selected examples or of the study of figures or other representations of mathematical objects (often mind representations without physical support). For example, when asked how he came about his theorems, Gauss once replied "durch planmässiges Tattonieren" (through systematic experimentation).[106] However, some authors emphasize that mathematics differs from the modern notion of science by not relying on empirical evidence.[107][108][109][110] Pure and applied mathematics Isaac Newton Gottfried Wilhelm von Leibniz Until the 19th century, the development of mathematics in the West was mainly motivated by the needs of technology and science, and there was no clear distinction between pure and applied mathematics.[111] For example, the natural numbers and arithmetic were introduced for the need of counting, and geometry was motivated by surveying, architecture and astronomy. Later, Isaac Newton introduced infinitesimal calculus for explaining the movement of the planets with his law of gravitation. Moreover, most mathematicians were also scientists, and many scientists were also mathematicians.[112] However, a notable exception occurred with the tradition of pure mathematics in Ancient Greece.[113] The problem of integer factorization, for example, which goes back to Euclid in 300 BC, had no practical application before its use in the RSA cryptosystem, now widely used for the security of computer networks.[114] In the 19th century, mathematicians such as Karl Weierstrass and Richard Dedekind increasingly focused their research on internal problems, that is, pure mathematics.[111][115] This led to split mathematics into pure mathematics and applied mathematics, the latter being often considered as having a lower value among mathematical purists. However, the lines between the two are frequently blurred.[116] The aftermath of World War II led to a surge in the development of applied mathematics in the US and elsewhere.[117][118] Many of the theories developed for applications were found interesting from the point of view of pure mathematics, and many results of pure mathematics were shown to have applications outside mathematics; in turn, the study of these applications may give new insights on the "pure theory".[119][120] An example of the first case is the theory of distributions, introduced by Laurent Schwartz for validating computations done in quantum mechanics, which became immediately an important tool of (pure) mathematical analysis.[121] An example of the second case is the decidability of the first-order theory of the real numbers, a problem of pure mathematics that was proved true by Alfred Tarski, with an algorithm that is impossible to implement because of a computational complexity that is much too high.[122] For getting an algorithm that can be implemented and can solve systems of polynomial equations and inequalities, George Collins introduced the cylindrical algebraic decomposition that became a fundamental tool in real algebraic geometry.[123] In the present day, the distinction between pure and applied mathematics is more a question of personal research aim of mathematicians than a division of mathematics into broad areas.[124][125] The Mathematics Subject Classification has a section for "general applied mathematics" but does not mention "pure mathematics".[27] However, these terms are still used in names of some university departments, such as at the Faculty of Mathematics at the University of Cambridge. Unreasonable effectiveness The unreasonable effectiveness of mathematics is a phenomenon that was named and first made explicit by physicist Eugene Wigner.[6] It is the fact that many mathematical theories (even the "purest") have applications outside their initial object. These applications may be completely outside their initial area of mathematics, and may concern physical phenomena that were completely unknown when the mathematical theory was introduced.[126] Examples of unexpected applications of mathematical theories can be found in many areas of mathematics. A notable example is the prime factorization of natural numbers that was discovered more than 2,000 years before its common use for secure internet communications through the RSA cryptosystem.[127] A second historical example is the theory of ellipses. They were studied by the ancient Greek mathematicians as conic sections (that is, intersections of cones with planes). It is almost 2,000 years later that Johannes Kepler discovered that the trajectories of the planets are ellipses.[128] In the 19th century, the internal development of geometry (pure mathematics) led to definition and study of non-Euclidean geometries, spaces of dimension higher than three and manifolds. At this time, these concepts seemed totally disconnected from the physical reality, but at the beginning of the 20th century, Albert Einstein developed the theory of relativity that uses fundamentally these concepts. In particular, spacetime of special relativity is a non-Euclidean space of dimension four, and spacetime of general relativity is a (curved) manifold of dimension four.[129][130] A striking aspect of the interaction between mathematics and physics is when mathematics drives research in physics. This is illustrated by the discoveries of the positron and the baryon {\displaystyle \Omega ^{-}.} In both cases, the equations of the theories had unexplained solutions, which led to conjecture of the existence of an unknown particle, and the search for these particles. In both cases, these particles were discovered a few years later by specific experiments.[131][132][133] Specific sciences Physics Diagram of a pendulum Mathematics and physics have influenced each other over their modern history. Modern physics uses mathematics abundantly,[134] and is also the motivation of major mathematical developments.[135] Computing The rise of technology in the 20th century opened the way to a new science: computing.[f] This field is closely related to mathematics in several ways. Theoretical computer science is essentially mathematical in nature. Communication technologies apply branches of mathematics that may be very old (e.g., arithmetic), especially with respect to transmission security, in cryptography and coding theory. Discrete mathematics is useful in many areas of computer science, such as complexity theory, information theory, graph theory, and so on.[citation needed] In return, computing has also become essential for obtaining new results. This is a group of techniques known as experimental mathematics, which is the use of experimentation to discover mathematical insights.[136] The most well-known example is the four-color theorem, which was proven in 1976 with the help of a computer. This revolutionized traditional mathematics, where the rule was that the mathematician should verify each part of the proof. In 1998, the Kepler conjecture on sphere packing seemed to also be partially proven by computer. An international team had since worked on writing a formal proof; it was finished (and verified) in 2015.[137] Once written formally, a proof can be verified using a program called a proof assistant.[138] These programs are useful in situations where one is uncertain about a proof's correctness.[138] A major open problem in theoretical computer science is P versus NP. It is one of the seven Millennium Prize Problems.[139] Biology and chemistry The skin of this giant pufferfish exhibits a Turing pattern, which can be modeled by reaction–diffusion systems. Biology uses probability extensively – for example, in ecology or neurobiology.[140] Most of the discussion of probability in biology, however, centers on the concept of evolutionary fitness.[140] Ecology heavily uses modeling to simulate population dynamics,[140][141] study ecosystems such as the predator-prey model, measure pollution diffusion,[142] or to assess climate change.[143] The dynamics of a population can be modeled by coupled differential equations, such as the Lotka–Volterra equations.[144] However, there is the problem of model validation. This is particularly acute when the results of modeling influence political decisions; the existence of contradictory models could allow nations to choose the most favorable model.[145] Genotype evolution can be modeled with the Hardy-Weinberg principle.[citation needed] Phylogeography uses probabilistic models.[citation needed] Medicine uses statistical hypothesis testing, run on data from clinical trials, to determine whether a new treatment works.[citation needed] Since the start of the 20th century, chemistry has used computing to model molecules in three dimensions. It turns out that the form of macromolecules in biology is variable and determines the action. Such modeling uses Euclidean geometry; neighboring atoms form a polyhedron whose distances and angles are fixed by the laws of interaction.[citation needed] Earth sciences Structural geology and climatology use probabilistic models to predict the risk of natural catastrophes.[citation needed] Similarly, meteorology, oceanography, and planetology also use mathematics due to their heavy use of models.[citation needed] Areas of mathematics used in the social sciences include probability/statistics and differential equations. These are used in linguistics, economics, sociology,[146] and psychology.[147] Supply and demand curves, like this one, are a staple of mathematical economics. The fundamental postulate of mathematical economics is that of the rational individual actor – Homo economicus (lit. 'economic man').[148] In this model, the individual seeks to maximize their self-interest,[148] and always makes optimal choices using perfect information.[149][better source needed] This atomistic view of economics allows it to relatively easily mathematize its thinking, because individual calculations are transposed into mathematical calculations. Such mathematical modeling allows one to probe economic mechanisms which would be difficult to discover by a "literary" analysis.[citation needed] For example, explanations of economic cycles are not trivial. Without mathematical modeling, it is hard to go beyond statistical observations or unproven speculation.[citation needed] However, many people have rejected or criticized the concept of Homo economicus.[149][better source needed] Economists note that real people have limited information, make poor choices and care about fairness, altruism, not just personal gain.[149][better source needed] At the start of the 20th century, there was a development to express historical movements in formulas. In 1922, Nikolai Kondratiev discerned the ~50-year-long Kondratiev cycle, which explains phases of economic growth or crisis.[150] Towards the end of the 19th century, Nicolas-Remi Brück [fr] and Charles Henri Lagrange [fr] extended their analysis into geopolitics.[151] Peter Turchin has worked on developing cliodynamics since the 1990s.[152] Even so, mathematization of the social sciences is not without danger. In the controversial book Fashionable Nonsense (1997), Sokal and Bricmont denounced the unfounded or abusive use of scientific terminology, particularly from mathematics or physics, in the social sciences.[153] The study of complex systems (evolution of unemployment, business capital, demographic evolution of a population, etc.) uses mathematical knowledge. However, the choice of counting criteria, particularly for unemployment, or of models, can be subject to controversy.[citation needed] Relationship with astrology and esotericism Some renowned mathematicians have also been considered to be renowned astrologists; for example, Ptolemy, Arab astronomers, Regiomantus, Cardano, Kepler, or John Dee. In the Middle Ages, astrology was considered a science that included mathematics. In his encyclopedia, Theodor Zwinger wrote that astrology was a mathematical science that studied the "active movement of bodies as they act on other bodies". He reserved to mathematics the need to "calculate with probability the influences [of stars]" to foresee their "conjunctions and oppositions".[154] Astrology is no longer considered a science.[155] Philosophy Reality The connection between mathematics and material reality has led to philosophical debates since at least the time of Pythagoras. The ancient philosopher Plato argued that abstractions that reflect material reality have themselves a reality that exists outside space and time. As a result, the philosophical view that mathematical objects somehow exist on their own in abstraction is often referred to as Platonism. Independently of their possible philosophical opinions, modern mathematicians may be generally considered as Platonists, since they think of and talk of their objects of study as real objects.[156] Armand Borel summarized this view of mathematics reality as follows, and provided quotations of G. H. Hardy, Charles Hermite, Henri Poincaré and Albert Einstein that support his views.[131] Something becomes objective (as opposed to "subjective") as soon as we are convinced that it exists in the minds of others in the same form as it does in ours and that we can think about it and discuss it together.[157] Because the language of mathematics is so precise, it is ideally suited to defining concepts for which such a consensus exists. In my opinion, that is sufficient to provide us with a feeling of an objective existence, of a reality of mathematics ... Nevertheless, Platonism and the concurrent views on abstraction do not explain the unreasonable effectiveness of mathematics.[158] Proposed definitions There is no general consensus about a definition of mathematics or its epistemological status—that is, its place among other human activities.[159][160] A great many professional mathematicians take no interest in a definition of mathematics, or consider it undefinable.[159] There is not even consensus on whether mathematics is an art or a science.[160] Some just say, "mathematics is what mathematicians do".[159] This makes sense, as there is a strong consensus among them about what is mathematics and what is not. Most proposed definitions try to define mathematics by its object of study.[161] Aristotle defined mathematics as "the science of quantity" and this definition prevailed until the 18th century. However, Aristotle also noted a focus on quantity alone may not distinguish mathematics from sciences like physics; in his view, abstraction and studying quantity as a property "separable in thought" from real instances set mathematics apart.[162] In the 19th century, when mathematicians began to address topics—such as infinite sets—which have no clear-cut relation to physical reality, a variety of new definitions were given.[163] With the large number of new areas of mathematics that appeared since the beginning of the 20th century and continue to appear, defining mathematics by this object of study becomes an impossible task. Another approach for defining mathematics is to use its methods. So, an area of study can be qualified as mathematics as soon as one can prove theorems—assertions whose validity relies on a proof, that is, a purely-logical deduction.[164] Others take the perspective that mathematics is an investigation of axiomatic set theory, as this study is now a foundational discipline for much of modern mathematics.[165] Rigor Mathematical reasoning requires rigor. This means that the definitions must be absolutely unambiguous and the proofs must be reducible to a succession of applications of inference rules,[g] without any use of empirical evidence and intuition.[h][166] Rigorous reasoning is not specific to mathematics, but, in mathematics, the standard of rigor is much higher than elsewhere. Despite mathematics' concision, rigorous proofs can require hundreds of pages to express, such as the 255-page Feit–Thompson theorem.[i] The emergence of computer-assisted proofs has allowed proof lengths to further expand,[j][167] The result of this trend is a philosophy of the quasi-empiricist proof that can not be considered infallible, but has a probability attached to it.[9] The concept of rigor in mathematics dates back to ancient Greece, where their society encouraged logical, deductive reasoning. However, this rigorous approach would tend to discourage exploration of new approaches, such as irrational numbers and concepts of infinity. The method of demonstrating rigorous proof was enhanced in the sixteenth century through the use of symbolic notation. In the 18th century, social transition led to mathematicians earning their keep through teaching, which led to more careful thinking about the underlying concepts of mathematics. This produced more rigorous approaches, while transitioning from geometric methods to algebraic and then arithmetic proofs.[9] At the end of the 19th century, it appeared that the definitions of the basic concepts of mathematics were not accurate enough for avoiding paradoxes (non-Euclidean geometries and Weierstrass function) and contradictions (Russell's paradox). This was solved by the inclusion of axioms with the apodictic inference rules of mathematical theories; the re-introduction of axiomatic method pioneered by the ancient Greeks.[9] It results that "rigor" is no more a relevant concept in mathematics, as a proof is either correct or erroneous, and a "rigorous proof" is simply a pleonasm. Where a special concept of rigor comes into play is in the socialized aspects of a proof, wherein it may be demonstrably refuted by other mathematicians. After a proof has been accepted for many years or even decades, it can then be considered as reliable.[168] Nevertheless, the concept of "rigor" may remain useful for teaching to beginners what is a mathematical proof.[169] Training and practice Education Mathematics has a remarkable ability to cross cultural boundaries and time periods. As a human activity, the practice of mathematics has a social side, which includes education, careers, recognition, popularization, and so on. In education, mathematics is a core part of the curriculum and forms an important element of the STEM academic disciplines. Prominent careers for professional mathematicians include math teacher or professor, statistician, actuary, financial analyst, economist, accountant, commodity trader, or computer consultant.[170] Archaeological evidence shows that instruction in mathematics occurred as early as the second millennium BCE in ancient Babylonia.[171] Comparable evidence has been unearthed for scribal mathematics training in the ancient Near East and then for the Greco-Roman world starting around 300 BCE.[172] The oldest known mathematics textbook is the Rhind papyrus, dated from c. 1650 BCE in Egypt.[173] Due to a scarcity of books, mathematical teachings in ancient India were communicated using memorized oral tradition since the Vedic period (c. 1500 – c. 500 BCE).[174] In Imperial China during the Tang dynasty (618–907 CE), a mathematics curriculum was adopted for the civil service exam to join the state bureaucracy.[175] Following the Dark Ages, mathematics education in Europe was provided by religious schools as part of the Quadrivium. Formal instruction in pedagogy began with Jesuit schools in the 16th and 17th century. Most mathematical curriculum remained at a basic and practical level until the nineteenth century, when it began to flourish in France and Germany. The oldest journal addressing instruction in mathematics was L'Enseignement Mathématique, which began publication in 1899.[176] The Western advancements in science and technology led to the establishment of centralized education systems in many nation-states, with mathematics as a core component—initially for its military applications.[177] While the content of courses varies, in the present day nearly all countries teach mathematics to students for significant amounts of time.[178] During school, mathematical capabilities and positive expectations have a strong association with career interest in the field. Extrinsic factors such as feedback motivation by teachers, parents, and peer groups can influence the level of interest in mathematics.[179] Some students studying math may develop an apprehension or fear about their performance in the subject. This is known as math anxiety or math phobia, and is considered the most prominent of the disorders impacting academic performance. Math anxiety can develop due to various factors such as parental and teacher attitudes, social stereotypes, and personal traits. Help to counteract the anxiety can come from changes in instructional approaches, by interactions with parents and teachers, and by tailored treatments for the individual.[180] Psychology (aesthetic, creativity and intuition) The validity of a mathematical theorem relies only on the rigor of its proof, which could theoretically be done automatically by a computer program. This does not mean that there is no place for creativity in a mathematical work. On the contrary, many important mathematical results (theorems) are solutions of problems that other mathematicians failed to solve, and the invention of a way for solving them may be a fundamental way of the solving process.[181][182] An extreme example is Apery's theorem: Roger Apery provided only the ideas for a proof, and the formal proof was given only several months later by three other mathematicians.[183] Creativity and rigor are not the only psychological aspects of the activity of mathematicians. Some mathematicians can see their activity as a game, more specifically as solving puzzles.[184] This aspect of mathematical activity is emphasized in recreational mathematics. Mathematicians can find an aesthetic value to mathematics. Like beauty, it is hard to define, it is commonly related to elegance, which involves qualities like simplicity, symmetry, completeness, and generality. G. H. Hardy in A Mathematician's Apology expressed the belief that the aesthetic considerations are, in themselves, sufficient to justify the study of pure mathematics. He also identified other criteria such as significance, unexpectedness, and inevitability, which contribute to mathematical aesthetic.[185] Paul Erdős expressed this sentiment more ironically by speaking of "The Book", a supposed divine collection of the most beautiful proofs. The 1998 book Proofs from THE BOOK, inspired by Erdős, is a collection of particularly succinct and revelatory mathematical arguments. Some examples of particularly elegant results included are Euclid's proof that there are infinitely many prime numbers and the fast Fourier transform for harmonic analysis.[186] Some feel that to consider mathematics a science is to downplay its artistry and history in the seven traditional liberal arts.[187] One way this difference of viewpoint plays out is in the philosophical debate as to whether mathematical results are created (as in art) or discovered (as in science).[131] The popularity of recreational mathematics is another sign of the pleasure many find in solving mathematical questions. Cultural impact Artistic expression Notes that sound well together to a Western ear are sounds whose fundamental frequencies of vibration are in simple ratios. For example, an octave doubles the frequency and a perfect fifth multiplies it by {\displaystyle {\frac {3}{2}}}.[188][189] Fractal with a scaling symmetry and a central symmetry Humans, as well as some other animals, find symmetric patterns to be more beautiful.[190] Mathematically, the symmetries of an object form a group known as the symmetry group.[191] For example, the group underlying mirror symmetry is the cyclic group of two elements, {\displaystyle \mathbb {Z} /2\mathbb {Z} }. A Rorschach test is a figure invariant by this symmetry,[192] as are butterfly and animal bodies more generally (at least on the surface).[193] Waves on the sea surface possess translation symmetry: moving one's viewpoint by the distance between wave crests does not change one's view of the sea.[citation needed] Fractals possess self-similarity.[194][195] Popularization Popular mathematics is the act of presenting mathematics without technical terms.[196] Presenting mathematics may be hard since the general public suffers from mathematical anxiety and mathematical objects are highly abstract.[197] However, popular mathematics writing can overcome this by using applications or cultural links.[198] Despite this, mathematics is rarely the topic of popularization in printed or televised media. Awards and prize problems The front side of the Fields Medal with an illustration of the Greek polymath Archimedes The most prestigious award in mathematics is the Fields Medal,[199][200] established in 1936 and awarded every four years (except around World War II) to up to four individuals.[201][202] It is considered the mathematical equivalent of the Nobel Prize.[202] Other prestigious mathematics awards include:[203] The Abel Prize, instituted in 2002[204] and first awarded in 2003[205] The Chern Medal for lifetime achievement, introduced in 2009[206] and first awarded in 2010[207] The AMS Leroy P. Steele Prize, awarded since 1970[208] The Wolf Prize in Mathematics, also for lifetime achievement,[209] instituted in 1978[210] A famous list of 23 open problems, called "Hilbert's problems", was compiled in 1900 by German mathematician David Hilbert.[211] This list has achieved great celebrity among mathematicians,[212] and, as of 2022, at least thirteen of the problems (depending how some are interpreted) have been solved.[211] A new list of seven important problems, titled the "Millennium Prize Problems", was published in 2000. Only one of them, the Riemann hypothesis, duplicates one of Hilbert's problems. A solution to any of these problems carries a 1 million dollar reward.[213] To date, only one of these problems, the Poincaré conjecture, has been solved.[214] See also List of mathematical jargon Lists of mathematicians Lists of mathematics topics Mathematical constant Mathematical sciences Mathematics and art Mathematics education Outline of mathematics Philosophy of mathematics Relationship between mathematics and physics Science, technology, engineering, and mathematics References Notes ^ Here, algebra is taken in its modern sense, which is, roughly speaking, the art of manipulating formulas. ^ This meaning can be found in Plato's Republic, Book 6 Section 510c.[11] However, Plato did not use a math- word; Aristotle did, commenting on it.[12][better source needed][13][better source needed] ^ This includes conic sections, which are intersections of circular cylinders and planes. ^ However, some advanced methods of analysis are sometimes used; for example, methods of complex analysis applied to generating series. ^ Like other mathematical sciences such as physics and computer science, statistics is an autonomous discipline rather than a branch of applied mathematics. Like research physicists and computer scientists, research statisticians are mathematical scientists. Many statisticians have a degree in mathematics, and some statisticians are also mathematicians. ^ Ada Lovelace, in the 1840s, is known for having written the first computer program ever in collaboration with Charles Babbage ^ This does not mean to make explicit all inference rules that are used. On the contrary, this is generally impossible, without computers and proof assistants. Even with this modern technology, it may take years of human work for writing down a completely detailed proof. ^ This does not mean that empirical evidence and intuition are not needed for choosing the theorems to be proved and to prove them. ^ This the length of the original paper that does not contain the proofs of some previously published auxiliary results. The book devoted to the complete proof has more than 1,000 pages. ^ For considering as reliable a large computation occurring in a proof, one generally requires two computations using independent software Citations ^ Jump up to: a b "Mathematics (noun)". Oxford English Dictionary. Oxford University Press. Retrieved January 17, 2024. "The science of space, number, quantity, and arrangement, whose methods involve logical reasoning and usually the use of symbolic notation, and which includes geometry, arithmetic, algebra, and analysis." ^ Kneebone, G. T. (1963). "Traditional Logic". Mathematical Logic and the Foundations of Mathematics: An Introductory Survey. D. Van Nostard Company. p. 4. LCCN 62019535. MR 0150021. OCLC 792731. S2CID 118005003. "Mathematics ... is simply the study of abstract structures, or formal patterns of connectedness." ^ LaTorre, Donald R.; Kenelly, John W.; Reed, Iris B.; Carpenter, Laurel R.; Harris, Cynthia R.; Biggers, Sherry (2008). "Models and Functions". Calculus Concepts: An Applied Approach to the Mathematics of Change (4th ed.). Houghton Mifflin Company. p. 2. ISBN 978-0-618-78983-2. LCCN 2006935429. OCLC 125397884. "Calculus is the study of change—how things change and how quickly they change." ^ Hipólito, Inês Viegas (August 9–15, 2015). "Abstract Cognition and the Nature of Mathematical Proof". In Kanzian, Christian; Mitterer, Josef; Neges, Katharina (eds.). Realismus – Relativismus – Konstruktivismus: Beiträge des 38. Internationalen Wittgenstein Symposiums [Realism – Relativism – Constructivism: Contributions of the 38th International Wittgenstein Symposium] (PDF) (in German and English). Vol. 23. Kirchberg am Wechsel, Austria: Austrian Ludwig Wittgenstein Society. pp. 132–134. ISSN 1022-3398. OCLC 236026294. Archived (PDF) from the original on November 7, 2022. Retrieved January 17, 2024. (at ResearchGate Open access icon Archived November 5, 2022, at the Wayback Machine) ^ Peterson 1988, p. 12. ^ Jump up to: a b Wigner, Eugene (1960). "The Unreasonable Effectiveness of Mathematics in the Natural Sciences". Communications on Pure and Applied Mathematics. 13 (1): 1–14. Bibcode:1960CPAM...13....1W. doi:10.1002/cpa.3160130102. S2CID 6112252. Archived from the original on February 28, 2011. ^ Wise, David. "Eudoxus' Influence on Euclid's Elements with a close look at The Method of Exhaustion". The University of Georgia. Archived from the original on June 1, 2019. Retrieved January 18, 2024. ^ Alexander, Amir (September 2011). "The Skeleton in the Closet: Should Historians of Science Care about the History of Mathematics?". Isis. 102 (3): 475–480. doi:10.1086/661620. ISSN 0021-1753. MR 2884913. PMID 22073771. S2CID 21629993. ^ Jump up to: a b c d e f Kleiner, Israel (December 1991). "Rigor and Proof in Mathematics: A Historical Perspective". Mathematics Magazine. 64 (5). Taylor & Francis, Ltd.: 291–314. doi:10.1080/0025570X.1991.11977625. eISSN 1930-0980. ISSN 0025-570X. JSTOR 2690647. LCCN 47003192. MR 1141557. OCLC 1756877. S2CID 7787171. ^ Jump up to: a b Harper, Douglas (March 28, 2019). "Mathematic (n.)". Online Etymology Dictionary. Archived from the original on March 7, 2013. Retrieved January 25, 2024. ^ Plato. Republic, Book 6, Section 510c. Archived from the original on February 24, 2021. Retrieved February 2, 2024. ^ Liddell, Henry George; Scott, Robert (1940). "μαθηματική". A Greek–English Lexicon. Clarendon Press. Retrieved February 2, 2024. ^ Harper, Douglas (April 20, 2022). "Mathematics (n.)". Online Etymology Dictionary. Retrieved February 2, 2024. ^ Harper, Douglas (December 22, 2018). "Mathematical (adj.)". Online Etymology Dictionary. Archived from the original on November 26, 2022. Retrieved January 25, 2024. ^ Perisho, Margaret W. (Spring 1965). "The Etymology of Mathematical Terms". Pi Mu Epsilon Journal. 4 (2): 62–66. ISSN 0031-952X. JSTOR 24338341. LCCN 58015848. OCLC 1762376. ^ Boas, Ralph P. (1995). "What Augustine Didn't Say About Mathematicians". In Alexanderson, Gerald L.; Mugler, Dale H. (eds.). Lion Hunting and Other Mathematical Pursuits: A Collection of Mathematics, Verse, and Stories. Mathematical Association of America. p. 257. ISBN 978-0-88385-323-8. LCCN 94078313. OCLC 633018890. ^ The Oxford Dictionary of English Etymology, Oxford English Dictionary, sub "mathematics", "mathematic", "mathematics". ^ "Maths (Noun)". Oxford English Dictionary. Oxford University Press. Retrieved January 25, 2024. ^ "Math (Noun³)". Oxford English Dictionary. Oxford University Press. Archived from the original on April 4, 2020. Retrieved January 25, 2024. ^ Bell, E. T. (1945) [1940]. "General Prospectus". The Development of Mathematics (2nd ed.). Dover Publications. p. 3. ISBN 978-0-486-27239-9. LCCN 45010599. OCLC 523284. "... mathematics has come down to the present by the two main streams of number and form. The first carried along arithmetic and algebra, the second, geometry." ^ Tiwari, Sarju (1992). "A Mirror of Civilization". Mathematics in History, Culture, Philosophy, and Science (1st ed.). New Delhi, India: Mittal Publications. p. 27. ISBN 978-81-7099-404-6. LCCN 92909575. OCLC 28115124. "It is unfortunate that two curses of mathematics--Numerology and Astrology were also born with it and have been more acceptable to the masses than mathematics itself." ^ Restivo, Sal (1992). "Mathematics from the Ground Up". In Bunge, Mario (ed.). Mathematics in Society and History. Episteme. Vol. 20. Kluwer Academic Publishers. p. 14. ISBN 0-7923-1765-3. LCCN 25709270. OCLC 92013695. ^ Musielak, Dora (2022). Leonhard Euler and the Foundations of Celestial Mechanics. History of Physics. Springer International Publishing. doi:10.1007/978-3-031-12322-1. eISSN 2730-7557. ISBN 978-3-031-12321-4. ISSN 2730-7549. OCLC 1332780664. S2CID 253240718. ^ Biggs, N. L. (May 1979). "The roots of combinatorics". Historia Mathematica. 6 (2): 109–136. doi:10.1016/0315-0860(79)90074-0. eISSN 1090-249X. ISSN 0315-0860. LCCN 75642280. OCLC 2240703. ^ Jump up to: a b Warner, Evan. "Splash Talk: The Foundational Crisis of Mathematics" (PDF). Columbia University. Archived from the original (PDF) on March 22, 2023. Retrieved February 3, 2024. ^ Dunne, Edward; Hulek, Klaus (March 2020). "Mathematics Subject Classification 2020" (PDF). Notices of the American Mathematical Society. 67 (3): 410–411. doi:10.1090/noti2052. eISSN 1088-9477. ISSN 0002-9920. LCCN sf77000404. OCLC 1480366. Archived (PDF) from the original on August 3, 2021. Retrieved February 3, 2024. "The new MSC contains 63 two-digit classifications, 529 three-digit classifications, and 6,006 five-digit classifications." ^ Jump up to: a b c d e f g h "MSC2020-Mathematics Subject Classification System" (PDF). zbMath. Associate Editors of Mathematical Reviews and zbMATH. Archived (PDF) from the original on January 2, 2024. Retrieved February 3, 2024. ^ LeVeque, William J. (1977). "Introduction". Fundamentals of Number Theory. Addison-Wesley Publishing Company. pp. 1–30. ISBN 0-201-04287-8. LCCN 76055645. OCLC 3519779. S2CID 118560854. ^ Goldman, Jay R. (1998). "The Founding Fathers". The Queen of Mathematics: A Historically Motivated Guide to Number Theory. Wellesley, MA: A K Peters. pp. 2–3. doi:10.1201/9781439864623. ISBN 1-56881-006-7. LCCN 94020017. OCLC 30437959. S2CID 118934517. ^ Weil, André (1983). Number Theory: An Approach Through History From Hammurapi to Legendre. Birkhäuser Boston. pp. 2–3. doi:10.1007/978-0-8176-4571-7. ISBN 0-8176-3141-0. LCCN 83011857. OCLC 9576587. S2CID 117789303. ^ Kleiner, Israel (March 2000). "From Fermat to Wiles: Fermat's Last Theorem Becomes a Theorem". Elemente der Mathematik. 55 (1): 19–37. doi:10.1007/PL00000079. eISSN 1420-8962. ISSN 0013-6018. LCCN 66083524. OCLC 1567783. S2CID 53319514. ^ Wang, Yuan (2002). The Goldbach Conjecture. Series in Pure Mathematics. Vol. 4 (2nd ed.). World Scientific. pp. 1–18. doi:10.1142/5096. ISBN 981-238-159-7. LCCN 2003268597. OCLC 51533750. S2CID 14555830. ^ Jump up to: a b c Straume, Eldar (September 4, 2014). "A Survey of the Development of Geometry up to 1870". arXiv:1409.1140 [math.HO]. ^ Hilbert, David (1902). The Foundations of Geometry. Open Court Publishing Company. p. 1. doi:10.1126/science.16.399.307. LCCN 02019303. OCLC 996838. S2CID 238499430. Retrieved February 6, 2024. Free access icon ^ Hartshorne, Robin (2000). "Euclid's Geometry". Geometry: Euclid and Beyond. Springer New York. pp. 9–13. ISBN 0-387-98650-2. LCCN 99044789. OCLC 42290188. Retrieved February 7, 2024. ^ Boyer, Carl B. (2004) [1956]. "Fermat and Descartes". History of Analytic Geometry. Dover Publications. pp. 74–102. ISBN 0-486-43832-5. LCCN 2004056235. OCLC 56317813. ^ Stump, David J. (1997). "Reconstructing the Unity of Mathematics circa 1900" (PDF). Perspectives on Science. 5 (3): 383–417. doi:10.1162/posc_a_00532. eISSN 1530-9274. ISSN 1063-6145. LCCN 94657506. OCLC 26085129. S2CID 117709681. Retrieved February 8, 2024. ^ O'Connor, J. J.; Robertson, E. F. (February 1996). "Non-Euclidean geometry". MacTuror. Scotland, UK: University of St. Andrews. Archived from the original on November 6, 2022. Retrieved February 8, 2024. ^ Joyner, David (2008). "The (legal) Rubik's Cube group". Adventures in Group Theory: Rubik's Cube, Merlin's Machine, and Other Mathematical Toys (2nd ed.). Johns Hopkins University Press. pp. 219–232. ISBN 978-0-8018-9012-3. LCCN 2008011322. OCLC 213765703. ^ Christianidis, Jean; Oaks, Jeffrey (May 2013). "Practicing algebra in late antiquity: The problem-solving of Diophantus of Alexandria". Historia Mathematica. 40 (2): 127–163. doi:10.1016/j.hm.2012.09.001. eISSN 1090-249X. ISSN 0315-0860. LCCN 75642280. OCLC 2240703. S2CID 121346342. ^ Kleiner 2007, "History of Classical Algebra" pp. 3–5. ^ Lim, Lisa (December 21, 2018). "Where the x we use in algebra came from, and the X in Xmas". South China Morning Post. Archived from the original on December 22, 2018. Retrieved February 8, 2024. ^ Oaks, Jeffery A. (2018). "François Viète's revolution in algebra" (PDF). Archive for History of Exact Sciences. 72 (3): 245–302. doi:10.1007/s00407-018-0208-0. eISSN 1432-0657. ISSN 0003-9519. LCCN 63024699. OCLC 1482042. S2CID 125704699. Archived (PDF) from the original on November 8, 2022. Retrieved February 8, 2024. ^ Kleiner 2007, "History of Linear Algebra" pp. 79–101. ^ Corry, Leo (2004). "Emmy Noether: Ideals and Structures". Modern Algebra and the Rise of Mathematical Structures (2nd revised ed.). Germany: Birkhäuser Basel. pp. 247–252. ISBN 3-7643-7002-5. LCCN 2004556211. OCLC 51234417. Retrieved February 8, 2024. ^ Riche, Jacques (2007). "From Universal Algebra to Universal Logic". In Beziau, J. Y.; Costa-Leite, Alexandre (eds.). Perspectives on Universal Logic. Milano, Italy: Polimetrica International Scientific Publisher. pp. 3–39. ISBN 978-88-7699-077-9. OCLC 647049731. Retrieved February 8, 2024. ^ Krömer, Ralph (2007). Tool and Object: A History and Philosophy of Category Theory. Science Networks - Historical Studies. Vol. 32. Germany: Springer Science & Business Media. pp. xxi–xxv, 1–91. ISBN 978-3-7643-7523-2. LCCN 2007920230. OCLC 85242858. Retrieved February 8, 2024. ^ Guicciardini, Niccolo (2017). "The Newton–Leibniz Calculus Controversy, 1708–1730" (PDF). In Schliesser, Eric; Smeenk, Chris (eds.). The Oxford Handbook of Newton. Oxford Handbooks. Oxford University Press. doi:10.1093/oxfordhb/9780199930418.013.9. ISBN 978-0-19-993041-8. OCLC 975829354. Archived (PDF) from the original on November 9, 2022. Retrieved February 9, 2024. ^ O'Connor, J. J.; Robertson, E. F. (September 1998). "Leonhard Euler". MacTutor. Scotland, UK: University of St Andrews. Archived from the original on November 9, 2022. Retrieved February 9, 2024. ^ Franklin, James (July 2017). "Discrete and Continuous: A Fundamental Dichotomy in Mathematics". Journal of Humanistic Mathematics. 7 (2): 355–378. doi:10.5642/jhummath.201702.18. ISSN 2159-8118. LCCN 2011202231. OCLC 700943261. S2CID 6945363. Retrieved February 9, 2024. ^ Maurer, Stephen B. (1997). "What is Discrete Mathematics? The Many Answers". In Rosenstein, Joseph G.; Franzblau, Deborah S.; Roberts, Fred S. (eds.). Discrete Mathematics in the Schools. DIMACS: Series in Discrete Mathematics and Theoretical Computer Science. Vol. 36. American Mathematical Society. pp. 121–124. doi:10.1090/dimacs/036/13. ISBN 0-8218-0448-0. ISSN 1052-1798. LCCN 97023277. OCLC 37141146. S2CID 67358543. Retrieved February 9, 2024. ^ Hales, Thomas C. (2014). "Turing's Legacy: Developments from Turing's Ideas in Logic". In Downey, Rod (ed.). Turing's Legacy. Lecture Notes in Logic. Vol. 42. Cambridge University Press. pp. 260–261. doi:10.1017/CBO9781107338579.001. ISBN 978-1-107-04348-0. LCCN 2014000240. OCLC 867717052. S2CID 19315498. Retrieved February 9, 2024. ^ Sipser, Michael (July 1992). The History and Status of the P versus NP Question. STOC '92: Proceedings of the twenty-fourth annual ACM symposium on Theory of Computing. pp. 603–618. doi:10.1145/129712.129771. S2CID 11678884. ^ Ewald, William (November 17, 2018). "The Emergence of First-Order Logic". Stanford Encyclopedia of Philosophy. Archived from the original on May 12, 2021. Retrieved November 2, 2022. ^ Ferreirós, José (June 18, 2020). "The Early Development of Set Theory". Stanford Encyclopedia of Philosophy. Archived from the original on May 12, 2021. Retrieved November 2, 2022. ^ Ferreirós, José (2001). "The Road to Modern Logic—An Interpretation" (PDF). Bulletin of Symbolic Logic. 7 (4): 441–484. doi:10.2307/2687794. hdl:11441/38373. JSTOR 2687794. S2CID 43258676. Archived (PDF) from the original on February 2, 2023. Retrieved November 11, 2022. ^ Wolchover, Natalie (December 3, 2013). "Dispute over Infinity Divides Mathematicians". Scientific American. Archived from the original on November 2, 2022. Retrieved November 1, 2022. ^ Zhuang, C. "Wittgenstein's analysis on Cantor's diagonal argument". PhilArchive. Retrieved November 18, 2022. ^ Avigad, Jeremy; Reck, Erich H. (December 11, 2001). ""Clarifying the nature of the infinite": the development of metamathematics and proof theory" (PDF). Carnegie Mellon Technical Report CMU-PHIL-120. Archived (PDF) from the original on October 9, 2022. Retrieved November 12, 2022. ^ Hamilton, Alan G. (1982). Numbers, Sets and Axioms: The Apparatus of Mathematics. Cambridge University Press. pp. 3–4. ISBN 978-0-521-28761-6. Retrieved November 12, 2022. ^ Snapper, Ernst (September 1979). "The Three Crises in Mathematics: Logicism, Intuitionism, and Formalism". Mathematics Magazine. 52 (4): 207–216. doi:10.2307/2689412. JSTOR 2689412. ^ Jump up to: a b Raatikainen, Panu (October 2005). "On the Philosophical Relevance of Gödel's Incompleteness Theorems". Revue Internationale de Philosophie. 59 (4): 513–534. doi:10.3917/rip.234.0513. JSTOR 23955909. S2CID 52083793. Archived from the original on November 12, 2022. Retrieved November 12, 2022. ^ Moschovakis, Joan (September 4, 2018). "Intuitionistic Logic". Stanford Encyclopedia of Philosophy. Archived from the original on December 16, 2022. Retrieved November 12, 2022. ^ McCarty, Charles (2006). "At the Heart of Analysis: Intuitionism and Philosophy". Philosophia Scientiæ, Cahier spécial 6: 81–94. doi:10.4000/philosophiascientiae.411. ^ Halpern, Joseph; Harper, Robert; Immerman, Neil; Kolaitis, Phokion; Vardi, Moshe; Vianu, Victor (2001). "On the Unusual Effectiveness of Logic in Computer Science" (PDF). Archived (PDF) from the original on March 3, 2021. Retrieved January 15, 2021. ^ Rouaud, Mathieu (April 2017) [First published July 2013]. Probability, Statistics and Estimation (PDF). p. 10. Archived (PDF) from the original on October 9, 2022. Retrieved February 13, 2024. ^ Rao, C. Radhakrishna (1997) [1989]. Statistics and Truth: Putting Chance to Work (2nd ed.). World Scientific. pp. 3–17, 63–70. ISBN 981-02-3111-3. LCCN 97010349. MR 1474730. OCLC 36597731. ^ Rao, C. Radhakrishna (1981). "Foreword". In Arthanari, T.S.; Dodge, Yadolah (eds.). Mathematical programming in statistics. Wiley Series in Probability and Mathematical Statistics. New York: Wiley. pp. vii–viii. ISBN 978-0-471-08073-2. LCCN 80021637. MR 0607328. OCLC 6707805. ^ Whittle 1994, pp. 10–11, 14–18. ^ Marchuk, Gurii Ivanovich (April 2020). "G I Marchuk's plenary: ICM 1970". MacTutor. School of Mathematics and Statistics, University of St Andrews, Scotland. Archived from the original on November 13, 2022. Retrieved November 13, 2022. ^ Johnson, Gary M.; Cavallini, John S. (September 1991). Phua, Kang Hoh; Loe, Kia Fock (eds.). Grand Challenges, High Performance Computing, and Computational Science. Singapore Supercomputing Conference'90: Supercomputing For Strategic Advantage. World Scientific. p. 28. LCCN 91018998. Retrieved November 13, 2022. ^ Trefethen, Lloyd N. (2008). "Numerical Analysis". In Gowers, Timothy; Barrow-Green, June; Leader, Imre (eds.). The Princeton Companion to Mathematics (PDF). Princeton University Press. pp. 604–615. ISBN 978-0-691-11880-2. LCCN 2008020450. MR 2467561. OCLC 227205932. Archived (PDF) from the original on March 7, 2023. Retrieved February 15, 2024. ^ Dehaene, Stanislas; Dehaene-Lambertz, Ghislaine; Cohen, Laurent (August 1998). "Abstract representations of numbers in the animal and human brain". Trends in Neurosciences. 21 (8): 355–361. doi:10.1016/S0166-2236(98)01263-6. PMID 9720604. S2CID 17414557. ^ See, for example, Wilder, Raymond L. Evolution of Mathematical Concepts; an Elementary Study. passim. ^ Zaslavsky, Claudia (1999). Africa Counts: Number and Pattern in African Culture. Chicago Review Press. ISBN 978-1-61374-115-3. OCLC 843204342. ^ Kline 1990, Chapter 1. ^ Boyer 1991, "Mesopotamia" pp. 24–27. ^ Heath, Thomas Little (1981) [1921]. A History of Greek Mathematics: From Thales to Euclid. New York: Dover Publications. p. 1. ISBN 978-0-486-24073-2. ^ Mueller, I. (1969). "Euclid's Elements and the Axiomatic Method". The British Journal for the Philosophy of Science. 20 (4): 289–309. doi:10.1093/bjps/20.4.289. ISSN 0007-0882. JSTOR 686258. ^ Boyer 1991, "Euclid of Alexandria" p. 119. ^ Boyer 1991, "Archimedes of Syracuse" p. 120. ^ Boyer 1991, "Archimedes of Syracuse" p. 130. ^ Boyer 1991, "Apollonius of Perga" p. 145. ^ Boyer 1991, "Greek Trigonometry and Mensuration" p. 162. ^ Boyer 1991, "Revival and Decline of Greek Mathematics" p. 180. ^ Ore, Øystein (1988). Number Theory and Its History. Courier Corporation. pp. 19–24. ISBN 978-0-486-65620-5. Retrieved November 14, 2022. ^ Singh, A. N. (January 1936). "On the Use of Series in Hindu Mathematics". Osiris. 1: 606–628. doi:10.1086/368443. JSTOR 301627. S2CID 144760421. ^ Kolachana, A.; Mahesh, K.; Ramasubramanian, K. (2019). "Use of series in India". Studies in Indian Mathematics and Astronomy. Sources and Studies in the History of Mathematics and Physical Sciences. Singapore: Springer. pp. 438–461. doi:10.1007/978-981-13-7326-8_20. ISBN 978-981-13-7325-1. S2CID 190176726. ^ Saliba, George (1994). A history of Arabic astronomy: planetary theories during the golden age of Islam. New York University Press. ISBN 978-0-8147-7962-0. OCLC 28723059. ^ Faruqi, Yasmeen M. (2006). "Contributions of Islamic scholars to the scientific enterprise". International Education Journal. 7 (4). Shannon Research Press: 391–399. Archived from the original on November 14, 2022. Retrieved November 14, 2022. ^ Lorch, Richard (June 2001). "Greek-Arabic-Latin: The Transmission of Mathematical Texts in the Middle Ages" (PDF). Science in Context. 14 (1–2). Cambridge University Press: 313–331. doi:10.1017/S0269889701000114. S2CID 146539132. Archived (PDF) from the original on December 17, 2022. Retrieved December 5, 2022. ^ Archibald, Raymond Clare (January 1949). "History of Mathematics After the Sixteenth Century". The American Mathematical Monthly. Part 2: Outline of the History of Mathematics. 56 (1): 35–56. doi:10.2307/2304570. JSTOR 2304570. ^ Sevryuk 2006, pp. 101–109. ^ Wolfram, Stephan (October 2000). Mathematical Notation: Past and Future. MathML and Math on the Web: MathML International Conference 2000, Urbana Champaign, USA. Archived from the original on November 16, 2022. Retrieved February 3, 2024. ^ Douglas, Heather; Headley, Marcia Gail; Hadden, Stephanie; LeFevre, Jo-Anne (December 3, 2020). "Knowledge of Mathematical Symbols Goes Beyond Numbers". Journal of Numerical Cognition. 6 (3): 322–354. doi:10.5964/jnc.v6i3.293. eISSN 2363-8761. S2CID 228085700. ^ Letourneau, Mary; Wright Sharp, Jennifer (October 2017). "AMS Style Guide" (PDF). American Mathematical Society. p. 75. Archived (PDF) from the original on December 8, 2022. Retrieved February 3, 2024. ^ Jansen, Anthony R.; Marriott, Kim; Yelland, Greg W. (2000). "Constituent Structure in Mathematical Expressions" (PDF). Proceedings of the Annual Meeting of the Cognitive Science Society. 22. University of California Merced. eISSN 1069-7977. OCLC 68713073. Archived (PDF) from the original on November 16, 2022. Retrieved February 3, 2024. ^ Rossi, Richard J. (2006). Theorems, Corollaries, Lemmas, and Methods of Proof. Pure and Applied Mathematics: A Wiley Series of Texts, Monographs and Tracts. John Wiley & Sons. pp. 1–14, 47–48. ISBN 978-0-470-04295-3. LCCN 2006041609. OCLC 64085024. ^ "Earliest Uses of Some Words of Mathematics". MacTutor. Scotland, UK: University of St. Andrews. Archived from the original on September 29, 2022. Retrieved February 3, 2024. ^ Silver, Daniel S. (November–December 2017). "The New Language of Mathematics". The American Scientist. 105 (6). Sigma Xi: 364–371. doi:10.1511/2017.105.6.364. ISSN 0003-0996. LCCN 43020253. OCLC 1480717. S2CID 125455764. ^ Bellomo, Nicola; Preziosi, Luigi (December 22, 1994). Modelling Mathematical Methods and Scientific Computation. Mathematical Modeling. Vol. 1. CRC Press. p. 1. ISBN 978-0-8493-8331-1. Retrieved November 16, 2022. ^ Hennig, Christian (2010). "Mathematical Models and Reality: A Constructivist Perspective". Foundations of Science. 15: 29–48. doi:10.1007/s10699-009-9167-x. S2CID 6229200. Retrieved November 17, 2022. ^ Frigg, Roman; Hartmann, Stephan (February 4, 2020). "Models in Science". Stanford Encyclopedia of Philosophy. Archived from the original on November 17, 2022. Retrieved November 17, 2022. ^ Stewart, Ian (2018). "Mathematics, Maps, and Models". In Wuppuluri, Shyam; Doria, Francisco Antonio (eds.). The Map and the Territory: Exploring the Foundations of Science, Thought and Reality. The Frontiers Collection. Springer. pp. 345–356. doi:10.1007/978-3-319-72478-2_18. ISBN 978-3-319-72478-2. Retrieved November 17, 2022. ^ "The science checklist applied: Mathematics". Understanding Science. University of California, Berkeley. Archived from the original on October 27, 2019. Retrieved October 27, 2019. ^ Mackay, A. L. (1991). Dictionary of Scientific Quotations. London: Taylor & Francis. p. 100. ISBN 978-0-7503-0106-0. Retrieved March 19, 2023. ^ Bishop, Alan (1991). "Environmental activities and mathematical culture". Mathematical Enculturation: A Cultural Perspective on Mathematics Education. Norwell, Massachusetts: Kluwer Academic Publishers. pp. 20–59. ISBN 978-0-7923-1270-3. Retrieved April 5, 2020. ^ Shasha, Dennis Elliot; Lazere, Cathy A. (1998). Out of Their Minds: The Lives and Discoveries of 15 Great Computer Scientists. Springer. p. 228. ISBN 978-0-387-98269-4. ^ Nickles, Thomas (2013). "The Problem of Demarcation". Philosophy of Pseudoscience: Reconsidering the Demarcation Problem. Chicago: The University of Chicago Press. p. 104. ISBN 978-0-226-05182-6. ^ Pigliucci, Massimo (2014). "Are There 'Other' Ways of Knowing?". Philosophy Now. Archived from the original on May 13, 2020. Retrieved April 6, 2020. ^ Jump up to: a b Ferreirós, J. (2007). "Ό Θεὸς Άριθμητίζει: The Rise of Pure Mathematics as Arithmetic with Gauss". In Goldstein, Catherine; Schappacher, Norbert; Schwermer, Joachim (eds.). The Shaping of Arithmetic after C.F. Gauss's Disquisitiones Arithmeticae. Springer Science & Business Media. pp. 235–268. ISBN 978-3-540-34720-0. ^ Kuhn, Thomas S. (1976). "Mathematical vs. Experimental Traditions in the Development of Physical Science". The Journal of Interdisciplinary History. 7 (1). The MIT Press: 1–31. doi:10.2307/202372. JSTOR 202372. ^ Asper, Markus (2009). "The two cultures of mathematics in ancient Greece". In Robson, Eleanor; Stedall, Jacqueline (eds.). The Oxford Handbook of the History of Mathematics. Oxford Handbooks in Mathematics. OUP Oxford. pp. 107–132. ISBN 978-0-19-921312-2. Retrieved November 18, 2022. ^ Gozwami, Pinkimani; Singh, Madan Mohan (2019). "Integer Factorization Problem". In Ahmad, Khaleel; Doja, M. N.; Udzir, Nur Izura; Singh, Manu Pratap (eds.). Emerging Security Algorithms and Techniques. CRC Press. pp. 59–60. ISBN 978-0-8153-6145-9. LCCN 2019010556. OCLC 1082226900. ^ Maddy, P. (2008). "How applied mathematics became pure" (PDF). The Review of Symbolic Logic. 1 (1): 16–41. doi:10.1017/S1755020308080027. S2CID 18122406. Archived (PDF) from the original on August 12, 2017. Retrieved November 19, 2022. ^ Silver, Daniel S. (2017). "In Defense of Pure Mathematics". In Pitici, Mircea (ed.). The Best Writing on Mathematics, 2016. Princeton University Press. pp. 17–26. ISBN 978-0-691-17529-4. Retrieved November 19, 2022. ^ Parshall, Karen Hunger (2022). "The American Mathematical Society and Applied Mathematics from the 1920s to the 1950s: A Revisionist Account". Bulletin of the American Mathematical Society. 59 (3): 405–427. doi:10.1090/bull/1754. S2CID 249561106. Archived from the original on November 20, 2022. Retrieved November 20, 2022. ^ Stolz, Michael (2002). "The History Of Applied Mathematics And The History Of Society". Synthese. 133: 43–57. doi:10.1023/A:1020823608217. S2CID 34271623. Retrieved November 20, 2022. ^ Lin, C. C . (March 1976). "On the role of applied mathematics". Advances in Mathematics. 19 (3): 267–288. doi:10.1016/0001-8708(76)90024-4. ^ Peressini, Anthony (September 1999). Applying Pure Mathematics (PDF). Philosophy of Science. Proceedings of the 1998 Biennial Meetings of the Philosophy of Science Association. Part I: Contributed Papers. Vol. 66. pp. S1–S13. JSTOR 188757. Archived (PDF) from the original on January 2, 2024. Retrieved November 30, 2022. ^ Lützen, J. (2011). "Examples and reflections on the interplay between mathematics and physics in the 19th and 20th century". In Schlote, K. H.; Schneider, M. (eds.). Mathematics meets physics: A contribution to their interaction in the 19th and the first half of the 20th century. Frankfurt am Main: Verlag Harri Deutsch. Archived from the original on March 23, 2023. Retrieved November 19, 2022. ^ Marker, Dave (July 1996). "Model theory and exponentiation". Notices of the American Mathematical Society. 43 (7): 753–759. Archived from the original on March 13, 2014. Retrieved November 19, 2022. ^ Chen, Changbo; Maza, Marc Moreno (August 2014). Cylindrical Algebraic Decomposition in the RegularChains Library. International Congress on Mathematical Software 2014. Lecture Notes in Computer Science. Vol. 8592. Berlin: Springer. doi:10.1007/978-3-662-44199-2_65. Retrieved November 19, 2022. ^ Pérez-Escobar, José Antonio; Sarikaya, Deniz (2021). "Purifying applied mathematics and applying pure mathematics: how a late Wittgensteinian perspective sheds light onto the dichotomy". European Journal for Philosophy of Science. 12 (1): 1–22. doi:10.1007/s13194-021-00435-9. S2CID 245465895. ^ Takase, M. (2014). "Pure Mathematics and Applied Mathematics are Inseparably Intertwined: Observation of the Early Analysis of the Infinity". A Mathematical Approach to Research Problems of Science and Technology. Mathematics for Industry. Vol. 5. Tokyo: Springer. pp. 393–399. doi:10.1007/978-4-431-55060-0_29. ISBN 978-4-431-55059-4. Retrieved November 20, 2022. ^ Sarukkai, Sundar (February 10, 2005). "Revisiting the 'unreasonable effectiveness' of mathematics". Current Science. 88 (3): 415–423. JSTOR 24110208. ^ Wagstaff, Samuel S. Jr. (2021). "History of Integer Factoring" (PDF). In Bos, Joppe W.; Stam, Martijn (eds.). Computational Cryptography, Algorithmic Aspects of Cryptography, A Tribute to AKL. London Mathematical Society Lecture Notes Series 469. Cambridge University Press. pp. 41–77. Archived (PDF) from the original on November 20, 2022. Retrieved November 20, 2022. ^ "Curves: Ellipse". MacTutor. School of Mathematics and Statistics, University of St Andrews, Scotland. Archived from the original on October 14, 2022. Retrieved November 20, 2022. ^ Mukunth, Vasudevan (September 10, 2015). "Beyond the Surface of Einstein's Relativity Lay a Chimerical Geometry". The Wire. Archived from the original on November 20, 2022. Retrieved November 20, 2022. ^ Wilson, Edwin B.; Lewis, Gilbert N. (November 1912). "The Space-Time Manifold of Relativity. The Non-Euclidean Geometry of Mechanics and Electromagnetics". Proceedings of the American Academy of Arts and Sciences. 48 (11): 389–507. doi:10.2307/20022840. JSTOR 20022840. ^ Jump up to: a b c Borel, Armand (1983). "Mathematics: Art and Science". The Mathematical Intelligencer. 5 (4). Springer: 9–17. doi:10.4171/news/103/8. ISSN 1027-488X. ^ Hanson, Norwood Russell (November 1961). "Discovering the Positron (I)". The British Journal for the Philosophy of Science. 12 (47). The University of Chicago Press: 194–214. doi:10.1093/bjps/xiii.49.54. JSTOR 685207. ^ Ginammi, Michele (February 2016). "Avoiding reification: Heuristic effectiveness of mathematics and the prediction of the Ω– particle". Studies in History and Philosophy of Science Part B: Studies in History and Philosophy of Modern Physics. 53: 20–27. Bibcode:2016SHPMP..53...20G. doi:10.1016/j.shpsb.2015.12.001. ^ Wagh, Sanjay Moreshwar; Deshpande, Dilip Abasaheb (September 27, 2012). Essentials of Physics. PHI Learning Pvt. Ltd. p. 3. ISBN 978-81-203-4642-0. Retrieved January 3, 2023. ^ Atiyah, Michael (1990). On the Work of Edward Witten (PDF). Proceedings of the International Congress of Mathematicians. p. 31. Archived from the original (PDF) on September 28, 2013. Retrieved December 29, 2022. ^ Borwein, J.; Borwein, P.; Girgensohn, R.; Parnes, S. (1996). "Conclusion". oldweb.cecm.sfu.ca. Archived from the original on January 21, 2008. ^ Hales, Thomas; Adams, Mark; Bauer, Gertrud; Dang, Tat Dat; Harrison, John; Hoang, Le Truong; Kaliszyk, Cezary; Magron, Victor; Mclaughlin, Sean; Nguyen, Tat Thang; Nguyen, Quang Truong; Nipkow, Tobias; Obua, Steven; Pleso, Joseph; Rute, Jason; Solovyev, Alexey; Ta, Thi Hoai An; Tran, Nam Trung; Trieu, Thi Diep; Urban, Josef; Vu, Ky; Zumkeller, Roland (2017). "A Formal Proof of the Kepler Conjecture". Forum of Mathematics, Pi. 5: e2. doi:10.1017/fmp.2017.1. hdl:2066/176365. ISSN 2050-5086. S2CID 216912822. Archived from the original on December 4, 2020. Retrieved February 25, 2023. ^ Jump up to: a b Geuvers, H. (February 2009). "Proof assistants: History, ideas and future". Sādhanā. 34: 3–4. doi:10.1007/s12046-009-0001-5. hdl:2066/75958. S2CID 14827467. Archived from the original on December 29, 2022. Retrieved December 29, 2022. ^ "P versus NP problem | mathematics". Britannica. Archived from the original on December 6, 2022. Retrieved December 29, 2022. ^ Jump up to: a b c Millstein, Roberta (September 8, 2016). "Probability in Biology: The Case of Fitness" (PDF). In Hájek, Alan; Hitchcock, Christopher (eds.). The Oxford Handbook of Probability and Philosophy. pp. 601–622. doi:10.1093/oxfordhb/9780199607617.013.27. Archived (PDF) from the original on March 7, 2023. Retrieved December 29, 2022. ^ See for example Anne Laurent, Roland Gamet, Jérôme Pantel, Tendances nouvelles en modélisation pour l'environnement, actes du congrès «Programme environnement, vie et sociétés» 15-17 janvier 1996, CNRS ^ Bouleau 1999, pp. 282–283. ^ Bouleau 1999, p. 285. ^ "1.4: The Lotka-Volterra Predator-Prey Model". Mathematics LibreTexts. January 5, 2022. Archived from the original on December 29, 2022. Retrieved December 29, 2022. ^ Bouleau 1999, p. 287. ^ Edling, Christofer R. (2002). "Mathematics in Sociology". Annual Review of Sociology. 28 (1): 197–220. doi:10.1146/annurev.soc.28.110601.140942. ISSN 0360-0572. ^ Batchelder, William H. (January 1, 2015). "Mathematical Psychology: History". In Wright, James D. (ed.). International Encyclopedia of the Social & Behavioral Sciences (Second Edition). Oxford: Elsevier. pp. 808–815. ISBN 978-0-08-097087-5. Retrieved September 30, 2023. ^ Jump up to: a b Zak, Paul J. (2010). Moral Markets: The Critical Role of Values in the Economy. Princeton University Press. p. 158. ISBN 978-1-4008-3736-6. Retrieved January 3, 2023. ^ Jump up to: a b c Kim, Oliver W. (May 29, 2014). "Meet Homo Economicus". The Harvard Crimson. Archived from the original on December 29, 2022. Retrieved December 29, 2022. ^ "Kondratiev, Nikolai Dmitrievich | Encyclopedia.com". www.encyclopedia.com. Archived from the original on July 1, 2016. Retrieved December 29, 2022. ^ "Mathématique de l'histoire-géometrie et cinématique. Lois de Brück. Chronologie géodésique de la Bible., by Charles LAGRANGE et al. | The Online Books Page". onlinebooks.library.upenn.edu. ^ "Cliodynamics: a science for predicting the future". ZDNET. Archived from the original on December 29, 2022. Retrieved December 29, 2022. ^ Sokal, Alan; Jean Bricmont (1998). Fashionable Nonsense. New York: Picador. ISBN 978-0-312-19545-8. OCLC 39605994. ^ Beaujouan, Guy (1994). Comprendre et maîtriser la nature au Moyen Age: mélanges d'histoire des sciences offerts à Guy Beaujouan (in French). Librairie Droz. p. 130. ISBN 978-2-600-00040-6. Retrieved January 3, 2023. ^ "L'astrologie à l'épreuve : ça ne marche pas, ça n'a jamais marché ! / Afis Science – Association française pour l'information scientifique". Afis Science – Association française pour l’information scientifique (in French). Archived from the original on January 29, 2023. Retrieved December 28, 2022. ^ Balaguer, Mark (2016). "Platonism in Metaphysics". In Zalta, Edward N. (ed.). The Stanford Encyclopedia of Philosophy (Spring 2016 ed.). Metaphysics Research Lab, Stanford University. Archived from the original on January 30, 2022. Retrieved April 2, 2022. ^ See White, L. (1947). "The locus of mathematical reality: An anthropological footnote". Philosophy of Science. 14 (4): 289–303. doi:10.1086/286957. S2CID 119887253. 189303; also in Newman, J. R. (1956). The World of Mathematics. Vol. 4. New York: Simon and Schuster. pp. 2348–2364. ^ Dorato, Mauro (2005). "Why are laws mathematical?" (PDF). The Software of the Universe, An Introduction to the History and Philosophy of Laws of Nature. Ashgate. pp. 31–66. ISBN 978-0-7546-3994-7. Archived (PDF) from the original on August 17, 2023. Retrieved December 5, 2022. ^ Jump up to: a b c Mura, Roberta (December 1993). "Images of Mathematics Held by University Teachers of Mathematical Sciences". Educational Studies in Mathematics. 25 (4): 375–85. doi:10.1007/BF01273907. JSTOR 3482762. S2CID 122351146. ^ Jump up to: a b Tobies, Renate; Neunzert, Helmut (2012). Iris Runge: A Life at the Crossroads of Mathematics, Science, and Industry. Springer. p. 9. ISBN 978-3-0348-0229-1. Retrieved June 20, 2015. "[I]t is first necessary to ask what is meant by mathematics in general. Illustrious scholars have debated this matter until they were blue in the face, and yet no consensus has been reached about whether mathematics is a natural science, a branch of the humanities, or an art form." ^ Ziegler, Günter M.; Loos, Andreas (November 2, 2017). Kaiser, G. (ed.). "What is Mathematics?" and why we should ask, where one should experience and learn that, and how to teach it. Proceedings of the 13th International Congress on Mathematical Education. ICME-13 Monographs. Springer. pp. 63–77. doi:10.1007/978-3-319-62597-3_5. ISBN 978-3-319-62596-6. ^ Franklin, James (2009). Philosophy of Mathematics. Elsevier. pp. 104–106. ISBN 978-0-08-093058-9. Retrieved June 20, 2015. ^ Cajori, Florian (1893). A History of Mathematics. American Mathematical Society (1991 reprint). pp. 285–286. ISBN 978-0-8218-2102-2. Retrieved June 20, 2015. ^ Brown, Ronald; Porter, Timothy (January 2000). "The Methodology of Mathematics". The Mathematical Gazette. 79 (485): 321–334. doi:10.2307/3618304. JSTOR 3618304. S2CID 178923299. Archived from the original on March 23, 2023. Retrieved November 25, 2022. ^ Strauss, Danie (2011). "Defining mathematics". Acta Academica. 43 (4): 1–28. Retrieved November 25, 2022. ^ Hamami, Yacin (June 2022). "Mathematical Rigor and Proof" (PDF). The Review of Symbolic Logic. 15 (2): 409–449. doi:10.1017/S1755020319000443. S2CID 209980693. Archived (PDF) from the original on December 5, 2022. Retrieved November 21, 2022. ^ Peterson 1988, p. 4: "A few complain that the computer program can't be verified properly." (in reference to the Haken–Apple proof of the Four Color Theorem) ^ Perminov, V. Ya. (1988). "On the Reliability of Mathematical Proofs". Philosophy of Mathematics. 42 (167 (4)). Revue Internationale de Philosophie: 500–508. ^ Davis, Jon D.; McDuffie, Amy Roth; Drake, Corey; Seiwell, Amanda L. (2019). "Teachers' perceptions of the official curriculum: Problem solving and rigor". International Journal of Educational Research. 93: 91–100. doi:10.1016/j.ijer.2018.10.002. S2CID 149753721. ^ Endsley, Kezia (2021). Mathematicians and Statisticians: A Practical Career Guide. Practical Career Guides. Rowman & Littlefield. pp. 1–3. ISBN 978-1-5381-4517-3. Retrieved November 29, 2022. ^ Robson, Eleanor (2009). "Mathematics education in an Old Babylonian scribal school". In Robson, Eleanor; Stedall, Jacqueline (eds.). The Oxford Handbook of the History of Mathematics. OUP Oxford. ISBN 978-0-19-921312-2. Retrieved November 24, 2022. ^ Bernard, Alain; Proust, Christine; Ross, Micah (2014). "Mathematics Education in Antiquity". In Karp, A.; Schubring, G. (eds.). Handbook on the History of Mathematics Education. New York: Springer. pp. 27–53. doi:10.1007/978-1-4614-9155-2_3. ISBN 978-1-4614-9154-5. ^ Dudley, Underwood (April 2002). "The World's First Mathematics Textbook". Math Horizons. 9 (4). Taylor & Francis, Ltd.: 8–11. doi:10.1080/10724117.2002.11975154. JSTOR 25678363. S2CID 126067145. ^ Subramarian, F. Indian pedagogy and problem solving in ancient Thamizhakam (PDF). History and Pedagogy of Mathematics conference, July 16–20, 2012. Archived (PDF) from the original on November 28, 2022. Retrieved November 29, 2022. ^ Siu, Man Keung (2004). "Official Curriculum in Mathematics in Ancient China: How did Candidates Study for the Examination?". How Chinese Learn Mathematics (PDF). Series on Mathematics Education. Vol. 1. pp. 157–185. doi:10.1142/9789812562241_0006. ISBN 978-981-256-014-8. Retrieved November 26, 2022. ^ Jones, Phillip S. (1967). "The History of Mathematical Education". The American Mathematical Monthly. 74 (1). Taylor & Francis, Ltd.: 38–55. doi:10.2307/2314867. JSTOR 2314867. ^ Schubring, Gert; Furinghetti, Fulvia; Siu, Man Keung (August 2012). "Introduction: the history of mathematics teaching. Indicators for modernization processes in societies". ZDM Mathematics Education. 44 (4): 457–459. doi:10.1007/s11858-012-0445-7. S2CID 145507519. ^ von Davier, Matthias; Foy, Pierre; Martin, Michael O.; Mullis, Ina V.S. (2020). "Examining eTIMSS Country Differences Between eTIMSS Data and Bridge Data: A Look at Country-Level Mode of Administration Effects". TIMSS 2019 International Results in Mathematics and Science (PDF). TIMSS & PIRLS International Study Center, Lynch School of Education and Human Development and International Association for the Evaluation of Educational Achievement. p. 13.1. ISBN 978-1-889938-54-7. Archived (PDF) from the original on November 29, 2022. Retrieved November 29, 2022. ^ Rowan-Kenyon, Heather T.; Swan, Amy K.; Creager, Marie F. (March 2012). "Social Cognitive Factors, Support, and Engagement: Early Adolescents' Math Interests as Precursors to Choice of Career" (PDF). The Career Development Quarterly. 60 (1): 2–15. doi:10.1002/j.2161-0045.2012.00001.x. Archived (PDF) from the original on November 22, 2023. Retrieved November 29, 2022. ^ Luttenberger, Silke; Wimmer, Sigrid; Paechter, Manuela (2018). "Spotlight on math anxiety". Psychology Research and Behavior Management. 11: 311–322. doi:10.2147/PRBM.S141421. PMC 6087017. PMID 30123014. ^ Yaftian, Narges (June 2, 2015). "The Outlook of the Mathematicians' Creative Processes". Procedia - Social and Behavioral Sciences. 191: 2519–2525. doi:10.1016/j.sbspro.2015.04.617. ^ Nadjafikhah, Mehdi; Yaftian, Narges (October 10, 2013). "The Frontage of Creativity and Mathematical Creativity". Procedia - Social and Behavioral Sciences. 90: 344–350. doi:10.1016/j.sbspro.2013.07.101. ^ van der Poorten, A. (1979). "A proof that Euler missed... Apéry's Proof of the irrationality of ζ(3)" (PDF). The Mathematical Intelligencer. 1 (4): 195–203. doi:10.1007/BF03028234. S2CID 121589323. Archived (PDF) from the original on September 6, 2015. Retrieved November 22, 2022. ^ Petkovi, Miodrag (September 2, 2009). Famous Puzzles of Great Mathematicians. American Mathematical Society. pp. xiii–xiv. ISBN 978-0-8218-4814-2. Retrieved November 25, 2022. ^ Hardy, G. H. (1940). A Mathematician's Apology. Cambridge University Press. ISBN 978-0-521-42706-7. Retrieved November 22, 2022. See also A Mathematician's Apology. ^ Alon, Noga; Goldston, Dan; Sárközy, András; Szabados, József; Tenenbaum, Gérald; Garcia, Stephan Ramon; Shoemaker, Amy L. (March 2015). Alladi, Krishnaswami; Krantz, Steven G. (eds.). "Reflections on Paul Erdős on His Birth Centenary, Part II". Notices of the American Mathematical Society. 62 (3): 226–247. doi:10.1090/noti1223. ^ See, for example Bertrand Russell's statement "Mathematics, rightly viewed, possesses not only truth, but supreme beauty ..." in his History of Western Philosophy. 1919. p. 60. ^ Cazden, Norman (October 1959). "Musical intervals and simple number ratios". Journal of Research in Music Education. 7 (2): 197–220. doi:10.1177/002242945900700205. JSTOR 3344215. S2CID 220636812. ^ Budden, F. J. (October 1967). "Modern mathematics and music". The Mathematical Gazette. 51 (377). Cambridge University Press ({CUP}): 204–215. doi:10.2307/3613237. JSTOR 3613237. S2CID 126119711. ^ Enquist, Magnus; Arak, Anthony (November 1994). "Symmetry, beauty and evolution". Nature. 372 (6502): 169–172. Bibcode:1994Natur.372..169E. doi:10.1038/372169a0. ISSN 1476-4687. PMID 7969448. S2CID 4310147. Archived from the original on December 28, 2022. Retrieved December 29, 2022. ^ Hestenes, David (1999). "Symmetry Groups" (PDF). geocalc.clas.asu.edu. Archived (PDF) from the original on January 1, 2023. Retrieved December 29, 2022. ^ Bender, Sara (September 2020). "The Rorschach Test". In Carducci, Bernardo J.; Nave, Christopher S.; Mio, Jeffrey S.; Riggio, Ronald E. (eds.). The Wiley Encyclopedia of Personality and Individual Differences: Measurement and Assessment. Wiley. pp. 367–376. doi:10.1002/9781119547167.ch131. ISBN 978-1-119-05751-2. ^ Weyl, Hermann (2015). Symmetry. Princeton Science Library. Vol. 47. Princeton University Press. p. 4. ISBN 978-1-4008-7434-7. ^ Bradley, Larry (2010). "Fractals – Chaos & Fractals". www.stsci.edu. Archived from the original on March 7, 2023. Retrieved December 29, 2022. ^ "Self-similarity". math.bu.edu. Archived from the original on March 2, 2023. Retrieved December 29, 2022. ^ Kissane, Barry (July 2009). Popular mathematics. 22nd Biennial Conference of The Australian Association of Mathematics Teachers. Fremantle, Western Australia: Australian Association of Mathematics Teachers. pp. 125–126. Archived from the original on March 7, 2023. Retrieved December 29, 2022. ^ Steen, L. A. (2012). Mathematics Today Twelve Informal Essays. Springer Science & Business Media. p. 2. ISBN 978-1-4613-9435-8. Retrieved January 3, 2023. ^ Pitici, Mircea (2017). The Best Writing on Mathematics 2016. Princeton University Press. ISBN 978-1-4008-8560-2. Retrieved January 3, 2023. ^ Monastyrsky 2001, p. 1: "The Fields Medal is now indisputably the best known and most influential award in mathematics." ^ Riehm 2002, pp. 778–782. ^ "Fields Medal | International Mathematical Union (IMU)". www.mathunion.org. Archived from the original on December 26, 2018. Retrieved February 21, 2022. ^ Jump up to: a b "Fields Medal". Maths History. Archived from the original on March 22, 2019. Retrieved February 21, 2022. ^ "Honours/Prizes Index". MacTutor History of Mathematics Archive. Archived from the original on December 17, 2021. Retrieved February 20, 2023. ^ "About the Abel Prize". The Abel Prize. Archived from the original on April 14, 2022. Retrieved January 23, 2022. ^ "Abel Prize | mathematics award". Encyclopedia Britannica. Archived from the original on January 26, 2020. Retrieved January 23, 2022. ^ "Chern Medal Award" (PDF). www.mathunion.org. June 1, 2009. Archived (PDF) from the original on June 17, 2009. Retrieved February 21, 2022. ^ "Chern Medal Award". International Mathematical Union (IMU). Archived from the original on August 25, 2010. Retrieved January 23, 2022. ^ "The Leroy P Steele Prize of the AMS". School of Mathematics and Statistics, University of St Andrews, Scotland. Archived from the original on November 17, 2022. Retrieved November 17, 2022. ^ Chern, S. S.; Hirzebruch, F. (September 2000). Wolf Prize in Mathematics. doi:10.1142/4149. ISBN 978-981-02-3945-9. Archived from the original on February 21, 2022. Retrieved February 21, 2022. ^ "The Wolf Prize". Wolf Foundation. Archived from the original on January 12, 2020. Retrieved January 23, 2022. ^ Jump up to: a b "Hilbert's Problems: 23 and Math". Simons Foundation. May 6, 2020. Archived from the original on January 23, 2022. Retrieved January 23, 2022. ^ Feferman, Solomon (1998). "Deciding the undecidable: Wrestling with Hilbert's problems" (PDF). In the Light of Logic. Logic and Computation in Philosophy series. Oxford University Press. pp. 3–27. ISBN 978-0-19-508030-8. Retrieved November 29, 2022. ^ "The Millennium Prize Problems". Clay Mathematics Institute. Archived from the original on July 3, 2015. Retrieved January 23, 2022. ^ "Millennium Problems". Clay Mathematics Institute. Archived from the original on December 20, 2018. Retrieved January 23, 2022. Sources Bouleau, Nicolas (1999). Philosophie des mathématiques et de la modélisation: Du chercheur à l'ingénieur. L'Harmattan. ISBN 978-2-7384-8125-2. Boyer, Carl Benjamin (1991). A History of Mathematics (2nd ed.). New York: Wiley. ISBN 978-0-471-54397-8. Eves, Howard (1990). An Introduction to the History of Mathematics (6th ed.). Saunders. ISBN 978-0-03-029558-4. Kleiner, Israel (2007). Kleiner, Israel (ed.). A History of Abstract Algebra. Springer Science & Business Media. doi:10.1007/978-0-8176-4685-1. ISBN 978-0-8176-4684-4. LCCN 2007932362. OCLC 76935733. S2CID 117392219. Retrieved February 8, 2024. Kline, Morris (1990). Mathematical Thought from Ancient to Modern Times. New York: Oxford University Press. ISBN 978-0-19-506135-2. Monastyrsky, Michael (2001). "Some Trends in Modern Mathematics and the Fields Medal" (PDF). CMS – Notes – de la SMC. 33 (2–3). Canadian Mathematical Society. Archived (PDF) from the original on August 13, 2006. Retrieved July 28, 2006. Oakley, Barbara (2014). A Mind For Numbers: How to Excel at Math and Science (Even If You Flunked Algebra). New York: Penguin Random House. ISBN 978-0-399-16524-5. "A Mind for Numbers." Peirce, Benjamin (1881). Peirce, Charles Sanders (ed.). "Linear associative algebra". American Journal of Mathematics. 4 (1–4) (Corrected, expanded, and annotated revision with an 1875 paper by B. Peirce and annotations by his son, C.S. Peirce, of the 1872 lithograph ed.): 97–229. doi:10.2307/2369153. hdl:2027/hvd.32044030622997. JSTOR 2369153. Corrected, expanded, and annotated revision with an 1875 paper by B. Peirce and annotations by his son, C. S. Peirce, of the 1872 lithograph ed. Google Eprint and as an extract, D. Van Nostrand, 1882, Google Eprint. Retrieved November 17, 2020.. Peterson, Ivars (1988). The Mathematical Tourist: Snapshots of Modern Mathematics. W. H. Freeman and Company. ISBN 0-7167-1953-3. LCCN 87033078. OCLC 17202382. Popper, Karl R. (1995). "On knowledge". In Search of a Better World: Lectures and Essays from Thirty Years. New York: Routledge. Bibcode:1992sbwl.book.....P. ISBN 978-0-415-13548-1. Riehm, Carl (August 2002). "The Early History of the Fields Medal" (PDF). Notices of the AMS. 49 (7): 778–782. Archived (PDF) from the original on October 26, 2006. Retrieved October 2, 2006. Sevryuk, Mikhail B. (January 2006). "Book Reviews" (PDF). Bulletin of the American Mathematical Society. 43 (1): 101–109. doi:10.1090/S0273-0979-05-01069-4. Archived (PDF) from the original on July 23, 2006. Retrieved June 24, 2006. Whittle, Peter (1994). "Almost home". In Kelly, F.P. (ed.). Probability, statistics and optimisation: A Tribute to Peter Whittle (previously "A realised path: The Cambridge Statistical Laboratory up to 1993 (revised 2002)" ed.). Chichester: John Wiley. pp. 1–28. ISBN 978-0-471-94829-2. Archived from the original on December 19, 2013. Further reading Benson, Donald C. (1999). The Moment of Proof: Mathematical Epiphanies. Oxford University Press. ISBN 978-0-19-513919-8. Davis, Philip J.; Hersh, Reuben (1999). The Mathematical Experience (Reprint ed.). Boston; New York: Mariner Books. ISBN 978-0-395-92968-1. Available online (registration required). Courant, Richard; Robbins, Herbert (1996). What Is Mathematics?: An Elementary Approach to Ideas and Methods (2nd ed.). New York: Oxford University Press. ISBN 978-0-19-510519-3. Gullberg, Jan (1997). Mathematics: From the Birth of Numbers. W.W. Norton & Company. ISBN 978-0-393-04002-9. Hazewinkel, Michiel, ed. (2000). Encyclopaedia of Mathematics. Kluwer Academic Publishers. – A translated and expanded version of a Soviet mathematics encyclopedia, in ten volumes. Also in paperback and on CD-ROM, and online. Archived December 20, 2012, at archive.today. Hodgkin, Luke Howard (2005). A History of Mathematics: From Mesopotamia to Modernity. Oxford University Press. ISBN 978-0-19-152383-0. Jourdain, Philip E. B. (2003). "The Nature of Mathematics". In James R. Newman (ed.). The World of Mathematics. Dover Publications. ISBN 978-0-486-43268-7. Pappas, Theoni (1986). The Joy Of Mathematics. San Carlos, California: Wide World Publishing. ISBN 978-0-933174-65-8. Waltershausen, Wolfgang Sartorius von (1965) [1856]. Gauss zum Gedächtniss. Sändig Reprint Verlag H. R. Wohlwend. ISBN 978-3-253-01702-5. en.wikipedia.org Biology Contributors to Wikimedia projects 85–109 minutes Biology is the science of life. It spans multiple levels from biomolecules and cells to organisms and populations. Biology is the scientific study of life.[1][2][3] It is a natural science with a broad scope but has several unifying themes that tie it together as a single, coherent field.[1][2][3] For instance, all organisms are made up of cells that process hereditary information encoded in genes, which can be transmitted to future generations. Another major theme is evolution, which explains the unity and diversity of life.[1][2][3] Energy processing is also important to life as it allows organisms to move, grow, and reproduce.[1][2][3] Finally, all organisms are able to regulate their own internal environments.[1][2][3][4][5] Biologists are able to study life at multiple levels of organization,[1] from the molecular biology of a cell to the anatomy and physiology of plants and animals, and evolution of populations.[1][6] Hence, there are multiple subdisciplines within biology, each defined by the nature of their research questions and the tools that they use.[7][8][9] Like other scientists, biologists use the scientific method to make observations, pose questions, generate hypotheses, perform experiments, and form conclusions about the world around them.[1] Life on Earth, which emerged more than 3.7 billion years ago,[10] is immensely diverse. Biologists have sought to study and classify the various forms of life, from prokaryotic organisms such as archaea and bacteria to eukaryotic organisms such as protists, fungi, plants, and animals. These various organisms contribute to the biodiversity of an ecosystem, where they play specialized roles in the cycling of nutrients and energy through their biophysical environment. History A drawing of a fly from facing up, with wing detail Diagram of a fly from Robert Hooke's innovative Micrographia, 1665 The earliest of roots of science, which included medicine, can be traced to ancient Egypt and Mesopotamia in around 3000 to 1200 BCE.[11][12] Their contributions shaped ancient Greek natural philosophy.[11][12][13][14] Ancient Greek philosophers such as Aristotle (384–322 BCE) contributed extensively to the development of biological knowledge. He explored biological causation and the diversity of life. His successor, Theophrastus, began the scientific study of plants.[15] Scholars of the medieval Islamic world who wrote on biology included al-Jahiz (781–869), Al-Dīnawarī (828–896), who wrote on botany,[16] and Rhazes (865–925) who wrote on anatomy and physiology. Medicine was especially well studied by Islamic scholars working in Greek philosopher traditions, while natural history drew heavily on Aristotelian thought. Biology began to quickly develop with Anton van Leeuwenhoek's dramatic improvement of the microscope. It was then that scholars discovered spermatozoa, bacteria, infusoria and the diversity of microscopic life. Investigations by Jan Swammerdam led to new interest in entomology and helped to develop techniques of microscopic dissection and staining.[17] Advances in microscopy had a profound impact on biological thinking. In the early 19th century, biologists pointed to the central importance of the cell. In 1838, Schleiden and Schwann began promoting the now universal ideas that (1) the basic unit of organisms is the cell and (2) that individual cells have all the characteristics of life, although they opposed the idea that (3) all cells come from the division of other cells, continuing to support spontaneous generation. However, Robert Remak and Rudolf Virchow were able to reify the third tenet, and by the 1860s most biologists accepted all three tenets which consolidated into cell theory.[18][19] Meanwhile, taxonomy and classification became the focus of natural historians. Carl Linnaeus published a basic taxonomy for the natural world in 1735, and in the 1750s introduced scientific names for all his species.[20] Georges-Louis Leclerc, Comte de Buffon, treated species as artificial categories and living forms as malleable—even suggesting the possibility of common descent.[21] In 1842, Charles Darwin penned his first sketch of On the Origin of Species.[22] Serious evolutionary thinking originated with the works of Jean-Baptiste Lamarck, who presented a coherent theory of evolution.[23] The British naturalist Charles Darwin, combining the biogeographical approach of Humboldt, the uniformitarian geology of Lyell, Malthus's writings on population growth, and his own morphological expertise and extensive natural observations, forged a more successful evolutionary theory based on natural selection; similar reasoning and evidence led Alfred Russel Wallace to independently reach the same conclusions.[24][25] The basis for modern genetics began with the work of Gregor Mendel in 1865.[26] This outlined the principles of biological inheritance.[27] However, the significance of his work was not realized until the early 20th century when evolution became a unified theory as the modern synthesis reconciled Darwinian evolution with classical genetics.[28] In the 1940s and early 1950s, a series of experiments by Alfred Hershey and Martha Chase pointed to DNA as the component of chromosomes that held the trait-carrying units that had become known as genes. A focus on new kinds of model organisms such as viruses and bacteria, along with the discovery of the double-helical structure of DNA by James Watson and Francis Crick in 1953, marked the transition to the era of molecular genetics. From the 1950s onwards, biology has been vastly extended in the molecular domain. The genetic code was cracked by Har Gobind Khorana, Robert W. Holley and Marshall Warren Nirenberg after DNA was understood to contain codons. The Human Genome Project was launched in 1990 to map the human genome.[29] Chemical basis Atoms and molecules All organisms are made up of chemical elements;[30] oxygen, carbon, hydrogen, and nitrogen account for most (96%) of the mass of all organisms, with calcium, phosphorus, sulfur, sodium, chlorine, and magnesium constituting essentially all the remainder. Different elements can combine to form compounds such as water, which is fundamental to life.[30] Biochemistry is the study of chemical processes within and relating to living organisms. Molecular biology is the branch of biology that seeks to understand the molecular basis of biological activity in and between cells, including molecular synthesis, modification, mechanisms, and interactions. Water Model of hydrogen bonds (1) between molecules of water Life arose from the Earth's first ocean, which formed some 3.8 billion years ago.[31] Since then, water continues to be the most abundant molecule in every organism. Water is important to life because it is an effective solvent, capable of dissolving solutes such as sodium and chloride ions or other small molecules to form an aqueous solution. Once dissolved in water, these solutes are more likely to come in contact with one another and therefore take part in chemical reactions that sustain life.[31] In terms of its molecular structure, water is a small polar molecule with a bent shape formed by the polar covalent bonds of two hydrogen (H) atoms to one oxygen (O) atom (H2O).[31] Because the O–H bonds are polar, the oxygen atom has a slight negative charge and the two hydrogen atoms have a slight positive charge.[31] This polar property of water allows it to attract other water molecules via hydrogen bonds, which makes water cohesive.[31] Surface tension results from the cohesive force due to the attraction between molecules at the surface of the liquid.[31] Water is also adhesive as it is able to adhere to the surface of any polar or charged non-water molecules.[31] Water is denser as a liquid than it is as a solid (or ice).[31] This unique property of water allows ice to float above liquid water such as ponds, lakes, and oceans, thereby insulating the liquid below from the cold air above.[31] Water has the capacity to absorb energy, giving it a higher specific heat capacity than other solvents such as ethanol.[31] Thus, a large amount of energy is needed to break the hydrogen bonds between water molecules to convert liquid water into water vapor.[31] As a molecule, water is not completely stable as each water molecule continuously dissociates into hydrogen and hydroxyl ions before reforming into a water molecule again.[31] In pure water, the number of hydrogen ions balances (or equals) the number of hydroxyl ions, resulting in a pH that is neutral. Organic compounds Organic compounds such as glucose are vital to organisms. Organic compounds are molecules that contain carbon bonded to another element such as hydrogen.[31] With the exception of water, nearly all the molecules that make up each organism contain carbon.[31][32] Carbon can form covalent bonds with up to four other atoms, enabling it to form diverse, large, and complex molecules.[31][32] For example, a single carbon atom can form four single covalent bonds such as in methane, two double covalent bonds such as in carbon dioxide (CO2), or a triple covalent bond such as in carbon monoxide (CO). Moreover, carbon can form very long chains of interconnecting carbon–carbon bonds such as octane or ring-like structures such as glucose. The simplest form of an organic molecule is the hydrocarbon, which is a large family of organic compounds that are composed of hydrogen atoms bonded to a chain of carbon atoms. A hydrocarbon backbone can be substituted by other elements such as oxygen (O), hydrogen (H), phosphorus (P), and sulfur (S), which can change the chemical behavior of that compound.[31] Groups of atoms that contain these elements (O-, H-, P-, and S-) and are bonded to a central carbon atom or skeleton are called functional groups.[31] There are six prominent functional groups that can be found in organisms: amino group, carboxyl group, carbonyl group, hydroxyl group, phosphate group, and sulfhydryl group.[31] In 1953, the Miller–Urey experiment showed that organic compounds could be synthesized abiotically within a closed system mimicking the conditions of early Earth, thus suggesting that complex organic molecules could have arisen spontaneously in early Earth (see abiogenesis).[33][31] Macromolecules The (a) primary, (b) secondary, (c) tertiary, and (d) quaternary structures of a hemoglobin protein Macromolecules are large molecules made up of smaller subunits or monomers.[34] Monomers include sugars, amino acids, and nucleotides.[35] Carbohydrates include monomers and polymers of sugars.[36] Lipids are the only class of macromolecules that are not made up of polymers. They include steroids, phospholipids, and fats,[35] largely nonpolar and hydrophobic (water-repelling) substances.[37] Proteins are the most diverse of the macromolecules. They include enzymes, transport proteins, large signaling molecules, antibodies, and structural proteins. The basic unit (or monomer) of a protein is an amino acid.[34] Twenty amino acids are used in proteins.[34] Nucleic acids are polymers of nucleotides.[38] Their function is to store, transmit, and express hereditary information.[35] Cells Cell theory states that cells are the fundamental units of life, it a unity of Protoplasm made of cytoplasm and nucleus surrounded by a cell membrane.[39] that all living things are composed of one or more cells, and that all cells arise from preexisting cells through cell division.[40] Most cells are very small, with diameters ranging from 1 to 100 micrometers and are therefore only visible under a light or electron microscope.[41] There are generally two types of cells: eukaryotic cells, which contain a nucleus, and prokaryotic cells, which do not. Prokaryotes are single-celled organisms such as bacteria, whereas eukaryotes can be single-celled or multicellular. In multicellular organisms, every cell in the organism's body is derived ultimately from a single cell in a fertilized egg. Cell structure Structure of an animal cell depicting various organelles Every cell is enclosed within a cell membrane that separates its cytoplasm from the extracellular space.[42] A cell membrane consists of a lipid bilayer, including cholesterols that sit between phospholipids to maintain their fluidity at various temperatures. Cell membranes are semipermeable, allowing small molecules such as oxygen, carbon dioxide, and water to pass through while restricting the movement of larger molecules and charged particles such as ions.[43] Cell membranes also contains membrane proteins, including integral membrane proteins that go across the membrane serving as membrane transporters, and peripheral proteins that loosely attach to the outer side of the cell membrane, acting as enzymes shaping the cell.[44] Cell membranes are involved in various cellular processes such as cell adhesion, storing electrical energy, and cell signalling and serve as the attachment surface for several extracellular structures such as a cell wall, glycocalyx, and cytoskeleton. Structure of a plant cell Within the cytoplasm of a cell, there are many biomolecules such as proteins and nucleic acids.[45] In addition to biomolecules, eukaryotic cells have specialized structures called organelles that have their own lipid bilayers or are spatially units.[46] These organelles include the cell nucleus, which contains most of the cell's DNA, or mitochondria, which generates adenosine triphosphate (ATP) to power cellular processes. Other organelles such as endoplasmic reticulum and Golgi apparatus play a role in the synthesis and packaging of proteins, respectively. Biomolecules such as proteins can be engulfed by lysosomes, another specialized organelle. Plant cells have additional organelles that distinguish them from animal cells such as a cell wall that provides support for the plant cell, chloroplasts that harvest sunlight energy to produce sugar, and vacuoles that provide storage and structural support as well as being involved in reproduction and breakdown of plant seeds.[46] Eukaryotic cells also have cytoskeleton that is made up of microtubules, intermediate filaments, and microfilaments, all of which provide support for the cell and are involved in the movement of the cell and its organelles.[46] In terms of their structural composition, the microtubules are made up of tubulin (e.g., α-tubulin and β-tubulin whereas intermediate filaments are made up of fibrous proteins.[46] Microfilaments are made up of actin molecules that interact with other strands of proteins.[46] Metabolism Example of an enzyme-catalysed exothermic reaction All cells require energy to sustain cellular processes. Metabolism is the set of chemical reactions in an organism. The three main purposes of metabolism are: the conversion of food to energy to run cellular processes; the conversion of food/fuel to monomer building blocks; and the elimination of metabolic wastes. These enzyme-catalyzed reactions allow organisms to grow and reproduce, maintain their structures, and respond to their environments. Metabolic reactions may be categorized as catabolic—the breaking down of compounds (for example, the breaking down of glucose to pyruvate by cellular respiration); or anabolic—the building up (synthesis) of compounds (such as proteins, carbohydrates, lipids, and nucleic acids). Usually, catabolism releases energy, and anabolism consumes energy. The chemical reactions of metabolism are organized into metabolic pathways, in which one chemical is transformed through a series of steps into another chemical, each step being facilitated by a specific enzyme. Enzymes are crucial to metabolism because they allow organisms to drive desirable reactions that require energy that will not occur by themselves, by coupling them to spontaneous reactions that release energy. Enzymes act as catalysts—they allow a reaction to proceed more rapidly without being consumed by it—by reducing the amount of activation energy needed to convert reactants into products. Enzymes also allow the regulation of the rate of a metabolic reaction, for example in response to changes in the cell's environment or to signals from other cells. Cellular respiration Respiration in a eukaryotic cell Cellular respiration is a set of metabolic reactions and processes that take place in cells to convert chemical energy from nutrients into adenosine triphosphate (ATP), and then release waste products.[47] The reactions involved in respiration are catabolic reactions, which break large molecules into smaller ones, releasing energy. Respiration is one of the key ways a cell releases chemical energy to fuel cellular activity. The overall reaction occurs in a series of biochemical steps, some of which are redox reactions. Although cellular respiration is technically a combustion reaction, it clearly does not resemble one when it occurs in a cell because of the slow, controlled release of energy from the series of reactions. Sugar in the form of glucose is the main nutrient used by animal and plant cells in respiration. Cellular respiration involving oxygen is called aerobic respiration, which has four stages: glycolysis, citric acid cycle (or Krebs cycle), electron transport chain, and oxidative phosphorylation.[48] Glycolysis is a metabolic process that occurs in the cytoplasm whereby glucose is converted into two pyruvates, with two net molecules of ATP being produced at the same time.[48] Each pyruvate is then oxidized into acetyl-CoA by the pyruvate dehydrogenase complex, which also generates NADH and carbon dioxide. Acetyl-Coa enters the citric acid cycle, which takes places inside the mitochondrial matrix. At the end of the cycle, the total yield from 1 glucose (or 2 pyruvates) is 6 NADH, 2 FADH2, and 2 ATP molecules. Finally, the next stage is oxidative phosphorylation, which in eukaryotes, occurs in the mitochondrial cristae. Oxidative phosphorylation comprises the electron transport chain, which is a series of four protein complexes that transfer electrons from one complex to another, thereby releasing energy from NADH and FADH2 that is coupled to the pumping of protons (hydrogen ions) across the inner mitochondrial membrane (chemiosmosis), which generates a proton motive force.[48] Energy from the proton motive force drives the enzyme ATP synthase to synthesize more ATPs by phosphorylating ADPs. The transfer of electrons terminates with molecular oxygen being the final electron acceptor. If oxygen were not present, pyruvate would not be metabolized by cellular respiration but undergoes a process of fermentation. The pyruvate is not transported into the mitochondrion but remains in the cytoplasm, where it is converted to waste products that may be removed from the cell. This serves the purpose of oxidizing the electron carriers so that they can perform glycolysis again and removing the excess pyruvate. Fermentation oxidizes NADH to NAD+ so it can be re-used in glycolysis. In the absence of oxygen, fermentation prevents the buildup of NADH in the cytoplasm and provides NAD+ for glycolysis. This waste product varies depending on the organism. In skeletal muscles, the waste product is lactic acid. This type of fermentation is called lactic acid fermentation. In strenuous exercise, when energy demands exceed energy supply, the respiratory chain cannot process all of the hydrogen atoms joined by NADH. During anaerobic glycolysis, NAD+ regenerates when pairs of hydrogen combine with pyruvate to form lactate. Lactate formation is catalyzed by lactate dehydrogenase in a reversible reaction. Lactate can also be used as an indirect precursor for liver glycogen. During recovery, when oxygen becomes available, NAD+ attaches to hydrogen from lactate to form ATP. In yeast, the waste products are ethanol and carbon dioxide. This type of fermentation is known as alcoholic or ethanol fermentation. The ATP generated in this process is made by substrate-level phosphorylation, which does not require oxygen. Photosynthesis Photosynthesis changes sunlight into chemical energy, splits water to liberate O2, and fixes CO2 into sugar. Photosynthesis is a process used by plants and other organisms to convert light energy into chemical energy that can later be released to fuel the organism's metabolic activities via cellular respiration. This chemical energy is stored in carbohydrate molecules, such as sugars, which are synthesized from carbon dioxide and water.[49][50][51] In most cases, oxygen is released as a waste product. Most plants, algae, and cyanobacteria perform photosynthesis, which is largely responsible for producing and maintaining the oxygen content of the Earth's atmosphere, and supplies most of the energy necessary for life on Earth.[52] Photosynthesis has four stages: Light absorption, electron transport, ATP synthesis, and carbon fixation.[48] Light absorption is the initial step of photosynthesis whereby light energy is absorbed by chlorophyll pigments attached to proteins in the thylakoid membranes. The absorbed light energy is used to remove electrons from a donor (water) to a primary electron acceptor, a quinone designated as Q. In the second stage, electrons move from the quinone primary electron acceptor through a series of electron carriers until they reach a final electron acceptor, which is usually the oxidized form of NADP+, which is reduced to NADPH, a process that takes place in a protein complex called photosystem I (PSI). The transport of electrons is coupled to the movement of protons (or hydrogen) from the stroma to the thylakoid membrane, which forms a pH gradient across the membrane as hydrogen becomes more concentrated in the lumen than in the stroma. This is analogous to the proton-motive force generated across the inner mitochondrial membrane in aerobic respiration.[48] During the third stage of photosynthesis, the movement of protons down their concentration gradients from the thylakoid lumen to the stroma through the ATP synthase is coupled to the synthesis of ATP by that same ATP synthase.[48] The NADPH and ATPs generated by the light-dependent reactions in the second and third stages, respectively, provide the energy and electrons to drive the synthesis of glucose by fixing atmospheric carbon dioxide into existing organic carbon compounds, such as ribulose bisphosphate (RuBP) in a sequence of light-independent (or dark) reactions called the Calvin cycle.[53] Cell signaling Cell signaling (or communication) is the ability of cells to receive, process, and transmit signals with its environment and with itself.[54][55] Signals can be non-chemical such as light, electrical impulses, and heat, or chemical signals (or ligands) that interact with receptors, which can be found embedded in the cell membrane of another cell or located deep inside a cell.[56][55] There are generally four types of chemical signals: autocrine, paracrine, juxtacrine, and hormones.[56] In autocrine signaling, the ligand affects the same cell that releases it. Tumor cells, for example, can reproduce uncontrollably because they release signals that initiate their own self-division. In paracrine signaling, the ligand diffuses to nearby cells and affects them. For example, brain cells called neurons release ligands called neurotransmitters that diffuse across a synaptic cleft to bind with a receptor on an adjacent cell such as another neuron or muscle cell. In juxtacrine signaling, there is direct contact between the signaling and responding cells. Finally, hormones are ligands that travel through the circulatory systems of animals or vascular systems of plants to reach their target cells. Once a ligand binds with a receptor, it can influence the behavior of another cell, depending on the type of receptor. For instance, neurotransmitters that bind with an inotropic receptor can alter the excitability of a target cell. Other types of receptors include protein kinase receptors (e.g., receptor for the hormone insulin) and G protein-coupled receptors. Activation of G protein-coupled receptors can initiate second messenger cascades. The process by which a chemical or physical signal is transmitted through a cell as a series of molecular events is called signal transduction Cell cycle In meiosis, the chromosomes duplicate and the homologous chromosomes exchange genetic information during meiosis I. The daughter cells divide again in meiosis II to form haploid gametes. The cell cycle is a series of events that take place in a cell that cause it to divide into two daughter cells. These events include the duplication of its DNA and some of its organelles, and the subsequent partitioning of its cytoplasm into two daughter cells in a process called cell division.[57] In eukaryotes (i.e., animal, plant, fungal, and protist cells), there are two distinct types of cell division: mitosis and meiosis.[58] Mitosis is part of the cell cycle, in which replicated chromosomes are separated into two new nuclei. Cell division gives rise to genetically identical cells in which the total number of chromosomes is maintained. In general, mitosis (division of the nucleus) is preceded by the S stage of interphase (during which the DNA is replicated) and is often followed by telophase and cytokinesis; which divides the cytoplasm, organelles and cell membrane of one cell into two new cells containing roughly equal shares of these cellular components. The different stages of mitosis all together define the mitotic phase of an animal cell cycle—the division of the mother cell into two genetically identical daughter cells.[59] The cell cycle is a vital process by which a single-celled fertilized egg develops into a mature organism, as well as the process by which hair, skin, blood cells, and some internal organs are renewed. After cell division, each of the daughter cells begin the interphase of a new cycle. In contrast to mitosis, meiosis results in four haploid daughter cells by undergoing one round of DNA replication followed by two divisions.[60] Homologous chromosomes are separated in the first division (meiosis I), and sister chromatids are separated in the second division (meiosis II). Both of these cell division cycles are used in the process of sexual reproduction at some point in their life cycle. Both are believed to be present in the last eukaryotic common ancestor. Prokaryotes (i.e., archaea and bacteria) can also undergo cell division (or binary fission). Unlike the processes of mitosis and meiosis in eukaryotes, binary fission takes in prokaryotes takes place without the formation of a spindle apparatus on the cell. Before binary fission, DNA in the bacterium is tightly coiled. After it has uncoiled and duplicated, it is pulled to the separate poles of the bacterium as it increases the size to prepare for splitting. Growth of a new cell wall begins to separate the bacterium (triggered by FtsZ polymerization and "Z-ring" formation)[61] The new cell wall (septum) fully develops, resulting in the complete split of the bacterium. The new daughter cells have tightly coiled DNA rods, ribosomes, and plasmids. Sexual reproduction and meiosis Meiosis is a central feature of sexual reproduction in eukaryotes, and the most fundamental function of meiosis appears to be conservation of the integrity of the genome that is passed on to progeny by parents.[62][63] Two aspects of sexual reproduction, meiotic recombination and outcrossing, are likely maintained respectively by the adaptive advantages of recombinational repair of genomic DNA damage and genetic complementation which masks the expression of deleterious recessive mutations.[64] The beneficial effect of genetic complementation, derived from outcrossing (cross-fertilization) is also referred to as hybrid vigor or heterosis. Charles Darwin in his 1878 book The Effects of Cross and Self-Fertilization in the Vegetable Kingdom[65] at the start of chapter XII noted “The first and most important of the conclusions which may be drawn from the observations given in this volume, is that generally cross-fertilisation is beneficial and self-fertilisation often injurious, at least with the plants on which I experimented.” Genetic variation, often produced as a byproduct of sexual reproduction, may provide long-term advantages to those sexual lineages that engage in outcrossing.[64] Genetics Inheritance Punnett square depicting a cross between two pea plants heterozygous for purple (B) and white (b) blossoms Genetics is the scientific study of inheritance.[66][67][68] Mendelian inheritance, specifically, is the process by which genes and traits are passed on from parents to offspring.[27] It has several principles. The first is that genetic characteristics, alleles, are discrete and have alternate forms (e.g., purple vs. white or tall vs. dwarf), each inherited from one of two parents. Based on the law of dominance and uniformity, which states that some alleles are dominant while others are recessive; an organism with at least one dominant allele will display the phenotype of that dominant allele. During gamete formation, the alleles for each gene segregate, so that each gamete carries only one allele for each gene. Heterozygotic individuals produce gametes with an equal frequency of two alleles. Finally, the law of independent assortment, states that genes of different traits can segregate independently during the formation of gametes, i.e., genes are unlinked. An exception to this rule would include traits that are sex-linked. Test crosses can be performed to experimentally determine the underlying genotype of an organism with a dominant phenotype.[69] A Punnett square can be used to predict the results of a test cross. The chromosome theory of inheritance, which states that genes are found on chromosomes, was supported by Thomas Morgans's experiments with fruit flies, which established the sex linkage between eye color and sex in these insects.[70] Genes and DNA Further information: Gene and DNA Bases lie between two spiraling DNA strands. A gene is a unit of heredity that corresponds to a region of deoxyribonucleic acid (DNA) that carries genetic information that controls form or function of an organism. DNA is composed of two polynucleotide chains that coil around each other to form a double helix.[71] It is found as linear chromosomes in eukaryotes, and circular chromosomes in prokaryotes. The set of chromosomes in a cell is collectively known as its genome. In eukaryotes, DNA is mainly in the cell nucleus.[72] In prokaryotes, the DNA is held within the nucleoid.[73] The genetic information is held within genes, and the complete assemblage in an organism is called its genotype.[74] DNA replication is a semiconservative process whereby each strand serves as a template for a new strand of DNA.[71] Mutations are heritable changes in DNA.[71] They can arise spontaneously as a result of replication errors that were not corrected by proofreading or can be induced by an environmental mutagen such as a chemical (e.g., nitrous acid, benzopyrene) or radiation (e.g., x-ray, gamma ray, ultraviolet radiation, particles emitted by unstable isotopes).[71] Mutations can lead to phenotypic effects such as loss-of-function, gain-of-function, and conditional mutations.[71] Some mutations are beneficial, as they are a source of genetic variation for evolution.[71] Others are harmful if they were to result in a loss of function of genes needed for survival.[71] Gene expression The extended central dogma of molecular biology includes all the processes involved in the flow of genetic information. Gene expression is the molecular process by which a genotype encoded in DNA gives rise to an observable phenotype in the proteins of an organism's body. This process is summarized by the central dogma of molecular biology, which was formulated by Francis Crick in 1958.[75][76][77] According to the Central Dogma, genetic information flows from DNA to RNA to protein. There are two gene expression processes: transcription (DNA to RNA) and translation (RNA to protein).[78] Gene regulation The regulation of gene expression by environmental factors and during different stages of development can occur at each step of the process such as transcription, RNA splicing, translation, and post-translational modification of a protein.[79] Gene expression can be influenced by positive or negative regulation, depending on which of the two types of regulatory proteins called transcription factors bind to the DNA sequence close to or at a promoter.[79] A cluster of genes that share the same promoter is called an operon, found mainly in prokaryotes and some lower eukaryotes (e.g., Caenorhabditis elegans).[79][80] In positive regulation of gene expression, the activator is the transcription factor that stimulates transcription when it binds to the sequence near or at the promoter. Negative regulation occurs when another transcription factor called a repressor binds to a DNA sequence called an operator, which is part of an operon, to prevent transcription. Repressors can be inhibited by compounds called inducers (e.g., allolactose), thereby allowing transcription to occur.[79] Specific genes that can be activated by inducers are called inducible genes, in contrast to constitutive genes that are almost constantly active.[79] In contrast to both, structural genes encode proteins that are not involved in gene regulation.[79] In addition to regulatory events involving the promoter, gene expression can also be regulated by epigenetic changes to chromatin, which is a complex of DNA and protein found in eukaryotic cells.[79] Genes, development, and evolution Development is the process by which a multicellular organism (plant or animal) goes through a series of changes, starting from a single cell, and taking on various forms that are characteristic of its life cycle.[81] There are four key processes that underlie development: Determination, differentiation, morphogenesis, and growth. Determination sets the developmental fate of a cell, which becomes more restrictive during development. Differentiation is the process by which specialized cells from less specialized cells such as stem cells.[82][83] Stem cells are undifferentiated or partially differentiated cells that can differentiate into various types of cells and proliferate indefinitely to produce more of the same stem cell.[84] Cellular differentiation dramatically changes a cell's size, shape, membrane potential, metabolic activity, and responsiveness to signals, which are largely due to highly controlled modifications in gene expression and epigenetics. With a few exceptions, cellular differentiation almost never involves a change in the DNA sequence itself.[85] Thus, different cells can have very different physical characteristics despite having the same genome. Morphogenesis, or the development of body form, is the result of spatial differences in gene expression.[81] A small fraction of the genes in an organism's genome called the developmental-genetic toolkit control the development of that organism. These toolkit genes are highly conserved among phyla, meaning that they are ancient and very similar in widely separated groups of animals. Differences in deployment of toolkit genes affect the body plan and the number, identity, and pattern of body parts. Among the most important toolkit genes are the Hox genes. Hox genes determine where repeating parts, such as the many vertebrae of snakes, will grow in a developing embryo or larva.[86] Evolution Evolutionary processes Natural selection for darker traits Evolution is a central organizing concept in biology. It is the change in heritable characteristics of populations over successive generations.[87][88] In artificial selection, animals were selectively bred for specific traits. [89] Given that traits are inherited, populations contain a varied mix of traits, and reproduction is able to increase any population, Darwin argued that in the natural world, it was nature that played the role of humans in selecting for specific traits.[89] Darwin inferred that individuals who possessed heritable traits better adapted to their environments are more likely to survive and produce more offspring than other individuals.[89] He further inferred that this would lead to the accumulation of favorable traits over successive generations, thereby increasing the match between the organisms and their environment.[90][91][92][89][93] Speciation A species is a group of organisms that mate with one another and speciation is the process by which one lineage splits into two lineages as a result of having evolved independently from each other.[94] For speciation to occur, there has to be reproductive isolation.[94] Reproductive isolation can result from incompatibilities between genes as described by Bateson–Dobzhansky–Muller model. Reproductive isolation also tends to increase with genetic divergence. Speciation can occur when there are physical barriers that divide an ancestral species, a process known as allopatric speciation.[94] Phylogeny Phylogenetic tree showing the domains of bacteria, archaea, and eukaryotes A phylogeny is an evolutionary history of a specific group of organisms or their genes.[95] It can be represented using a phylogenetic tree, a diagram showing lines of descent among organisms or their genes. Each line drawn on the time axis of a tree represents a lineage of descendants of a particular species or population. When a lineage divides into two, it is represented as a fork or split on the phylogenetic tree.[95] Phylogenetic trees are the basis for comparing and grouping different species.[95] Different species that share a feature inherited from a common ancestor are described as having homologous features (or synapomorphy).[96][97][95] Phylogeny provides the basis of biological classification.[95] This classification system is rank-based, with the highest rank being the domain followed by kingdom, phylum, class, order, family, genus, and species.[95] All organisms can be classified as belonging to one of three domains: Archaea (originally Archaebacteria); bacteria (originally eubacteria), or eukarya (includes the protist, fungi, plant, and animal kingdoms).[98] History of life The history of life on Earth traces how organisms have evolved from the earliest emergence of life to present day. Earth formed about 4.5 billion years ago and all life on Earth, both living and extinct, descended from a last universal common ancestor that lived about 3.5 billion years ago.[99][100] Geologists have developed a geologic time scale that divides the history of the Earth into major divisions, starting with four eons (Hadean, Archean, Proterozoic, and Phanerozoic), the first three of which are collectively known as the Precambrian, which lasted approximately 4 billion years.[101] Each eon can be divided into eras, with the Phanerozoic eon that began 539 million years ago[102] being subdivided into Paleozoic, Mesozoic, and Cenozoic eras.[101] These three eras together comprise eleven periods (Cambrian, Ordovician, Silurian, Devonian, Carboniferous, Permian, Triassic, Jurassic, Cretaceous, Tertiary, and Quaternary).[101] The similarities among all known present-day species indicate that they have diverged through the process of evolution from their common ancestor.[103] Biologists regard the ubiquity of the genetic code as evidence of universal common descent for all bacteria, archaea, and eukaryotes.[104][10][105][106] Microbial mats of coexisting bacteria and archaea were the dominant form of life in the early Archean epoch and many of the major steps in early evolution are thought to have taken place in this environment.[107] The earliest evidence of eukaryotes dates from 1.85 billion years ago,[108][109] and while they may have been present earlier, their diversification accelerated when they started using oxygen in their metabolism. Later, around 1.7 billion years ago, multicellular organisms began to appear, with differentiated cells performing specialised functions.[110] Algae-like multicellular land plants are dated back even to about 1 billion years ago,[111] although evidence suggests that microorganisms formed the earliest terrestrial ecosystems, at least 2.7 billion years ago.[112] Microorganisms are thought to have paved the way for the inception of land plants in the Ordovician period. Land plants were so successful that they are thought to have contributed to the Late Devonian extinction event.[113] Ediacara biota appear during the Ediacaran period,[114] while vertebrates, along with most other modern phyla originated about 525 million years ago during the Cambrian explosion.[115] During the Permian period, synapsids, including the ancestors of mammals, dominated the land,[116] but most of this group became extinct in the Permian–Triassic extinction event 252 million years ago.[117] During the recovery from this catastrophe, archosaurs became the most abundant land vertebrates;[118] one archosaur group, the dinosaurs, dominated the Jurassic and Cretaceous periods.[119] After the Cretaceous–Paleogene extinction event 66 million years ago killed off the non-avian dinosaurs,[120] mammals increased rapidly in size and diversity.[121] Such mass extinctions may have accelerated evolution by providing opportunities for new groups of organisms to diversify.[122] Diversity Bacteria and Archaea Bacteria – Gemmatimonas aurantiaca (-=1 Micrometer) Bacteria are a type of cell that constitute a large domain of prokaryotic microorganisms. Typically a few micrometers in length, bacteria have a number of shapes, ranging from spheres to rods and spirals. Bacteria were among the first life forms to appear on Earth, and are present in most of its habitats. Bacteria inhabit soil, water, acidic hot springs, radioactive waste,[123] and the deep biosphere of the Earth's crust. Bacteria also live in symbiotic and parasitic relationships with plants and animals. Most bacteria have not been characterised, and only about 27 percent of the bacterial phyla have species that can be grown in the laboratory.[124] Archaea – Halobacteria Archaea constitute the other domain of prokaryotic cells and were initially classified as bacteria, receiving the name archaebacteria (in the Archaebacteria kingdom), a term that has fallen out of use.[125] Archaeal cells have unique properties separating them from the other two domains, Bacteria and Eukaryota. Archaea are further divided into multiple recognized phyla. Archaea and bacteria are generally similar in size and shape, although a few archaea have very different shapes, such as the flat and square cells of Haloquadratum walsbyi.[126] Despite this morphological similarity to bacteria, archaea possess genes and several metabolic pathways that are more closely related to those of eukaryotes, notably for the enzymes involved in transcription and translation. Other aspects of archaeal biochemistry are unique, such as their reliance on ether lipids in their cell membranes,[127] including archaeols. Archaea use more energy sources than eukaryotes: these range from organic compounds, such as sugars, to ammonia, metal ions or even hydrogen gas. Salt-tolerant archaea (the Haloarchaea) use sunlight as an energy source, and other species of archaea fix carbon, but unlike plants and cyanobacteria, no known species of archaea does both. Archaea reproduce asexually by binary fission, fragmentation, or budding; unlike bacteria, no known species of Archaea form endospores. The first observed archaea were extremophiles, living in extreme environments, such as hot springs and salt lakes with no other organisms. Improved molecular detection tools led to the discovery of archaea in almost every habitat, including soil, oceans, and marshlands. Archaea are particularly numerous in the oceans, and the archaea in plankton may be one of the most abundant groups of organisms on the planet. Archaea are a major part of Earth's life. They are part of the microbiota of all organisms. In the human microbiome, they are important in the gut, mouth, and on the skin.[128] Their morphological, metabolic, and geographical diversity permits them to play multiple ecological roles: carbon fixation; nitrogen cycling; organic compound turnover; and maintaining microbial symbiotic and syntrophic communities, for example.[129] Eukaryotes Euglena, a single-celled eukaryote that can both move and photosynthesize Eukaryotes are hypothesized to have split from archaea, which was followed by their endosymbioses with bacteria (or symbiogenesis) that gave rise to mitochondria and chloroplasts, both of which are now part of modern-day eukaryotic cells.[130] The major lineages of eukaryotes diversified in the Precambrian about 1.5 billion years ago and can be classified into eight major clades: alveolates, excavates, stramenopiles, plants, rhizarians, amoebozoans, fungi, and animals.[130] Five of these clades are collectively known as protists, which are mostly microscopic eukaryotic organisms that are not plants, fungi, or animals.[130] While it is likely that protists share a common ancestor (the last eukaryotic common ancestor),[131] protists by themselves do not constitute a separate clade as some protists may be more closely related to plants, fungi, or animals than they are to other protists. Like groupings such as algae, invertebrates, or protozoans, the protist grouping is not a formal taxonomic group but is used for convenience.[130][132] Most protists are unicellular; these are called microbial eukaryotes.[130] Plants are mainly multicellular organisms, predominantly photosynthetic eukaryotes of the kingdom Plantae, which would exclude fungi and some algae. Plant cells were derived by endosymbiosis of a cyanobacterium into an early eukaryote about one billion years ago, which gave rise to chloroplasts.[133] The first several clades that emerged following primary endosymbiosis were aquatic and most of the aquatic photosynthetic eukaryotic organisms are collectively described as algae, which is a term of convenience as not all algae are closely related.[133] Algae comprise several distinct clades such as glaucophytes, which are microscopic freshwater algae that may have resembled in form to the early unicellular ancestor of Plantae.[133] Unlike glaucophytes, the other algal clades such as red and green algae are multicellular. Green algae comprise three major clades: chlorophytes, coleochaetophytes, and stoneworts.[133] Fungi are eukaryotes that digest foods outside their bodies,[134] secreting digestive enzymes that break down large food molecules before absorbing them through their cell membranes. Many fungi are also saprobes, feeding on dead organic matter, making them important decomposers in ecological systems.[134] Animals are multicellular eukaryotes. With few exceptions, animals consume organic material, breathe oxygen, are able to move, can reproduce sexually, and grow from a hollow sphere of cells, the blastula, during embryonic development. Over 1.5 million living animal species have been described—of which around 1 million are insects—but it has been estimated there are over 7 million animal species in total. They have complex interactions with each other and their environments, forming intricate food webs.[135] Viruses Bacteriophages attached to a bacterial cell wall Viruses are submicroscopic infectious agents that replicate inside the cells of organisms.[136] Viruses infect all types of life forms, from animals and plants to microorganisms, including bacteria and archaea.[137][138] More than 6,000 virus species have been described in detail.[139] Viruses are found in almost every ecosystem on Earth and are the most numerous type of biological entity.[140][141] The origins of viruses in the evolutionary history of life are unclear: some may have evolved from plasmids—pieces of DNA that can move between cells—while others may have evolved from bacteria. In evolution, viruses are an important means of horizontal gene transfer, which increases genetic diversity in a way analogous to sexual reproduction.[142] Because viruses possess some but not all characteristics of life, they have been described as "organisms at the edge of life",[143] and as self-replicators.[144] Ecology Ecology is the study of the distribution and abundance of life, the interaction between organisms and their environment.[145] Ecosystems The community of living (biotic) organisms in conjunction with the nonliving (abiotic) components (e.g., water, light, radiation, temperature, humidity, atmosphere, acidity, and soil) of their environment is called an ecosystem.[146][147][148] These biotic and abiotic components are linked together through nutrient cycles and energy flows.[149] Energy from the sun enters the system through photosynthesis and is incorporated into plant tissue. By feeding on plants and on one another, animals move matter and energy through the system. They also influence the quantity of plant and microbial biomass present. By breaking down dead organic matter, decomposers release carbon back to the atmosphere and facilitate nutrient cycling by converting nutrients stored in dead biomass back to a form that can be readily used by plants and other microbes.[150] Populations Reaching carrying capacity through a logistic growth curve A population is the group of organisms of the same species that occupies an area and reproduce from generation to generation.[151][152][153][154][155] Population size can be estimated by multiplying population density by the area or volume. The carrying capacity of an environment is the maximum population size of a species that can be sustained by that specific environment, given the food, habitat, water, and other resources that are available.[156] The carrying capacity of a population can be affected by changing environmental conditions such as changes in the availability resources and the cost of maintaining them. In human populations, new technologies such as the Green revolution have helped increase the Earth's carrying capacity for humans over time, which has stymied the attempted predictions of impending population decline, the most famous of which was by Thomas Malthus in the 18th century.[151] Communities A (a) trophic pyramid and a (b) simplified food web. The trophic pyramid represents the biomass at each level.[157] A community is a group of populations of species occupying the same geographical area at the same time. A biological interaction is the effect that a pair of organisms living together in a community have on each other. They can be either of the same species (intraspecific interactions), or of different species (interspecific interactions). These effects may be short-term, like pollination and predation, or long-term; both often strongly influence the evolution of the species involved. A long-term interaction is called a symbiosis. Symbioses range from mutualism, beneficial to both partners, to competition, harmful to both partners.[158] Every species participates as a consumer, resource, or both in consumer–resource interactions, which form the core of food chains or food webs.[159] There are different trophic levels within any food web, with the lowest level being the primary producers (or autotrophs) such as plants and algae that convert energy and inorganic material into organic compounds, which can then be used by the rest of the community.[52][160][161] At the next level are the heterotrophs, which are the species that obtain energy by breaking apart organic compounds from other organisms.[159] Heterotrophs that consume plants are primary consumers (or herbivores) whereas heterotrophs that consume herbivores are secondary consumers (or carnivores). And those that eat secondary consumers are tertiary consumers and so on. Omnivorous heterotrophs are able to consume at multiple levels. Finally, there are decomposers that feed on the waste products or dead bodies of organisms.[159] On average, the total amount of energy incorporated into the biomass of a trophic level per unit of time is about one-tenth of the energy of the trophic level that it consumes. Waste and dead material used by decomposers as well as heat lost from metabolism make up the other ninety percent of energy that is not consumed by the next trophic level.[162] Biosphere Fast carbon cycle showing the movement of carbon between land, atmosphere, and oceans in billions of tons per year. Yellow numbers are natural fluxes, red are human contributions, white are stored carbon. Effects of the slow carbon cycle, such as volcanic and tectonic activity, are not included.[163] In the global ecosystem or biosphere, matter exists as different interacting compartments, which can be biotic or abiotic as well as accessible or inaccessible, depending on their forms and locations.[164] For example, matter from terrestrial autotrophs are both biotic and accessible to other organisms whereas the matter in rocks and minerals are abiotic and inaccessible. A biogeochemical cycle is a pathway by which specific elements of matter are turned over or moved through the biotic (biosphere) and the abiotic (lithosphere, atmosphere, and hydrosphere) compartments of Earth. There are biogeochemical cycles for nitrogen, carbon, and water. Conservation Conservation biology is the study of the conservation of Earth's biodiversity with the aim of protecting species, their habitats, and ecosystems from excessive rates of extinction and the erosion of biotic interactions.[165][166][167] It is concerned with factors that influence the maintenance, loss, and restoration of biodiversity and the science of sustaining evolutionary processes that engender genetic, population, species, and ecosystem diversity.[168][169][170][171] The concern stems from estimates suggesting that up to 50% of all species on the planet will disappear within the next 50 years,[172] which has contributed to poverty, starvation, and will reset the course of evolution on this planet.[173][174] Biodiversity affects the functioning of ecosystems, which provide a variety of services upon which people depend. Conservation biologists research and educate on the trends of biodiversity loss, species extinctions, and the negative effect these are having on our capabilities to sustain the well-being of human society. Organizations and citizens are responding to the current biodiversity crisis through conservation action plans that direct research, monitoring, and education programs that engage concerns at local through global scales.[175][168][169][170] See also Biology in fiction Glossary of biology List of biological websites List of biologists List of biology journals List of biology topics List of life sciences List of omics topics in biology National Association of Biology Teachers Outline of biology Periodic table of life sciences in Tinbergen's four questions Science tourism Terminology of biology References ^ Jump up to: a b c d e f g h Urry, Lisa; Cain, Michael; Wasserman, Steven; Minorsky, Peter; Reece, Jane (2017). "Evolution, the themes of biology, and scientific inquiry". Campbell Biology (11th ed.). New York: Pearson. pp. 2–26. ISBN 978-0134093413. ^ Jump up to: a b c d e Hillis, David M.; Heller, H. Craig; Hacker, Sally D.; Laskowski, Marta J.; Sadava, David E. (2020). "Studying life". Life: The Science of Biology (12th ed.). W. H. Freeman. ISBN 978-1319017644. ^ Jump up to: a b c d e Freeman, Scott; Quillin, Kim; Allison, Lizabeth; Black, Michael; Podgorski, Greg; Taylor, Emily; Carmichael, Jeff (2017). "Biology and the three of life". Biological Science (6th ed.). Hoboken, N.J.: Pearson. pp. 1–18. ISBN 978-0321976499. ^ Modell, Harold; Cliff, William; Michael, Joel; McFarland, Jenny; Wenderoth, Mary Pat; Wright, Ann (December 2015). "A physiologist's view of homeostasis". Advances in Physiology Education. 39 (4): 259–266. doi:10.1152/advan.00107.2015. PMC 4669363. PMID 26628646. ^ Davies, PC; Rieper, E; Tuszynski, JA (January 2013). "Self-organization and entropy reduction in a living cell". Bio Systems. 111 (1): 1–10. Bibcode:2013BiSys.111....1D. doi:10.1016/j.biosystems.2012.10.005. PMC 3712629. PMID 23159919. ^ Based on definition from: "Aquarena Wetlands Project glossary of terms". Texas State University at San Marcos. Archived from the original on 2004-06-08. ^ Craig, Nancy (2014). Molecular Biology, Principles of Genome Function. OUP Oxford. ISBN 978-0-19-965857-2. ^ Mosconi, Francesco; Julou, Thomas; Desprat, Nicolas; Sinha, Deepak Kumar; Allemand, Jean-François; Vincent Croquette; Bensimon, David (2008). "Some nonlinear challenges in biology". Nonlinearity. 21 (8): T131. Bibcode:2008Nonli..21..131M. doi:10.1088/0951-7715/21/8/T03. S2CID 119808230. ^ Howell, Elizabeth (8 December 2014). "How Did Life Become Complex, And Could It Happen Beyond Earth?". Astrobiology Magazine. Archived from the original on 17 August 2018. Retrieved 14 February 2018.{{cite web}}: CS1 maint: unfit URL (link) ^ Jump up to: a b Pearce, Ben K.D.; Tupper, Andrew S.; Pudritz, Ralph E.; et al. (March 1, 2018). "Constraining the Time Interval for the Origin of Life on Earth". Astrobiology. 18 (3): 343–364. arXiv:1808.09460. Bibcode:2018AsBio..18..343P. doi:10.1089/ast.2017.1674. PMID 29570409. S2CID 4419671. ^ Jump up to: a b Lindberg, David C. (2007). "Science before the Greeks". The beginnings of Western science: the European Scientific tradition in philosophical, religious, and institutional context (2nd ed.). Chicago, Illinois: University of Chicago Press. pp. 1–20. ISBN 978-0-226-48205-7. ^ Jump up to: a b Grant, Edward (2007). "Ancient Egypt to Plato". A History of Natural Philosophy: From the Ancient World to the Nineteenth Century. New York: Cambridge University Press. pp. 1–26. ISBN 978-052-1-68957-1. ^ Magner, Lois N. (2002). A History of the Life Sciences, Revised and Expanded. CRC Press. ISBN 978-0-203-91100-6. Archived from the original on 2015-03-24. ^ Serafini, Anthony (2013). The Epic History of Biology. Springer. ISBN 978-1-4899-6327-7. Archived from the original on 15 April 2021. Retrieved 14 July 2015. ^ One or more of the preceding sentences incorporates text from a publication now in the public domain: Chisholm, Hugh, ed. (1911). "Theophrastus". Encyclopædia Britannica (11th ed.). Cambridge University Press. ^ Fahd, Toufic (1996). "Botany and agriculture". In Morelon, Régis; Rashed, Roshdi (eds.). Encyclopedia of the History of Arabic Science. Vol. 3. Routledge. p. 815. ISBN 978-0-415-12410-2. ^ Magner, Lois N. (2002). A History of the Life Sciences, Revised and Expanded. CRC Press. pp. 133–44. ISBN 978-0-203-91100-6. Archived from the original on 2015-03-24. ^ Sapp, Jan (2003). "7". Genesis: The Evolution of Biology. New York: Oxford University Press. ISBN 978-0-19-515618-8. ^ Coleman, William (1977). Biology in the Nineteenth Century: Problems of Form, Function, and Transformation. New York: Cambridge University Press. ISBN 978-0-521-29293-1. ^ Mayr, Ernst. The Growth of Biological Thought, chapter 4 ^ Mayr, Ernst. The Growth of Biological Thought, chapter 7 ^ * Darwin, Francis, ed. (1909). The foundations of The origin of species, a sketch written in 1842 (PDF). Cambridge: Printed at the University Press. p. 53. LCCN 61057537. OCLC 1184581. Archived (PDF) from the original on 4 March 2016. Retrieved 27 November 2014. ^ Gould, Stephen Jay. The Structure of Evolutionary Theory. The Belknap Press of Harvard University Press: Cambridge, 2002. ISBN 0-674-00613-5. p. 187. ^ Mayr, Ernst. The Growth of Biological Thought, chapter 10: "Darwin's evidence for evolution and common descent"; and chapter 11: "The causation of evolution: natural selection" ^ Larson, Edward J. (2006). "Ch. 3". Evolution: The Remarkable History of a Scientific Theory. Random House Publishing Group. ISBN 978-1-58836-538-5. Archived from the original on 2015-03-24. ^ Henig (2000). Op. cit. pp. 134–138. ^ Jump up to: a b Miko, Ilona (2008). "Gregor Mendel's principles of inheritance form the cornerstone of modern genetics. So just what are they?". Nature Education. 1 (1): 134. Archived from the original on 2019-07-19. Retrieved 2021-05-13. ^ Futuyma, Douglas J.; Kirkpatrick, Mark (2017). "Evolutionary Biology". Evolution (4th ed.). Sunderland, Mass.: Sinauer Associates. pp. 3–26. ^ Noble, Ivan (2003-04-14). "Human genome finally complete". BBC News. Archived from the original on 2006-06-14. Retrieved 2006-07-22. ^ Jump up to: a b Urry, Lisa; Cain, Michael; Wasserman, Steven; Minorsky, Peter; Reece, Jane (2017). "The chemical context of life". Campbell Biology (11th ed.). New York: Pearson. pp. 28–43. ISBN 978-0134093413. ^ Jump up to: a b c d e f g h i j k l m n o p q r s Freeman, Scott; Quillin, Kim; Allison, Lizabeth; Black, Michael; Podgorski, Greg; Taylor, Emily; Carmichael, Jeff (2017). "Water and carbon: The chemical basis of life". Biological Science (6th ed.). Hoboken, N.J.: Pearson. pp. 55–77. ISBN 978-0321976499. ^ Jump up to: a b Urry, Lisa; Cain, Michael; Wasserman, Steven; Minorsky, Peter; Reece, Jane (2017). "Carbon and the molecular diversity of life". Campbell Biology (11th ed.). New York: Pearson. pp. 56–65. ISBN 978-0134093413. ^ Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Carbon and molecular diversity of life". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 56–65. ISBN 978-1464175121. ^ Jump up to: a b c Freeman, Scott; Quillin, Kim; Allison, Lizabeth; Black, Michael; Podgorski, Greg; Taylor, Emily; Carmichael, Jeff (2017). "Protein structure and function". Biological Science (6th ed.). Hoboken, N.J.: Pearson. pp. 78–92. ISBN 978-0321976499. ^ Jump up to: a b c Urry, Lisa; Cain, Michael; Wasserman, Steven; Minorsky, Peter; Reece, Jane (2017). "The structure and function of large biological molecules". Campbell Biology (11th ed.). New York: Pearson. pp. 66–92. ISBN 978-0134093413. ^ Freeman, Scott; Quillin, Kim; Allison, Lizabeth; Black, Michael; Podgorski, Greg; Taylor, Emily; Carmichael, Jeff (2017). "An introduction to carbohydrate". Biological Science (6th ed.). Hoboken, N.J.: Pearson. pp. 107–118. ISBN 978-0321976499. ^ Freeman, Scott; Quillin, Kim; Allison, Lizabeth; Black, Michael; Podgorski, Greg; Taylor, Emily; Carmichael, Jeff (2017). "Lipids, membranes, and the first cells". Biological Science (6th ed.). Hoboken, N.J.: Pearson. pp. 119–141. ISBN 978-0321976499. ^ Freeman, Scott; Quillin, Kim; Allison, Lizabeth; Black, Michael; Podgorski, Greg; Taylor, Emily; Carmichael, Jeff (2017). "Nucleic acids and the RNA world". Biological Science (6th ed.). Hoboken, N.J.: Pearson. pp. 93–106. ISBN 978-0321976499. ^ Mitchelmore, June (1990). Basic Illustrated Biology in the Tropics and Subtropics. London and Basingstoke: Macmillan. p. 204. ISBN 0-333-49756-2. ^ Mazzarello, P. (May 1999). "A unifying concept: the history of cell theory". Nature Cell Biology. 1 (1): E13–15. doi:10.1038/8964. PMID 10559875. S2CID 7338204. ^ Campbell, Neil A.; Williamson, Brad; Heyden, Robin J. (2006). Biology: Exploring Life. Boston: Pearson Prentice Hall. ISBN 978-0132508827. Archived from the original on 2014-11-02. Retrieved 2021-05-13. ^ Urry, Lisa; Cain, Michael; Wasserman, Steven; Minorsky, Peter; Reece, Jane (2017). "Membrane structure and function". Campbell Biology (11th ed.). New York: Pearson. pp. 126–142. ISBN 978-0134093413. ^ Alberts, B.; Johnson, A.; Lewis, J.; et al. (2002). Molecular Biology of the Cell (4th ed.). New York: Garland Science. ISBN 978-0-8153-3218-3. Archived from the original on 2017-12-20. ^ Tom Herrmann; Sandeep Sharma (March 2, 2019). "Physiology, Membrane". StatPearls. PMID 30855799. Archived from the original on February 17, 2022. Retrieved May 14, 2021. ^ Alberts, Bruce; Johnson, Alexander; Lewis, Julian; Raff, Martin; Roberts, Keith; Walter, Peter (2002). "Cell Movements and the Shaping of the Vertebrate Body". Molecular Biology of the Cell (4th ed.). Archived from the original on 2020-01-22. Retrieved 2021-05-13. The Alberts text discusses how the "cellular building blocks" move to shape developing embryos. It is also common to describe small molecules such as amino acids as "molecular building blocks Archived 2020-01-22 at the Wayback Machine". ^ Jump up to: a b c d e Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Cells: The working units of life". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 60–81. ISBN 978-1464175121. ^ Bailey, Regina. "Cellular Respiration". Archived from the original on 2012-05-05. ^ Jump up to: a b c d e f Lodish, Harvey; Berk, Arnold.; Kaiser, Chris A.; Krieger, Monty; Scott, Matthew P.; Bretscher, Anthony; Ploegh, Hidde; Matsudaira, Paul (2008). "Cellular energetics". Molecular Cell Biology (6th ed.). New York: W.H. Freeman and Company. pp. 479–532. ISBN 978-0716776017. ^ "photosynthesis". Online Etymology Dictionary. Archived from the original on 2013-03-07. Retrieved 2013-05-23. ^ φῶς. Liddell, Henry George; Scott, Robert; A Greek–English Lexicon at the Perseus Project ^ σύνθεσις. Liddell, Henry George; Scott, Robert; A Greek–English Lexicon at the Perseus Project ^ Jump up to: a b Bryant, D. A.; Frigaard, N. U. (Nov 2006). "Prokaryotic photosynthesis and phototrophy illuminated". Trends in Microbiology. 14 (11): 488–496. doi:10.1016/j.tim.2006.09.001. PMID 16997562. ^ Reece, J.; Urry, L.; Cain, M. (2011). Biology (International ed.). Upper Saddle River, New Jersey: Pearson Education. pp. 235, 244. ISBN 978-0-321-73975-9. "This initial incorporation of carbon into organic compounds is known as carbon fixation." ^ Neitzel, James; Rasband, Matthew. "Cell communication". Nature Education. Archived from the original on 29 September 2010. Retrieved 29 May 2021. ^ Jump up to: a b "Cell signaling". Nature Education. Archived from the original on 31 October 2010. Retrieved 29 May 2021. ^ Jump up to: a b Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Cell membranes and signaling". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 82–104. ISBN 978-1464175121. ^ Martin, E. A.; Hine, R. (2020). A dictionary of biology (6th ed.). Oxford: Oxford University Press. ISBN 978-0199204625. OCLC 176818780. ^ Griffiths, A. J. (2012). Introduction to genetic analysis (10th ed.). New York: W.H. Freeman. ISBN 978-1429229432. OCLC 698085201. ^ "10.2 The Cell Cycle – Biology 2e | OpenStax". openstax.org. 28 March 2018. Archived from the original on 2020-11-29. Retrieved 2020-11-24. ^ Freeman, Scott; Quillin, Kim; Allison, Lizabeth; Black, Michael; Podgorski, Greg; Taylor, Emily; Carmichael, Jeff (2017). "Meiosis". Biological Science (6th ed.). Hoboken, New Jersey: Pearson. pp. 271–289. ISBN 978-0321976499. ^ Casiraghi, A.; Suigo, L.; Valoti, E.; Straniero, V. (February 2020). "Targeting Bacterial Cell Division: A Binding Site-Centered Approach to the Most Promising Inhibitors of the Essential Protein FtsZ". Antibiotics. 9 (2): 69. doi:10.3390/antibiotics9020069. PMC 7167804. PMID 32046082. ^ Brandeis M. New-age ideas about age-old sex: separating meiosis from mating could solve a century-old conundrum. Biol Rev Camb Philos Soc. 2018 May;93(2):801-810. doi: 10.1111/brv.12367. Epub 2017 Sep 14. PMID: 28913952 ^ Hörandl E. Apomixis and the paradox of sex in plants. Ann Bot. 2024 Mar 18:mcae044. doi: 10.1093/aob/mcae044. Epub ahead of print. PMID: 38497809 ^ Jump up to: a b Bernstein H, Byerly HC, Hopf FA, Michod RE. Genetic damage, mutation, and the evolution of sex. Science. 1985 Sep 20;229(4719):1277-81. doi: 10.1126/science.3898363. PMID: 3898363 ^ Darwin, C. R. 1878. The effects of cross and self fertilisation in the vegetable kingdom. London: John Murray". darwin-online.org.uk ^ Griffiths, Anthony J.; Wessler, Susan R.; Carroll, Sean B.; Doebley, John (2015). "The genetics revolution". An Introduction to Genetic Analysis (11th ed.). Sunderland, Massachusetts: W.H. Freeman & Company. pp. 1–30. ISBN 978-1464109485. ^ Griffiths, Anthony J. F.; Miller, Jeffrey H.; Suzuki, David T.; Lewontin, Richard C.; Gelbart, William M., eds. (2000). "Genetics and the Organism: Introduction". An Introduction to Genetic Analysis (7th ed.). New York: W. H. Freeman. ISBN 978-0-7167-3520-5. ^ Hartl, D.; Jones, E (2005). Genetics: Analysis of Genes and Genomes (6th ed.). Jones & Bartlett. ISBN 978-0-7637-1511-3. ^ Miko, Ilona (2008). "Test crosses". Nature Education. 1 (1): 136. Archived from the original on 2021-05-21. Retrieved 2021-05-28. ^ Miko, Ilona (2008). "Thomas Hunt Morgan and sex linkage". Nature Education. 1 (1): 143. Archived from the original on 2021-05-20. Retrieved 2021-05-28. ^ Jump up to: a b c d e f g Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "DNA and its role in heredity". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 172–193. ISBN 978-1464175121. ^ Russell, Peter (2001). iGenetics. New York: Benjamin Cummings. ISBN 0-8053-4553-1. ^ Thanbichler, M; Wang, SC; Shapiro, L (October 2005). "The bacterial nucleoid: a highly organized and dynamic structure". Journal of Cellular Biochemistry. 96 (3): 506–21. doi:10.1002/jcb.20519. PMID 15988757. S2CID 25355087. ^ "Genotype definition – Medical Dictionary definitions". Medterms.com. 2012-03-19. Archived from the original on 2013-09-21. Retrieved 2013-10-02. ^ Crick, Francis H. (1958). "On protein synthesis". Symposia of the Society for Experimental Biology. 12: 138–63. PMID 13580867. ^ Crick, Francis H. (August 1970). "Central dogma of molecular biology". Nature. 227 (5258): 561–3. Bibcode:1970Natur.227..561C. doi:10.1038/227561a0. PMID 4913914. S2CID 4164029. ^ "Central dogma reversed". Nature. 226 (5252): 1198–9. June 1970. Bibcode:1970Natur.226.1198.. doi:10.1038/2261198a0. PMID 5422595. S2CID 4184060. ^ Lin, Yihan; Elowitz, Michael B. (2016). "Central Dogma Goes Digital". Molecular Cell. 61 (6): 791–792. doi:10.1016/j.molcel.2016.03.005. PMID 26990983. ^ Jump up to: a b c d e f g Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Regulation of gene expression". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 215–233. ISBN 978-1464175121. ^ Keene, Jack D.; Tenenbaum, Scott A. (2002). "Eukaryotic mRNPs may represent posttranscriptional operons". Molecular Cell. 9 (6): 1161–1167. doi:10.1016/s1097-2765(02)00559-2. PMID 12086614. ^ Jump up to: a b Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Genes, development, and evolution". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 273–298. ISBN 978-1464175121. ^ Slack, J.M.W. (2013) Essential Developmental Biology. Wiley-Blackwell, Oxford. ^ Slack, J.M.W. (2007). "Metaplasia and transdifferentiation: from pure biology to the clinic". Nature Reviews Molecular Cell Biology. 8 (5): 369–378. doi:10.1038/nrm2146. PMID 17377526. S2CID 3353748. ^ Atala, Anthony; Lanza, Robert (2012). Handbook of Stem Cells. Academic Press. p. 452. ISBN 978-0-12-385943-3. Archived from the original on 2021-04-12. Retrieved 2021-05-28. ^ Yanes, Oscar; Clark, Julie; Wong, Diana M.; Patti, Gary J.; Sánchez-Ruiz, Antonio; Benton, H. Paul; Trauger, Sunia A.; Desponts, Caroline; Ding, Sheng; Siuzdak, Gary (June 2010). "Metabolic oxidation regulates embryonic stem cell differentiation". Nature Chemical Biology. 6 (6): 411–417. doi:10.1038/nchembio.364. PMC 2873061. PMID 20436487. ^ Carroll, Sean B. "The Origins of Form". Natural History. Archived from the original on 9 October 2018. Retrieved 9 October 2016. "Biologists could say, with confidence, that forms change, and that natural selection is an important force for change. Yet they could say nothing about how that change is accomplished. How bodies or body parts change, or how new structures arise, remained complete mysteries." ^ Hall, Brian K.; Hallgrímsson, Benedikt (2007). Strickberger's Evolution. Jones & Bartlett Publishers. pp. 4–6. ISBN 978-1-4496-4722-3. Archived from the original on 2023-03-26. Retrieved 2021-05-27. ^ "Evolution Resources". Washington, D.C.: National Academies of Sciences, Engineering, and Medicine. 2016. Archived from the original on 2016-06-03. ^ Jump up to: a b c d Urry, Lisa; Cain, Michael; Wasserman, Steven; Minorsky, Peter; Reece, Jane (2017). "Descent with modifications: A Darwinian view of life". Campbell Biology (11th ed.). New York: Pearson. pp. 466–483. ISBN 978-0134093413. ^ Lewontin, Richard C. (November 1970). "The Units of Selection" (PDF). Annual Review of Ecology and Systematics. 1: 1–18. doi:10.1146/annurev.es.01.110170.000245. JSTOR 2096764. S2CID 84684420. Archived (PDF) from the original on 2015-02-06. ^ Darwin, Charles (1859). On the Origin of Species, John Murray. ^ Futuyma, Douglas J.; Kirkpatrick, Mark (2017). "Evolutionary biology". Evolution (4th ed.). Sunderland, Mass.: Sinauer Associates. pp. 3–26. ^ Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Processes of evolution". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 299–324. ISBN 978-1464175121. ^ Jump up to: a b c Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Speciation". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 343–356. ISBN 978-1464175121. ^ Jump up to: a b c d e f Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Reconstructing and using phylogenies". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 325–342. ISBN 978-1464175121. ^ Kitching, Ian J.; Forey, Peter L.; Williams, David M. (2001). "Cladistics". In Levin, Simon A. (ed.). Encyclopedia of Biodiversity (2nd ed.). Elsevier. pp. 33–45. doi:10.1016/B978-0-12-384719-5.00022-8. ISBN 9780123847201. Archived from the original on 29 August 2021. Retrieved 29 August 2021.) ^ Futuyma, Douglas J.; Kirkpatrick, Mark (2017). "Phylogeny: The unity and diversity of life". Evolution (4th ed.). Sunderland, Mass.: Sinauer Associates. pp. 401–429. ^ Woese, CR; Kandler, O; Wheelis, ML (June 1990). "Towards a natural system of organisms: proposal for the domains Archaea, Bacteria, and Eucarya". Proceedings of the National Academy of Sciences of the United States of America. 87 (12): 4576–79. Bibcode:1990PNAS...87.4576W. doi:10.1073/pnas.87.12.4576. PMC 54159. PMID 2112744. ^ Montévil, M; Mossio, M; Pocheville, A; Longo, G (October 2016). "Theoretical principles for biology: Variation". Progress in Biophysics and Molecular Biology. From the Century of the Genome to the Century of the Organism: New Theoretical Approaches. 122 (1): 36–50. doi:10.1016/j.pbiomolbio.2016.08.005. PMID 27530930. S2CID 3671068. Archived from the original on 2018-03-20. ^ De Duve, Christian (2002). Life Evolving: Molecules, Mind, and Meaning. New York: Oxford University Press. p. 44. ISBN 978-0-19-515605-8. ^ Jump up to: a b c Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "The history of life on Earth". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 357–376. ISBN 978-1464175121. ^ "Stratigraphic Chart 2022" (PDF). International Stratigraphic Commission. February 2022. Archived (PDF) from the original on 2 April 2022. Retrieved 25 April 2022. ^ Futuyma 2005 ^ Futuyma, DJ (2005). Evolution. Sinauer Associates. ISBN 978-0-87893-187-3. OCLC 57311264. ^ Rosing, Minik T. (January 29, 1999). "13C-Depleted Carbon Microparticles in >3700-Ma Sea-Floor Sedimentary Rocks from West Greenland". Science. 283 (5402): 674–676. Bibcode:1999Sci...283..674R. doi:10.1126/science.283.5402.674. PMID 9924024. ^ Ohtomo, Yoko; Kakegawa, Takeshi; Ishida, Akizumi; et al. (January 2014). "Evidence for biogenic graphite in early Archaean Isua metasedimentary rocks". Nature Geoscience. 7 (1): 25–28. Bibcode:2014NatGe...7...25O. doi:10.1038/ngeo2025. ^ Nisbet, Euan G.; Fowler, C.M.R. (December 7, 1999). "Archaean metabolic evolution of microbial mats". Proceedings of the Royal Society B. 266 (1436): 2375–2382. doi:10.1098/rspb.1999.0934. PMC 1690475. ^ Knoll, Andrew H.; Javaux, Emmanuelle J.; Hewitt, David; et al. (June 29, 2006). "Eukaryotic organisms in Proterozoic oceans". Philosophical Transactions of the Royal Society B. 361 (1470): 1023–1038. doi:10.1098/rstb.2006.1843. PMC 1578724. PMID 16754612. ^ Fedonkin, Mikhail A. (March 31, 2003). "The origin of the Metazoa in the light of the Proterozoic fossil record" (PDF). Paleontological Research. 7 (1): 9–41. doi:10.2517/prpsj.7.9. S2CID 55178329. Archived from the original (PDF) on 2009-02-26. Retrieved 2008-09-02. ^ Bonner, John Tyler (January 7, 1998). "The origins of multicellularity". Integrative Biology. 1 (1): 27–36. doi:10.1002/(SICI)1520-6602(1998)1:1<27::AID-INBI4>3.0.CO;2-6. ^ Strother, Paul K.; Battison, Leila; Brasier, Martin D.; et al. (May 26, 2011). "Earth's earliest non-marine eukaryotes". Nature. 473 (7348): 505–509. Bibcode:2011Natur.473..505S. doi:10.1038/nature09943. PMID 21490597. S2CID 4418860. ^ Beraldi-Campesi, Hugo (February 23, 2013). "Early life on land and the first terrestrial ecosystems". Ecological Processes. 2 (1): 1–17. Bibcode:2013EcoPr...2....1B. doi:10.1186/2192-1709-2-1. ^ Algeo, Thomas J.; Scheckler, Stephen E. (January 29, 1998). "Terrestrial-marine teleconnections in the Devonian: links between the evolution of land plants, weathering processes, and marine anoxic events". Philosophical Transactions of the Royal Society B. 353 (1365): 113–130. doi:10.1098/rstb.1998.0195. PMC 1692181. ^ Jun-Yuan, Chen; Oliveri, Paola; Chia-Wei, Li; et al. (April 25, 2000). "Precambrian animal diversity: Putative phosphatized embryos from the Doushantuo Formation of China". Proc. Natl. Acad. Sci. U.S.A. 97 (9): 4457–4462. Bibcode:2000PNAS...97.4457C. doi:10.1073/pnas.97.9.4457. PMC 18256. PMID 10781044. ^ D-G., Shu; H-L., Luo; Conway Morris, Simon; et al. (November 4, 1999). "Lower Cambrian vertebrates from south China" (PDF). Nature. 402 (6757): 42–46. Bibcode:1999Natur.402...42S. doi:10.1038/46965. S2CID 4402854. Archived from the original (PDF) on 2009-02-26. Retrieved 2015-01-22. ^ Hoyt, Donald F. (February 17, 1997). "Synapsid Reptiles". ZOO 138 Vertebrate Zoology (Lecture). Pomona, Calif.: California State Polytechnic University, Pomona. Archived from the original on 2009-05-20. Retrieved 2015-01-22. ^ Barry, Patrick L. (January 28, 2002). Phillips, Tony (ed.). "The Great Dying". Science@NASA. Marshall Space Flight Center. Archived from the original on 2010-04-10. Retrieved 2015-01-22. ^ Tanner, Lawrence H.; Lucas, Spencer G.; Chapman, Mary G. (March 2004). "Assessing the record and causes of Late Triassic extinctions" (PDF). Earth-Science Reviews. 65 (1–2): 103–139. Bibcode:2004ESRv...65..103T. doi:10.1016/S0012-8252(03)00082-5. Archived from the original (PDF) on 2007-10-25. Retrieved 2007-10-22. ^ Benton, Michael J. (1997). Vertebrate Palaeontology (2nd ed.). London: Chapman & Hall. ISBN 978-0-412-73800-5. OCLC 37378512. ^ Fastovsky, David E.; Sheehan, Peter M. (March 2005). "The Extinction of the Dinosaurs in North America" (PDF). GSA Today. 15 (3): 4–10. doi:10.1130/1052-5173(2005)015<4:TEOTDI>2.0.CO;2. Archived (PDF) from the original on 2019-03-22. Retrieved 2015-01-23. ^ Roach, John (June 20, 2007). "Dinosaur Extinction Spurred Rise of Modern Mammals". National Geographic News. Washington, D.C.: National Geographic Society. Archived from the original on 2008-05-11. Retrieved 2020-02-21. Wible, John R.; Rougier, Guillermo W.; Novacek, Michael J.; et al. (June 21, 2007). "Cretaceous eutherians and Laurasian origin for placental mammals near the K/T boundary". Nature. 447 (7147): 1003–1006. Bibcode:2007Natur.447.1003W. doi:10.1038/nature05854. PMID 17581585. S2CID 4334424. ^ Van Valkenburgh, Blaire (May 1, 1999). "Major Patterns in the History of Carnivorous Mammals". Annual Review of Earth and Planetary Sciences. 27: 463–493. Bibcode:1999AREPS..27..463V. doi:10.1146/annurev.earth.27.1.463. Archived from the original on February 29, 2020. Retrieved May 15, 2021. ^ Fredrickson, J. K.; Zachara, J. M.; Balkwill, D. L. (July 2004). "Geomicrobiology of high-level nuclear waste-contaminated vadose sediments at the Hanford site, Washington state". Applied and Environmental Microbiology. 70 (7): 4230–41. Bibcode:2004ApEnM..70.4230F. doi:10.1128/AEM.70.7.4230-4241.2004. PMC 444790. PMID 15240306. ^ Dudek, N. K.; Sun, C. L.; Burstein, D. (2017). "Novel Microbial Diversity and Functional Potential in the Marine Mammal Oral Microbiome" (PDF). Current Biology. 27 (24): 3752–3762. Bibcode:2017CBio...27E3752D. doi:10.1016/j.cub.2017.10.040. PMID 29153320. S2CID 43864355. Archived (PDF) from the original on 2021-03-08. Retrieved 2021-05-14. ^ Pace, N. R. (May 2006). "Time for a change". Nature. 441 (7091): 289. Bibcode:2006Natur.441..289P. doi:10.1038/441289a. PMID 16710401. S2CID 4431143. ^ Stoeckenius, W. (October 1981). "Walsby's square bacterium: fine structure of an orthogonal procaryote". Journal of Bacteriology. 148 (1): 352–60. doi:10.1128/JB.148.1.352-360.1981. PMC 216199. PMID 7287626. ^ "Archaea Basic Biology". March 2018. Archived from the original on 2021-04-28. Retrieved 2021-05-14. ^ Bang, C.; Schmitz, R. A. (September 2015). "Archaea associated with human surfaces: not to be underestimated". FEMS Microbiology Reviews. 39 (5): 631–48. doi:10.1093/femsre/fuv010. PMID 25907112. ^ Moissl-Eichinger. C.; Pausan, M.; Taffner, J.; Berg, G.; Bang, C.; Schmitz, R. A. (January 2018). "Archaea Are Interactive Components of Complex Microbiomes". Trends in Microbiology. 26 (1): 70–85. doi:10.1016/j.tim.2017.07.004. PMID 28826642. ^ Jump up to: a b c d e Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "The origin and diversification of eukaryotes". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 402–419. ISBN 978-1464175121. ^ O'Malley, Maureen A.; Leger, Michelle M.; Wideman, Jeremy G.; Ruiz-Trillo, Iñaki (2019-02-18). "Concepts of the last eukaryotic common ancestor". Nature Ecology & Evolution. 3 (3). Springer Science and Business Media LLC: 338–344. Bibcode:2019NatEE...3..338O. doi:10.1038/s41559-019-0796-3. hdl:10261/201794. PMID 30778187. S2CID 67790751. ^ Taylor, F. J. R. 'M. (2003-11-01). "The collapse of the two-kingdom system, the rise of protistology and the founding of the International Society for Evolutionary Protistology (ISEP)". International Journal of Systematic and Evolutionary Microbiology. 53 (6). Microbiology Society: 1707–1714. doi:10.1099/ijs.0.02587-0. PMID 14657097. ^ Jump up to: a b c d Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "The evolution of plants". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 420–449. ISBN 978-1464175121. ^ Jump up to: a b Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "The evolution and diversity of fungi". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 451–468. ISBN 978-1464175121. ^ Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Animal origins and diversity". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 469–519. ISBN 978-1464175121. ^ Wu, K. J. (15 April 2020). "There are more viruses than stars in the universe. Why do only some infect us? – More than a quadrillion quadrillion individual viruses exist on Earth, but most are not poised to hop into humans. Can we find the ones that are?". National Geographic Society. Archived from the original on 28 May 2020. Retrieved 18 May 2020. ^ Koonin, E. V.; Senkevich, T. G.; Dolja, V. V. (September 2006). "The ancient Virus World and evolution of cells". Biology Direct. 1 (1): 29. doi:10.1186/1745-6150-1-29. PMC 1594570. PMID 16984643. ^ Zimmer, C. (26 February 2021). "The Secret Life of a Coronavirus - An oily, 100-nanometer-wide bubble of genes has killed more than two million people and reshaped the world. Scientists don't quite know what to make of it". The New York Times. Archived from the original on 2021-12-28. Retrieved 28 February 2021. ^ "Virus Taxonomy: 2019 Release". talk.ictvonline.org. International Committee on Taxonomy of Viruses. Archived from the original on 20 March 2020. Retrieved 25 April 2020. ^ Lawrence C. M.; Menon S.; Eilers, B. J. (May 2009). "Structural and functional studies of archaeal viruses". The Journal of Biological Chemistry. 284 (19): 12599–603. doi:10.1074/jbc.R800078200. PMC 2675988. PMID 19158076. ^ Edwards, R.A.; Rohwer, F. (June 2005). "Viral metagenomics". Nature Reviews. Microbiology. 3 (6): 504–10. doi:10.1038/nrmicro1163. PMID 15886693. S2CID 8059643. ^ Canchaya, C.; Fournous, G.; Chibani-Chennoufi, S. (August 2003). "Phage as agents of lateral gene transfer". Current Opinion in Microbiology. 6 (4): 417–24. doi:10.1016/S1369-5274(03)00086-9. PMID 12941415. ^ Rybicki, E. P. (1990). "The classification of organisms at the edge of life, or problems with virus systematics". South African Journal of Science. 86: 182–86. ^ Koonin, E. V.; Starokadomskyy, P. (October 2016). "Are viruses alive? The replicator paradigm sheds decisive light on an old but misguided question". Studies in History and Philosophy of Biological and Biomedical Sciences. 59: 125–134. doi:10.1016/j.shpsc.2016.02.016. PMC 5406846. PMID 26965225. ^ Begon, M; Townsend, CR; Harper, JL (2006). Ecology: From individuals to ecosystems (4th ed.). Blackwell. ISBN 978-1-4051-1117-1. ^ Habitats of the world. New York: Marshall Cavendish. 2004. p. 238. ISBN 978-0-7614-7523-1. Archived from the original on 2021-04-15. Retrieved 2020-08-24. ^ Tansley (1934); Molles (1999), p. 482; Chapin et al. (2002), p. 380; Schulze et al. (2005); p. 400; Gurevitch et al. (2006), p. 522; Smith & Smith 2012, p. G-5 ^ Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "The distribution of Earth's ecological systems". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 845–863. ISBN 978-1464175121. ^ Odum, Eugene P (1971). Fundamentals of Ecology (3rd ed.). New York: Saunders. ISBN 978-0-534-42066-6. ^ Chapin III, F. Stuart; Matson, Pamela A.; Mooney, Harold A. (2002). "The ecosystem concept". Principles of Terrestrial Ecosystem Ecology. New York: Springer. p. 10. ISBN 978-0-387-95443-1. ^ Jump up to: a b Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Populations". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 864–897. ISBN 978-1464175121. ^ Urry, Lisa; Cain, Michael; Wasserman, Steven; Minorsky, Peter; Reece, Jane (2017). "Population ecology". Campbell Biology (11th ed.). New York: Pearson. pp. 1188–1211. ISBN 978-0134093413. ^ "Population". Biology Online. Archived from the original on 13 April 2019. Retrieved 5 December 2012. ^ "Definition of population (biology)". Oxford Dictionaries. Oxford University Press. Archived from the original on 4 March 2016. Retrieved 5 December 2012. "a community of animals, plants, or humans among whose members interbreeding occurs" ^ Hartl, Daniel (2007). Principles of Population Genetics. Sinauer Associates. p. 45. ISBN 978-0-87893-308-2. ^ Chapman, Eric J.; Byron, Carrie J. (2018-01-01). "The flexible application of carrying capacity in ecology". Global Ecology and Conservation. 13: e00365. Bibcode:2018GEcoC..1300365C. doi:10.1016/j.gecco.2017.e00365. ^ Odum, E. P.; Barrett, G. W. (2005). Fundamentals of Ecology (5th ed.). Brooks/Cole, a part of Cengage Learning. ISBN 978-0-534-42066-6. Archived from the original on 2011-08-20. ^ Wootton, JT; Emmerson, M (2005). "Measurement of Interaction Strength in Nature". Annual Review of Ecology, Evolution, and Systematics. 36: 419–44. doi:10.1146/annurev.ecolsys.36.091704.175535. JSTOR 30033811. ^ Jump up to: a b c Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Ecological and evolutionary consequences within and among species". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 882–897. ISBN 978-1464175121. ^ Smith, AL (1997). Oxford dictionary of biochemistry and molecular biology. Oxford [Oxfordshire]: Oxford University Press. p. 508. ISBN 978-0-19-854768-6. "Photosynthesis – the synthesis by organisms of organic chemical compounds, esp. carbohydrates, from carbon dioxide using energy obtained from light rather than the oxidation of chemical compounds." ^ Edwards, Katrina. "Microbiology of a Sediment Pond and the Underlying Young, Cold, Hydrologically Active Ridge Flank". Woods Hole Oceanographic Institution. ^ Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "Ecological communities". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 898–915. ISBN 978-1464175121. ^ Riebeek, Holli (16 June 2011). "The Carbon Cycle". Earth Observatory. NASA. Archived from the original on 5 March 2016. Retrieved 5 April 2018. ^ Hillis, David M.; Sadava, David; Hill, Richard W.; Price, Mary V. (2014). "The distribution of Earth's ecological systems". Principles of Life (2nd ed.). Sunderland, Mass.: Sinauer Associates. pp. 916–934. ISBN 978-1464175121. ^ Sahney, S.; Benton, M. J (2008). "Recovery from the most profound mass extinction of all time". Proceedings of the Royal Society B: Biological Sciences. 275 (1636): 759–65. doi:10.1098/rspb.2007.1370. PMC 2596898. PMID 18198148. ^ Soulé, Michael E.; Wilcox, Bruce A. (1980). Conservation biology: an evolutionary-ecological perspective. Sunderland, Mass.: Sinauer Associates. ISBN 978-0-87893-800-1. ^ Soulé, Michael E. (1986). "What is Conservation Biology?" (PDF). BioScience. 35 (11). American Institute of Biological Sciences: 727–34. doi:10.2307/1310054. JSTOR 1310054. Archived from the original (PDF) on 2019-04-12. Retrieved 2021-05-15. ^ Jump up to: a b Hunter, Malcolm L. (1996). Fundamentals of conservation biology. Oxford: Blackwell Science. ISBN 978-0-86542-371-8. ^ Jump up to: a b Meffe, Gary K.; Martha J. Groom (2006). Principles of conservation biology (3rd ed.). Sunderland, Mass.: Sinauer Associates. ISBN 978-0-87893-518-5. ^ Jump up to: a b Van Dyke, Fred (2008). Conservation biology: foundations, concepts, applications (2nd ed.). New York: Springer-Verlag. doi:10.1007/978-1-4020-6891-1. hdl:11059/14777. ISBN 978-1402068904. OCLC 232001738. Archived from the original on 2020-07-27. Retrieved 2021-05-15. ^ Sahney, S.; Benton, M. J.; Ferry, P. A. (2010). "Links between global taxonomic diversity, ecological diversity and the expansion of vertebrates on land". Biology Letters. 6 (4): 544–7. doi:10.1098/rsbl.2009.1024. PMC 2936204. PMID 20106856. ^ Koh, Lian Pin; Dunn, Robert R.; Sodhi, Navjot S.; Colwell, Robert K.; Proctor, Heather C.; Smith, Vincent S. (2004). "Species coextinctions and the biodiversity crisis". Science. 305 (5690): 1632–4. Bibcode:2004Sci...305.1632K. doi:10.1126/science.1101101. PMID 15361627. S2CID 30713492. ^ Millennium Ecosystem Assessment (2005). Ecosystems and Human Well-being: Biodiversity Synthesis. World Resources Institute, Washington, D.C.[1] Archived 2019-10-14 at the Wayback Machine ^ Jackson, J. B. C. (2008). "Ecological extinction and evolution in the brave new ocean". Proceedings of the National Academy of Sciences. 105 (Suppl 1): 11458–65. Bibcode:2008PNAS..10511458J. doi:10.1073/pnas.0802812105. PMC 2556419. PMID 18695220. ^ Soule, Michael E. (1986). Conservation Biology: The Science of Scarcity and Diversity. Sinauer Associates. p. 584. ISBN 978-0-87893-795-0. Further reading Alberts, B.; Johnson, A.; Lewis, J.; Raff, M.; Roberts, K.; Walter, P. (2002). Molecular Biology of the Cell (4th ed.). Garland. ISBN 978-0-8153-3218-3. OCLC 145080076. Begon, M.; Townsend, C. R.; Harper, J. L. (2005). Ecology: From Individuals to Ecosystems (4th ed.). Blackwell Publishing Limited. ISBN 978-1-4051-1117-1. OCLC 57639896. Campbell, Neil (2004). Biology (7th ed.). Benjamin-Cummings Publishing Company. ISBN 978-0-8053-7146-8. OCLC 71890442. Colinvaux, Paul (1979). Why Big Fierce Animals are Rare: An Ecologist's Perspective (reissue ed.). Princeton University Press. ISBN 978-0-691-02364-9. OCLC 10081738. Mayr, Ernst (1982). The Growth of Biological Thought: Diversity, Evolution, and Inheritance. Harvard University Press. ISBN 978-0-674-36446-2. Archived from the original on 2015-10-03. Retrieved 2015-06-27. Hoagland, Mahlon (2001). The Way Life Works. Jones and Bartlett Publishers inc. ISBN 978-0-7637-1688-2. OCLC 223090105. Janovy, John (2004). On Becoming a Biologist (2nd ed.). Bison Books. ISBN 978-0-8032-7620-8. OCLC 55138571. Johnson, George B. (2005). Biology, Visualizing Life. Holt, Rinehart, and Winston. ISBN 978-0-03-016723-2. OCLC 36306648. Tobin, Allan; Dusheck, Jennie (2005). Asking About Life (3rd ed.). Belmont, California: Wadsworth. ISBN 978-0-534-40653-0. External links Biology at Curlie OSU's Phylocode Biology Online – Wiki Dictionary MIT video lecture series on biology OneZoom Tree of Life Journal links PLOS Biology A peer-reviewed, open-access journal published by the Public Library of Science Current Biology: General journal publishing original research from all areas of biology Biology Letters: A high-impact Royal Society journal publishing peer-reviewed biology papers of general interest Science: Internationally renowned AAAS science journal – see sections of the life sciences International Journal of Biological Sciences: A biological journal publishing significant peer-reviewed scientific papers Perspectives in Biology and Medicine: An interdisciplinary scholarly journal publishing essays of broad relevance