The On-Line Encyclopedia of Integer Sequences (OEIS)#
You can query the OEIS (Online Database of Integer Sequences) through Sage in order to:
identify a sequence from its first terms.
obtain more terms, formulae, references, etc. for a given sequence.
AUTHORS:
Thierry Monteil (2012-02-10 – 2013-06-21): initial version.
Vincent Delecroix (2014): modifies continued fractions because of github issue #14567
Moritz Firsching (2016): modifies handling of dead sequence, see github issue #17330
Thierry Monteil (2019): refactorization (unique representation github issue #28480, laziness github issue #28627)
EXAMPLES:
sage: oeis
The On-Line Encyclopedia of Integer Sequences (https://oeis.org/)
What about a sequence starting with \(3, 7, 15, 1\) ?
sage: search = oeis([3, 7, 15, 1], max_results=4) ; search # optional -- internet # random
0: A001203: Simple continued fraction expansion of Pi.
1: A240698: Partial sums of divisors of n, cf. A027750.
2: A082495: a(n) = (2^n - 1) mod n.
3: A165416: Irregular array read by rows: The n-th row contains those distinct positive integers that each, when written in binary, occurs as a substring in binary n.
sage: [u.id() for u in search] # optional -- internet # random
['A001203', 'A240698', 'A082495', 'A165416']
sage: c = search[0] ; c # optional -- internet
A001203: Simple continued fraction expansion of Pi.
sage: c.first_terms(15) # optional -- internet
(3, 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1)
sage: c.examples() # optional -- internet
0: Pi = 3.1415926535897932384...
1: = 3 + 1/(7 + 1/(15 + 1/(1 + 1/(292 + ...))))
2: = [a_0; a_1, a_2, a_3, ...] = [3; 7, 15, 1, 292, ...].
sage: c.comments() # optional -- internet
0: The first<PHONE_NUMBER> terms were computed by _Eric W. Weisstein_ on Sep 18 2011.
1: The first<PHONE_NUMBER>1 terms were computed by _Eric W. Weisstein_ on Jul 17 2013.
2: The first<PHONE_NUMBER>0 terms were computed by _Eric W. Weisstein_ on Jul 27 2013.
3: The first<PHONE_NUMBER>6 terms were computed by _Syed Fahad_ on Apr 27 2021.
sage: x = c.natural_object() ; type(x) # optional -- internet
<class 'sage.rings.continued_fraction.ContinuedFraction_periodic'>
sage: x.convergents()[:7] # optional -- internet
[3, 22/7, 333/106, 355/113, 103993/33102, 104348/33215, 208341/66317]
sage: RR(x.value()) # optional -- internet
3.14159265358979
sage: RR(x.value()) == RR(pi) # optional -- internet
True
What about posets ? Are they hard to count ? To which other structures are they related ?
sage: [Posets(i).cardinality() for i in range(10)]
[1, 1, 2, 5, 16, 63, 318, 2045, 16999, 183231]
sage: oeis(_) # optional -- internet
0: A000112: Number of partially ordered sets ("posets") with n unlabeled elements.
sage: p = _[0] # optional -- internet
sage: 'hard' in p.keywords() # optional -- internet
True
sage: len(p.formulas()) # optional -- internet
0
sage: len(p.first_terms()) # optional -- internet
17
sage: p.cross_references(fetch=True) # optional -- internet # random
0: A000798: Number of different quasi-orders (or topologies, or transitive digraphs) with n labeled elements.
1: A001035: Number of partially ordered sets ("posets") with n labeled elements (or labeled acyclic transitive digraphs).
2: A001930: Number of topologies, or transitive digraphs with n unlabeled nodes.
3: A006057: Number of topologies on n labeled points satisfying axioms T_0-T_4.
4: A079263: Number of constrained mixed models with n factors.
5: A079265: Number of antisymmetric transitive binary relations on n unlabeled points.
6: A263859: Triangle read by rows: T(n,k) (n>=1, k>=0) is the number of posets with n elements and rank k (or depth k+1).
7: A316978: Number of factorizations of n into factors > 1 with no equivalent primes.
8: A319559: Number of non-isomorphic T_0 set systems of weight n.
9: A326939: Number of T_0 sets of subsets of {1..n} that cover all n vertices.
10: A326943: Number of T_0 sets of subsets of {1..n} that cover all n vertices and are closed under intersection.
...
What does the Taylor expansion of the \(e^{e^x-1}\) function have to do with primes ?
sage: x = var('x') ; f(x) = e^(e^x - 1)
sage: L = [a*factorial(b) for a,b in taylor(f(x), x, 0, 20).coefficients()] ; L
[1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975, 678570, 4213597,
27644437, 190899322,<PHONE_NUMBER>,<PHONE_NUMBER>7,<PHONE_NUMBER>4,<PHONE_NUMBER>59,
5832742205057,<PHONE_NUMBER>5372]
sage: oeis(L) # optional -- internet
0: A000110: Bell or exponential numbers: number of ways to partition a set of n labeled elements.
1: A292935: E.g.f.: exp(exp(-x) - 1).
sage: b = _[0] # optional -- internet
sage: b.formulas()[0] # optional -- internet
'E.g.f.: exp(exp(x) - 1).'
sage: [i for i in b.comments() if 'prime' in i][-1] # optional -- internet
'Number n is prime if ...'
sage: [n for n in range(2, 20) if (b(n)-2) % n == 0] # optional -- internet
[2, 3, 5, 7, 11, 13, 17, 19]
See also
If you plan to do a lot of automatic searches for subsequences, you should consider installing
SloaneEncyclopedia
, a local partial copy of the OEIS.Some infinite OEIS sequences are implemented in Sage, via the
sloane_functions
module.
Todo
in case of flood, suggest the user to install the off-line database instead.
interface with the off-line database (or reimplement it).
Classes and methods#
- class sage.databases.oeis.FancyTuple(iterable=(), /)#
Bases:
tuple
This class inherits from
tuple
, it allows to nicely print tuples whose elements have a one line representation.EXAMPLES:
sage: from sage.databases.oeis import FancyTuple sage: t = FancyTuple(['zero', 'one', 'two', 'three', 4]) ; t 0: zero 1: one 2: two 3: three 4: 4 sage: t[2] 'two'
- class sage.databases.oeis.OEIS#
Bases:
object
The On-Line Encyclopedia of Integer Sequences.
OEIS
is a class representing the On-Line Encyclopedia of Integer Sequences. You can query it using its methods, butOEIS
can also be called directly with three arguments:query
- it can be:a string representing an OEIS ID (e.g. ‘A000045’).
an integer representing an OEIS ID (e.g. 45).
a list representing a sequence of integers.
a string, representing a text search.
max_results
- (integer, default: 30) the maximum number of results to return, they are sorted according to their relevance. In any cases, the OEIS website will never provide more than 100 results.first_result
- (integer, default: 0) allow to skip thefirst_result
first results in the search, to go further. This is useful if you are looking for a sequence that may appear after the 100 first found sequences.
OUTPUT:
if
query
is an integer or an OEIS ID (e.g. ‘A000045’), returns the associated OEIS sequence.if
query
is a string, returns a tuple of OEIS sequences whose description corresponds to the query. Those sequences can be used without the need to fetch the database again.if
query
is a list or tuple of integers, returns a tuple of OEIS sequences containing it as a subsequence. Those sequences can be used without the need to fetch the database again.
EXAMPLES:
sage: oeis The On-Line Encyclopedia of Integer Sequences (https://oeis.org/)
A particular sequence can be called by its A-number or number:
sage: oeis('A000040') # optional -- internet A000040: The prime numbers. sage: oeis(45) # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1.
The database can be searched by subsequence:
sage: search = oeis([1,2,3,5,8,13]) ; search # optional -- internet 0: A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. 1: A290689: Number of transitive rooted trees with n nodes. 2: A027926: Triangular array T read by rows: T(n,0) = T(n,2n) = 1 for n >= 0; T(n,1) = 1 for n >= 1; T(n,k) = T(n-1,k-2) + T(n-1,k-1) for k = 2..2n-1, n >= 2. sage: fibo = search[0] # optional -- internet sage: fibo.name() # optional -- internet 'Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1.' sage: print(fibo.first_terms()) # optional -- internet (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155) sage: fibo.cross_references()[0] # optional -- internet 'A039834' sage: fibo == oeis(45) # optional -- internet True sage: sfibo = oeis('A039834') sage: sfibo.first_terms() # optional -- internet (1, 1, 0, 1, -1, 2, -3, 5, -8, 13, -21, 34, -55, 89, -144, 233, -377, 610, -987, 1597, -2584, 4181, -6765, 10946, -17711, 28657, -46368, 75025, -121393, 196418, -317811, 514229, -832040, 1346269, -2178309, 3524578, -5702887, 9227465, -14930352, 24157817) sage: tuple(abs(i) for i in sfibo.first_terms())[2:20] == fibo.first_terms()[:18] # optional -- internet True sage: fibo.formulas()[4] # optional -- internet 'F(n) = F(n-1) + F(n-2) = -(-1)^n F(-n).' sage: fibo.comments()[6] # optional -- internet "F(n+2) = number of binary sequences of length n that have no consecutive 0's." sage: fibo.links()[0] # optional -- internet 'https://oeis.org/A000045/b000045.txt'
The database can be searched by description:
sage: oeis('prime gap factorization', max_results=4) # optional --internet # random 0: A073491: Numbers having no prime gaps in their factorization. 1: A073485: Product of any number of consecutive primes; squarefree numbers with no gaps in their prime factorization. 2: A073490: Number of prime gaps in factorization of n. 3: A073492: Numbers having at least one prime gap in their factorization.
Note
The following will fetch the OEIS database only once:
sage: oeis([1,2,3,5,8,13]) # optional -- internet 0: A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. 1: A290689: Number of transitive rooted trees with n nodes. 2: A027926: Triangular array T read by rows: T(n,0) = T(n,2n) = 1 for n >= 0; T(n,1) = 1 for n >= 1; T(n,k) = T(n-1,k-2) + T(n-1,k-1) for k = 2..2n-1, n >= 2. sage: oeis('A000045') # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1.
Indeed, due to some caching mechanism, the sequence is not re-created when called from its ID.
- browse()#
Open the OEIS web page in a browser.
EXAMPLES:
sage: oeis.browse() # optional -- webbrowser
- find_by_description(description, max_results=3, first_result=0)#
Search for OEIS sequences corresponding to the description.
INPUT:
description
– (string) the description the searched sequences.max_results
– (integer, default: 3) the maximum number of results we want. In any case, the on-line encyclopedia will not return more than 100 results.first_result
– (integer, default: 0) allow to skip thefirst_result
first results in the search, to go further. This is useful if you are looking for a sequence that may appear after the 100 first found sequences.
OUTPUT:
a tuple (with fancy formatting) of at most
max_results
OEIS sequences. Those sequences can be used without the need to fetch the database again.
EXAMPLES:
sage: oeis.find_by_description('prime gap factorization') # optional -- internet 0: A...: ... 1: A...: ... 2: A...: ... sage: prime_gaps = _[2] ; prime_gaps # optional -- internet A... sage: oeis('beaver') # optional -- internet 0: A...: ...eaver... 1: A...: ...eaver... 2: A...: ...eaver... sage: oeis('beaver', max_results=4, first_result=2) # optional -- internet 0: A...: ...eaver... 1: A...: ...eaver... 2: A...: ...eaver... 3: A...: ...eaver...
- find_by_entry(entry)#
INPUT:
entry
– a string corresponding to an entry in the internal format of the OEIS.
OUTPUT:
The corresponding OEIS sequence.
EXAMPLES:
sage: entry = '%I A262002\n%N A262002 L.g.f.: log( Sum_{n>=0} x^n/n! * Product_{k=1..n} (k^2 + 1) ).\n%K A262002 nonn' sage: s = oeis.find_by_entry(entry) sage: s A262002: L.g.f.: log( Sum_{n>=0} x^n/n! * Product_{k=1..n} (k^2 + 1) ).
- find_by_id(ident, fetch=False)#
INPUT:
ident
– a string representing the A-number of the sequence or an integer representing its number.fetch
– (bool, default:False
) whether to force fetching the content of the sequence on the internet.
OUTPUT:
The OEIS sequence whose A-number or number corresponds to
ident
.
EXAMPLES:
sage: oeis.find_by_id('A000040') # optional -- internet A000040: The prime numbers. sage: oeis.find_by_id(40) # optional -- internet A000040: The prime numbers.
- find_by_subsequence(subsequence, max_results=3, first_result=0)#
Search for OEIS sequences containing the given subsequence.
INPUT:
subsequence
– a list or tuple of integers.max_results
– (integer, default: 3), the maximum of results requested.first_result
– (integer, default: 0) allow to skip thefirst_result
first results in the search, to go further. This is useful if you are looking for a sequence that may appear after the 100 first found sequences.
OUTPUT:
a tuple (with fancy formatting) of at most
max_results
OEIS sequences. Those sequences can be used without the need to fetch the database again.
EXAMPLES:
sage: oeis.find_by_subsequence([2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]) # optional -- internet # random 0: A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. 1: A212804: Expansion of (1 - x)/(1 - x - x^2). 2: A020695: Pisot sequence E(2,3). sage: fibo = _[0] ; fibo # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1.
- class sage.databases.oeis.OEISSequence(ident)#
Bases:
SageObject
,UniqueRepresentation
The class of OEIS sequences.
This class implements OEIS sequences. They are usually produced by calls to the On-Line Encyclopedia of Integer Sequences, represented by the class
OEIS
.Note
Since some sequences do not start with index 0, there is a difference between calling and getting item, see
__call__()
for more detailssage: sfibo = oeis('A039834') sage: sfibo.first_terms()[:10] # optional -- internet (1, 1, 0, 1, -1, 2, -3, 5, -8, 13) sage: sfibo(-2) # optional -- internet 1 sage: sfibo(3) # optional -- internet 2 sage: sfibo.offsets() # optional -- internet (-2, 6) sage: sfibo[0] # optional -- internet 1 sage: sfibo[6] # optional -- internet -3
- __call__(k)#
Return the element of the sequence
self
with indexk
.INPUT:
k
– integer.
OUTPUT:
integer.
Note
The first index of the sequence
self
is not necessarily zero, it depends on the first offset ofself
. If the sequence represents the decimal expansion of a real number, the index 0 corresponds to the digit right after the decimal point.EXAMPLES:
sage: f = oeis(45) # optional -- internet sage: f.first_terms()[:10] # optional -- internet (0, 1, 1, 2, 3, 5, 8, 13, 21, 34) sage: f(4) # optional -- internet 3
sage: sfibo = oeis('A039834') # optional -- internet sage: sfibo.first_terms()[:10] # optional -- internet (1, 1, 0, 1, -1, 2, -3, 5, -8, 13) sage: sfibo(-2) # optional -- internet 1 sage: sfibo(4) # optional -- internet -3 sage: sfibo.offsets() # optional -- internet (-2, 6)
- author()#
Return the author of the sequence in the encyclopedia.
OUTPUT:
string.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.author() # optional -- internet '_N. J. A. Sloane_, 1964'
- browse()#
Open the OEIS web page associated to the sequence
self
in a browser.EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet webbrowser A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.browse() # optional -- internet webbrowser
- comments()#
Return a tuple of comments associated to the sequence
self
.OUTPUT:
tuple of strings (with fancy formatting).
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.comments()[:8] # optional -- internet 0: D. E. Knuth writes... 1: In keeping with historical accounts... 2: Susantha Goonatilake writes... 3: Also sometimes called Hemachandra numbers. 4: Also sometimes called Lamé's sequence. 5: ... 6: F(n+2) = number of binary sequences of length n that have no consecutive 0's. 7: F(n+2) = number of subsets of {1,2,...,n} that contain no consecutive integers.
- cross_references(fetch=False)#
Return a tuple of cross references associated to the sequence
self
.INPUT:
fetch
– boolean (default:False
).
OUTPUT:
if
fetch
isFalse
, return a list of OEIS IDs (strings).if
fetch
ifTrue
, return a tuple of OEIS sequences.
EXAMPLES:
sage: nbalanced = oeis("A005598") ; nbalanced # optional -- internet A005598: a(n) = 1 + Sum_{i=1..n} (n-i+1)*phi(i). sage: nbalanced.cross_references() # optional -- internet ('A000010', 'A002088', 'A011755', 'A049695', 'A049703', 'A103116') sage: nbalanced.cross_references(fetch=True) # optional -- internet 0: A000010: Euler totient function phi(n): count numbers <= n and prime to n. 1: A002088: Sum of totient function: a(n) = Sum_{k=1..n} phi(k), cf. A000010. 2: A011755: a(n) = Sum_{k=1..n} k*phi(k). 3: A049695: Array T read by diagonals; T(i,j) is the number of nonnegative slopes of lines determined by 2 lattice points in [ 0,i ] X [ 0,j ] if i > 0; T(0,j)=1 if j > 0; T(0,0)=0. 4: A049703: a(0) = 0; for n>0, a(n) = A005598(n)/2. 5: A103116: a(n) = Sum_{i=1..n} (n-i+1)*phi(i). sage: phi = _[3] # optional -- internet
- examples()#
Return a tuple of examples associated to the sequence
self
.OUTPUT:
tuple of strings (with fancy formatting).
EXAMPLES:
sage: c = oeis(1203) ; c # optional -- internet A001203: Simple continued fraction expansion of Pi. sage: c.examples() # optional -- internet 0: Pi = 3.1415926535897932384... 1: = 3 + 1/(7 + 1/(15 + 1/(1 + 1/(292 + ...)))) 2: = [a_0; a_1, a_2, a_3, ...] = [3; 7, 15, 1, 292, ...].
- extensions_or_errors()#
Return a tuple of extensions or errors associated to the sequence
self
.OUTPUT:
tuple of strings (with fancy formatting).
EXAMPLES:
sage: sfibo = oeis('A039834') ; sfibo # optional -- internet A039834: a(n+2) = -a(n+1) + a(n) (signed Fibonacci numbers) with a(-2) = a(-1) = 1; or Fibonacci numbers (A000045) extended to negative indices. sage: sfibo.extensions_or_errors()[0] # optional -- internet 'Signs corrected by _Len Smiley_ and _N. J. A. Sloane_'
- first_terms(number=None)#
INPUT:
number
– (integer orNone
, default:None
) the number of terms returned (if less than the number of available terms). When set to None, returns all the known terms.
OUTPUT:
tuple of integers.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.first_terms()[:10] # optional -- internet (0, 1, 1, 2, 3, 5, 8, 13, 21, 34)
Handle dead sequences, see github issue #17330
sage: oeis(5000).first_terms(12) # optional -- internet doctest:warning ... RuntimeWarning: This sequence is dead: "A005000: Erroneous version of A006505." (1, 0, 0, 1, 1, 1, 11, 36, 92, 491, 2537)
- formulas()#
Return a tuple of formulas associated to the sequence
self
.OUTPUT:
tuple of strings (with fancy formatting).
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.formulas()[2] # optional -- internet 'F(n) = ((1+sqrt(5))^n - (1-sqrt(5))^n)/(2^n*sqrt(5)).'
- id(format='A')#
The ID of the sequence
self
is the A-number that identifiesself
.INPUT:
format
– (string, default: ‘A’).
OUTPUT:
if
format
is set to ‘A’, returns a string of the form ‘A000123’.if
format
is set to ‘int’ returns an integer of the form 123.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.id() # optional -- internet 'A000045' sage: f.id(format='int') # optional -- internet 45
- is_dead(warn_only=False)#
Tell whether the sequence is dead (i.e. erroneous).
INPUT:
warn_only – (bool, default:
False
), whether to warn when the sequence is dead instead of returning a boolean.
EXAMPLES:
A warn_only test is triggered as soon as some information on the sequence is queried:
sage: s = oeis(17) sage: s # optional -- internet doctest:warning ... RuntimeWarning: This sequence is dead: "A000017: Erroneous version of A032522." A000017: Erroneous version of A032522.
- is_finite()#
Tell whether the sequence is finite.
Currently, OEIS only provides a keyword when the sequence is known to be finite. So, when this keyword is not there, we do not know whether it is infinite or not.
OUTPUT:
True
when the sequence is known to be finite.Unknown
otherwise.
Todo
Ask OEIS for a keyword ensuring that a sequence is infinite.
EXAMPLES:
sage: s = oeis('A114288') ; s # optional -- internet A114288: Lexicographically earliest solution of any 9 X 9 sudoku, read by rows. sage: s.is_finite() # optional -- internet True
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.is_finite() # optional -- internet Unknown
- is_full()#
Tell whether the sequence
self
is full, that is, if all its elements are listed inself.first_terms()
.Currently, OEIS only provides a keyword when the sequence is known to be full. So, when this keyword is not there, we do not know whether some elements are missing or not.
OUTPUT:
True
when the sequence is known to be full.Unknown
otherwise.
EXAMPLES:
sage: s = oeis('A114288') ; s # optional -- internet A114288: Lexicographically earliest solution of any 9 X 9 sudoku, read by rows. sage: s.is_full() # optional -- internet True
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.is_full() # optional -- internet Unknown
- keywords()#
Return the keywords associated to the sequence
self
.OUTPUT:
tuple of strings.
EXAMPLES:
sage: f = oeis(53) ; f # optional -- internet A000053: Local stops on New York City... sage: f.keywords() # optional -- internet ('nonn', 'fini', ...)
- links(browse=None, format='guess')#
Return, display or browse links associated to the sequence
self
.INPUT:
browse
– an integer, a list of integers, or the word ‘all’ (default:None
) : which links to open in a web browser.format
– string (default: ‘guess’) : how to display the links.
OUTPUT:
- tuple of strings (with fancy formatting):
if
format
isurl
, returns a tuple of absolute links without description.if
format
ishtml
, returns nothing but prints a tuple of clickable absolute links in their context.if
format
isguess
, adapts the output to the context (command line or notebook).if
format
israw
, the links as they appear in the database, relative links are not made absolute.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.links(format='url') # optional -- internet 0: https://oeis.org/A000045/b000045.txt 1: ... 2: ... sage: f.links(format='raw') # optional -- internet 0: N. J. A. Sloane, <a href="/A000045/b000045.txt">The first 2000 Fibonacci numbers: Table of n, F(n) for n = 0..2000</a> 1: ... 2: ...
- name()#
Return the name of the sequence
self
.OUTPUT:
string.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.name() # optional -- internet 'Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1.'
- natural_object()#
Return the natural object associated to the sequence
self
.OUTPUT:
- If the sequence
self
corresponds to the digits of a real number, returns the associated real number (as an element of RealLazyField()).
- If the sequence
- If the sequence
self
corresponds to the convergents of a continued fraction, returns the associated continued fraction.
- If the sequence
Warning
This method forgets the fact that the returned sequence may not be complete.
Todo
ask OEIS to add a keyword telling whether the sequence comes from a power series, e.g. for OEIS sequence A000182
discover other possible conversions.
 Avogadro... sage: av.natural_object() # optional -- internet 6.022141000000000?e23
sage: fib = oeis('A000045') ; fib # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: x = fib.natural_object() ; x.universe() # optional -- internet Non negative integer semiring
sage: sfib = oeis('A039834') ; sfib # optional -- internet A039834: a(n+2) = -a(n+1) + a(n) (signed Fibonacci numbers) with a(-2) = a(-1) = 1; or Fibonacci numbers (A000045) extended to negative indices. sage: x = sfib.natural_object() ; x.universe() # optional -- internet Integer Ring
- offsets()#
Return the offsets of the sequence
self
.The first offset is the subscript of the first term in the sequence
self
. When, the sequence represents the decimal expansion of a real number, it corresponds to the number of digits of its integer part.The second offset is the first term in the sequence
self
(starting from 1) whose absolute value is greater than 1. This is set to 1 if all the terms are 0 or +-1.OUTPUT:
tuple of two elements.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.offsets() # optional -- internet (0, 4) sage: f.first_terms()[:4] # optional -- internet (0, 1, 1, 2)
- old_IDs()#
Return the IDs of the sequence
self
corresponding to ancestors of OEIS.OUTPUT:
a tuple of at most two strings. When the string starts with \(M\), it corresponds to the ID of “The Encyclopedia of Integer Sequences” of 1995. When the string starts with \(N\), it corresponds to the ID of the “Handbook of Integer Sequences” of 1973.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.old_IDs() # optional -- internet ('M0692', 'N0256')
- online_update()#
Fetch the online OEIS to update the informations about this sequence.
- programs(language='all', preparsing=True, keep_comments=False)#
Return programs for the sequence
self
in the givenlanguage
.INPUT:
language
– string (default: ‘all’), the chosen language. Possible values are ‘all’ for the full list, or any language name, for example ‘sage’, ‘maple’, ‘mathematica’, etc.
Some further optional input is specific to sage code treatment:
preparsing
– boolean (default:True
) whether to preparse sage codekeep_comments
– boolean (default:False
) whether to keep comments in sage code
OUTPUT:
If
language
is'all'
, this returns a sorted list of pairs (language, code), where every language can appear several times.Otherwise, this returns a list of programs in the
language
, each program being a tuple of strings (with fancy formatting).EXAMPLES:
sage: ee = oeis('A001113') ; ee # optional -- internet A001113: Decimal expansion of e. sage: ee.programs('pari')[0] # optional -- internet 0: default(realprecision, 50080); x=exp(1); for (n=1, 50000, d=floor(x); x=(x-d)*10; write("b001113.txt", n, " ", d)); \\ _Harry J. Smith_, Apr 15 2009 sage: G = oeis.find_by_id('A27642') # optional -- internet sage: G.programs('all') # optional -- internet [('haskell', ...), ('magma', ...), ... ('python', ...), ('sage', ...)]
- raw_entry()#
Return the raw entry of the sequence
self
, in the OEIS format.The raw entry is fetched online if needed.
OUTPUT:
string.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: print(f.raw_entry()) # optional -- internet %I A000045 M0692 N0256 %S A000045 0,1,1,2,3,5,8,13,21,34,55,89,144,... %T A000045 10946,17711,28657,46368,... ...
- references()#
Return a tuple of references associated to the sequence
self
.OUTPUT:
tuple of strings (with fancy formatting).
EXAMPLES:
sage: w = oeis(7540) ; w # optional -- internet A007540: Wilson primes: primes p such that (p-1)! == -1 (mod p^2). sage: w.references() # optional -- internet ...Albert H. Beiler, Recreations in the Theory of Numbers, Dover, NY, 1964, p. 52. ...
- show()#
Display most available informations about the sequence
self
.EXAMPLES:
sage: s = oeis(12345) # optional -- internet sage: s.show() # optional -- internet ID A012345 NAME Coefficients in the expansion sinh(arcsin(x)*arcsin(x)) = 2*x^2/2!+8*x^4/4!+248*x^6/6!+11328*x^8/8!+... FIRST TERMS (2, 8, 248, 11328, 849312, 94857600,<PHONE_NUMBER>0,<PHONE_NUMBER>000,<PHONE_NUMBER>49760,<PHONE_NUMBER>97529600,<PHONE_NUMBER>65430077440,<PHONE_NUMBER>2456911912960,<PHONE_NUMBER>1079493369569280) LINKS 0: https://oeis.org/A012345/b012345.txt FORMULAS ... OFFSETS (0, 1) URL https://oeis.org/A012345 AUTHOR Patrick Demichel (patrick.demichel(AT)hp.com)
- test_compile_sage_code()#
Try to compile the extracted sage code, if there is any.
If there are several sage code fields, they are all considered.
Dead sequences are considered to compile correctly by default.
This returns
True
if the code compiles, and raises an error otherwise.EXAMPLES:
One correct sequence:
sage: s = oeis.find_by_id('A027642') # optional -- internet sage: s.test_compile_sage_code() # optional -- internet True
One dead sequence:
sage: s = oeis.find_by_id('A000154') # optional -- internet sage: s.test_compile_sage_code() # optional -- internet doctest:warning ... RuntimeWarning: This sequence is dead: ... True
- url()#
Return the URL of the page associated to the sequence
self
.OUTPUT:
string.
EXAMPLES:
sage: f = oeis(45) ; f # optional -- internet A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1. sage: f.url() # optional -- internet 'https://oeis.org/A000045'
- sage.databases.oeis.to_tuple(string)#
Convert a string to a tuple of integers.
EXAMPLES:
sage: from sage.databases.oeis import to_tuple sage: to_tuple('12,55,273') (12, 55, 273)


Js
on
Diff
Patch
source
examples
default
text
moving around
from a gist
query params
raw urls
JSON Left
{ }
loading...
JSON Right
{ }
loading...
Delta
Visual
JSON
JSON (Annotated)
Show unchanged values
(
KB)


Thank You!
Your form has been successfully subbmitted!
For Further Queries Conatct Bhagia Sheri (Roll # WM2916) through
Or
Go Back


Paris, France
Notre-Dame-de-Lorette
Claude Monet was baptized in this lavishly ornate Paris church.
by AmrapaliThe Église Notre Dame de Lorette, with its gilded ceiling and profusion of paintings and frescoes, is one of the most ornate churches in Paris. Constructed in the neoclassical style of architecture, the austere façade of the church stands in sharp contrast to the ornamental excesses of its interior.
During the 19th century, as the area to the north of the Grands Boulevards was undergoing rapid expansion, the city government decided to hold an architectural competition for a new church. It would be constructed at the site of a chapel destroyed in 1796 in the 9th arrondissement.
The French architect Louis-Hippolyte Lebas won the competition and began building the church in 1823, completing construction in 1836. A protected historical monument since 1984, the church has mostly remained off the tourist map, but is no less a jewel in the city’s cornucopia of architectural treasures.
Sumptuously furnished with marble and gold, the extravagant interior of the church wasn’t initially very popular among Parisians who considered it lacking in spirituality. Furthermore, the church’s location in a neighborhood inhabited by wealthy men who kept mistresses earned it the pejorative moniker of being the church of the lorettes (prostitutes).
In a city like Paris with an embarrassment of architectural riches, the Church of Notre Dame de Lorette is still a sight to behold. Its interior and exterior offer a study in contrasts. In its architectural style, the church was inspired by the design of the Roman basilicas. The façade, unadorned to the point of severity, consists of a massive pediment, displaying the sculpted allegorical figures of Faith, Hope, and Charity mounted on tall Corinthian columns.
The interior of the church, on the other hand, is lavishly decorated. The ceiling, richly appointed in dark blue and gold, is embellished with the initials of the Virgin Mary. The walls of the church are adorned with vividly colorful hand-painted murals that have been brought to life against a burnished gold background. The artwork, executed in an Italianate style and biblical in subject, is what makes this church truly spectacular.
In addition to its grandeur, the church has another local claim to fame. Inside this colorful sanctuary is where painter Claude Monet was baptized. Monet was born in 1840 and was baptized into the local church parish a year later. His family, however, did not stay in Paris for long and moved away in 1845 to Le Havre in Normandy.
Know Before You Go
The church is open every day. There is no entry fee. The Notre-Dame-de-Lorette metro stop on line 12 is the closest metro station.
Community Discussion
-
No Comments Yet
Start the discussion.
forum Visit our forums.
Sources
- The Architecture of Paris: An Architectural Guide, Andrew Ayers, Edition Axel Menges, 2004
- https://www.france-voyage.com/cities-towns/paris-29996/church-notre-dame-lorette-17366.htm
- https://www.claudemonetgallery.org/biography.html
- https://www.liturgicalartsjournal.com/2019/04/the-parisian-church-of-notre-dame-de.html
- https://en.parisinfo.com/paris-museum-monument/71964/Eglise-Notre-Dame-de-Lorette
- https://www.wmf.org/project/churches-saint-merri-and-notre-dame-de-lorette
- https://www.wmf.org/project/notre-dame-de-lorette


| 860 | (A) | Than the kyng callede hym to constabiłłs tene |
| 864 | (C) | The kynge kallede to hym . his connstables þenne |
| 850 | (D) | ¶ To the kyng were callyd Conestables þenne |
| 827 | (E) | & leet calle cunstaples . & kepers of þe peple |
| (Ex) | ---- no text ---- | |
| 880 | (L) | To þe kyng were called constables þanne |
| 800 | (P) | To þe kynge war calde constables þan |
| (U) | ---- no text ---- | |
| (V) | ---- no text ---- |


I Love What I Do
I'm a Fullstack Web Developer based in the Orlando, Florida area. I graduated from New York University with a bachelor's degree in Economics. I worked in Manhattan as a Commercial Lines Insurance Broker at Marsh & McLennan before deciding to transition careers into web development. I recently graduated from University of Central Florida's Coding Boot Camp, learning Javascript and the MERN development stack. I am currently pursuing employment as a fullstack or back-end web developer. Blending my passion of programming with technical skills, I will deliver unique web development and design solutions.
Ever since playing The Legend of Zelda: A Link to the Past with my father, I've been a lifelong fan of video games. I've recently been playing Counter-Strike: Global Offensive and League of Legends.
As a fan of all things music, I started researching into better headphones in college in pursuit of better sound quality. I now have a few mid-range open and closed-back headphones for different audio experiences.
After going to my first Music Festival in 2014 in New York City, I've traveled all over the United States for various events, including Las Vegas, Atlanta, and San Bernardino. My next trip is in the summer of 2017 to Rothbury Michigan for Electric Forest.
Present your work in beautiful way


Note on Terminology¶
Ada often uses different terminology than any of the languages I’ve used. The goal is an overview without jargon, the only Ada-specific terms necessary for this overview are “subprogram”, which refers to functions and procedures, and “procedures” which in most C-like language would be a “function” which returns nothing (i.e. void).
Packages, the Building Blocks of Ada¶
Ada descends from Pascal, and yet uses many concepts already familiar to C or C++ programmers. As a long time C++ programmer, I find Ada leverages the concepts I’m used to in more formal, and often compiler-checked ways.
Types and Ada, The Elephant in the Room¶
Ada emphasizes types, but their consistent use despite their complexity means I can ignore them for now. Nearly every other Ada overview and tutorial focuses on them, but they’re an incredibly deep topic in Ada. Rather than get bogged down there, let’s look at what Ada looks like and how programs are structured.
Subprograms (functions and procedures)¶
Ada draws a line between functions, which return values, and procedures which
do not return a value. Collectively referred to as “subprograms”, either of
these may have input (in
) and output (out
) parameters, with parameters
being allowed to also be both an input and output (in out
). in
is
optional for functions. Note that parameters are separated by semicolons
(;
), not by commas (,
).
procedure Rectangle_Area(Width : in Float; Height : in Float; Area : out Float) is
begin
Area := Width * Height;
end Rectangle_Area;
function Rectangle_Area(Width : Float; Height : Float) return Float is
begin
return Width * Height;
end Rectangle_Area;
Short functions may be written as expressions bounded by parentheses. in
is
also optional for functions, and parameters with the same type can be grouped.
function Add (L, R : Float2) return Float2 is (L.X + R.X, L.Y + R.Y);
-- Add two-dimensional vectors.
Multiple subprograms can exist with the same name, so the one used is determined by the types of the parameters and also the returned type. There are no implicit conversions between floating point and integer types, which maximize clarity.
function Area (Width, Height : in Float) return Float is (Width * Height); function Area (Width, Height : in Integer) return Integer is (Width * Height);
The basic operators can be overloaded as well. Assignment (:=
) is
not considered an operator, and therefore cannot be overloaded.
function "+"(L, R : Float2) return Float2 is (L.X + R.X, L.Y + R.Y);
Packages¶
As the fundamental building block of Ada, “packages” compose Ada programs, namespaces which exhibit the logical and physical interfaces in a manner similar to C++ header and source files. Most languages don’t have a concept of “physical interface”–it’s things the compiler needs to know, but are not part of the logical interface of the program, such as size details for structs and classes.
Instead of a header files providing an informal spec and an associated source file being the translation unit, in Ada a package is roughly analogous to a “header file,” and that package’s body is the “source file”, except as if everything in each file is in a namespace given by the file name.
Top-level package specifications, appear in *.ads (Ada specification) files, with their implementations (“bodies”) in *.adb (Ada body) files, and only one top-level package specification or package body per file.
Ada packages can also be nested and support visiblity rules for sharing details with child packages. Child packages are given by dotted names; A.B is a child of package A.
Packages can also contain initialization code for the package to run at program startup prior to entering the main procedure, with the ability to describe dependencies in package start up order. This solves a specific C++ issue in which static initialization order is not known, while also offering the ability to avoid deferred first-time usage costs, such as with singletons.
Ada uses “aspects” to denote additional properites of packages, subprograms, and types. Along with aspects, compiler pragmas allows description of initialization dependencies, as well as providing high level checks, such as pragma Preelaborate to ensure a package has no initialization, or the with Pure aspect to ensure that a package has no state and subprograms cannot have side effects.
---------------------------------------------------------
-- Example.ads
--
-- Package specification
package Example is
-- interface
-- Analogous to a struct.
type Scorpio is record;
Sample : Integer;
end record;
-- "Class declaration"
type Capricorn is private;
private
-- physical interface
-- "Class definition"
type Capricorn is record
Age : Integer;
end record;
end Example;
---------------------------------------------------------
-- in Example.adb
--
-- Package body
package body Example is
-- implementation details
-- Function used only in implementation
procedure Foo is
begin
null;
end Foo;
begin -- (optional)
-- Initialization code to run at startup (optional)
end Example;
|
//////////////////////////////////////////////////////////////////////////
// Sample.h
#pragma once
namespace Example {
struct Scorpio {
int sample;
};
// Public interface
class Capricorn {
public:
Capricorn();
private:
// Part of the physical interface, since compilers need to know the
// size of the struct when passed by value or used on the stack.
//
// Physical interface, visible due to technical limitations of the
// compilation model, since compilers need to know the size of the
// struct when passed by value or used on the stack.
int age;
};
} // namespace Example
//////////////////////////////////////////////////////////////////////////
// Sample.cpp
// Implementation details.
namespace Example {
namespace {
// Function used only in implementation.
void foo() {}
} // namespace
Capricorn::Capricorn {}
} // namespace Example
|
The Core Tenet of Ada¶
Program text must be clear without having to read ahead, referred to as: “Linear elaboration of declarations”. A clear demarcation exists between declarations of things to exist and executable statements which use those things.
The simplicity backing this is the ability to make any declaration, including
types, variables, functions/procedures, and packages in any declaration block. This means
the basic rule of “declare, then use” repeats itself throughout the language,
in package/package body
, task/task body
, subprograms, and executable blocks of code can have a
declare ... begin ... end
block.
package P is
-- Not declaring Foo here is like making the function `static` in C or C++ or
-- putting it into an anonymous namespace.
procedure Foo;
end P;
package body P is
-- Declarations for the body of P go here.
procedure Foo is
-- Declarations for Foo can go here.
-- Declare a function, only visible to Foo, to be used to implement Foo.
procedure Bar is
begin
null; -- "null statement" here since this function actually does nothing.
-- and one statement is required.
end Bar;
begin
-- Executable statements go here.
Ada.Text_IO.Put_Line("Hello, World!");
declare
-- Declare a package here, inside the function, to show that you can.
package Wat is
-- Declare a new type, which has the same set of possible values
-- as a Float, but is different than a Float.
type Capricorn is new Float;
end Wat;
-- A constant created using the package defined inside of Foo.
-- Temporary variables can be declared here too.
Temp: constant Wat.Capricorn := 0.0;
begin
-- Print "0.0".
-- "Image" is the Ada idiomatic equivalent of toString().
-- ' is "tick" and is used to access compiler-defined properties of types.
Ada.Text_IO.Put_Line(Wat.Capricorn'Image(Temp));
-- Call the helper procedure defined in Foo.
-- Procedures and functions without parameters are called
-- without parentheses.
Bar;
end;
end Foo;
begin
-- Static initialization body of P.
end P;
This nesting of declarations very verbose. It does however makes it straightforward to refactor out behavior while you’re working on a subprogram and then you can extract the newly created components into more appropriate places when you’re done. The inability to use statements in declarations causes me to sometimes rewrite my declarations in sequential order of constant processing, and overall makes the declarations feel like a Haskell where clause.
function Normalize(F : Float2) return Float2 is
L : constant F32 := Length(F);
begin
return F / L;
end Normalize;
function Evaluate
(Ctx : in out Context; Line : in Ada.Strings.Unbounded.Unbounded_String)
return Evaluate_Result is
use Ada.Containers;
use type Ada.Strings.Unbounded.Unbounded_String;
Whitespace : constant Ada.Strings.Maps.Character_Set := Ada.Strings.Maps.To_Set (" ");
Sanitized_Line : constant Ada.Strings.Unbounded.Unbounded_String :=
Ada.Strings.Unbounded.Trim (Line, Whitespace, Whitespace);
Words : String_Vectors.Vector := Split (Sanitized_Line);
Command : constant Ada.Strings.Unbounded.Unbounded_String := (if Words.Length > 0 then Words.First_Element else Ada.Strings.Unbounded.Null_Unbounded_String);
begin
-- ...
Ada does not provide separate syntactical units for classes, structs and namespaces. Instead, packages contain types, constants and related subprograms. A lot of specialized syntax goes away due to this, for example there are no “member functions” and “class functions” and hence no specialized syntax for things like member function pointers or class function pointers exist. Namespacing and overloading on parameters and/or the returned type determine the subprogram called.
What would be “member functions” in C++ have the “controlling type(s)” as the first parameter(s). “const member functions” pass in the type as an in parameter, which are immutable. “non-const member functions (methods)” pass in the type as an in out parameter, allowing the parameter to be modified. This mirrors Rust’s notation wherein it reflects C++-like const behavior of member functions with self, &self, and &mut self as a first parameter. These are referred to as “primitive operations.”
-- Box "non-const function"
procedure Move(Box : in out AABB2; Direction : Float2) is
begin
Box.Min := Box.Min + Direction;
Box.Max := Box.Max + Direction;
end Scale;
-- Box "const function"
function Midpoint(Box : in AABB2) return Float is
begin
return (Box.Min + Box.Max) / 2.0;
end Scale;


TTT – Tiny Texture Tumbler –
github.com/phoboslab/ttt
share
‹
›
0
bytes
+
-
TEXTURE SETTINGS
width/height
color
STEPS
+ step
+ texture


Package com.arjuna.ats.arjuna.recovery
Class RecoveryManager
- java.lang.Object
-
- com.arjuna.ats.arjuna.recovery.RecoveryManager
-
public class RecoveryManager extends java.lang.Object
The RecoveryManager daemon.
-
-
Field Summary
Fields Modifier and Type Field Description static int
DIRECT_MANAGEMENT
In this mode the recovery manager does not run periodically and will only work if driven through messages or via the scan operation if it is embedded.static int
INDIRECT_MANAGEMENT
In this mode the recovery manager runs periodically but may also be driven through messages or via the scan operation if it is embedded.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addModule(RecoveryModule module)
Add a recovery module to the system.static void
delayRecoveryManagerThread()
Delay the start of the recovery manager thread when creating an indirect recovery manager.static java.net.Socket
getClientSocket()
Obtain a client connection to the recovery managerjava.util.Vector<RecoveryModule>
getModules()
Obtain a snapshot list of available recovery modules.static java.net.InetAddress
getRecoveryManagerHost()
static int
getRecoveryManagerPort()
void
initialize()
If the recovery manager has been shutdown previously then recreate it in the same mode as before.static void
main(java.lang.String[] args)
Run the RecoveryManager.static RecoveryManager
manager()
Obtain a reference to the RecoveryManager singleton.static RecoveryManager
manager(int mode)
Obtain a reference to the RecoveryManager singleton.int
mode()
Indicates what mode (INDIRECT_MANAGEMENT or DIRECT_MANAGEMENT) the recovery manager is configured for.void
removeAllModules(boolean waitOnScan)
Remove all modules.void
removeModule(RecoveryModule module, boolean waitOnScan)
Remove a recovery module from the system.void
resume()
void
scan()
Force a recovery scan now.void
scan(RecoveryScan callback)
Force a recovery scan now.void
startRecoveryManagerThread()
Start the recovery manager thread.void
suspend(boolean async)
Suspend the recovery manager.void
terminate()
Terminate and cleanup the recovery manager.void
terminate(boolean async)
Terminate and cleanup the recovery manager.RecoveryManagerStatus
trySuspend(boolean async)
void
waitForTermination()
wait for the recovery thread to be shutdown.
-
-
-
Field Detail
-
INDIRECT_MANAGEMENT
public static final int INDIRECT_MANAGEMENT
In this mode the recovery manager runs periodically but may also be driven through messages or via the scan operation if it is embedded.- See Also:
- Constant Field Values
-
DIRECT_MANAGEMENT
public static final int DIRECT_MANAGEMENT
In this mode the recovery manager does not run periodically and will only work if driven through messages or via the scan operation if it is embedded.- See Also:
- Constant Field Values
-
-
Method Detail
-
manager
public static final RecoveryManager manager() throws java.lang.IllegalArgumentException
Obtain a reference to the RecoveryManager singleton. If it hasn't been created yet then it will be. The manager will be created in the INDIRECT_MANAGEMENT mode.- Returns:
- the manager.
- Throws:
java.lang.IllegalArgumentException
- thrown if the manager has already been created in a different mode to that requested.
-
manager
public static final RecoveryManager manager(int mode) throws java.lang.IllegalArgumentException
Obtain a reference to the RecoveryManager singleton. If it hasn't been created yet then it will be. The manager can be created in a management mode defined by the parameter.- Parameters:
mode
- the management mode for the manager.- Returns:
- the manager.
- Throws:
java.lang.IllegalArgumentException
- thrown if the manager has already been created in a different mode to that requested.
-
delayRecoveryManagerThread
public static void delayRecoveryManagerThread()
Delay the start of the recovery manager thread when creating an indirect recovery manager.
-
scan
public final void scan()
Force a recovery scan now. This is a blocking operation and will only return once the recovery scan has completed.- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
scan
public final void scan(RecoveryScan callback)
Force a recovery scan now. This is a non-blocking operation and will return immediately. Notification of completion of the scan is done through the RecoveryScan object.- Parameters:
callback
- callback The callback mechanism used to inform users that the scan has completed. If this isnull
then no callback will happen and asynchronous scanning will occur.- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
terminate
public final void terminate()
Terminate and cleanup the recovery manager. There is no going back from this. This is a synchronous operation so return means that the recovery has completed.- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
terminate
public final void terminate(boolean async)
Terminate and cleanup the recovery manager. There is no going back from this. Can be called synchronous or asynchronously. If you have any intention of restarting the recovery manager later then you MUST use the async=false option.- Parameters:
async
- false means wait for any recovery scan in progress to complete.- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
initialize
public final void initialize()
If the recovery manager has been shutdown previously then recreate it in the same mode as before. Otherwise ignore.
-
waitForTermination
public void waitForTermination()
wait for the recovery thread to be shutdown. n.b. this will not return unless and until shutdown is called.- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
suspend
public void suspend(boolean async)
Suspend the recovery manager. If the recovery manager is in the process of doing recovery scans then it will be suspended afterwards, in order to preserve data integrity.- Parameters:
async
- false means wait for the recovery manager to finish any scans before returning.- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
trySuspend
public RecoveryManagerStatus trySuspend(boolean async)
-
resume
public void resume()
- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
startRecoveryManagerThread
public void startRecoveryManagerThread()
Start the recovery manager thread.- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
addModule
public final void addModule(RecoveryModule module)
Add a recovery module to the system.- Parameters:
module
- module The module to add.- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
removeModule
public final void removeModule(RecoveryModule module, boolean waitOnScan)
Remove a recovery module from the system.- Parameters:
module
- The module to remove.waitOnScan
- true if the remove operation should wait for any in-progress scan to complete- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
removeAllModules
public final void removeAllModules(boolean waitOnScan)
Remove all modules. WARNING: Use with extreme care as this will stop recovery from doing anything!
-
getModules
public final java.util.Vector<RecoveryModule> getModules()
Obtain a snapshot list of available recovery modules.- Returns:
- a snapshot list of the currently installed recovery modules
- Throws:
java.lang.IllegalStateException
- if the recovery manager has been shutdown.
-
mode
public final int mode()
Indicates what mode (INDIRECT_MANAGEMENT or DIRECT_MANAGEMENT) the recovery manager is configured for.- Returns:
- the management mode.
-
getRecoveryManagerHost
public static java.net.InetAddress getRecoveryManagerHost() throws java.net.UnknownHostException
- Throws:
java.net.UnknownHostException
-
getRecoveryManagerPort
public static int getRecoveryManagerPort()
-
getClientSocket
public static java.net.Socket getClientSocket() throws java.io.IOException
Obtain a client connection to the recovery manager- Returns:
- a bound client socket connection to the recovery manager
- Throws:
java.io.IOException
-
main
public static void main(java.lang.String[] args)
Run the RecoveryManager. See Administration manual for details.
-
-


You get free: Prescriptions Prescriptions As long as you have: a GP in Scotland or Wales and the prescription is dispensed by a pharmacist in Scotland or Wales. NHS Sight test Glasses or contact lenses NHS wigs Travel for treatment NHS dental exam NHS dental treatment You do not get free: Prescriptions Prescriptions Prescriptions As long as you have: a GP in Scotland or Wales and the prescription is dispensed by a pharmacist in Scotland or Wales. NHS Sight test NHS Sight test Glasses or contact lenses Glasses or contact lenses NHS wigs NHS wigs Travel for treatment Travel for treatment NHS dental exam NHS dental exam NHS dental treatment NHS dental treatment


{% extends 'layout-full.html' %} {% from 'organisms/expandable.html' import expandable with context %} {% block title -%} {{ survey.meta.name }} Survey | Consumer Financial Protection Bureau {%- endblock %} {% block css -%} {{ super() }} {%- endblock css %} {% block pre_content scoped -%} {%- endblock %} {% block body_content scoped %} Switch grades {{ survey.meta.name }} Let’s map your money journey Find out about your current money skills and explore things you can do to manage your money better. The survey includes 30 multiple-choice questions. Your answers will be private. Let's do this Privacy statement We never collect or store the answers you provide. See how your privacy is protected. {% include './modals/privacy.html' %} {% endblock body_content %} {% block javascript %} {{ super() }} {# Conditional comment used to block IE8 and under from receiving JS #} {% endblock javascript %}
Find out about your current money skills and explore things you can do to manage your money better.
Privacy statement
We never collect or store the answers you provide. See how your privacy is protected.


{{> head}}
This application was developed as a quick project for a course at the University of Guelph. The goal of this application is to allow a user to analyze publically available data on high earners in the public sector.
The data for this project has been sourced from the following sites:
This application was developed by:


People who have not yet Responded
{% for recp in g.guest_list %}
{{ recp }}
{% endfor %}
FREE TIMES NOT YET IMPLEMENTED


$ 1*2*3 inline-math
$ \\ \text{backslash with escapes} \$ 1*2*3
( not really math )
$$ also not math $$
this math
this$ *should* also be math
and too
Something \{ like math but \} is not
Also \(like math but \) is not
\$ should be *math* as well \\$
This is $ math, and the \\\( inner one \\\) should be preserved


Art is Abstraction
About Me
Welcome-
As a full-stack web developer, I enjoy working in both front and back end coding projects. I am especially
passionate about JavaScript and MySQL Database structure. I thrive on researching and writing particular
tricky pieces of code.
I am currently enrolled in a 6 month bootcamp through the University of MN; it concludes on October 2nd
with full-stack certification. Within this program I am learning HTML5, CSS3, JavaScript, jQuery,
Bootstrap, Express.js, React.js,
Node.js, Database Theory, MongoDB, MySQL, Command Line, Web Apps, Git, and more.
I have 9+ years of experience in customer service as well as 6 years of working in vendor management. I am an
asset to any team due to my strong organizational skills, attention to detail, and work ethic. My completion
of the bootcamp is a testament to my ability to learn quickly.
An ideal workplace is one that has a dedicated dev team that takes new developers and mentors them, fostering
further education and advancement of coding proficiency.