Wittgenstein Annotated Bibliography
Keith - From Language to Forms of Life
- p.463
- W was concerned with understanding causes of conceptual and philosophical errors
- more specifically, he investigates how these errors in thinking about philosophical problems hinder us from thinking clearly about social and ethical problems.
- 464
- A key error that W identified was a tendency to think of communication as the transfer of thoughts and concepts from one mind to another - a/k/a Shannon-Weaver model, transmission model
- How can W's project of "doing theory" in a responsible, ethical way be extended to an evaluation of TPC and PM approaches?
- W and Kuhn: W's commitment to recognizing the diversity of language (games) caused Kuhn to shift from thinking that the "fundamental unit" of science isn't facts or theories but "interwoven practices," just like human language and communication are comprised of interconnected actions/behaviors that make up practices.
- Cross with Pleasants - who would argue that W eschews the very idea of a fundamental unit of anything.
- p. 465
- W argues for a an account of the social based on meaning.
- p.466
- W on "moral gravity" of "critical thinking" - Malcolm's remark about the British "national character".
- W asks what is the point of philosophy if it doesn't 'improve your thinking about questions of everyday life' and 'does make you more conscientious.'
- I think W's point here is that what came to be considered the 'critical' school of thought (CST) was flawed because it was based on erroneous thinking. Sure, it's great that CST allows for critique of dominant ideologies, power structures, etc. (and especially important for TPC because of how often the practice of TPC seems to support and reinforce the 'status quo,' as it were), but it seems that W would argue that the value of this is somehow undercut if it based on bad theory or misunderstandings of how language and communication work.
- "The great theme of W's work - that a rigorous understanding of language would allow one to critique foolish and harmful political discourse..."
- W on "moral gravity" of "critical thinking" - Malcolm's remark about the British "national character".
- see 466-470 for W's cultural and educational background and context. This is indeed important because of the emphasis W places on context for meaning.
W's Early Work and Theory
-
p.472
- In the Tractatus, W argues that 'language is a kind of theory about the world."
- However, he isn't saying that 'proposition represent states of affairs,' but rather that 'propositions mirror states of affairs.'
- This is significant because W is NOT suggesting that the picturing relation ('picturing theory of language') is a representational
- W's theory of truth is not referential, but logical:
If a sign is useless, it is meaningless. This is the point of Occam's maxim. > (If everything behaves as if a sign has meaning, then it does have meaning.). (3.328)
-
p.473 - W did argue that linguistic analysis can't reveal ethical insights (since these sorts of insights can only be shown, not expressed via language), but this did not mean W was not concerned with morality and ethics. - Rather, W was saying that professional philosophy just didn't have anything to say about ethics (see Tractatus's closing remark: Whereof we cannot speak, we must pass over in silence.).
W's later work: The Philosophical Investigations
- p. 474
- Regarding W's 'picture theory', which is a metaphysical and epistemological in nature:
- W argued that it relies on a 'relation that itself was outside of language.' People do the picturing, not language.
- 'use and showing' versus 'saying': Previous accounts of language assume an essence or something fundamental to language (meaning, representation, etc.), that 'inheres, mysteriously, in words themselves...
- W will eventually argue that meaning isn't a property of words...meaning is found in use
- See Piero Sraffa example - what is the logical form of a gesture (brushing under chin, middle finger)
- W observed an absurdity in asking what the logical form of such a gesture is - an absurdity in claiming that a proposition and what the proposition describes must have the same 'form.'
- This is known as the truth-functional relation ("the truth of a proposition is a function of its constituent parts and its relation to the world).
- Asking what replaces the truth-functional relation, W suggests that we should shift to looking at the relation of people to language rather than people to the world.
- Regarding W's 'picture theory', which is a metaphysical and epistemological in nature:
- p.475: Some Remarks on the style of the Philosophical Investigations (PI herein)
- The text is dialogic - W is attempting, in his writing, to demonstrate the idea of "showing what is difficult to say" through the use of hypothetical scenarios and imagined dialog.
- Importantly (and this is echoed by Pleasants and Rorty), attempting to 'assimilate' W into other philosophical traditions, or get to the core of W's epistemology or ontology isn't just pointless, such an effort runs counter to W's goals.
- p.476
- An important part of W's critique is attacking the notion that words obtain meaning by 'being connected to things' in the world. This is a representational view.
- Words can't get their meaning because they reference a specific thing in the world, this would require a word to refer to something more general like a concept of idea, which then raises the problem of what exactly those things are and where there are to be located.
- This requires a "representational" explanation: 'words are signs of concepts, and concepts are probably mental phenomena.'
- W cites an example from Augustine - Children learn the names of things by repeatedly observing others refer to objects by those names. They then learn to use their mouths to form and say the names of things to express their own desires. (PI §1)
- W summarizes it thusly: individual words in a language name objects. These names are then used to construct sentences. "Every word has a meaning and the meaning correlates with the word: It (the meaning) is the object for which the word stands.' (PI §1)
- So, W needs to outline a situation or example that doesn't equate naming and meaning.
- Worth noting that here Keith does not use the term theory or explanation: W needs to provide an example or scenario and build upon it. W isn't trying to create a better or alternative theory.
-
p. 477
- Also in (PI §1), the apple example: which removes the 'hidden mental component from the communication (there is a table of colors, the shopkeeper counts out loud), and the action shifts from pointing and naming (as in Augustine) to "getting some apples."'
- When asked 'how does he (the shopkeeper) know?', W's answer is that 'he just does it.' He isn't refusing to give an answer, he is noting that knowing the shopkeeper's inner mental state simply isn't required to derive the meaning, all we need is the act of him doing it - the meaning is in the behavior, the act of carrying out.
People do things with language (and stuff in the world), and their doings exhibit regularity. Nothing more is needed to explain what is going on, not concepts in people's heads, or meanings, or psychological states - which is not to say that Augustine's picture is wrong, but just radically incomplete as a guide to how language works. (see PI §3)
- When asked 'how does he (the shopkeeper) know?', W's answer is that 'he just does it.' He isn't refusing to give an answer, he is noting that knowing the shopkeeper's inner mental state simply isn't required to derive the meaning, all we need is the act of him doing it - the meaning is in the behavior, the act of carrying out.
- Also in (PI §1), the apple example: which removes the 'hidden mental component from the communication (there is a table of colors, the shopkeeper counts out loud), and the action shifts from pointing and naming (as in Augustine) to "getting some apples."'
-
p.478
- See PI §6 - rod and lever example
- the gist is that a 'brake' might consist of a rod connected to a lever, but if it isn't used as a such, then it isn't a brake or even a rod and lever independently. It's the entire mechanism (or context) that makes a rod connected to a lever into a brake.
- "...the possibility of action or meaning depends on the regular, coordinated activities of people."
- W asks 'why can't a dog simulate pain? Is he too honest?' If we think of the act of lying as an internal mental state - "deliberately not telling the truth" - that exists 'behind' what is spoken, then this question is puzzling and absurd. W's explanation would be that "dogs can't lie because they can't participate in the interrelated activities that constitute truth telling, justifying, comparing actions to statements and so on.
- The endless diversity of language comes from the variety of activities that people participate in with one another.
- ...the basic constituents of human life are "activities" or "practices," and he will use these terms to explain how people use language.
- ...Practices must have a behavioral component. They cannot consist in merely flexing one's mental muscles, but must be part of some actions
- W doesn't distinguish between "knowing that" (propositional knowledge) and "knowing how" (practical knowledge).
- Alleged "problems of knowledge"
- See PI §6 - rod and lever example
-
"Pjilosophical problems arise from focusing on one kind of practice or activity to the exclusion of others."
-
p.481 - see PI ss.65-66
- p.485 - W's contributions to communication theory
- 'Nowhere is the pragmatist character of Wittgenstein's account clearer than his insistence that meaning is relative to purpose, and purpose is constituted by the structure of language and lived experiences themselves.'
- p.486 - 2 influential paths in studying language:
- 'to study language, or communication, requires studying human life, on some level a kind of anthropology. That would be the opposite of a reductionism that seeks the essence of meaning, and instead highlights the dizzying diversity of human life.'
- 'The second side is that this diversity can be studied, so to speak, from within; by cataloging and analyzing the terms people use to describe their own actions, mental states, relationships, and so on, the study of culture and language become one.'
- p.487
- 'The constitutive web of language for our sociall world has been a central issue of late twentieth-century communication theory.'


29 November 2002
Disease Outbreak Reported
As of 28 November, the Ministry of Health has confirmed 60 cases and 11 deaths of yellow fever (see previous report). The outbreak has affected:
- Touba, Mbacké and Bambey districts, Diourbel region
- Gossas, Fatick and Guinguinéo districts, Fatick region
- Darou Mousty and Kébémer districts, Louga region
- Khombole and Thiadiaye districts, Thiés region
- Tambacounda district in Tambacounda region
- Sedhiou district in Kolda region
- and Dakar Centre district, Dakar region.
Recent confirmed cases have been detected in Kolda, Diourbel and Fatick regions. The dates of onset of illness for the two most recent confirmed cases were 11 November and 13 November in Thies and Kolda region, respectively. Immunization campaigns in Tambacounda, Khombole, Thiadiaye, Guinginéo, Kébémer and Darou Mousty districts will begin within the next week. WHO is supporting these immunization campaigns with both technical assistance and vaccine supplies.
As reported previously, laboratory testing suggests that one case (onset of symptoms was 9 November) has occurred in Dakar, but a thorough epidemiological investigation of this case and active surveillance in Dakar have not detected additional cases.
A plan for intensified social mobilization has been formulated by the Ministry of Health with WHO technical assistance. Financial support is being provided by WHO and the local office of the Children's Vaccine Program at PATH (Program for Appropriate Technology in Health). Several local partners, including CVP, UNICEF and WHO, will support implementation.
In response to an appeal for financial support for the outbreak response, WHO wishes to acknowledge the support of the Government of Norway, the Government of Belgium, the UNFPA, and the Gates Foundation.


The map below shows 90 years of D-I football recruiting history. To roughly limit the map to highly-recruited players rather than walk-ons and role players, the map only shows players who were on an NFL roster at some point in their careers. The date filter shows the previous eight recruiting classes (e.g., if the filter is set to 2000, the map shows those classes recruited from 1993 to 2000). The toggles on the right allow you to switch between current conference and historic conference alignments.


Client Settings
Uplink
Settings
About
Journal Directory
Server Uplink URL
CMDR Name
API Key
Save Settings


While you're not required to use them, HAXcms supplies a series of elements that can make theme development effortless. You can see the source of these in greater detail under the theme directory of haxcms-elements
. This is a brief overview of what they are and what they provide to your interface.
HAXcms seeks to apply the SDS pattern, a technique we made up just for this sentence, for dramatic effect
. As everyone knows who is about to read the next heading, SDS stands for:
So. Damn. Semantic.
Whew, I need an ice cold drink to wash away the semantic sweats.
Whew, I need an ice cold drink to wash away the semantic sweats.
Whew, I need an ice cold drink to wash away the semantic sweats.
Whew, I need an ice cold drink to wash away the semantic sweats.
Yes, that's right, HAXcms allows you to theme a complex state managed system without needing to understand state management... like... at all.
"But I understand state management and it's important to me"
That's awesome, four people on twitter, but most designers just want to design! They don't need or want to understand the intricacies of making a collapsed field area expand relative to what item has been dictated as active in the store*.
*an intentionally confusing worded sentence
We use MobX to do our state management if that's something you care about and some of our themes directly implement and interface with the state management layer. See Simple Blog's footer element
for a great example of why state management is a PITA.
 Here's the list of ES module imports to get them
{
"dependencies": {
"@lrnwebcomponents/haxcms-elements": "latest"
}
}
import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>import<EMAIL_ADDRESS>Now here's what each of them provide you (pretty self explanatory because #SDS)
- site-active-title -
the title of the active item wrapped in a h1 tag
- site-children-block
- all child menu items based on a criteria match
- site-outline-block
- part of the outline based on criteria match
- site-footer
- a basic footer with license element based on site details
- site-modal
- a basic modal with button that can house other elements
- site-breadcrumb
- a breadcrumb trail for the active menu item
- site-dot-indicator
- site links but as a simple line of dots
- site-menu-button
- buttons for navigating through the active items in the menu. This is next, previous, parent and first child kinds of options.
- site-menu
- A visualization of the hierarchy of your site, complete with checkmarks given per page the user goes to (optional) as well as a lot of styling options and a highlighted bar that scrolls the menu into view for small screens. It's fantastic and one line.
- site-top-menu
- Top level menu links with indicator that scrolls to focus
- site-print-button
- print button with support for 4 levels of printing the site
- site-rss-button
- a button that displays a link (opened in a new window) to get the RSS feed in RSS 2.0 or Atom 1.0 format (also applies correct semantic values for bots to discover)
- site-title
- a link to the homepage of the site wrapped in an h1 tag
See the elements themselves for more details API examples and check out our themes as we leverage them heavily across the core themes.
A word about style
We use CSS variables to style all the bits inside of our custom elements. So if you don't like the styling, look at the CSS variables we make available and style away. The "Learn 2 theme"
is a great example implementing multiple levels of styling against multiple HAXcms site elements. You can always you know, go back and reread the CSS variables section
.


| Logo | Party Name | HQ Address |
|---|---|---|
| FPR (Rwanda Patriotic Front) | kigali, Rwanda | |
| PSD (Social Democratic Party) | Kigali, Rwanda | |
| PDI (Ideal Democratic Party) | Kigali, Rwanda | |
| DGPR (Democratic Green Party of Rwanda) | Kigali, Rwanda |
| Logo | Party Name | HQ Address |
|---|---|---|
| FPR (Rwanda Patriotic Front) | kigali, Rwanda | |
| PSD (Social Democratic Party) | Kigali, Rwanda | |
| PDI (Ideal Democratic Party) | Kigali, Rwanda | |
| DGPR (Democratic Green Party of Rwanda) | Kigali, Rwanda |


phage OpenUrl genes genome genomes prophage CrossRef prophages gene bacterial host tRNA Science Web identified integrase using Fig. used phages sequence new PhiSpy identify protein DNA proteins content phyla prophages. FREE Mol. Text codon genes, %GC Abstract Acids Download Nucleic amino genomes. genomic number regions tyrosine Open Phage Res., available data-hide-link-title=""> data-icon-position="" different figure frequency order tab total J.J. conserved contained genome, host’s integrases modal motif tRNAs usage version Microbiol. R.A. algorithm annotated correlation described genome. homology known microbial phylogenetic prophages, sequences shown shows similarity transfer translation Biol. Clustal Edwards, Microbiol., Phages aligned annotation associated bacteriophage based catalytic complete data dataset end functions grouped highly host's hosts including integration protein, proteins. recombinases recombinases. replication selected terminase, ;<;div Bacterial Brüssow, Escherichia G.F. Genome Hatfull, Int Nature, Prophage Rohwer, SEED Site-specific Streptococcus acid alignment analysis capsid, characteristics clusters compared eight-mer evolution generate genes. host, location lysogenic lytic machinery modified peptide phages. portal, possible predict predictions presence profiles provide randomly recombination set site taxonomy tree visualized


Points:
0
Time Played:
0
Corn Per Second:
0
Teenagers Houses
Teenagers:
0
Kettle Storage
Kettles:
0
Movie Theaters
Theaters:
0
Glorious Corn
Store
Teenagers $
x1
x10
x100
Kettles $
x1
x10
x100
Movie Theaters $
x1
x10
x100
DOUBLE POWER ($1000)


| Interface | Description |
|---|---|
| FavoriteManagement |
Interface for favorite management.
|
| MailBasedPostingManagement | |
| NoteManagement |
Management class for notes.
|
| Class | Description |
|---|---|
| AssignedBlogRoleChangedEvent |
Event to notify about a change of a blog role of a user.
|
| AssignedBlogRoleRetriever |
Gives access to the effective blog role which was assigned to a user either directly or
indirectly through group membership.
|
| BlogCreatedEvent |
Event to notify about new blogs/topics.
|
| BlogManagementBase |
Spring Service base class for
BlogManagement , provides access to all services and
entities referenced by this service. |
| BlogManagementImpl |
Implementation of the topic management service
|
| BlogRightsManagementBase |
Spring Service base class for
BlogRightsManagement , provides access to all services
and entities referenced by this service. |
| BlogRightsManagementImpl | |
| BlogRoleCacheKey |
Key for caching blog roles per user and blog
|
| CrawlLastModifcationDateOnTopicRoleChangeEventListener |
Event donating that a manager granted himself management access to a topic.
|
| DiscussionChangedEvent |
Event, which is fired, when a discussion as changed.
|
| DiscussionDetailsRetriever | |
| FavoriteManagementBase |
Spring Service base class for
com.communote.server.service.blog.FavoriteManagement ,
provides access to all services and entities referenced by this service. |
| FavoriteManagementImpl | |
| MailBasedPostingManagementBase |
Spring Service base class for
com.communote.server.service.blog.MailBasedPostingManagement , provides
access to all services and entities referenced by this service. |
| MailBasedPostingManagementFacade |
Helper for the MailBasedPostingManagement.
|
| MailBasedPostingManagementImpl |
Implementation of
MailBasedPostingManagement |
| ManagerGainedTopicAccessRightsChangedEventListener |
Event donating that a manager granted themself management access to a topic.
|
| NoteMailMessageWorkerBase |
Parent class for mail message workers that create posts from emails.
|
| NoteManagementBase |
Spring Service base class for
NoteManagement , provides access to all services and
entities referenced by this service. |
| NoteManagementImpl | |
| NoteMultipleAddressesMailMessageWorker |
A
MailMessageWorker that tries
to create Notes from email messages. |
| NoteShortener |
Allows shortening the HTML content of a note to a given number of lines.
|
| NoteSingleAddressMailMessageWorker |
This mail message worker creates posts from messages sent to one email address.
|
| TopicHierarchyEvent | |
| TopicHierarchyManagement |
Management for
|
| TopicInformationManagement |
Management for topics related to notification specifics.
|
| UsedBlogsCacheKey |
CacheKey for last and most used blogs. |
| UsedBlogsCacheKey.UsedBlogs |
Object holding the IDs of n used blogs.
|
| Enum | Description |
|---|---|
| TopicHierarchyEvent.Type |
Possible types this event was fired for.
|
| Exception | Description |
|---|---|
| AttachmentAlreadyAssignedException |
Thrown to indicate that an attachment cannot be connected with a note because it is already
assigned to another note.
|
| AttachmentNotFoundException |
Exception to be thrown if an attachment cannot be found.
|
| BlogManagementException |
The default exception thrown for unexpected errors occurring within
BlogManagement . |
| BlogRightsManagementException |
The default exception thrown for unexpected errors occurring within
BlogRightsManagement . |
| FavoriteManagementException |
The default exception thrown for unexpected errors occurring within
FavoriteManagement . |
| MailBasedPostingManagementException |
The default exception thrown for unexpected errors occurring within
MailBasedPostingManagement . |
| MovingOfNonRootNotesNotAllowedException |
Exception, which is thrown, when the user tried to move a non root note.
|
| NoteManagementException |
The default exception thrown for unexpected errors occurring within
NoteService . |
| NoteNotFoundException | |
| NoteWriterException | |
| OnlyCrosspostMarkupException | |
| TooManyMentionedUsersNoteManagementException |
Exception, which is thrown when the user tried to notify to many users.
|
| ToplevelTopicCannotBeChildException | |
| ToplevelTopicIsAlreadyChildBlogManagementException |
This exception is thrown, when somebody tries to declace a topic as top level topic if it is
already a child itself.
|
| ToplevelTopicsDisabledBlogManagementException |
This exception is thrown, when somebody tries to declare a topic as top level topic if top level
topics are disabled.
|
Copyright © 2019 Communote team. All rights reserved.


Hypertext Help with LaTeX
Accents
The rules differ somewhat depending whether you are in
text mode, math
mode, or the tabbing environment
Text mode
The following accents may be placed on letters. Although "o" is used in
most of the example, the accents may be placed on any letter.
Accents may even be placed above a "missing" letter; for example,
\~{} produces a tilde over a blank space.
The following commands may be used only in paragraph or LR mode.
- \`{o} produces a grave accent, ò
- \'{o} produces an acute accent, ó
- \^{o} produces a circumflex, ô
- \"{o} produces an umlaut or dieresis, ö
- \H{o} produces a long Hungarian umlaut
- \~{o} produces a tilde, õ
- \c{c} produces a cedilla, ç
- \={o} produces a macron accent (a bar over the letter)
- \b{o} produces a bar under the letter
- \.{o} produces a dot over the letter
- \d{o} produces a dot under the letter
- \u{o} produces a breve over the letter
- \v{o} produces a "v" over the letter
- \t{oo} produces a "tie" (inverted u) over the two letters
Note that the letters "i" and "j" require special treatment when
they are given accents because it is often desirable to replace the
dot with the accent. For this purpose, the commands \i and
\j can be used to produce dotless letters.
For example,
- \^{\i} should be used for i, circumflex, î
- \"{\i} should be used for i, umlaut, ï
Several of the above and some similar accents can also be
produced in math mode. The following commands may be used only
in math mode.
- \hat{o} is similar to the circumflex (cf. \^)
- \widehat{oo} is a wide version of \hat over several letters
- \check{o} is a vee or check (cf. \v)
- \tilde{o} is a tilde (cf. \~)
- \widetilde{oo} is a wide version
of \tilde over several letters
- \acute{o} is an acute accent (cf. \`)
- \grave{o} is a grave accent (cf. \')
- \dot{o} is a dot over the letter (cf. \.)
- \ddot{o} is a double dot over the letter
- \breve{o} is a breve (cf. \u)
- \bar{o} is a macron (cf. \=)
- \vec{o} is a vector (arrow) over the letter
Some of the accent marks used in running text have other uses in
the tabbing environment. In that
case they can be created with the following command:
- \a' for an acute accent
- \a` for a grave accent
- \a= for a macron accent
Related topics:
Back to the LaTeX Table of Contents
Revised 20 Oct 1995.


Pathfinding Visualizer
Start Node
Finish Node
Weight Node
Wall Node
SEARCH
Choose an algorithm:
Dijkstra's Algorithm
Breadth-First Search
Depth-First Search
A* Search
Greedy Best-first Search
Swarm Algorithm


Freddie Ljungberg made coaching promise to Arsene Wenger when Swede left Arsenal
The legendary Gunners boss always had an eye on Ljungberg as an impressive coach, and his former player has now stepped up to take an interim role as Gunners boss
by Mark Jones, https://www.mirror.co.uk/authors/mark-jones/Freddie Ljungberg was always determined to return to Arsenal in a coaching role, according to Arsene Wenger.
The former Gunners midfielder has replaced Unai Emery as the club's interim head coach, with the Spaniard being sacked on Friday morning.
A statement from board member Josh Kroenke read: “Our most sincere thanks go to Unai and his colleagues who were unrelenting in their efforts to get the club back to competing at the level we all expect and demand.
"We wish Unai and his team nothing but future success.”
Emery replaced Wenger in the job in the summer of 2018, and Ljungberg was promoted to a role as his assistant manager a year later having worked at the academy.
The Swede took charge of Arsenal's under-15s side in 2016, before leaving a year later to work alongside the Gunners' former academy director Andries Jonker as an assistant coach at Bundesliga side Wolfsburg.
However, Wenger knew the Swede would come back.
"We gave him permission to go, but with a promise that he will come back if there is a possibility to come back here," the Frenchman told FourFourTwo in March 2017, whe
"Overall, I think it is part of his education to become a coach, to have this kind of experience.
"Hopefully we can use that later at Arsenal . Freddie has done extremely well with the under-15s here. I was in touch with him constantly during his experience there."
The Swede did eventually come back to the club a year later to take up a role at the academy as manager of the under-23s, a role he took until his promotion to work alongside Emery, who he now replaces in the top job.


The Effects Take a LONG Time...
| DOSE: |
7 mg |
oral |
JWH-018 |
(powder / crystals) |
My first JWH-018 experience (with virtually NO prior drug experience) included some fun details, and an absolutely amazing sexual experience, but it was sometimes difficult for me to identify the line between reality and drug-induced fantasy, and I felt slightly out of control at times. 3-4 hours after ingestion, I was asleep. The next day, I decided that my next trip needed to have a slightly lower dose to avoid those last two factors, but I was looking forward to trying it again.
Last night, I tried again. After slipping 6-8 mg under my tongue, I went about my normal evening with my wife. Two hours later (this is when the effects hit on my first time), I was disappointed that I could feel something, but very little. I thought I had too small a dose this time.
An hour later, though, the effects started building. Incoming stimuli from all senses were delayed, and a generally good feeling was clearly present. Events and input began to have a 'repetition' effect. It was a bit like deja vu, only immediate, as though every sight, sound or feeling had aftershocks. Everything was amplified, or intensified, or exaggerated. I decided this was a perfect time to have sex, and my wife and I began cuddling on the couch.
About 3 1/2 hours after ingestion, she lowered her head to give me a blowjob. Without too much detail, every feeling was intensified, and reverberated inside me. It. Was. FABULOUS. Not nearly as intense as my first experience (in which the highlight was also an impossibly amazing oral sex session), but there was never a question as to what was really happening and it WAS even better than when sober. It was just a great sexual experience, but exaggerated in a positive way.
After the sex, we got ready for bed. Although I felt a bit like I had an alcohol buzz, I knew I was completely in control. But the effects were stronger now (4+ hours after ingestion) than they were earlier! I was surprised that the high was building after all this time, instead of fading.
As we watched a comedian on TV, I ate some chocolate. The sensation in my mouth was simply bizarre. I could control my mouth's movement, but the feelings connected to eating were delayed, and repeated. It felt a lot like 'mouse-trails' on old laptop settings looked. Chewing a bite of chocolate was like biting down a hundred times repeatedly before moving my jaws apart again. And that action repeated a hundred times too.
The comedian began a bit about 'people who are high', and I though it was unbelievably funny. He talked about a delayed reaction, and I thought 'that's EXACTLY what I feel like!' It was as though he was describing every sensation I had right BEFORE I sensed them. Then he did a slow-motion re-enactment to show what his bit was like to people who are high. This was hilarious! Then I realized I couldn't tell whether he was moving in slow motion or not. I rewound and replayed this part over and over, trying to figure out whether it was me or him that was acting strange.
Five hours in, my wife now asleep, I'm having all kinds of strange sensations. The sheets on my body felt so strange. Every movement I made felt completely surreal. It felt much more like what I thought an acid trip would be like than a marijuana high. Things I saw started swirling, combining and separating again. It was fun, but strange enough to make me a bit concerned that something was wrong. I was getting sleepy, and wondering if I was dreaming, but wanting to enjoy the full effect of the high.
I got up, to see if things would feel as strange out of bed as they did while I was in it. Going to the kitchen, I noticed several snacks that looked really good. I remembered hearing about munchies and thought that was happened, but could also recall that I was hungry when I went to bed. I would look at something on the counter and think 'where did that come from?' then look away for a moment, turn back and think 'where did that come from?' again. This happened with everything I looked at. Suddenly, I realized the unmistakable fact that I was further gone now (almost 6 hours in) than I had been an hour ago, and was losing control of my ability to keep a grip on reality.
I went back to bed. EVERYTHING (every movement, thought or sensory input) seemed bizarre, like a crazy, steam-of-consciousness dream. Usually, it was weird in a good way, but sometimes it was scary weird. I'm the kind of guy who likes to partially wake up from a scary dream, realize I'm OK, then want to go back and finish the nightmare to see what happens. So I decided this would be a fun state to drift to sleep, since it already felt like I was dreaming wildly. Then things got weirder. I recall trying to steer my thoughts to 'happy' dreams, but often got taken to 'scary' ones. Each thought triggered another one, but with absolutely no direction whatsoever. I remember feeling like my mind was racing, but it seemed as though it was in gear and flying down the highway with no steering wheel. Still, I was having fun seeing what would pop up next. And slowly, my memories drift off into nothing as I fell asleep.
I woke in the morning, feeling fine. I'm looking forward to my next experience, and feel like I have the dosage just right for me, but need to take it earlier in the night to enjoy all of it.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


So far, we have considered only the representation of the relations themselves. A relational database system needs to maintain data about the relations, such as the schema of the relations. In general, such “data about data” are referred to as metadata. Relational schemas and other metadata about relations are stored in a structure called the data dictionary or system catalog. Among the types of information that the system must store are these:
• Names of the relations
• Names of the attributes of each relation
• Domains and lengths of attributes
• Names of views defined on the database, and definitions of those views
• Integrity constraints (e.g., key constraints) In addition, many systems keep the following data on users of the system
• Names of users, the default schemas of the users, and passwords or other information to authenticate users
• Information about authorizations for each user Further, the database may store statistical and descriptive data about the relations and attributes, such as the number of tuples in each relation, or the number of distinct values for each attribute. T he data dictionary may also note the storage organization (heap, sequential, hash, etc.) of relations, and the location where each relation is stored
• If relations are stored in operating system files, the dictionary would note the names of the file (or files) containing each relation.
• If the database stores all relations in a single file, the dictionary may note the blocks containing records of each relation in a data structure such as a linked list. I n Chapter 14, in which we study indices, we shall see a need to store information about each index on each of the relations
• Name of the index 13.4 Data-Dictionary Storage 603
• Name of the relation being indexed
• Attributes on which the index is defined
• Type of index formed
All this metadata information constitutes, in effect, a miniature database. Some database systems store such metadata by using special-purpose data structures and code. It is generally preferable to store the data about the database as relations in the database itself. By using database relations to store system metadata, we simplify the overall structure of the system and harness the full power of the database for fast access to system data. The exact choice of how to represent system metadata by relations must be made by the system designers. We show the schema diagram of a toy data dictionary in Figure 13.12, storing part of the information mentioned above. The schema is only illustrative; real implementations store far more information than what the figure shows. Read the manuals for whichever database you use to see what system metadata it maintains. In the metadata representation shown, the attribute index attributes of the relation Index metadata is assumed to contain a list of one or more attributes, which can be represented by a character string such as “dept name, building”. The Index metadata relation is thus not in first normal form; it can be normalized, but the preceding representation is likely to be more efficient to access. The data dictionary is often stored in a nonnormalized form to achieve fast access
Whenever the database system needs to retrieve records from a relation, it must first consult the Relation metadata relation to find the location and storage organization of the relation, and then fetch records using this information. However, the storage organization and location of the Relation metadata relation itself must be recorded elsewhere (e.g., in the database code itself, or in a fixed location in the database), since we need this information to find the contents of Relation metadata. Since system metadata are frequently accessed, most databases read it from the database into in-memory data structures that can be accessed very efficiently. This is done as part of the database startup, before the database starts processing any queries.


Packaging the Sage Library for Distribution#
Modules, packages, distribution packages#
The Sage library consists of a large number of Python modules,
organized into a hierarchical set of packages that fill the namespace
sage
. All source files are located in a subdirectory of the
directory SAGE_ROOT/src/sage/
.
For example,
the file
SAGE_ROOT/src/sage/coding/code_bounds.py
provides the modulesage.coding.code_bounds
;the directory containing this file,
SAGE_ROOT/src/sage/coding/
, thus provides the packagesage.coding
.
There is another notion of “package” in Python, the distribution
package (also known as a “distribution” or a “pip-installable
package”). Currently, the entire Sage library is provided by a
single distribution,
sagemath-standard,
which is generated from the directory
SAGE_ROOT/pkgs/sagemath-standard
.
Note that the distribution name is not required to be a Python
identifier. In fact, using dashes (-
) is preferred to underscores in
distribution names; setuptools and other parts of Python’s packaging
infrastructure normalize underscores to dashes. (Using dots in
distribution names, to indicate ownership by organizations, still
mentioned in PEP 423, appears to
have largely fallen out of favor, and we will not use it in the SageMath
project.)
A distribution that provides Python modules in the sage.*
namespace, say
mainly from sage.PAC.KAGE
, should be named sagemath-DISTRI-BUTION.
Example:
The distribution sagemath-categories provides a small subset of the modules of the Sage library, mostly from the packages
sage.structure
,sage.categories
, andsage.misc
.
Other distributions should not use the prefix sagemath- in the distribution name. Example:
The distribution sage-sws2rst provides the Python package
sage_sws2rst
, so it does not fill thesage.*
namespace and therefore does not use the prefix sagemath-.
A distribution that provides functionality that does not need to
import anything from the sage
namespace should not use the
sage
namespace for its own packages/modules. It should be
positioned as part of the general Python ecosystem instead of as a
Sage-specific distribution. Examples:
The distribution pplpy provides the Python package
ppl
and is a much extended version of what used to besage.libs.ppl
, a part of the Sage library. The packagesage.libs.ppl
had dependencies onsage.rings
to convert to/from Sage number types. pplpy has no such dependencies and is therefore usable in a wider range of Python projects.The distribution memory-allocator provides the Python package
memory_allocator
. This used to besage.ext.memory_allocator
, a part of the Sage library.
Ordinary packages vs. implicit namespace packages#
Each module of the Sage library must be packaged in exactly one distribution
package. However, modules in a package may be included in different
distribution packages. In this regard, there is an important constraint that an
ordinary package (directory with __init__.py
file) cannot be split into
more than one distribution package.
By removing the __init__.py
file, however, we can make the package an
“implicit” (or “native”) “namespace” package, following
PEP 420. Implicit namespace packages can be
included in more than one distribution package. Hence whenever there are two
distribution packages that provide modules with a common prefix of Python
packages, that prefix needs to be a implicit namespace package, i.e., there
cannot be an __init__.py
file.
For example,
sagemath-tdlib will provide
sage.graphs.graph_decompositions.tdlib
,sagemath-rw will provide
sage.graphs.graph_decompositions.rankwidth
,sagemath-graphs will provide all of the rest of
sage.graphs.graph_decompositions
(and most ofsage.graphs
).
Then, none of
sage
,sage.graphs
,sage.graphs.graph_decomposition
can be an ordinary package (with an __init__.py
file), but rather
each of them has to be an implicit namespace package (no
__init__.py
file).
For an implicit namespace package, __init__.py
cannot be used any more for
initializing the package.
In the Sage 9.6 development cycle, we still use ordinary packages by default, but several packages are converted to implicit namespace packages to support modularization.
Source directories of distribution packages#
The development of the Sage library uses a monorepo strategy for
all distribution packages that fill the sage.*
namespace. This
means that the source trees of these distributions are included in a
single git
repository, in a subdirectory of SAGE_ROOT/pkgs
.
All these distribution packages have matching version numbers. From the viewpoint of a single distribution, this means that sometimes there will be a new release of some distribution where the only thing changing is the version number.
The source directory of a distribution package, such as
SAGE_ROOT/pkgs/sagemath-standard
, contains the following files:
sage
– a relative symbolic link to the monolithic Sage library source treeSAGE_ROOT/src/sage/
MANIFEST.in – controls which files and directories of the monolithic Sage library source tree are included in the distribution
pyproject.toml, setup.cfg, and requirements.txt – standard Python packaging metadata, declaring the distribution name, dependencies, etc.
README.rst
– a description of the distributionLICENSE.txt
– relative symbolic link to the same files inSAGE_ROOT/src
VERSION.txt
– package version. This file is updated by the release manager by running thesage-update-version
script.Sometimes it may be necessary to upload a hotfix for a distribution package to PyPI. These should be marked by adding a suffix
.post1
,.post2
; see PEP 440 on post-releases. For example, if the current development release is9.7.beta8
, then such a version could be marked9.7.beta8.post1
.Also sometimes when working on PRs it may be necessary to increment the version because a new feature is needed in another distribution package. Such versions should be marked by using the version number of the anticipated next development release and adding a suffix
.dev1
,.dev2
… (see PEP 440 on developmental releases). For example, if the current development release is9.7.beta8
, use9.7.beta9.dev1
. If the current development release is the stable release9.8
, use9.9.beta0.dev1
.After the PR is merged in the next development version, it will be synchronized again with the other package versions.
setup.py
– a setuptools-based installation scripttox.ini
– configuration for testing with tox
The technique of using symbolic links pointing into SAGE_ROOT/src
has allowed the modularization effort to keep the SAGE_ROOT/src
tree monolithic: Modularization has been happening behind the scenes
and will not change where Sage developers find the source files.
When adding a new distribution package that uses a symbolic link pointing into
SAGE_ROOT/src
, please update search.exclude
in
SAGE_ROOT/.vscode/settings.json
.
Some of these files may actually be generated from source files with suffix .m4
by the
SAGE_ROOT/bootstrap
script via the m4
macro processor.
For every distribution package, there is also a subdirectory of SAGE_ROOT/build/pkgs/
,
which contains the build infrastructure that is specific to Sage-the-distribution.
Note that these subdirectories follows a different naming convention,
using underscores instead of dashes, see Directory structure.
Because the distribution packages are included in the source tree, we set them
up as “script packages” instead of “normal packages”, see Package source types.
Dependencies and distribution packages#
When preparing a portion of the Sage library as a distribution package, dependencies matter.
Build-time dependencies#
If the portion of the library contains any Cython modules, these
modules are compiled during the wheel-building phase of the
distribution package. If the Cython module uses cimport
to pull in
anything from .pxd
files, these files must be either part of the
portion shipped as the distribution being built, or the distribution
that provides these files must be installed in the build
environment. Also, any C/C++ libraries that the Cython module uses
must be accessible from the build environment.
Declaring build-time dependencies: Modern Python packaging provides a
mechanism to declare build-time dependencies on other distribution
packages via the file pyproject.toml
([build-system] requires
); this
has superseded the older setup_requires
declaration. (There is no
mechanism to declare anything regarding the C/C++ libraries.)
While the namespace sage.*
is organized roughly according to
mathematical fields or categories, how we partition the implementation
modules into distribution packages has to respect the hard constraints
that are imposed by the build-time dependencies.
We can define some meaningful small distributions that just consist of
a single or a few Cython modules. For example, sagemath-tdlib
(github issue #29864) would just package the single
Cython module that must be linked with tdlib
,
sage.graphs.graph_decompositions.tdlib
. Starting with the Sage
9.6 development cycle, as soon as namespace packages are activated, we
can start to create these distributions. This is quite a mechanical
task.
Reducing build-time dependencies: Sometimes it is possible to replace build-time dependencies of a Cython module on a library by a runtime dependency. In other cases, it may be possible to split a module that simultaneously depends on several libraries into smaller modules, each of which has narrower dependencies.
Module-level runtime dependencies#
Any import
statements at the top level of a Python or Cython
module are executed when the module is imported. Hence, the imported
modules must be part of the distribution, or provided by another
distribution – which then must be declared as a run-time dependency.
Declaring run-time dependencies: These dependencies are declared in
setup.cfg
(generated from setup.cfg.m4
) as
install_requires.
Reducing module-level run-time dependencies:
Avoid importing from
sage.PAC.KAGE.all
modules whensage.PAC.KAGE
is a namespace package. The main purpose of the*.all
modules is for populating the global interactive environment that is available to users at thesage:
prompt. In particular, no Sage library code should import fromsage.rings.all
.To audit the Sage library for such imports, use
sage --tox -e relint
. In most cases, the imports can be fixed automatically using the toolsage --fiximports
.Replace module-level imports by method-level imports. Note that this comes with a small runtime overhead, which can become noticeable if the method is called in tight inner loops.
Sage provides the
lazy_import()
mechanism. Lazy imports can be declared at the module level, but the actual importing is only done on demand. It is a runtime error at that time if the imported module is not present. This can be convenient compared to local imports in methods when the same imports are needed in several methods.Avoid the “modularization anti-pattern” of importing a class from another module just to run an
isinstance(object, Class)
test, in particular when the module implementingClass
has heavy dependencies. For example, importing the classpAdicField
(or the functionis_pAdicField
) requires the libraries NTL and PARI.Instead, provide an abstract base class (ABC) in a module that only has light dependencies, make
Class
a subclass ofABC
, and useisinstance(object, ABC)
. For example,sage.rings.abc
provides abstract base classes for many ring (parent) classes, includingsage.rings.abc.pAdicField
. So we can replace:from sage.rings.padics.generic_nodes import pAdicFieldGeneric # heavy dependencies isinstance(object, pAdicFieldGeneric)
and:
from sage.rings.padics.generic_nodes import is_pAdicField # heavy dependencies is_pAdicField(object) # deprecated
by:
import sage.rings.abc # no dependencies isinstance(object, sage.rings.abc.pAdicField)
Note that going through the abstract base class only incurs a small performance penalty:
sage: object = Qp(5) sage: from sage.rings.padics.generic_nodes import pAdicFieldGeneric sage: %timeit isinstance(object, pAdicFieldGeneric) # fast # not tested 68.7 ns ± 2.29 ns per loop (...) sage: import sage.rings.abc sage: %timeit isinstance(object, sage.rings.abc.pAdicField) # also fast # not tested 122 ns ± 1.9 ns per loop (...)
If it is not possible or desired to create an abstract base class for
isinstance
testing (for example, when the class is defined in some external package), other solutions need to be used.Note that Python caches successful module imports, but repeating an unsuccessful module import incurs a cost every time:
sage: from sage.schemes.generic.scheme import Scheme sage: sZZ = Scheme(ZZ) sage: def is_Scheme_or_Pluffe(x): ....: if isinstance(x, Scheme): ....: return True ....: try: ....: from xxxx_does_not_exist import Pluffe # slow on every call ....: except ImportError: ....: return False ....: return isinstance(x, Pluffe) sage: %timeit is_Scheme_or_Pluffe(sZZ) # fast # not tested 111 ns ± 1.15 ns per loop (...) sage: %timeit is_Scheme_or_Pluffe(ZZ) # slow # not tested 143 µs ± 2.58 µs per loop (...)
The
lazy_import()
mechanism can be used to simplify this pattern via the__instancecheck__()
method and has similar performance characteristics:sage: lazy_import('xxxx_does_not_exist', 'Pluffe') sage: %timeit isinstance(sZZ, (Scheme, Pluffe)) # fast # not tested 95.2 ns ± 0.636 ns per loop (...) sage: %timeit isinstance(ZZ, (Scheme, Pluffe)) # slow # not tested 158 µs ± 654 ns per loop (...)
It is faster to do the import only once, for example when loading the module, and to cache the failure. We can use the following idiom, which makes use of the fact that
isinstance
accepts arbitrarily nested lists and tuples of types:sage: try: ....: from xxxx_does_not_exist import Pluffe # runs once ....: except ImportError: ....: # Set to empty tuple of types for isinstance ....: Pluffe = () sage: %timeit isinstance(sZZ, (Scheme, Pluffe)) # fast # not tested 95.9 ns ± 1.52 ns per loop (...) sage: %timeit isinstance(ZZ, (Scheme, Pluffe)) # fast # not tested 126 ns ± 1.9 ns per loop (...)
Other runtime dependencies#
If import
statements are used within a method, the imported module
is loaded the first time that the method is called. Hence the module
defining the method can still be imported even if the module needed by
the method is not present.
It is then a question whether a run-time dependency should be declared. If the method needing that import provides core functionality, then probably yes. But if it only provides what can be considered “optional functionality”, then probably not, and in this case it will be up to the user to install the distribution enabling this optional functionality.
As an example, let us consider designing a distribution that centers
around the package sage.coding
. First, let’s see if it uses symbolics:
(9.5.beta6) $ git grep -E 'sage[.](symbolic|functions|calculus)' src/sage/coding
src/sage/coding/code_bounds.py: from sage.functions.other import ceil
...
src/sage/coding/grs_code.py:from sage.symbolic.ring import SR
...
src/sage/coding/guruswami_sudan/utils.py:from sage.functions.other import floor
Apparently it does not in a very substantial way:
The imports of the symbolic functions
ceil()
andfloor()
can likely be replaced by the artithmetic functionsinteger_floor()
andinteger_ceil()
.Looking at the import of
SR
bysage.coding.grs_code
, it seems thatSR
is used for running some symbolic sum, but the doctests do not show symbolic results, so it is likely that this can be replaced.Note though that the above textual search for the module names is merely a heuristic. Looking at the source of “entropy”, through
log
fromsage.misc.functional
, a runtime dependency on symbolics comes in. In fact, for this reason, two doctests there are already marked as# optional - sage.symbolic
.
So if packaged as sagemath-coding, now a domain expert would have
to decide whether these dependencies on symbolics are strong enough to
declare a runtime dependency (install_requires
) on
sagemath-symbolics. This declaration would mean that any user who
installs sagemath-coding (pip install sagemath-coding
) would
pull in sagemath-symbolics, which has heavy compile-time
dependencies (ECL/Maxima/FLINT/Singular/…).
The alternative is to consider the use of symbolics by sagemath-coding merely as something that provides some extra features, which will only be working if the user also has installed sagemath-symbolics.
Declaring optional run-time dependencies: It is possible to declare
such optional dependencies as extras_require in setup.cfg
(generated from setup.cfg.m4
). This is a very limited mechanism
– in particular it does not affect the build phase of the
distribution in any way. It basically only provides a way to give a
nickname to a distribution that can be installed as an add-on.
In our example, we could declare an extras_require
so that users
could use pip install sagemath-coding[symbolics]
.
Doctest-only dependencies#
Doctests often use examples constructed using functionality provided by other portions of the Sage library. This kind of integration testing is one of the strengths of Sage; but it also creates extra dependencies.
Fortunately, these dependencies are very mild, and we can deal with
them using the same mechanism that we use for making doctests
conditional on the presence of optional libraries: using # optional -
FEATURE
directives in the doctests. Adding these directives will
allow developers to test the distribution separately, without
requiring all of Sage to be present.
Declaring doctest-only dependencies: The extras_require mechanism mentioned above can also be used for this.
Version constraints of dependencies#
The version information for dependencies comes from the files
build/pkgs/*/install-requires.txt
and
build/pkgs/*/package-version.txt
. We use the
m4
macro processor to insert the version information in the generated files
pyproject.toml
, setup.cfg
, requirements.txt
.
Hierarchy of distribution packages#
Solid arrows indicate install_requires
, i.e., a declared runtime dependency.
Dashed arrows indicate extras_require
, i.e., a declared optional runtime dependency.
Not shown in the diagram are build dependencies and optional dependencies for testing.
sage_conf is a configuration module. It provides the configuration variable settings determined by the
configure
script.sagemath-environment provides the connection to the system and software environment.  It provides all of
sage.categories
and a small portion ofsage.rings
.sagemath-repl provides the IPython kernel and Sage preparser (
sage.repl
), the Sage doctester (sage.doctest
), and some related modules fromsage.misc
.
Testing distribution packages#
Of course, we need tools for testing modularized distributions of portions of the Sage library.
Distribution packages of the modularized Sage library must be testable separately!
But we want to keep integration testing with other portions of Sage too!
Preparing doctests for modularized testing#
Section Writing testable examples explains how to write doctests for Sage. Here we show how to prepare existing or new doctests so that they are suitable for modularized testing.
Per section Special markup to influence doctests,
whenever an optional package is needed for a particular test, we use the
doctest tag # optional
. This mechanism can also be used for making a
doctest conditional on the presence of a portion of the Sage library.
The available tags take the form of package or module names such as
sage.combinat
, sage.graphs
, sage.plot
, sage.rings.number_field
,
sage.rings.real_double
, and sage.symbolic
. They are defined via
Feature
subclasses in the module sage.features.sagemath
, which
also provides the mapping from features to the distributions providing them
(actually, to SPKG names). Using this mapping, Sage can issue installation
hints to the user.
For example, the package sage.tensor
is purely algebraic and has
no dependency on symbolics. However, there are a small number of
doctests that depend on sage.symbolic.ring.SymbolicRing
for integration
testing. Hence, these doctests are marked as depending on the feature
sage.symbolic
.
By convention, because sage.symbolic
is present in a standard installation of Sage, we use the keyword # needs
instead of # optional
. These two keywords have identical semantics;
the tool sage –fixdoctests
rewrites the doctest tags according to the convention.
When defining new features for the purpose of conditionalizing doctests, it may be a good
idea to hide implementation details from feature names. For example, all doctests that
use large finite fields have to depend on PARI. However, we have defined a feature
sage.rings.finite_rings
(which implies the presence of sage.libs.pari
).
Marking the doctests # needs sage.rings.finite_rings
expresses the
dependency in a clearer way than using # needs sage.libs.pari
, and it
will be a smaller maintenance burden when implementation details change.
Testing the distribution in virtual environments with tox#
Chapter Running Sage’s Doctests explains in detail how to run the Sage doctester with various options.
To test a distribution package of the modularized Sage library, we use a virtual environment in which we only install the distribution to be tested (and its Python dependencies).
Let’s try it out first with the entire Sage library, represented by
the distribution sagemath-standard. Note that after Sage has been
built normally, a set of wheels for most installed Python distribution
packages is available in SAGE_VENV/var/lib/sage/wheels/
:
$ ls venv/var/lib/sage/wheels
Babel-2.9.1-py2.py3-none-any.whl
Cython-0.29.24-cp39-cp39-macosx_11_0_x86_64.whl
Jinja2-2.11.2-py2.py3-none-any.whl
...
scipy-1.7.2-cp39-cp39-macosx_11_0_x86_64.whl
setuptools-58.2.0-py3-none-any.whl
...
wheel-0.37.0-py2.py3-none-any.whl
widgetsnbextension-3.5.1-py2.py3-none-any.whl
zipp-3.5.0-py3-none-any.whl
However, in a build of Sage with the default configuration
configure --enable-editable
, there will be no wheels for the
distributions sage_*
and sagemath-*
.
To create these wheels, use the command make wheels
:
$ make wheels
...
$ ls venv/var/lib/sage/wheels/sage*
...
sage_conf-10.0b2-py3-none-any.whl
...
(You can also use ./configure --enable-wheels
to ensure that
these wheels are always available and up to date.)
Note in particular the wheel for sage-conf, which provides
configuration variable settings and the connection to the non-Python
packages installed in SAGE_LOCAL
.
We can now set up a separate virtual environment, in which we install
these wheels and our distribution to be tested. This is where
tox
comes into play: It is the standard Python tool for creating
disposable virtual environments for testing. Every distribution in
SAGE_ROOT/pkgs/
provides a configuration file tox.ini
.
Following the comments in the file
SAGE_ROOT/pkgs/sagemath-standard/tox.ini
, we can try the following
command:
$ ./bootstrap && ./sage -sh -c '(cd pkgs/sagemath-standard && SAGE_NUM_THREADS=16 tox -v -v -v -e sagepython-sagewheels-nopypi)'
This command does not make any changes to the normal installation of
Sage. The virtual environment is created in a subdirectory of
SAGE_ROOT/pkgs/sagemath-standard/.tox/
. After the command
finishes, we can start the separate installation of the Sage library
in its virtual environment:
$ pkgs/sagemath-standard/.tox/sagepython-sagewheels-nopypi/bin/sage
We can also run parts of the testsuite:
$ pkgs/sagemath-standard/.tox/sagepython-sagewheels-nopypi/bin/sage -tp 4 src/sage/graphs/
The whole .tox
directory can be safely deleted at any time.
We can do the same with other distributions, for example the large
distribution sagemath-standard-no-symbolics
(from github issue #35095), which is intended to provide
everything that is currently in the standard Sage library, i.e.,
without depending on optional packages, but without the packages
sage.symbolic
, sage.calculus
, etc.
Again we can run the test with tox
in a separate virtual environment:
$ ./bootstrap && make wheels && ./sage -sh -c '(cd pkgs/sagemath-standard-no-symbolics && SAGE_NUM_THREADS=16 tox -v -v -v -e sagepython-sagewheels-nopypi-norequirements)'
Some small distributions, for example the ones providing the two lowest levels, sagemath-objects and sagemath-categories (from github issue #29865), can be installed and tested without relying on the wheels from the Sage build:
$ ./bootstrap && ./sage -sh -c '(cd pkgs/sagemath-objects && SAGE_NUM_THREADS=16 tox -v -v -v -e sagepython)'
This command finds the declared build-time and run-time dependencies
on PyPI, either as source tarballs or as prebuilt wheels, and builds
and installs the distribution
sagemath-objects in a virtual
environment in a subdirectory of pkgs/sagemath-objects/.tox
.
Building these small distributions serves as a valuable regression testsuite. However, a current issue with both of these distributions is that they are not separately testable: The doctests for these modules depend on a lot of other functionality from higher-level parts of the Sage library. This is being addressed in github issue #35095.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/summer.20program.20for.20undergrads.html ---
Carnegie Mellon Summer School in Logic and Formal Epistemology:
https://www.cmu.edu/dietrich/philosophy/undergraduate/summer-school/
It's a good deal : free classes and dorm rooms for three weeks, and they have a great time. Please share this with promising young people! We can accept 25 students (we typically get about four times that many applicants).
Last updated: Apr 24 2020 at 19:02 UTC


Instance Constructors
-
new
TemplateTestSupport
()
Value Members
-
def
!=
(arg0: AnyRef): Boolean
-
def
!=
(arg0: Any): Boolean
-
def
##
(): Int
-
def
==
(arg0: AnyRef): Boolean
-
def
==
(arg0: Any): Boolean
-
def
afterAll
(configMap: Map[String, Any]): Unit
-
def
afterAll
(): Unit
-
def
asInstanceOf
[T0]
: T0
-
def
assert
(o: Option[String]): Unit
-
def
assert
(o: Option[String], clue: Any): Unit
-
def
assert
(condition: Boolean, clue: Any): Unit
-
def
assert
(condition: Boolean): Unit
-
def
assertOutput
(expectedOutput: String, template: TemplateSource, attributes: Map[String, Any] = Map(), trim: Boolean = false): String
-
def
assertOutputContains
(source: TemplateSource, attributes: Map[String, Any], expected: String*): String
-
def
assertOutputContains
(source: TemplateSource, expected: String*): String
-
def
assertTextContains
(source: String, description: ⇒ String, textLines: String*): Unit
-
def
assertUriOutput
(expectedOutput: String, uri: String, attributes: Map[String, Any] = Map(), trim: Boolean = false): String
-
def
assertUriOutputContains
(uri: String, attributes: Map[String, Any], expected: String*): String
-
def
assertUriOutputContains
(uri: String, expected: String*): String
-
def
baseDir
: File
-
def
beforeAll
(configMap: Map[String, Any]): Unit
-
def
beforeAll
(): Unit
-
def
clone
(): AnyRef
-
implicit def
convertToEqualizer
(left: Any): Equalizer
-
def
createTemplateEngine
: TemplateEngine
-
def
debug
(e: Throwable): Unit
-
def
debug
(e: Throwable, m: ⇒ String, args: Any*): Unit
-
def
debug
(m: ⇒ String, args: Any*): Unit
-
var
engine
: TemplateEngine
-
def
eq
(arg0: AnyRef): Boolean
-
def
equals
(arg0: Any): Boolean
-
def
error
(e: Throwable): Unit
-
def
error
(e: Throwable, m: ⇒ String, args: Any*): Unit
-
def
error
(m: ⇒ String, args: Any*): Unit
-
def
execute
(testName: String, configMap: Map[String, Any]): Unit
-
def
execute
(testName: String): Unit
-
def
execute
(configMap: Map[String, Any]): Unit
-
def
execute
(): Unit
-
def
expect
(expected: Any)(actual: Any): Unit
-
def
expect
(expected: Any, clue: Any)(actual: Any): Unit
-
def
expectedTestCount
(filter: Filter): Int
-
def
fail
(cause: Throwable): Nothing
-
def
fail
(message: String, cause: Throwable): Nothing
-
def
fail
(message: String): Nothing
-
def
fail
(): Nothing
-
def
finalize
(): Unit
-
def
fromUri
(uri: String): UriTemplateSource
-
def
getClass
(): java.lang.Class[_]
-
def
hashCode
(): Int
-
def
ignore
(testName: String, testTags: Tag*)(f: ⇒ Unit): Unit
-
def
info
(e: Throwable): Unit
-
def
info
(e: Throwable, m: ⇒ String, args: Any*): Unit
-
def
info
(m: ⇒ String, args: Any*): Unit
-
implicit def
info
: Informer
-
def
intercept
[T <: AnyRef]
(f: ⇒ Any)(implicit manifest: Manifest[T]): T
-
def
isInstanceOf
[T0]
: Boolean
-
lazy val
log
: Logger
-
def
ne
(arg0: AnyRef): Boolean
-
def
nestedSuites
: List[Suite]
-
def
notify
(): Unit
-
def
notifyAll
(): Unit
-
def
pending
: PendingNothing
-
def
pendingUntilFixed
(f: ⇒ Unit): Unit
-
def
run
(testName: Option[String], reporter: Reporter, stopper: Stopper, filter: Filter, configMap: Map[String, Any], distributor: Option[Distributor], tracker: Tracker): Unit
-
def
runNestedSuites
(reporter: Reporter, stopper: Stopper, filter: Filter, configMap: Map[String, Any], distributor: Option[Distributor], tracker: Tracker): Unit
-
def
runTest
(testName: String, reporter: Reporter, stopper: Stopper, configMap: Map[String, Any], tracker: Tracker): Unit
-
def
runTests
(testName: Option[String], reporter: Reporter, stopper: Stopper, filter: Filter, configMap: Map[String, Any], distributor: Option[Distributor], tracker: Tracker): Unit
-
var
showOutput
: Boolean
-
def
suiteName
: String
-
def
synchronized
[T0]
(arg0: ⇒ T0): T0
-
def
tags
: Map[String, Set[String]]
-
def
test
(testName: String, testTags: Tag*)(f: ⇒ Unit): Unit
-
def
testNames
: Set[String]
-
def
testsFor
(unit: Unit): Unit
-
def
toString
(): String
-
def
trace
(e: Throwable): Unit
-
def
trace
(e: Throwable, m: ⇒ String, args: Any*): Unit
-
def
trace
(m: ⇒ String, args: Any*): Unit
-
def
wait
(): Unit
-
def
wait
(arg0: Long, arg1: Int): Unit
-
def
wait
(arg0: Long): Unit
-
def
warn
(e: Throwable): Unit
-
def
warn
(e: Throwable, m: ⇒ String, args: Any*): Unit
-
def
warn
(m: ⇒ String, args: Any*): Unit
-
def
withClue
(clue: Any)(fun: ⇒ Unit): Unit
-
def
withFixture
(test: NoArgTest): Unit
-
def
groups
: Map[String, Set[String]]
Inherited from Log
Inherited from BeforeAndAfterAll
Inherited from FunSuite
Inherited from Suite
Inherited from AbstractSuite
Inherited from Assertions
Inherited from AnyRef
Inherited from Any
A useful base class for testing templates


Common
OK I've added
item
to this section.
send
send
OK I'm removing
item
from this section.
send
send
Yes, this section contains
item(s)
send
send
No, I don't see it here.
send
send
This section contains
item(s)
send
send
This section contains
number
items:
item(s)
send
send
There is nothing in this section.
send
send
Is this item in my Susan?
Yes
No
send
send
Custom
Custom Response
send
send


Register success.
Register not success.
Domain
Local
Ldap
Username
First Name
Last Name
E-Mail
Password
Confirm Password


Allow the speaker to express themselves but don't try to fix the problem or offer advice. You are there to listen and to comfort.


Uses of Interface
io.sf.carte.doc.dom.DOMNode
Package
Description
This package provide an implementation of the
Document
Object Model (DOM) Level 3 Core Specification that can be used for XML or
HTML documents, albeit with a few deviations from the specification.
-
Uses of DOMNode in io.sf.carte.doc.dom
Modifier and TypeInterfaceDescriptioninterface
Based on W3C'sNonDocumentTypeChildNode
interface.interface
Based on W3C'sParentNode
interface.Modifier and TypeClassDescriptionclass
Implementation of a DOMDocument
.class
A bare DOM element node.class
HTMLDocument
.class
HTML-specific element nodes.Modifier and TypeMethodDescriptionDOMNode.appendChild
(Node newChild) Adds the nodenewChild
to the end of the list of children of this node.TreeWalker.firstChild()
Moves the TreeWalker to the first visible child of the current node, and returns the new node.TreeWalker.getCurrentNode()
The node at which the TreeWalker is currently positioned.DOMNode.getFirstChild()
Get the first child of this node.DOMNode.getLastChild()
Get the last child of this node.DOMNode.getNextSibling()
Get the node immediately following this node in its parent's child list.DOMDocument.getParentNode()
DOMNode.getParentNode()
DOMNode.getPreviousSibling()
Get the node immediately preceding this node in its parent's child list.NodeIterator.getRoot()
The root node to iterate.TreeWalker.getRoot()
The root node.DOMDocument.insertBefore
(Node newChild, Node refChild) Inserts the nodenewChild
right before noderefChild
in the child node list.DOMNode.insertBefore
(Node newChild, Node refChild) Inserts the nodenewChild
right before noderefChild
in the child node list.DOMNodeList.item
(int index) Get the node located at theindex
position in this list.TreeWalker.lastChild()
Moves the TreeWalker to the last visible child of the current node, and returns the new node.NodeIterator.next()
NodeListIterator.next()
NodeIterator.nextNode()
The same asNodeIterator.next()
, but avoids theNoSuchElementException
.TreeWalker.nextNode()
Moves the TreeWalker to the next visible node in document order relative to the current node, and returns the new node.TreeWalker.nextSibling()
Moves the TreeWalker to the next sibling of the current node, and returns the new node.TreeWalker.parentNode()
Moves to and returns the closest visible ancestor node of the current node.ParentNode.prependChild
(Node newChild) Inserts the nodenewChild
at the beginning of the list of children of this node.NodeIterator.previous()
NodeListIterator.previous()
NodeIterator.previousNode()
The same asNodeIterator.previous()
, but avoids theNoSuchElementException
.TreeWalker.previousNode()
Moves the TreeWalker to the previous visible node in document order relative to the current node, and returns the new node.TreeWalker.previousSibling()
Moves the TreeWalker to the previous sibling of the current node, and returns the new node.DOMNode.removeChild
(Node oldChild) Removes the nodeoldChild
from the children of this node.DOMDocument.replaceChild
(Node newChild, Node oldChild) Replaces the nodeoldChild
withnewChild
.DOMNode.replaceChild
(Node newChild, Node oldChild) Replaces the nodeoldChild
withnewChild
.Modifier and TypeMethodDescriptionDOMElement.descendingIterator()
Creates a new iterator descending over the child nodes, starting from the last child node.ParentNode.descendingIterator()
Creates a new iterator descending over the child nodes, starting from the last child node.DOMElement.iterator()
Creates a new iterator over the child nodes.DOMElement.iterator
(int whatToShow, NodeFilter filter) Creates a new iterator over the child nodes.DOMElement.iterator
(NodeFilter filter) Creates a new iterator over the child nodes.Creates a new iterator over the child nodes.ParentNode.iterator()
Creates a new iterator over the child nodes.ParentNode.iterator
(int whatToShow, NodeFilter filter) Creates a new iterator over the child nodes.ParentNode.iterator
(NodeFilter filter) Creates a new iterator over the child nodes.Creates a new iterator over the child nodes.DOMElement.typeIterator
(short typeToShow) Creates a new iterator over the child nodes.ParentNode.typeIterator
(short typeToShow) Creates a new iterator over the child nodes.


Level: level_Variable
Language: language_Variable
Topic: topic_Variable
Graphical representation of search results.
Statistics about the search results.


A simple responsive Video.js player with custom minimalist interface.
Video Credit : Big Buck Bunny.
Audio Credit : The Antlers.


Hello
Projects
Profiles
Good day, rascallions.
Stuff I've done
Spongebob Tribute
Survey Form
Apple Products
Technical Documentation Page
FCC