Creamy Garlic Chicken
Yields: 4-6
Preparation time: 20
Cooking time: 20
Ingredients
-
2-3 large boneless and skinless chicken breasts halved horizontally to make 44 tablespoons flour (all purpose or plain)1/2 cup and 4 tablespoons finely grated fresh Parmesan cheese, separated2 teaspoon salt1 teaspoon garlic powder1/2 teaspoon Black cracked pepper5 tablespoons olive oil2 tablespoons butter1 small onion finely chopped1 whole head of garlic peeled and divided into 10-12 cloves1 1/4 cup chicken broth (stock)1 1/4 cup half and half or heavy cream (or evaporated milk)finely grated fresh Parmesan cheese2 tablespoons fresh parsley, to serve
Directions
-
Season the chicken with salt, garlic powder and pepper.In a shallow bowl, combine the flour, parmesan cheese.Dredge chicken in the flour mixture; shake off excess.Heat 2 tablespoons of oil and 1 tablespoon butter in a large skillet over medium-high heat. Swirl pan to coat evenly.Fry 2-3 chicken breasts until golden on each side, cooked through and no longer pink (about 4-5 minutes each side, depending on the thickness of your chicken). Transfer to a warm plate. Set aside.Wipe pan over with a sheet of paper towel. Repeat with remaining oil, butter and chicken breasts. When cooked, transfer the chicken onto the same plate.Reduce heat to medium. Sauté the onion in the remaining oil/juices in the pan until softened.Smash 6 whole cloves of garlic with the blunt edge of the back of a knifeAdd the remaining oil to the pan and heat through, mixing it through the onions. Sauté smashed garlic cloves and whole garlic cloves until fragrant, about 2-3 minutes. Add the broth to deglaze the pan. Scrape up any browned bits and let simmer and reduce to half, about 5 minutes.Reduce heat to medium-low. Pour in the cream. Bring the sauce to a gentle simmer for about 2-3 minutes, combining all of the flavours together.Mix in the parmesan cheese. Continue cooking gently for about 2-3 minutes until cheese melts, while stirring occasionally. Season with salt and pepper to your taste.Add the chicken back into the pan and let simmer for a further 2-3 minutes to thicken the sauce to your liking.
Category: Entree
Cuisine: American


GGIS runs a variety of server in support of our clients and our other projects. The documents referenced here are how-tos, setup logs, script usage, and etc.
GGIS runs a variety of server in support of our clients and our other projects. The documents referenced here are how-tos, setup logs, script usage, and etc.


Note: Applicants will be contacted for a brief telephone interview prior to being accepted into the training.


The chi^2 distribution can be used to compare the goodness of fit of observed frequencies to the frequency that is expected under a hypothetical distribution. A chi^2 distribution with v degrees of freedom is produced from summing the squares of v independent, normally distributed random variables.
Compare the tests Frequency, Poker, Runs and Serial in the menu Analysis \ Analyze Randomness.
A number of reference tables exist for evaluating the probability density of the chi^2 distribution. The table below provides a few selected quantiles for the chi^2 distribution for v degrees of freedom:
v alpha = 0.01 alpha = 0.05 alpha = 0.1
(P[X>x]<0.01) (P[X>x]<0.05) (P[X>x]<0.1)
x= x= x=
1 6.63 3.84 2.71
2 9.21 5.99 4.61
3 11.34 7.82 6.25
4 13.28 9.49 7.78
5 15.09 11.07 9.23
6 16.81 12.59 10.64
7 18.48 14.07 12.01
8 20.09 15.51 13.36
9 21.67 16.92 14.68
10 23.21 18.31 15.98
15 30.58 25.00 22.30
20 37.57 31.41 28.41
30 50.89 43.77 40.25
255 310.40 293.20 284.30
The entry (v = 10, alpha = 0.05, x = 18.31) means that assuming that X has a chi^2 distribution with 10 degrees of freedom the probability of obtaining a value for X of 18.31 or more is only 5%.
Reference: Christian Schiestl, Pseudozufallszahlen in der Kryptographie, in Klagenfurt, 1999.


SCROOGE (1951)
A Film Review by James Berardinelli
RATING: ***1/2 OUT OF ****
United Kingdom, 1951 Running Length: 1:25 MPAA Classification: NR (Nothing offensive) Theatrical Aspect Ratio: 1.33:1
Cast: Alastair Sim, Mervyn Johns, Michael Hordern, Kathleen Harrison, Michael Dolan, Francis De Wolff, Glyn Dearman, Hermione Baddeley Director: Brian Desmond-Hurst Producer: Brian Desmond-Hurst Screenplay: Noel Langley based on the novel by Charles Dickens Cinematography: C. Pennington-Richards Music: Richard Addinsell U.S. Distributor: Liberty Films
When it comes to favorite Christmas tales on the screen, there are probably two. There's no confusion about the first, because there is only one IT'S A WONDERFUL LIFE. In fact, Frank Capra's classic is so expertly wrought that no one has even attempted a big screen remake. The second is a little more problematic, because there have been many worthy takes on Charles Dickens' A CHRISTMAS CAROL. In 1984, George C. Scott humbugged to memorable effect in a made-for-TV adaptation. Albert Finney sang and danced his way through the title role of 1970's SCROOGE. Even Mr. Magoo, the Muppets, Blackadder, and Mickey Mouse have taken their shots (with varying degrees of success). But the best-loved and most-remembered version of A CHRISTMAS CAROL has to be the 1951 edition of SCROOGE, with the inimitable Alastair Sim as London's cruelest miser.
Sim, a veteran of British stage and screen, started his motion picture career in the mid-'30s and ended it in the early-'70s. In between, he appeared in over fifty films, but the role that has given him true immortality is that of Scrooge. Sim is not just one of many actors to play the part -- for everyone who has seen the crisply-made black-and-white production, he is the definitive Scrooge. Everyone else, from George C. Scott to Bill Murray, is an impostor.
What did Sim do to put his indelible mark on Scrooge? Of those who took up the skinflint's mantle, only he has been equal to the task of playing Scrooge in his many, varied incarnations: uncaring miser, heartless employer, frightened old man, mournful supplicant, and repentant merrymaker. At the film's opening, Sim radiates cold; at the end, his giddy exuberance is contagious. In between, we experience many emotions directed towards his character: sadness, anger, and, most strongly, pity. Sim makes us feel for Scrooge in a way that no other actor has been capable of.
Take away the lead actor, and this version of SCROOGE would still have been a credible reworking, with capable performances, a strong atmosphere, and superior costume and set design. The movie was made on an English soundstage in the early 1950s, but the look is of London a century earlier. Today, with modern special effects, this would not be as great an achievement as it was more than forty years ago. The black- and-white cinematography, brilliantly achieved by C. Pennington- Richards, is as crucial to the film's success as any other individual element. Rather than making SCROOGE seem quaint and outdated, the black-and-white approach lends it a sense of eerieness and mystery that no color version has managed to recapture.
The plot is faithful to Dickens' original tale. Ebeneezer Scrooge is easily one of the nastiest men in London. To him, money is everything. He does not believe in charity and only reluctantly agrees to give his clerk, Bob Cratchit (Mervyn Johns), Christmas Day off. On the night before Christmas, Scrooge receives four ghostly visitors, all of whom share a mission: to teach him the error of his ways and show him the path to redemption. The first is Scrooge's former partner, the late Jacob Marley (Michael Hordern), who bears a warning about what happens to a man who dies after living only for money. Next is the Ghost of Christmas Past (Michael Dolan), who takes Scrooge on a journey into the years gone by, reminding him of times when wealth meant little. The third spirit is the boisterous Ghost of Christmas Present (Francis De Wolff), whose task is to show his charge how others are spending Christmas Eve. Finally, the Ghost of Christmas Yet to Come (C. Konarski) lets Scrooge wander through the shadows of the bleak future that awaits him if he does not mend his ways.
Sim is supported by an able cast, many of whom are familiar faces. Mervyn Johns, who plays Bob Cratchit as sturdy-yet-sympathetic, appeared in over four dozen films over his career, including the cult classic THE DAY OF THE TRIFFIDS. Kathleen Harrison, whose Mrs. Dilber was SCROOGE's comic highlight, had a similarly impressive resume. Michael Hordern, whose Marley was a tortured soul, became a mainstay of British and American TV. Likewise, Francis De Wolff enjoyed a long and successful relationship with the silver screen. Only Michael Dolan was hardly ever heard from again.
Like all uplifting Christmas stories, SCROOGE ends with a flurry of good will and high spirits. But the chief pleasure of watching this version of A CHRISTMAS CAROL is not the ending. At a reasonably short 85 minutes, this is nevertheless a complete experience, and the strength and depth of its drama makes it the most memorable of any adaptation of the tale. We may hum along with Albert Finney, hiss at Bill Murray, and smile at Scrooge McDuck, but none of them compares favorably to Sim. When it comes to A CHRISTMAS CAROL, perhaps there isn't much of a question about the best version after all…
Copyright 1997 James Berardinelli
- James Berardinelli e-mail<EMAIL_ADDRESS>Now with more than 1300 reviews... The ReelViews web site: http://movie-reviews.colossus.net/
"No art passes our conscience in the way film does, and goes directly to our feelings, deep down into the dark rooms of our souls"
- Ingmar Bergman
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Overview
FINANCIAL DATA (K USD)
INDICATORS
OEE
0%
0%
MattEff
0%
0%
OLE
0%
0%
EneCons
0%
0%
FINANCIAL DATA - SCOPE COVERED
| Cost Structure | Family | Variable | Fixed | Total | Scope Covered | Losses | Potential Savings |
|---|
LOSSES EVALUTION AND POTENTIAL SAVINGS (KUSD)


Players
Orange (you): 0 victory points
Cities: 0,
Settlements: 0,
Roads: 0
Brick: 0,
Ore: 0,
Wool: 0
Grain: 0
Lumber: 0
Blue: 0 victory points
Cities: 0,
Settlements: 0,
Roads: 0
Brick: 0,
Ore: 0,
Wool: 0
Grain: 0
Lumber: 0
White: 0 victory points
Cities: 0,
Settlements: 0,
Roads: 0
Brick: 0,
Ore: 0,
Wool: 0
Grain: 0
Lumber: 0
Red: 0 victory points
Cities: 0,
Settlements: 0,
Roads: 0
Brick: 0,
Ore: 0,
Wool: 0
Grain: 0
Lumber: 0


Methods
Included Modules
Attributes
| [R] | plugins | |
| [R] | uri |
Public Class methods
[ show source ]
# File vendor/rails/railties/lib/commands/plugin.rb, line 407 407: def initialize(uri) 408: @uri = uri.chomp('/') << "/" 409: @plugins = nil 410: end
Public Instance methods
[ show source ]
# File vendor/rails/railties/lib/commands/plugin.rb, line 426 426: def each(&block) 427: plugins.each(&block) 428: end
[ show source ]
# File vendor/rails/railties/lib/commands/plugin.rb, line 412 412: def plugins 413: unless @plugins 414: if $verbose 415: puts "Discovering plugins in #{@uri}" 416: puts index 417: end 418: 419: @plugins = index.reject{ |line| line !~ /\/$/ } 420: @plugins.map! { |name| Plugin.new(File.join(@uri, name), name) } 421: end 422: 423: @plugins 424: end


The purpose of this website is to host (mostly) technical content, created for myself or others. Its utility for the general public will be... mixed. Those pages with general appeal will be better marked and advertised as the site matures.


Son of Héloise de Villefort and Gérard de Villefort. His mother's desire for him to inherit his grandparents-in-law's fortune causes her to poison several people in the Villefort family. When his father discovers of his mother's crimes, he forces her to commit suicide or else face public execution. In the end, she poisons herself and Édouard.


The Broadphase objects keep a common interface that may be used outside of any 2d physics simulation, nor are Broadphases limited just to two dimensions.
Two Broadphase implementation exists in the Turbulenz SDK at present, these can be constructed with Physics2DDevice.createSweepAndPruneBroadphase() and Physics2DDevice.createBoxTreeBroadphase().
Summary
Insert data value into broadphase, with given bounds and static type.
Syntax
var handle = broadphase.insert(data, bounds, isStatic);
The data value to be inserted.
This value may be of any type, and inserted multiple times if needed.
The bounds of the data in the broadphase.
Summary
Update handle bounds and static type.
Syntax
broadphase.update(handle, bounds, isStatic);
Summary
Remove handle from broadphase.
Syntax
broadphase.remove(handle);
Broadphase implementations are free to re-use object handles, so references to handles that have been removed should be deleted.
Summary
Remove all handles from broadphase, executing given callback (if supplied) for each handle.
Syntax
broadphase.clear(callback, thisObject);
An optional callback which will be called for all handles.
It should take a single argument as the handle from the broadphase.
Summary
Query all pairs of handles overlapping in the broadphase.
Pairs will not be reported for two handles marked as static.
Syntax
broadphase.perform(callback, thisObject);
A callback which will be called for all handle pairs.
It should take two arguments as the handles from the broadphase that form each pair.
Summary
Query all handles overlapping given bounds.
Syntax
broadphase.sample(bounds, callback, thisObject);
A callback which will be called for all overlapping handles.
It should take two arguments as the handle that was overlapped, and the input bounds to the sample function.
Full specification of the handle object is left to the Broadphase implementation.
Broadphase implementations are free to re-use object handles, so references to them should not be kept.


Bossa n' Stones (FULL ALBUM)
Music Brokers
1,000,000 views
500
10
Published On Nov 12 2019
The classic album of bossa nova and rock 'n' roll fusion
that started it all is now available here. You´ve heard the songs over the years, in your favorite
restaurant, beachside café or shopping center. Or maybe it was a friend at the office who turned it on
nice and low, so you had a little salty breeze blowing through the breakroom. Now you can listen to your
favorite tunes from the first album of Bossa n' Stones here. The album that started an entire musical
genre, just waiting for you!
Loading...


|
|---|
| And seeing the multitudes, he went up into a mountain: and when he was set, his disciples came unto him:
|
|---|
| ᎤᏂᏣᏘᏃ ᏫᏚᎪᎲ ᎤᏌᎯᎸ ᎤᎿᎭᎷᏎᎢ, ᎤᏪᏅᏃ ᎬᏩᏍᏓᏩᏗᏙᎯ ᎬᏩᎷᏤᎴᎢ.
|
|---|
U-ni-tsa-ti-no wi-du-go-hv u-sa-hi-lv u-hna-lu-se-i, u-we-nv-no gv-wa-s-da-wa-di-do-hi gv-wa-lu-tse-le-i.
|
|---|
|
|---|
| And he opened his mouth, and taught them, saying,
|
|---|
| ᎠᎰᎵᏃ ᎤᏍᏚᎢᏒ ᏚᏪᏲᏁ ᎯᎠ ᏄᏪᏎᎢ;
|
|---|
A-ho-li-no u-s-du-i-sv du-we-yo-ne hi-a nu-we-se-i;
|
|---|
|
|---|
| Blessed are the poor in spirit: for theirs is the kingdom of heaven.
|
|---|
| ᎣᏏᏳ ᎢᏳᎾᎵᏍᏓᏁᏗ ᎤᏲ ᎢᏳᎾᏛᎿᎭᏕᎩ ᏚᎾᏓᏅᏛᎢ; ᎤᎾᏤᎵᏰᏃ ᎦᎸᎳᏗ ᎡᎯ ᎤᎬᏫᏳᎯ ᎨᏒᎢ.
|
|---|
O-si-yu i-yu-na-li-s-da-ne-di u-yo i-yu-na-dv-hna-de-gi du-na-da-nv-dv-i; u-na-tse-li-ye-no ga-lv-la-di e-hi u-gv-wi-yu-hi ge-sv-i.
|
|---|
|
|---|
| Blessed are they that mourn: for they shall be comforted.
|
|---|
| ᎣᏏᏳ ᎢᏳᎾᎵᏍᏓᏁᏗ ᎤᏲ ᎤᎾᏓᏅᏔᏩᏕᎩ, ᏛᎨᏥᏄᏬᎯᏍᏔᏂᏰᏃ.
|
|---|
O-si-yu i-yu-na-li-s-da-ne-di u-yo u-na-da-nv-ta-wa-de-gi, dv-ge-tsi-nu-wo-hi-s-ta-ni-ye-no.
|
|---|
|
|---|
| Blessed are the meek: for they shall inherit the earth.
|
|---|
| ᎣᏏᏳ ᎢᏳᎾᎵᏍᏓᏁᏗ ᎤᎾᏓᏅᏘ, ᎦᏙᎯᏰᏃ ᎤᎾᏤᎵ ᎢᏳᎵᏍᏙᏗ.
|
|---|
O-si-yu i-yu-na-li-s-da-ne-di u-na-da-nv-ti, ga-do-hi-ye-no u-na-tse-li i-yu-li-s-do-di.
|
|---|
|
|---|
| Blessed are they which do hunger and thirst after righteousness: for they shall be filled.
|
|---|
| ᎣᏏᏳ ᎢᏳᎾᎵᏍᏓᏁᏗ ᎤᏂᏲᏏᏍᎩ ᎠᎴ ᎤᏂᏔᏕᎩᏍᎩ ᎤᎾᏓᏅᏘ ᎢᏳᎾᎵᏍᏙᏗᏱ; ᏛᎨᏥᎧᎵᎵᏰᏃ.
|
|---|
O-si-yu i-yu-na-li-s-da-ne-di u-ni-yo-si-s-gi a-le u-ni-ta-de-gi-s-gi u-na-da-nv-ti i-yu-na-li-s-do-di-yi; dv-ge-tsi-ka-li-li-ye-no.
|
|---|
|
|---|
| Blessed are the merciful: for they shall obtain mercy.
|
|---|
| ᎣᏏᏳ ᎢᏳᎾᎵᏍᏓᏁᏗ ᎤᎾᏓᏙᎵᏣᏘ, ᏛᎨᏥᏙᎵᏥᏰᏃ.
|
|---|
O-si-yu i-yu-na-li-s-da-ne-di u-na-da-do-li-tsa-ti, dv-ge-tsi-do-li-tsi-ye-no.
|
|---|
|
|---|
| Blessed are the pure in heart: for they shall see God.
|
|---|
| ᎣᏏᏳ ᎢᏳᎾᎵᏍᏓᏁᏗ ᏧᏓᏅᎦᎸᏛ ᏧᏂᎾᏫ, ᎤᏁᎳᏅᎯᏰᏃ ᎤᏂᎪᏩᏛᏗ;
|
|---|
O-si-yu i-yu-na-li-s-da-ne-di tsu-da-nv-ga-lv-dv tsu-ni-na-wi, U-ne-la-nv-hi-ye-no u-ni-go-wa-dv-di;
|
|---|
|
|---|
| Blessed are the peacemakers: for they shall be called the children of God.
|
|---|
| ᎣᏏᏳ ᎢᏳᎾᎵᏍᏓᏁᏗ ᎠᏃᎯᏍᏗᏍᎩ, ᎤᏁᎳᏅᎯᏰᏃ ᏧᏪᏥ ᏛᎨᎪᏎᎵ.
|
|---|
O-si-yu i-yu-na-li-s-da-ne-di a-no-hi-s-di-s-gi, U-ne-la-nv-hi-ye-no tsu-we-tsi dv-ge-go-se-li.
|
|---|
|
|---|
| Blessed are they which are persecuted for righteousness' sake: for theirs is the kingdom of heaven.
|
|---|
| ᎣᏏᏳ ᎢᏳᎾᎵᏍᏓᏁᏗ ᎤᏲ ᎢᎨᎬᎾᏕᎩ ᏚᏳᎪᏛ ᎨᏒ ᎤᏂᏍᏛᏗᏍᎩ, ᎤᎾᏤᎵᏰᏃ ᎦᎸᎳᏗ ᎡᎯ ᎤᎬᏫᏳᎯ ᎨᏒᎢ.
|
|---|
O-si-yu i-yu-na-li-s-da-ne-di u-yo i-ge-gv-na-de-gi du-yu-go-dv ge-sv u-ni-s-dv-di-s-gi, u-na-tse-li-ye-no ga-lv-la-di e-hi u-gv-wi-yu-hi ge-sv-i.
|
|---|
|
|---|
| Blessed are ye, when men shall revile you, and persecute you, and shall say all manner of evil against you falsely, for my sake.
|
|---|
| ᎣᏏᏳ ᎢᏣᎵᏍᏓᏁᏗ ᎢᏳᏃ ᏴᏫ ᎤᏐᏅ ᏂᎨᏥᏪᏎᎮᏍᏗ ᎠᎴ ᎤᏲ ᏂᎨᏨᏁᎮᏍᏗ, ᎠᎴ ᏂᎦᎥ ᏧᏓᎴᏅᏛ ᎤᏐᏅ ᎦᏰᎪᎩ ᎨᏥᏃᎮᏍᎨᏍᏗ ᎠᏴ ᎨᏒ ᎢᏥᏍᏛᏗᏍᎨᏍᏗ.
|
|---|
O-si-yu i-tsa-li-s-da-ne-di i-yu-no yv-wi u-so-nv ni-ge-tsi-we-se-he-s-di a-le u-yo ni-ge-tsv-ne-he-s-di, a-le ni-ga-v tsu-da-le-nv-dv u-so-nv ga-ye-go-gi ge-tsi-no-he-s-ge-s-di a-yv ge-sv i-tsi-s-dv-di-s-ge-s-di.
|
|---|
|
|---|
| Rejoice, and be exceeding glad: for great is your reward in heaven: for so persecuted they the prophets which were before you.
|
|---|
| ᎢᏣᎵᎮᎵᎨᏍᏗ ᎠᎴ ᎤᏣᏔᏅᎯ ᎣᏍᏛ ᎢᏣᏓᏅᏖᏍᏗ, ᎤᏣᏘᏰᏃ ᎡᏣᎫᏴᎡᏗ ᎦᎸᎳᏗ; ᎾᏍᎩᏯᏰᏃ ᎤᏥ ᏂᏚᏅᏁᎸᎩ ᎠᎾᏙᎴᎰᏍᎩ ᎢᎬᏱ ᏥᏂᎨᏤᏅᎡᎸ.
|
|---|
I-tsa-li-he-li-ge-s-di a-le u-tsa-ta-nv-hi o-s-dv i-tsa-da-nv-te-s-di, u-tsa-ti-ye-no e-tsa-gu-yv-e-di ga-lv-la-di; na-s-gi-ya-ye-no u-tsi ni-du-nv-ne-lv-gi a-na-do-le-ho-s-gi i-gv-yi tsi-ni-ge-tse-nv-e-lv.
|
|---|
|
|---|
| Ye are the salt of the earth: but if the salt have lost his savour, wherewith shall it be salted? it is thenceforth good for nothing, but to be cast out, and to be trodden under foot of men.
|
|---|
| ᏂᎯ ᎠᎹ ᎡᎶᎯ ᎤᏤᎵᎦ; ᎢᏳᏍᎩᏂ ᎠᎹ ᏳᏥᏍᎪᎸ ᎦᏙ ᏱᎦᎵᏍᏙᏓ ᎠᎹ ᏯᏙᏢᎾ; ᎥᏝ ᎿᎭᏉ ᎪᎱᏍᏗ ᎬᏙᏗ ᏱᎦᎩ, ᎠᏗᏅᏗᏉ ᎤᏩᏒ, ᎠᎴ ᏴᏫᏉ ᎤᎾᎳᏍᏓᎡᏗ.
|
|---|
Ni-hi a-ma e-lo-hi u-tse-li-ga; i-yu-s-gi-ni a-ma yu-tsi-s-go-lv ga-do yi-ga-li-s-do-da a-ma ya-do-tlv-na; v-tla hna-quo go-hu-s-di gv-do-di yi-ga-gi, a-di-nv-di-quo u-wa-sv, a-le yv-wi-quo u-na-la-s-da-e-di.
|
|---|
|
|---|
| Ye are the light of the world. A city that is set on an hill cannot be hid.
|
|---|
| ᏂᎯ ᎢᎦ ᎢᏣᏘᏍᏗᏍᎩ ᎡᎶᎯ. ᎦᏚᎲ ᎤᏌᎯᎸ ᏥᎦᎧᎰᎢ ᎥᏝ ᏰᎵ ᏴᎦᏰᎬᏍᎦᎸᎦ.
|
|---|
Ni-hi i-ga i-tsa-ti-s-di-s-gi e-lo-hi. Ga-du-hv u-sa-hi-lv tsi-ga-ka-ho-i v-tla ye-li yv-ga-ye-gv-s-ga-lv-ga.
|
|---|
|
|---|
| Neither do men light a candle, and put it under a bushel, but on a candlestick; and it giveth light unto all that are in the house.
|
|---|
| ᎥᏝ ᎠᎴ ᏴᏫ ᎠᏂᏨᏍᏛᎦ ᎠᏨᏍᏙᏗ ᎠᏟᎶᏍᏗ ᏯᏄᏢᏗᏍᎪᎢ, ᎦᎪᏗᏱᏍᎩᏂ ᎠᏂᎧᎲᏍᎪᎢ, ᎢᎦᏃ ᎤᎾᏘᏍᏓᏁᎰ ᏂᎦᏛ ᎦᎵᏦᏕ ᎠᏂᏯᎢ.
|
|---|
V-tla a-le yv-wi a-ni-tsv-s-dv-ga a-tsv-s-do-di a-tli-lo-s-di ya-nu-tlv-di-s-go-i, ga-go-di-yi-s-gi-ni a-ni-ka-hv-s-go-i, i-ga-no u-na-ti-s-da-ne-ho ni-ga-dv ga-li-tso-de a-ni-ya-i.
|
|---|
|
|---|
| Let your light so shine before men, that they may see your good works, and glorify your Father which is in heaven.
|
|---|
| ᎢᎦ ᎢᏣᏘᏍᏗᏍᎬ ᏚᏂᎸᏌᏓᏕᎮᏍᏗ ᏴᏫ, ᎾᏍᎩᏃ ᎣᏍᏛ ᏕᏥᎸᏫᏍᏓᏁᎲ ᎠᏂᎪᏩᏘᏍᎨᏍᏗ, ᎠᎴ ᎠᏂᎸᏉᏗᏍᎨᏍᏗ ᎢᏥᏙᏓ ᎦᎸᎳᏗ ᎡᎯ.
|
|---|
I-ga i-tsa-ti-s-di-s-gv du-ni-lv-sa-da-de-he-s-di yv-wi, na-s-gi-no o-s-dv de-tsi-lv-wi-s-da-ne-hv a-ni-go-wa-ti-s-ge-s-di, a-le a-ni-lv-quo-di-s-ge-s-di I-tsi-do-da ga-lv-la-di e-hi.
|
|---|
|
|---|
| Think not that I am come to destroy the law, or the prophets: I am not come to destroy, but to fulfill.
|
|---|
| ᏞᏍᏗ ᏗᎧᎿᎭᏩᏛᏍᏗ ᎠᎴ ᎠᎾᏙᎴᎰᏍᎩ ᏚᏲᏍᏔᏂᎸ ᏱᏍᎩᏰᎵᏎᎮᏍᏗ; ᎥᏝᏍᎩᏂ ᏱᏓᎩᏲᏍᏔᏂᎸ, ᏓᎩᎧᎵᎵᎸᏍᎩᏂ.
|
|---|
Tle-s-di di-ka-hna-wa-dv-s-di a-le a-na-do-le-ho-s-gi du-yo-s-ta-ni-lv yi-s-gi-ye-li-se-he-s-di; v-tla-s-gi-ni yi-da-gi-yo-s-ta-ni-lv, da-gi-ka-li-li-lv-s-gi-ni.
|
|---|
|
|---|
| For verily I say unto you, Till heaven and earth pass, one jot or one tittle shall in no wise pass from the law, till all be fulfilled.
|
|---|
| ᎤᏙᎯᏳᎯᏯᏰᏃ ᎯᎠ ᏂᏨᏪᏎᎭ, ᎬᏂ ᎦᎸᎶᎢ ᎠᎴ ᎡᎶᎯ ᎠᏂᎶᏐᏅᎭ ᏌᏉ ᎤᏍᏗ ᎠᎴ ᏌᏉ ᏭᏍᏗᎬ ᏗᎧᎿᎭᏩᏛᏍᏗ ᎥᏝ ᏴᎦᎶᎯ ᎬᏂ ᏂᎦᏗᏳ ᎠᎧᎵᏨᎭ.
|
|---|
U-do-hi-yu-hi-ya-ye-no hi-a ni-tsv-we-se-ha, gv-ni ga-lv-lo-i a-le e-lo-hi a-ni-lo-so-nv-ha sa-quo u-s-di a-le sa-quo wu-s-di-gv di-ka-hna-wa-dv-s-di v-tla yv-ga-lo-hi gv-ni ni-ga-di-yu a-ka-li-tsv-ha.
|
|---|
|
|---|
| Whosoever therefore shall break one of these least commandments, and shall teach men so, he shall be called the least in the kingdom of heaven: but whosoever shall do and teach them, the same shall be called great in the kingdom of heaven.
|
|---|
| ᎾᏍᎩ ᎢᏳᏍᏗ ᎩᎶ ᎠᏲᏍᏗᏍᎨᏍᏗ ᏌᏉ ᎯᎠ ᎤᏍᏗᎧᏂ ᎤᎵᏁᏨᎢ, ᎠᎴ ᎾᏍᎩ ᏄᏍᏕᏍᏗ ᏴᏫ ᏕᎨᏲᎲᏍᎨᏍᏗ, ᎾᏍᎩ ᎤᏍᏗᎧᏂ ᎠᎪᏎᎮᏍᏗ ᎦᎸᎳᏗ ᎡᎯ ᎤᎬᏫᏳᎯ ᎨᏒᎢ; ᎩᎶᏍᎩᏂ ᏓᎧᎿᎭᏩᏕᎨᏍᏗ, ᎠᎴ ᎾᏍᎩ ᏄᏍᏕᏍᏗ ᏓᏕᏲᎲᏍᎨᏍᏗ, ᎦᎸᏉᏗᏳ ᎠᎪᏎᎮᏍᏗ ᎦᎸᎳᏗ ᎡᎯ ᎤᎬᏫᏳᎯ ᎨᏒᎢ.
|
|---|
Na-s-gi i-yu-s-di gi-lo a-yo-s-di-s-ge-s-di sa-quo hi-a u-s-di-ka-ni u-li-ne-tsv-i, a-le na-s-gi nu-s-de-s-di yv-wi de-ge-yo-hv-s-ge-s-di, na-s-gi u-s-di-ka-ni a-go-se-he-s-di ga-lv-la-di e-hi u-gv-wi-yu-hi ge-sv-i; gi-lo-s-gi-ni da-ka-hna-wa-de-ge-s-di, a-le na-s-gi nu-s-de-s-di da-de-yo-hv-s-ge-s-di, ga-lv-quo-di-yu a-go-se-he-s-di ga-lv-la-di e-hi u-gv-wi-yu-hi ge-sv-i.
|
|---|
|
|---|
| For I say unto you, That except your righteousness shall exceed the righteousness of the scribes and Pharisees, ye shall in no case enter into the kingdom of heaven.
|
|---|
| ᎯᎠᏰᏃ ᏂᏨᏪᏎᎭ, ᎢᏨᏃ ᎾᏍᎩ ᎢᏣᏓᏅᏘ ᎨᏒ ᏂᏗᏥᎪᎾᏛᏔᏅᎾ ᎢᎨᏎᏍᏗ ᏗᏃᏪᎵᏍᎩ ᎠᎴ ᎠᏂᏆᎵᏏ, ᎥᏝ ᎦᎸᎳᏗ ᎡᎯ ᎤᎬᏫᏳᎯ ᎨᏒ ᏴᎨᏥᏴᎭ.
|
|---|
Hi-a-ye-no ni-tsv-we-se-ha, i-tsv-no na-s-gi i-tsa-da-nv-ti ge-sv ni-di-tsi-go-na-dv-ta-nv-na i-ge-se-s-di di-no-we-li-s-gi a-le A-ni-qua-li-si, v-tla ga-lv-la-di e-hi u-gv-wi-yu-hi ge-sv yv-ge-tsi-yv-ha.
|
|---|
|
|---|
| Ye have heard that it was said by them of old time, Thou shalt not kill; and whosoever shall kill shall be in danger of the judgment:
|
|---|
| ᎢᏣᏛᎦᏅᎯ ᎢᎩ ᎯᎠ ᏥᏂᎨᏥᏪᏎᎴ ᎡᏘ ᏣᏁᎮᎢ; ᏞᏍᏗ ᏣᏓᎸᎩ; ᎠᎴ ᎩᎶ ᎠᏓᎯᎮᏍᏗ ᎬᏩᏍᏛᏗᏍᏗ ᎨᏎᏍᏗ ᏗᏄᎪᏗᏍᎩᏱ.
|
|---|
I-tsa-dv-ga-nv-hi i-gi hi-a tsi-ni-ge-tsi-we-se-le e-ti tsa-ne-he-i; Tle-s-di tsa-da-lv-gi; a-le gi-lo a-da-hi-he-s-di gv-wa-s-dv-di-s-di ge-se-s-di di-nu-go-di-s-gi-yi.
|
|---|
|
|---|
| But I say unto you, That whosoever is angry with his brother without a cause shall be in danger of the judgment: and whosoever shall say to his brother, Raca, shall be in danger of the council: but whosoever shall say, Thou fool, shall be in danger of hell fire.
|
|---|
| ᎠᏎᏃ ᎠᏴ ᎯᎠ ᏂᏨᏪᏎᎭ; ᎩᎶ ᏗᎾᏓᏅᏟ ᎠᏍᎦᎨᏍᏗ ᎪᎱᏍᏗ ᏄᏍᏛᏗᏍᎬᎾ ᎢᎨᏎᏍᏗ, ᎬᏩᏍᏛᏗᏍᏗ ᎨᏎᏍᏗ ᏗᏄᎪᏗᏍᎩᏱ; ᎩᎶᏃ ᏗᎾᏓᏅᏟ ᏂᏣᏓᏅᏛᎾ ᎢᎪᏎᎮᏍᏗ, ᏕᎦᎳᏫᎥ ᎬᏩᏍᏛᏗᏍᏗ ᎨᏎᏍᏗ; ᎩᎶᏃ ᏣᏁᎫ ᎢᎪᏎᎮᏍᏗ, ᎬᏩᏍᏛᏗᏍᏗ ᎨᏎᏍᏗ ᏨᏍᎩᏃ ᎠᏥᎸᏱ.
|
|---|
A-se-no a-yv hi-a ni-tsv-we-se-ha; Gi-lo di-na-da-nv-tli a-s-ga-ge-s-di go-hu-s-di nu-s-dv-di-s-gv-na i-ge-se-s-di, gv-wa-s-dv-di-s-di ge-se-s-di di-nu-go-di-s-gi-yi; gi-lo-no di-na-da-nv-tli Ni-tsa-da-nv-dv-na i-go-se-he-s-di, de-ga-la-wi-v gv-wa-s-dv-di-s-di ge-se-s-di; gi-lo-no Tsa-ne-gu i-go-se-he-s-di, gv-wa-s-dv-di-s-di ge-se-s-di tsv-s-gi-no a-tsi-lv-yi.
|
|---|
|
|---|
| Therefore if thou bring thy gift to the altar, and there rememberest that thy brother hath ought against thee;
|
|---|
| ᎾᏍᎩ ᎢᏳᏍᏗ ᎢᏳᏃ ᎠᏥᎸᎨᎳᏍᏗᏱ ᎯᏲᎯᎮᏍᏗ ᏣᏓᏁᏗ, ᎾᎿᎭᏃ ᎢᎭᏅᏓᏗᏍᎨᏍᏗ ᏗᏍᏓᏓᏅᏟ ᎪᎱᏍᏗ ᏤᎵᏎᎲᎢ,
|
|---|
Na-s-gi i-yu-s-di i-yu-no a-tsi-lv-ge-la-s-di-yi hi-yo-hi-he-s-di tsa-da-ne-di, na-hna-no i-ha-nv-da-di-s-ge-s-di di-s-da-da-nv-tli go-hu-s-di tse-li-se-hv-i,
|
|---|
|
|---|
| Leave there thy gift before the altar, and go thy way; first be reconciled to thy brother, and then come and offer thy gift.
|
|---|
| ᎾᎿᎭᎠᏥᎸ-ᎨᎳᏍᏗᏱ ᎯᎯᏯᏍᎨᏍᏗ ᏣᏓᏁᏗ ᎠᎴ ᎭᏓᏅᏍᎨᏍᏗ, ᎢᎬᏱ ᎣᏍᏛ ᏂᏍᏛᏁᎮᏍᏗ ᏗᏍᏓᏓᏅᏟ; ᎩᎳᏃ ᎯᎷᎨᏍᏗ ᎭᎵᏍᎪᎸᏗᏍᎨᏍᏗ ᏣᏓᏁᏗ.
|
|---|
Na-hna a-tsi-lv--ge-la-s-di-yi hi-hi-ya-s-ge-s-di tsa-da-ne-di a-le ha-da-nv-s-ge-s-di, i-gv-yi o-s-dv ni-s-dv-ne-he-s-di di-s-da-da-nv-tli; gi-la-no hi-lu-ge-s-di ha-li-s-go-lv-di-s-ge-s-di tsa-da-ne-di.
|
|---|
|
|---|
| Agree with thine adversary quickly, whiles thou art in the way with him; lest at any time the adversary deliver thee to the judge, and the judge deliver thee to the officer, and thou be cast into prison.
|
|---|
| ᏄᎳᏉ ᎣᏍᏛ ᏂᏍᏛ ᏣᏱᎵᏙᎯ, ᎠᏏᏉ ᎢᏍᏓᎢᏒᎢ, ᏗᎫᎪᏗᏍᎩᏱᎾᏏ ᏫᏱᏣᎧᎲᎦ ᏣᏱᎵᏙᎯ, ᏗᎫᎪᏗᏍᎩᏃ ᏗᏓᏂᏱᏍᎩᏱ ᏫᏱᏣᎧᎲᎦ, ᎠᎴ ᏗᏓᏍᏚᏗᏱ ᏱᏪᏣᏴᏓ.
|
|---|
Nu-la-quo o-s-dv ni-s-dv tsa-yi-li-do-hi, a-si-quo i-s-da-i-sv-i, di-gu-go-di-s-gi-yi-na-si wi-yi-tsa-ka-hv-ga tsa-yi-li-do-hi, di-gu-go-di-s-gi-no di-da-ni-yi-s-gi-yi wi-yi-tsa-ka-hv-ga, a-le di-da-s-du-di-yi yi-we-tsa-yv-da.
|
|---|
|
|---|
| Verily I say unto thee, Thou shalt by no means come out thence, till thou hast paid the uttermost farthing.
|
|---|
| ᎤᏙᎯᏳᎯᏯ ᎯᎠ ᏂᎬᏪᏎᎭ, ᎥᏝ ᏴᏛᎦᎯᏄᎪᎢ, ᎬᏂ ᎤᎵᏍᏆᎸᏗ ᎠᏰᎵᎢᏯᏓᏅᏖᏗ ᎭᎫᏴᎲᎭ.
|
|---|
U-do-hi-yu-hi-ya hi-a ni-gv-we-se-ha, V-tla yv-dv-ga-hi-nu-go-i, gv-ni u-li-s-qua-lv-di a-ye-li-i-ya-da-nv-te-di ha-gu-yv-hv-ha.
|
|---|
|
|---|
| Ye have heard that it was said by them of old time, Thou shalt not commit adultery:
|
|---|
| ᎢᏣᏛᎦᏅᎯ ᎢᎩ ᎯᎠ ᏥᏂᎨᏥᏪᏎᎴ ᎡᏘ ᏣᏁᎮᎢ; ᏞᏍᏗ ᏣᏓᏲᏁᎸᎩ.
|
|---|
I-tsa-dv-ga-nv-hi i-gi hi-a tsi-ni-ge-tsi-we-se-le e-ti tsa-ne-he-i; Tle-s-di tsa-da-yo-ne-lv-gi.
|
|---|
|
|---|
| But I say unto you, That whosoever looketh on a woman to lust after her hath committed adultery with her already in his heart.
|
|---|
| ᎠᏎᏃ ᎠᏴ ᎯᎠ ᏂᏨᏪᏎᎭ; ᎩᎶ ᎠᎨᏴ ᏓᎧᏂᏍᎨᏍᏗ ᏧᎾᏂᏏᏗᏱ ᎤᏚᎵᏍᎨᏍᏗ, ᎦᏳᎳ ᎤᏓᏲᏁᎸᎯ ᎨᏎᏍᏗ ᏧᏓᏅᏛᎢ.
|
|---|
A-se-no a-yv hi-a ni-tsv-we-se-ha; Gi-lo a-ge-yv da-ka-ni-s-ge-s-di tsu-na-ni-si-di-yi u-du-li-s-ge-s-di, ga-yu-la u-da-yo-ne-lv-hi ge-se-s-di tsu-da-nv-dv-i.
|
|---|
|
|---|
| And if thy right eye offend thee, pluck it out, and cast it from thee: for it is profitable for thee that one of thy members should perish, and not that thy whole body should be cast into hell.
|
|---|
| ᎢᏳᏃ ᎯᎦᏙᎵ ᎯᎦᏘᏏ ᏕᏦᏕᏍᏗᏍᎨᏍᏗ, ᎭᏓᎦᏖᏙᎢᏍᎨᏍᏗ, ᎠᎴ ᏣᏕᎨᏍᏗ; ᎣᏏᏳᏰᏃ ᎢᏣᎵᏍᏓᏁᏗ ᏌᏉᏉ ᏣᎵᎬᎭᎸᏛ ᏱᏣᏲᎱᏎᎭ, ᎠᏃ ᎤᏃᏍᏛ ᎯᏰᎸ ᏨᏍᎩᏃ ᏫᏰᏣᏓᎢᏁᎭ.
|
|---|
I-yu-no hi-ga-do-li hi-ga-ti-si de-tso-de-s-di-s-ge-s-di, ha-da-ga-te-do-i-s-ge-s-di, a-le tsa-de-ge-s-di; o-si-yu-ye-no i-tsa-li-s-da-ne-di sa-quo-quo tsa-li-gv-ha-lv-dv yi-tsa-yo-hu-se-ha, a-no u-no-s-dv hi-ye-lv tsv-s-gi-no wi-ye-tsa-da-i-ne-ha.
|
|---|
|
|---|
| And if thy right hand offend thee, cut if off, and cast it from thee: for it is profitable for thee that one of thy members should perish, and not that thy whole body should be cast into hell.
|
|---|
| ᎢᏳᏃ ᏦᏰᏂ ᎯᎦᏘᏏ ᏕᏦᏕᏍᏗᏍᎨᏍᏗ, ᎯᏍᏆᎵᏍᎨᏍᏗ, ᎠᎴ ᏣᏕᎨᏍᏗ; ᎣᏏᏳᏰᏃ ᎢᏣᎵᏍᏓᏁᏗ ᏌᏉᏉ ᏣᎵᎬᎭᎸᏛ ᏱᏣᏲᎱᏎᎭ, ᎠᏃ ᎤᏃᏍᏛ ᎯᏰᎸ ᏨᏍᎩᏃ ᏫᏰᏣᏓᎢᏁᎭ.
|
|---|
I-yu-no tso-ye-ni hi-ga-ti-si de-tso-de-s-di-s-ge-s-di, hi-s-qua-li-s-ge-s-di, a-le tsa-de-ge-s-di; o-si-yu-ye-no i-tsa-li-s-da-ne-di sa-quo-quo tsa-li-gv-ha-lv-dv yi-tsa-yo-hu-se-ha, a-no u-no-s-dv hi-ye-lv tsv-s-gi-no wi-ye-tsa-da-i-ne-ha.
|
|---|
|
|---|
| It hath been said, Whosoever shall put away his wife, let him give her a writing of divorcement:
|
|---|
| ᎯᎠ ᎢᎦᏪᏛ ᎢᎩ; ᎩᎶ ᎤᏓᎵᎢ ᎢᎦᎧᎲᏍᎨᏍᏗ, ᎦᏅᏁᎮᏍᏗ ᎪᏪᎵ ᎾᏍᎩ ᏚᎾᎦᎴᏅᎲᎢ.
|
|---|
Hi-a i-ga-we-dv i-gi; Gi-lo u-da-li-i i-ga-ka-hv-s-ge-s-di, ga-nv-ne-he-s-di go-we-li na-s-gi du-na-ga-le-nv-hv-i.
|
|---|
|
|---|
| But I say unto you, That whosoever shall put away his wife, saving for the cause of fornication, causeth her to commit adultery: and whosoever shall marry her that is divorced committeth adultery.
|
|---|
| ᎠᏎᏃ ᎠᏴ ᎯᎠ ᏂᏨᏪᏎᎭ; ᎩᎶ ᎤᏓᎵᎢ ᎢᎦᎧᎲᏍᎨᏍᏗ, ᏧᏂᏏᏅᎯᏍᎩᏂᏃᏅ ᎢᎨᏎᏍᏗ, ᎤᏓᏲᏁᏗᏱᏉ ᏂᎬᏂᏌᏁᎮᏍᏗ; ᎩᎶᏃ ᎠᏥᎧᏅᎯ ᎠᏓᏰᎨᏍᏗ ᎠᏓᏲᏁᎮᏍᏗ.
|
|---|
A-se-no a-yv hi-a ni-tsv-we-se-ha; Gi-lo u-da-li-i i-ga-ka-hv-s-ge-s-di, tsu-ni-si-nv-hi-s-gi-ni-no-nv i-ge-se-s-di, u-da-yo-ne-di-yi-quo ni-gv-ni-sa-ne-he-s-di; gi-lo-no a-tsi-ka-nv-hi a-da-ye-ge-s-di a-da-yo-ne-he-s-di.
|
|---|
|
|---|
| Again, ye have heard that it hath been said by them of old time, Thou shalt not forswear thyself, but shalt perform unto the Lord thine oaths:
|
|---|
| ᎠᎴ ᎢᏣᏛᎦᏅᎯ ᎢᎩ ᎯᎠ ᏥᏂᎨᏥᏪᏎᎴ ᎡᏘ ᏣᏁᎮᎢ; ᏞᏍᏗ ᏣᏲᏍᏔᏅ ᏣᏎᎵᏔᏅᎢ, ᏱᎰᏩᏍᎩᏂ ᏂᏯᏛᏁᎮᏍᏗ ᏄᏍᏛ ᏣᏁᏨᎢ.
|
|---|
A-le i-tsa-dv-ga-nv-hi i-gi hi-a tsi-ni-ge-tsi-we-se-le e-ti tsa-ne-he-i; Tle-s-di tsa-yo-s-ta-nv tsa-se-li-ta-nv-i, yi-ho-wa-s-gi-ni ni-ya-dv-ne-he-s-di nu-s-dv tsa-ne-tsv-i.
|
|---|
|
|---|
| But I say unto you, Swear not at all; neither by heaven; for it is God's throne:
|
|---|
| ᎠᏎᏃ ᎠᏴ ᎯᎠ ᏂᏨᏪᏎᎭ; ᏞᏍᏗ ᏱᏣᏎᎵᏔᏁᏍᏗ ᏱᏣᏁᎢᏍᏔᏁᏍᏗ ᎪᎱᏍᏗ, ᏞᏍᏗ ᎦᎸᎳᏗ ᏱᏣᏁᎢᏍᏔᏁᏍᏗ, ᎤᏁᎳᏅᎯᏰᏃ ᎤᏪᏗᏱ ᎾᏍᎩ;
|
|---|
A-se-no a-yv hi-a ni-tsv-we-se-ha; Tle-s-di yi-tsa-se-li-ta-ne-s-di yi-tsa-ne-i-s-ta-ne-s-di go-hu-s-di, tle-s-di ga-lv-la-di yi-tsa-ne-i-s-ta-ne-s-di, U-ne-la-nv-hi-ye-no u-we-di-yi na-s-gi;
|
|---|
|
|---|
| Nor by the earth; for it is his footstool: neither by Jerusalem; for it is the city of the great King.
|
|---|
| ᏞᏍᏗ ᎠᎴ ᎡᎶᎯ, ᏧᎳᏏᏗᏱᏰᏃ ᎾᏍᎩ; ᎠᎴ ᏥᎷᏏᎵᎻ, ᎾᏍᎩᏰᏃ ᎠᏥᎸᏉᏗ ᎤᎬᏫᏳᎯ ᎤᏤᎵ ᎦᏚᎲᎢ;
|
|---|
Tle-s-di a-le e-lo-hi, tsu-la-si-di-yi-ye-no na-s-gi; a-le Tsi-lu-si-li-mi, na-s-gi-ye-no a-tsi-lv-quo-di U-gv-wi-yu-hi u-tse-li ga-du-hv-i;
|
|---|
|
|---|
| Neither shalt thou swear by thy head, because thou canst not make one hair white or black.
|
|---|
| ᏞᏍᏗ ᎠᎴ ᎯᏍᎪᎵ ᏱᏣᏁᎢᏍᏔᏁᏍᏗ, ᏝᏰᏃ ᏰᎵ ᏌᏉ ᎩᏢ ᎤᏁᎬ ᎠᎴ ᎬᎿᎭᎨ ᏱᏅᎦᎲᎦ.
|
|---|
Tle-s-di a-le hi-s-go-li yi-tsa-ne-i-s-ta-ne-s-di, tla-ye-no ye-li sa-quo gi-tlv u-ne-gv a-le gv-hna-ge yi-nv-ga-hv-ga.
|
|---|
|
|---|
| But let your communication be, Yea, yea; Nay, nay: for whatsoever is more than these cometh of evil.
|
|---|
| ᎢᏥᏁᎬᏍᎩᏂ ᎯᎠ ᏄᏍᏕᏍᏗ, ᎥᎥ, ᎥᎥ; ᎥᏝ, ᎥᏝ; ᎤᏟᏰᏃ ᏥᏂᎦᎣ ᎤᏲᏉ ᎨᏒ ᏗᏓᎴᏂᏍᎪᎢ.
|
|---|
I-tsi-ne-gv-s-gi-ni hi-a nu-s-de-s-di, V-v, V-v; V-tla, V-tla; u-tli-ye-no tsi-ni-ga-o u-yo-quo ge-sv di-da-le-ni-s-go-i.
|
|---|
|
|---|
| Ye have heard that it hath been said, An eye for an eye, and a tooth for a tooth:
|
|---|
| ᎢᏣᏛᎦᏅᎯ ᎢᎩ ᎯᎠ ᎢᎦᏪᏛ ᎨᏒᎢ, ᎠᎦᏔ ᎠᎦᏔᏉ ᏓᎬᏩᎸᏍᎨᏍᏗ, ᎧᏳᎦᏃ ᎧᏳᎦᏉ ᏓᎬᏩᎸᏍᎨᏍᏗ.
|
|---|
I-tsa-dv-ga-nv-hi i-gi hi-a i-ga-we-dv ge-sv-i, A-ga-ta a-ga-ta-quo da-gv-wa-lv-s-ge-s-di, ka-yu-ga-no ka-yu-ga-quo da-gv-wa-lv-s-ge-s-di.
|
|---|
|
|---|
| But I say unto you, That ye resist not evil: but whosoever shall smite thee on thy right cheek, turn to him the other also.
|
|---|
| ᎠᏎᏃ ᎠᏴ ᎯᎠ ᏂᏣᏪᏎᎭ; ᏞᏍᏗ ᏱᏣᏞᎨᏍᏗ ᎤᏐᏅ ᏁᏨᏁᎸᎢ; ᎩᎶᏍᎩᏂ ᎯᎦᏘᏏ ᏣᎪᏇᎷᎲᏍᎨᏍᏗ, ᏐᎢ ᎾᏍᏉ ᎯᏯᎵᏍᎪᎸᏓᏁᎮᏍᏗ.
|
|---|
A-se-no a-yv hi-a ni-tsa-we-se-ha; Tle-s-di yi-tsa-tle-ge-s-di u-so-nv ne-tsv-ne-lv-i; gi-lo-s-gi-ni hi-ga-ti-si tsa-go-que-lu-hv-s-ge-s-di, so-i na-s-quo hi-ya-li-s-go-lv-da-ne-he-s-di.
|
|---|
|
|---|
| And if any man will sue thee at the law, and take away thy coat, let him have thy cloke also.
|
|---|
| ᎩᎶᏃ ᎤᏚᎵᏍᎨᏍᏗ ᏣᏱᎵᏓᏍᏗᏱ, ᎠᎴ ᏣᎾᎡᏗᏱ ᎭᏫᏂ ᏣᏄᏬ, ᎤᏛᏃᎯ ᎾᏍᏉ ᎯᏅᏁᎮᏍᏗ.
|
|---|
Gi-lo-no u-du-li-s-ge-s-di tsa-yi-li-da-s-di-yi, a-le tsa-na-e-di-yi ha-wi-ni tsa-nu-wo, u-dv-no-hi na-s-quo hi-nv-ne-he-s-di.
|
|---|
|
|---|
| And whosoever shall compel thee to go a mile, go with him twain.
|
|---|
| ᎩᎶᏃ ᏑᏟᎶᏛ ᎢᏍᏕᏅᏍᏗᏱ ᏂᏨᏁᎮᏍᏗ, ᏔᎵ ᎢᏳᏟᎶᏛ ᎢᏍᏕᎨᏍᏗ.
|
|---|
Gi-lo-no su-tli-lo-dv i-s-de-nv-s-di-yi ni-tsv-ne-he-s-di, ta-li i-yu-tli-lo-dv i-s-de-ge-s-di.
|
|---|
|
|---|
| Give to him that asketh thee, and from him that would borrow of thee turn not thou away.
|
|---|
| ᏣᏔᏲᏎᎯ ᎯᏁᎮᏍᏗ, ᏣᏙᎸᎡᏗᏱᏃ ᎤᏚᎵᏍᎩ ᏞᏍᏗ ᎢᏴᏛ ᎢᎯᏯᏛᏁᎸᎩ.
|
|---|
Tsa-ta-yo-se-hi hi-ne-he-s-di, tsa-do-lv-e-di-yi-no u-du-li-s-gi tle-s-di i-yv-dv i-hi-ya-dv-ne-lv-gi.
|
|---|
|
|---|
| Ye have heard that it hath been said, Thou shalt love thy neighbour, and hate thine enemy.
|
|---|
| ᎢᏣᏛᎦᏅᎯ ᎢᎩ ᎯᎠ ᎢᎦᏪᏛ ᎨᏒᎢ; ᎯᎨᏳᏎᏍᏗ ᎾᎥ ᎢᏗᏍᏓᏓᎳ, ᎯᏍᎦᎨᏍᏗᏃ ᏣᏍᎦᎩ.
|
|---|
I-tsa-dv-ga-nv-hi i-gi hi-a i-ga-we-dv ge-sv-i; Hi-ge-yu-se-s-di na-v i-di-s-da-da-la, hi-s-ga-ge-s-di-no tsa-s-ga-gi.
|
|---|
|
|---|
| But I say unto you, Love your enemies, bless them that curse you, do good to them that hate you, and pray for them which despitefully use you, and persecute you;
|
|---|
| ᎠᏎᏃ ᎠᏴ ᎯᎠ ᏂᏨᏪᏎᎭ; ᏕᏥᎨᏳᏎᏍᏗ ᎨᏥᏍᎦᎩ; ᎣᏍᏛ ᏕᏥᏁᏤᎮᏍᏗ ᎨᏥᏍᎩᏅᏗᏍᎩ, ᎣᏍᏛ ᏂᏕᏣᏛᏁᎮᏍᏗ ᎨᏥᏂᏆᏘᎯ, ᎠᎴ ᎣᏍᏛ ᎢᏳᎾᎵᏍᏓᏁᏗᏱ ᎢᏣᏓᏙᎵᏍᏗᏍᎨᏍᏗ ᎦᏰᎪᎩ ᎨᏥᏃᎮᏍᎩ ᎠᎴ ᎤᏲ ᎢᎨᏨᏁᎯ.
|
|---|
A-se-no a-yv hi-a ni-tsv-we-se-ha; De-tsi-ge-yu-se-s-di ge-tsi-s-ga-gi; o-s-dv de-tsi-ne-tse-he-s-di ge-tsi-s-gi-nv-di-s-gi, o-s-dv ni-de-tsa-dv-ne-he-s-di ge-tsi-ni-qua-ti-hi, a-le o-s-dv i-yu-na-li-s-da-ne-di-yi i-tsa-da-do-li-s-di-s-ge-s-di ga-ye-go-gi ge-tsi-no-he-s-gi a-le u-yo i-ge-tsv-ne-hi.
|
|---|
|
|---|
| That ye may be the children of your Father which is in heaven: for he maketh his sun to rise on the evil and on the good, and sendeth rain on the just and on the unjust.
|
|---|
| ᎾᏍᎩᏃ ᎦᎸᎳᏗ ᎡᎯ ᎢᏥᏙᏓ ᏧᏪᏥ ᏂᏣᎵᏍᏗᏍᎨᏍᏗ; ᎾᏍᎩᏰᏃ ᎤᏤᎵ ᏅᏙ ᏕᎦᎾᏄᎪᏫᏎᎰ ᎤᏂᏲ ᎠᎴ ᎠᏃᏍᏛ, ᎠᎴ ᏓᎦᏅᏓᏁᎰ ᎤᎾᏓᏅᏘ ᎠᎴ ᎤᏂᏁᎫᏥᏛ.
|
|---|
Na-s-gi-no ga-lv-la-di e-hi I-tsi-do-da tsu-we-tsi ni-tsa-li-s-di-s-ge-s-di; na-s-gi-ye-no u-tse-li nv-do de-ga-na-nu-go-wi-se-ho u-ni-yo a-le a-no-s-dv, a-le da-ga-nv-da-ne-ho u-na-da-nv-ti a-le u-ni-ne-gu-tsi-dv.
|
|---|
|
|---|
| For if ye love them which love you, what reward have ye? do not even the publicans the same?
|
|---|
| ᎢᏳᏰᏃ ᏱᏗᏥᎨᏳᎭ ᎨᏥᎨᏳᎯ, ᎦᏙ ᏰᏣᎫᏴᏓᏏ? ᏝᏍᎪ ᎾᏍᎩ ᏱᎾᎾᏛᏁᎰ ᎠᏰᎵ-ᎠᏕᎸ ᎠᏂᎩᏏᏙᎯ?
|
|---|
I-yu-ye-no yi-di-tsi-ge-yu-ha ge-tsi-ge-yu-hi, ga-do ye-tsa-gu-yv-da-si? Tla-s-go na-s-gi yi-na-na-dv-ne-ho a-ye-li--a-de-lv a-ni-gi-si-do-hi?
|
|---|
|
|---|
| And if ye salute your brethren only, what do ye more than others? do not even the publicans so?
|
|---|
| ᎢᏳ ᎠᎴ ᎢᏣᏓᏅᏟᏉ ᎤᏅᏒ ᏱᏗᏥᏲᎵᎭ, ᎦᏙ ᎢᏣᏛᏁᎲ ᏕᏥᎪᎾᏛᏗ ᎠᏂᏐᎢ? ᏝᏍᎪ ᎾᏍᎩ ᏱᎾᎾᏛᏁᎰ ᎠᏰᎵ-ᎠᏕᎸ ᎠᏂᎩᏏᏙᎯ?
|
|---|
I-yu a-le i-tsa-da-nv-tli-quo u-nv-sv yi-di-tsi-yo-li-ha, ga-do i-tsa-dv-ne-hv de-tsi-go-na-dv-di a-ni-so-i? Tla-s-go na-s-gi yi-na-na-dv-ne-ho a-ye-li--a-de-lv a-ni-gi-si-do-hi?
|
|---|
|
|---|
| Be ye therefore perfect, even as your Father which is in heaven is perfect.
|
|---|
| ᏂᎯᏍᎩᏂ ᏂᏥᏍᎦᏅᎾ ᎨᏎᏍᏗ ᎾᏍᎩᏯ ᎢᏥᏙᏓ ᎦᎸᎳᏗ ᎡᎯ ᎾᏍᎦᏅᎾ ᏥᎩ.
|
|---|
Ni-hi-s-gi-ni ni-tsi-s-ga-nv-na ge-se-s-di na-s-gi-ya I-tsi-do-da ga-lv-la-di e-hi na-s-ga-nv-na tsi-gi.
|
|---|


Review What You Can See From The Provider
Go to Compute → Clouds → Providers
You can see there your new GCE provider, and a quad icon with four zones that specifies:
- Type of provider
- Authentication status
- Some other information that depends on the provider
For instance, our freshly provided Cloud has already some elements discovered:
- Type of provider (icon of Google Cloud)
- Authentication status (OK)
- Number of instances (VM)
- Number of Images (Templates)
Clicking it will show you more information:
- Properties. Characteristics of the provider as defined in ManageIQ, like type of provider and preferred region. This information will be different for each provider.
- Status. Whether your credentials are valid and when the last refresh was done.
- Relationships. Including the information about the components of the provider, like the number of security groups defined in the network, the number of available flavors (virtual hardware characteristics), cloud volumes, etc.
You can click on any of those elements to see detail information and a list of objects within. For instance, you can click on Instances to see names and characteristics of the instances within the provider
Discovering a VM
Click on any of the VM available (or follow the next element if you don’t see any to create a new VM).
You will find in the accordion a hierarchy tree that allows you to see the context: our machine is part of the availability zone: “us-east1-b”.
There is a lot of detailed information out of the box:
Information available
Properties####
ManageIQ is capable of autodiscovering all IP addresses associated to the VM, the container (hardware associated to the instance), or the Operating System that is using, automatically.
Lifecycle####
It provides information about the lifecycle of the entity, when it was discovered, and when it was last analyzed. Whether there is a retirement date for the instance, and the group it belongs to.
Relationships####
ManageIQ stores relationships between the elements in your infrastructure.
- Provider where the instance is stored
- Availability zone
- The VM-template used to provision it
- Many others
As different cloud providers use different concepts, it is possible that you find many parameters define as 0 or None. You need to check in the documentation what information is discovered for each one.
Compliance####
You can run compliance checks against your instances, and the status and history will be available here.
Power Management
Allows you to know the power state of the instance and the last time ManageIQ saw it changing. As these instances are discovered, ManageIQ does not know the last time it booted.
Security, Configuration, Diagnostics and Smart Management####
More advanced capabilities are available for selected providers, including agentless inspection of workloads to discover
Reporting##
There is an extensive reporting capability to get reports from all this data and relationships in an structured way. You can find reports under Cloud Intelligence
This tutorial does not specify the information you can gather in reporting
[NOTE]
Providers need to have Capacity and Utilization data available to be able to generate reports on them
Not all providers show the same data or have the C&U data available.


--- layout: page title: "About" description: "Hey, This is T.L" header-img: "img/about-bg.jpg" ---
敲敲代码，写写博客，听听音乐，出去走走。
Hey,欢迎来到我的博客，我是陆志君，小硕一枚，主要研究方向是智能优化算法、分布式计算。所在实验室叫并行室计算实验室,所谓并行，不单指计算机上的算法并行化处理，也指人在各个领域内都能共同工作而不相互干扰，达到1+1大于1的效果。就像很多优秀算法的提出都是跨学科领域的，比如蚁群算法的提出者是个生物学家等等.除了计算机，我也热衷于写作、摄影、旅行，这些东西能记录世界美、表达自己的心绪，更重要的是可以和大家分享。在分享知识的路上我是TED字幕组成员之一。并行者此生注定终身学习，而佛学是求知路上的毕生相伴。爱因斯坦说，当你达到知识的顶峰才发现佛早已立在那里微笑。对此我深信不疑，这么多年书籍的接触更让我坚信佛学的科学性，时刻提醒自己保持善良、初心。
Codes and Blob，Words and Walk.
Hey,Dude. Welcome to my Blob. Here is Lu Zhijun,you can call me Trucy. I'm a M.S. focusing on Intelligent Optimization olgorithms and Distributed Computing,My lab is calledParallel Computing Lab. The so-called paralling not only refers to the computer's parallel processing, also refers to the people can work together in various areas without interfering with each other to reach "one plus one is greater than two "results. Like many of the best algorithms are proposed from interdisciplinary field, such as the author of the ant colony algorithm who is a biologist, etc. In addition to computers, I'm also keen on writing, photography. I'm also one of TED subtitle group members.


Inventory management System is a system for tracking inventory levels, orders made, sales and product requests.
This system was made with the idea of one local shop with future plans of expanding it to multiple shops.
To register as a merchanct click the button below.Howerever to login as a clerk,you must have registered which can only be through merchant email invitation


Parrot species kept in captivity because of they are very colorful
These birds have been popular companions throughout history because they are intelligent, charismatic, colorful, and musical
They have a long history as pets, stretching back thousands of years, and were often kept as a symbol of royalty or wealth
One-third of all parrot species are threatened by extinction, with higher aggregate extinction risk than any other comparable bird group
We have a fun facts far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.


Chapter 7: Cross-Correlations, Fourier Transform, and Wavelet Transform¶
prepared by Gilbert Chua
Gaining a deeper undersanding of time series dynamics and classifying them, we look at time series forecasting through another lens.
In this chapter, we will take a different approach to how we analzye time series that is complementary to forecasting. Previously, methods of explaining such as the Granger Causality, Simplex Mapping, and Convergent Cross Mapping, focused on the time domain - the values of the time series when measured over time or in its phase space. While both are useful for many tasks, it can be often useful to transform these time domain measurements to unearth patterns which are difficult to tease out. Specifically, we want to look at the frequency domain to both analyze the dynamics and perform pre-processing techniques that may be used to modify real-world datasets.
We will be analyzing the dynamics of time series not exactly to make forecasts, but to understand them in terms of their frequencies in complement to the previous methods of causality and explainability presented.
We introduce three techniques:
1) Cross-correlations
2) Fourier Transform
3) Wavelet Transform
and test their use on the Jena Climate Dataset (2009-2016) along with a handful of other datasets.
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
from datetime import date, timedelta
import scipy as scp
import random
from statsmodels.tsa.stattools import acf, adfuller, ccf, ccovf
from itertools import repeat
import pywt
import os
import warnings
warnings.filterwarnings('ignore')
Cross-correlation Between Two Signals¶
Phenomenon captured by time series may not happen at the exact same time with some lag \(h\) between them. A simple example of this is Sonar technology. The time series associated with the response from the sound waves being reflected comes at some lag compared to the time series of the device emitting the initial sound waves. It is this lag we want to measure when we use the cross-correlation function (CCF). This function was discussed previously in Chapter 3 - Vector Autoregressive Methods. We will explore this concept in this chapter and adopt the same definition.
Let \(\mathbf\Gamma_h\) be the covariance matrix at lag \(h\), \(\mathbf D\) be a \(N\times N\) diagonal matrix containing the standard deviations of \(y_{i,t}\) for \(i=1, ..., N\). The lagged correlation matrix of \(\mathbf{y}_t\) is defined as
The \((i,j)\)th element of \(\boldsymbol\rho_h\) is the correlation coefficient between \(y_{i,t}\) and \(y_{j,t-h}\):
where \(Cov[y_{i,t}, y_{j,t-h}]\) is the covariance of two time series \(y_{i,t}\) and \(y_{j,t-h}\) at time \(t\) and lag \(h\).
The values of the correlation coefficient from the cross-correlation function are interpreted as such:
Correlation Coefficient |
Interpretation |
|---|---|
\(\rho_{i,j}(0)\neq0\) |
\(y_{i,t}\) and \(y_{j,t}\) are contemporaneously linearly correlated |
\(\rho_{i,j}(h)=\rho_{j,i}(h)=0\) for all \(h\geq0\) |
\(y_{i,t}\) and \(y_{j,t}\) share no linear relationship |
\(\rho_{i,j}(h)=0\) and \(\rho_{j,i}(h)=0\) for all \(h>0\) |
\(y_{i,t}\) and \(y_{j,t}\) are said to be linearly uncoupled |
\(\rho_{i,j}(h)=0\) for all \(h>0\), but \(\rho_{j,i}(q)\neq0\) for at least some \(q>0\) |
There is a unidirectional (linear) relationship between \(y_{i,t}\) and \(y_{j,t}\), where \(y_{i,t}\) does not depend on \(y_{j,t}\), but \(y_{j,t}\) depends on (some) lagged values of \(y_{i,t}\) |
\(\rho_{i,j}(h)\neq0\) for at least some \(h>0\) and \(\rho_{j,i}(q)\neq0\) for at least some \(q>0\) |
There is a bi-directional (feedback) linear relationship between \(y_{i,t}\) and \(y_{j,t}\) |
Noisy Signals¶
To demonstrate this, we take the case of two simple yet noisy time series.
We want to measure the shift between two periodic signals Two sine waves are generated that are identical in both amplitude and frequency but one is shifted forward in time. By taking the maximum of the cross-correlation, we should be able to retrieve how much one of the time series leads (or lags!) the other.
def sine_wave(amp=1, freq=1, sample_rate=200, duration=5,
plot=True, shift=0, noise=0):
x = np.linspace(0, duration, sample_rate*duration)
frequencies = x * freq
y = amp*np.sin((2 * np.pi * frequencies) + shift) + noise
if plot:
plt.subplots(figsize=(15, 2))
plt.plot(x, y)
plt.show()
return x, y
samp_rate = 500 # Sampling Frequency in Hertz
dur = 5 # Duration in Seconds
amp1 = 1 # Amplitude of Sine Wave 1
freq1 = 1 # Frequency of Sine Wave 1
amp2 = 1 # Amplitude of Sine Wave 2
freq2 = 1 # Frequency of Sine Wave 2
phase_shift = np.pi/2 # Phase shift
noise = np.random.uniform(-1, 1, samp_rate*dur)
x1, y1 = sine_wave(amp1, freq1, samp_rate, dur, noise=noise,
plot=False)
noise = np.random.uniform(-0.3, 0.3, samp_rate*dur)
x2, y2 = sine_wave(amp2, freq2, samp_rate, dur, noise=noise,
shift=phase_shift, plot=False)
plt.subplots(figsize=(15, 2))
plt.plot(np.linspace(0, dur, samp_rate*dur), y1, label='$y1$')
plt.plot(np.linspace(0, dur, samp_rate*dur), y2, label='$y2$')
plt.ylabel('Value')
plt.xlabel('Time (in $s$)')
plt.legend();
plt.subplots(figsize=(15, 2))
ccf_12 = ccf(y1, y2, unbiased=False)
plt.ylabel('Correlation Coefficient')
plt.xlabel('Lag $h$')
plt.stem(np.linspace(0, dur, samp_rate*dur), ccf_12)
peak = np.argmax(ccf_12)/samp_rate
plt.axvline(peak, c='orange')
print('Maximum at:', peak, '(in $s$)')
Maximum at: 0.25 (in $s$)
We find that the maximum correlation between \(y_2\) and \(y_1\) occurs at ~0.247 seconds, approximately 1/4 of the frequency. This is very close to the theoretical value of 0.25 seconds corresponding to a phase shift of \(\frac{\pi}{2}\). Using only direct measurements from the data, albeit synthetic, we are able to retrieve a reasonable estimate of the lag and delay between them.
By measuring the cross-correlation between these two signals we can find how far apart we need to adjust the time series to maximize their linear correlation. It is important to note that unlike the different causality measures discussed (Granger, Convergent Cross-mapping, etc.), cross-correlation does not give insights into causality - rather it only gives correlations.
Example 1: Cross-Correlations in the Jena Climate Data¶
Let us look at how cross-correlations can be used to unearth relationships in real data. We will again use the Jena Climate Dataset to analyze the average temperature. This time, we will look at the relationship between daily temperature and daily wind speed.
df = pd.read_csv('../data/jena_climate_2009_2016.csv')
display(df.head())
data = df.iloc[:, 1:].astype(float).to_numpy()
temp = data[:, 1][::144] # Temperature (in degrees Celsius) at one sample/day
wind = data[:, 10][::144] # Wind Speed (in m/s) at one sample/day
dur = len(temp)
samp_rate = 1
| Date Time | p (mbar) | T (degC) | Tpot (K) | Tdew (degC) | rh (%) | VPmax (mbar) | VPact (mbar) | VPdef (mbar) | sh (g/kg) | H2OC (mmol/mol) | rho (g/m**3) | wv (m/s) | max. wv (m/s) | wd (deg) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 01.01.2009 00:10:00 | 996.52 | -8.02 | 265.40 | -8.90 | 93.3 | 3.33 | 3.11 | 0.22 | 1.94 | 3.12 | 1307.75 | 1.03 | 1.75 | 152.3 |
| 1 | 01.01.2009 00:20:00 | 996.57 | -8.41 | 265.01 | -9.28 | 93.4 | 3.23 | 3.02 | 0.21 | 1.89 | 3.03 | 1309.80 | 0.72 | 1.50 | 136.1 |
| 2 | 01.01.2009 00:30:00 | 996.53 | -8.51 | 264.91 | -9.31 | 93.9 | 3.21 | 3.01 | 0.20 | 1.88 | 3.02 | 1310.24 | 0.19 | 0.63 | 171.6 |
| 3 | 01.01.2009 00:40:00 | 996.51 | -8.31 | 265.12 | -9.07 | 94.2 | 3.26 | 3.07 | 0.19 | 1.92 | 3.08 | 1309.19 | 0.34 | 0.50 | 198.0 |
| 4 | 01.01.2009 00:50:00 | 996.51 | -8.27 | 265.15 | -9.04 | 94.1 | 3.27 | 3.08 | 0.19 | 1.92 | 3.09 | 1309.00 | 0.32 | 0.63 | 214.3 |
plt.subplots(figsize=(15, 2))
plt.plot(range(len(temp)), temp, label='Temperature')
plt.plot(range(len(wind)), wind, label='Wind Velocity')
plt.legend();
We rescale the graphs so that we can easily visualize them.
plt.subplots(figsize=(15, 2))
plt.plot(range(len(temp)), (temp-np.mean(temp)) /
np.std(temp), label='Temperature')
plt.plot(range(len(wind)), (wind-np.mean(wind)) /
np.std(wind), label='Wind Velocity')
plt.ylabel('Value')
plt.xlabel('Time (in days)')
plt.legend();
From previous chapters, we know that these time series are stationary. With stationarity, we can proceed with applying the CCF to these two time series.
plt.subplots(figsize=(15, 2))
ccf_12 = ccf(temp, wind, unbiased=False)
plt.ylabel('Correlation Coefficient')
plt.xlabel('Lag $h$')
plt.stem(np.linspace(0, dur, samp_rate*dur), ccf_12)
peak = np.argmax(ccf_12)/samp_rate
plt.axvline(peak, c='r')
print('Maximum at:', peak, '(in $s$)')
Maximum at: 178.0 (in $s$)
We find that the shift maximizing the correlation between the daily values of temeperature and wind speed are 178 samples. An interesting result is that the correlation at \(s=0\) is at a minimum. Both of these suggest that temperature and wind speed are periodic functions mirror each other in that when one is maximized, the other is minimized. We estimate then that the wind speed leads the temperature values by 178 days.
It should be noted that unlike Granger Causality which also draws relationships between multiple time series, cross-correlation does not provide us with the causality between the two. At best, cross-correlation shows the synchronocity between two time series.
Example 2: Cross-Correlations Between Precipitation and Flow in the Sudbury River¶
We apply cross-correlation analysis on the daily stream flow of a river and the precipitation in its surrounding area. The data will be coming from the United States Geological Survey’s (USGS) Real-time Water Data for the Nation and covers the Subdury River at Saxonville, Massachusetts for the year 2000. It comprises of the daily mean flow of water measured by the the USGS station. Understanding the causes and dynamics of flow in this specific river can have profound implications on managing the integity and diversity of its ecosystem.
flow_df = pd.read_csv('../data/cc/flowsud_2000.txt', sep='\t')
flow_df.columns = ['USGS', 'site_no', 'datetime', 'flow', '-']
flow = flow_df['flow']
rain_df = pd.read_csv('../data/cc/weather_2000.txt')
rain_df['Prcp'] = rain_df['Prcp'].replace('T', 0.0005).astype(float)
rain = rain_df['Prcp']
dur = len(rain)
samp_rate = 1
plt.subplots(figsize=(15, 2))
plt.plot(flow, label='Stream Flow')
plt.plot(rain, label='Precipitation')
plt.legend();
Once again, we rescale the graphs so that we can easily visualize them.
plt.subplots(figsize=(15, 2))
plt.plot((rain-np.mean(rain))/np.std(rain), label='Preciptation (exaggerated)')
plt.plot((flow-np.mean(flow))/np.std(flow), label='Stream Flow')
plt.xlabel('Day of the Year')
plt.legend();
We perform the Augmented Dickey-Fuller test on the two time series to figure out if they are stationary. If they are indeed stationary, we can proceed to performing the cross-correlation.
result = adfuller(flow)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
ADF Statistic: -3.878838
p-value: 0.002196
Critical Values:
1%: -3.448
5%: -2.870
10%: -2.571
result = adfuller(rain)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
ADF Statistic: -18.494992
p-value: 0.000000
Critical Values:
1%: -3.448
5%: -2.869
10%: -2.571
Both time series are stationary and we proceed with applying the CCF.
plt.subplots(figsize=(15, 2))
ccf_12 = ccf(flow, rain, unbiased=False)
plt.ylabel('Correlation Coefficient')
plt.xlabel('Lag $h$')
plt.stem(np.linspace(0, dur, samp_rate*dur), ccf_12)
peak = np.argmax(ccf_12)/samp_rate
plt.axvline(peak, c='r')
print('Maximum at:', peak, '(in $days$)')
Maximum at: 1.0 (in $days$)
We find that the maximum correlation happens when precipitation leads stream flow by 1 day. While cross-correlation alone cannot give us causality, understanding of the measurements involved can be used to argue such. In the case of rainfall and precipitation, there is established understanding that precipitation leads to increases in river flow. We can conclude with some confidence that precipitation will cause an increase in river flow after 1 day.
To supplement our analysis, we move into the frequency domain with the Fourier Transform by first understanding the Fourier Series.
The Fourier Series:¶
Any periodic signal can be broken down into a summation of sine and cosine waves. A periodic time series \(X(t)\) can be broken down into fundamental frequencies given by the Fourier Series:
\(\begin{align} y(t) = \frac{a_0}{2} + \sum_{n=1}^{\infty}{a_n cos(nt)) + b_n sin(nt)} \end{align}\)
Integrating both sides by \(\int+{-\pi}^{\pi} cos(mt)dt\) where \(m\) is an integer:
\(\begin{align} \int_{-\pi}^{\pi}{y(t)cos(mt)dt} = \frac{1}{2} a_0 + \sum_{n=1}^{\infty}{\int_{-\pi}^{\pi}a_n cos(nt)cos(mt)dt + \sum_{n=1}^{\infty}\int_{-\pi}^{\pi}b_n sin(nt) cos(mt)dt} \end{align}\)
Via orthogonality between \(cos\) and \(sin\) over \([-\pi,\pi]\):
\(\begin{align} \int_{-\pi}^{\pi}{cos(nt)cos(mt)dt} = 0, m\neq n \end{align}\) \(\begin{align} \int_{-\pi}^{\pi}{sin(nt)cos(mt)dt} = 0, all m,n \end{align}\) \(\begin{align} \int_{-\pi}^{\pi}{cos(nt)sin(mt)dt} = 0, m\neq n \end{align}\)
Equation 4 reduces to:
\(\begin{align} \int_{-\pi}^{\pi}{y(t)cos(mt)dt} = a_m \int_{-\pi}^{\pi}cos^{2}(mt)dt \end{align}\)
Solving for this a_m, we find that:
\(\begin{align} a_m = \frac{1}{\pi}\int_{-\pi}^{\pi}{y(t) cos(mt)dt} \end{align}\)
Doing the same for b_m, we find the similar coefficient:
\(\begin{align} b_m = \frac{1}{\pi}\int_{-\pi}^{\pi}{y(t) sin(mt)dt} \end{align}\)
for \(n =0,1,2...,\) where:
\(n = 0\) is the constant component of the signal
\(n = 1\) is the \textit{fundamental} corresponding to a sine/cosine wave whose period matches \(y(t)\)’s period exactly
\(n = 2\) is the first harmonic corresponding to a sine/cosine whose period matches \(\frac{1}{2}\) of \(y(t)\)’s period
\(n = 3\) is the second harmonic corresponding to a sine/cosine whose period matches \(\frac{1}{3}\) of \(y(t)\)’s period
One useful quantity to look at is the energy of a signal as it tells us how “much” of a signal there is. We define a single coefficient \(c_n^{2}\) to describe the “energy” of a signal at a specific frequency where \(c_n\) is given by:
\(\begin{align}c_n = \left[\frac{1}{2}(a^2_n + b^2_n)\right]^{\frac{1}{2}}\end{align}\)
The square of these coefficients (\(c_n^{2}\)) corresponds to the energy of a certain frequency \(n\).
The Fourier Transform:¶
Transforming a signal from the time domain into the frequency (\(\omega\)) domain using this method is called the \textbf{Fourier Transform (FT)}. The FT is given by:
To better understand the FT, let us take a look at some of its applications.
FT of a Pure Signal¶
samp_rate = 500 # Sampling Frequency in Hertz
dur = 5 # Duration in Seconds
amp = 10 # Amplitude of Sine Wave
freq = 5 # Frequency of Sine Wave
x, y = sine_wave(amp, freq, samp_rate, dur, plot=True)
Let’s work with ideal conditions first. Let’s apply the Fourier Transform on the single sine wave with frequency of 5 Hz.
y_ft = scp.fft.fft(y)
freqs = scp.fft.fftfreq(x.shape[-1])*samp_rate
plt.subplots(figsize=(5, 5))
plt.plot(freqs, y_ft.real**2)
plt.ylabel('Energy')
plt.xlabel('Frequency (in Hz)')
print('Peak at:', np.argmax(y_ft.real**2)/dur, 'Hz')
Peak at: 5.0 Hz
We see two peaks when the frequency is 5 and -5.
The left-hand side corresponds to negative frequencies. Physically, negative frequencies are not very meaningful but their presence is important in calculating for the Fourier Transform. By finding where the energy peaks, we can find frequencies that best describe the time series.
Additionally, the FT is a perfectly (to numerical precision) reversible process. By knowing the energies of each frequency, we can retrieve the original signal by performing an \textbf{Inverse Fourier Transform (IFT)}.
plt.subplots(figsize=(15, 2))
plt.plot(x, scp.fft.ifft(y_ft).real)
plt.xlabel('Frequency')
print("Is close:", np.allclose(scp.fft.ifft(y_ft), y))
Is close: True
FT on Mixed Signals¶
An important use of the FT is analyzing signals with mixed frequencies. We can perform the above exercise on 2 combined waves (or even an arbitrary number of waves with differing frequencies!) to find which frequencies are present in our signal.
samp_rate = 500 # Sampling Frequency in Hertz
dur = 5 # Duration in Seconds
amp1 = 1 # Amplitude of Sine Wave 1
freq1 = 5 # Frequency of Sine Wave 1
amp2 = 1 # Amplitude of Sine Wave 2
freq2 = 17 # Frequency of Sine Wave 2
x1, y1 = sine_wave(amp1, freq1, samp_rate, dur, plot=False)
x2, y2 = sine_wave(amp2, freq2, samp_rate, dur, plot=False)
y = y1 + y2 # Simply overlapping the two signals
plt.subplots(figsize=(15, 2))
plt.xlabel('Time')
plt.plot(x1, y);
Eyeballing the graph, it is challenging to determine its exact frequency make up.
y_ft = scp.fft.fft(y)
freqs = scp.fft.fftfreq(x1.shape[-1])*samp_rate
plt.subplots(figsize=(5, 5))
plt.plot(freqs, y_ft.real**2)
plt.xlabel('Frequency (in Hz)')
peaks = scp.signal.find_peaks(y_ft.real**2)
peak_vals = peaks[0][:len(peaks[0])//2]/dur
print('Peaks at:', peak_vals)
Peaks at: [ 5. 17.]
The FT makes it very easy to find the frequencies of the signal even if they are mixed.
Noise Filtering¶
Real time series data are never free from noise making it tricky to find the real dynamics of whatever it is measuring. We may end up trying to model noise and end up overlooking the real behavior of the time series.
Thankfully, we can manipulate time series data in the frequency domain to eliminate one of the most types of noise - white noise. White noise pervades time series data and by definition, has components across all frequencies. Usually, a time series with white noise is represented as:
where \(s(t)\) is the true signal we want to retrieve from \(y(t)\) and \(v(t)\) is white noise we want to eliminate. We simulate this below by adding white noise to the signal.
Filtering by Energy Level¶
White noise is characterized by having energy levels almost equal for all frequencies. Such a signal can be generate by simply using a random number generator.
noise = np.random.uniform(-1,1, len(y))
plt.subplots(figsize=(15, 2))
plt.plot(x1, noise);
Taking the FT of the white noise, we find that indeed, for almost all the frequencies, there are positive energy values for them all. This means that for all frequencies, the white noise will have some contribution which can affect our analysis of the time series.
noise_ft = scp.fft.fft(noise)
freqs = scp.fft.fftfreq(x1.shape[-1])*samp_rate
peaks = scp.signal.find_peaks(noise_ft.real**2)
plt.subplots(figsize=(5, 5))
plt.plot(freqs, noise_ft.real**2)
plt.ylabel('Energy')
plt.xlabel('Frequency');
The addiiton of white noise to the mixed frequency signal makes its actual behavior less observable. The white noise has “corrupted” the signal and presents a challenge we find when making any measurement. How can we sift out the original mixed signal when the data we receive is noisy?
y_noisy = y+noise
plt.subplots(figsize=(15, 2))
plt.plot(x1, y_noisy);
The resulting FT of the noisy signal results in multiple peaks being found. This poses a problem if we are trying to find the appropriate periodic trends in our data. Luckily, the noise appears to be present only at low energy levels. Should measurements have been done reasonably well in collecting this data, noise can be managed as they only have low energy levels.
y_ft = scp.fft.fft(y_noisy)
freqs = scp.fft.fftfreq(x1.shape[-1])*samp_rate
peaks = scp.signal.find_peaks(y_ft.real**2)
peak_vals = peaks[0][:len(peaks[0])//2]/dur
print('Peaks at:', peak_vals)
plt.subplots(figsize=(5, 5))
plt.plot(freqs, y_ft.real**2)
plt.ylabel('Energy')
plt.xlabel('Frequency');
Peaks at: [ 0.8 1.2 1.6 2. 2.6 3.2 4. 4.6 5. 5.8 6.2 7.
7.6 8.2 8.8 9.8 11. 11.6 12.6 13.6 14.2 15. 15.4 16.2
17. 17.4 18.4 18.8 19.4 20. 20.6 21.4 21.8 22.6 23.2 23.6
24. 24.6 25.2 26. 26.4 27.2 27.6 28. 28.4 29.2 29.6 30.4
31.2 31.8 32.4 33.2 33.8 34.2 34.6 35. 35.4 36.2 36.8 37.6
38.4 39.4 39.8 40.2 40.6 41. 41.4 41.8 42.2 42.6 43.4 44.
44.4 44.8 45.8 46.6 47.4 48.2 48.6 49. 49.4 50. 51. 51.6
52. 52.4 53.8 54.2 54.6 55.4 55.8 56.4 57. 57.6 58. 58.4
59. 59.6 60.2 60.6 61.4 62. 63. 63.6 64.4 64.8 65.4 65.8
66.2 66.6 67.2 67.8 68.4 69. 69.4 70.2 70.8 71.2 71.8 72.2
72.8 73.4 73.8 74.8 75.4 76.4 77. 77.4 78. 78.4 79. 79.4
79.8 80.2 80.6 81.4 82. 82.6 83.2 83.8 84.4 84.8 85.4 85.8
86.4 87.4 87.8 88.6 89.4 90.2 91.2 91.6 92.2 93.2 93.8 94.2
94.8 95.2 95.6 96.4 96.8 97.6 98. 98.8 99.6 100.2 100.8 101.6
102. 102.4 103. 104. 104.6 105.2 106. 106.4 106.8 107.2 107.6 108.2
109.4 110. 110.8 111.2 111.8 112.4 113. 113.8 114.2 114.8 115.2 115.6
116.2 116.6 117. 117.8 118.4 118.8 119.4 120. 120.8 121.6 122.4 123.2
124.4 125.2 126. 126.8 127.4 128. 128.6 129. 129.6 130.2 130.6 131.
131.4 131.8 132.6 133.2 133.6 134.2 134.8 135.2 135.6 136. 136.6 137.2
137.8 138.2 139. 140. 140.4 140.8 141.6 142.4 143.2 143.6 144. 144.4
144.8 145.2 145.8 146.4 146.8 147.2 147.6 148.4 149.2 149.8 150.2 150.6
151.4 151.8 152.4 153. 153.6 154.6 155. 155.8 156.4 156.8 157.4 158.
158.6 159.2 159.8 160.6 161.4 161.8 162.2 162.6 163. 163.6 164.6 165.
165.8 166.4 166.8 167.2 167.8 168.4 169.2 170.4 170.8 171.4 172.2 172.8
174. 174.6 175.2 176. 176.4 176.8 177.4 178.2 178.8 179.2 179.8 180.2
180.8 181.2 182. 182.6 183. 183.8 184.2 184.6 185. 185.6 186.2 186.8
187.2 187.6 188.2 188.6 189.2 189.6 190.4 191. 191.6 192. 192.6 193.2
193.6 194. 194.8 195.2 195.8 196.2 197. 197.4 198.2 198.6 199.6 200.
200.4 200.8 201.2 201.8 202.2 202.6 203.2 203.8 204.2 205. 205.4 205.8
206.6 207. 207.6 208. 208.6 209.2 209.6 210.2 210.6 211.2 212.2 212.8
213.2 213.8 214.2 215. 215.6 216.2 216.8 217.6 218. 218.6 219.2 220.2
221. 221.6 222. 222.4 222.8 223.4 223.8 224.2 224.8 225.4 226. 226.4
227.2 227.8 228.4 229.2 229.6 230.2 230.8 231.4 231.8 232.4 233.2 233.6
234.8 235.6 236.6 237.2 237.6 238.4 239. 239.6 240. 240.4 241. 241.6
242.2 242.8 243.2 243.8 244.2 244.6 245.4 245.8 246.6 247.6 248.2 248.8
249.4]
In crude fashion, we can set a hard threshold that removes the coefficients of frequencies below a certain energy level . One way to accomplish this is by setting the cut-off as a multiple of the standard deviation. The Fourier Transform allows us to make such
\textit{Conversely, we can perform the same method to eliminate high energy signals or even select those in a certain band}
threshold = 3*np.std(y_ft.real)
peaks = scp.signal.find_peaks(y_ft.real, threshold=threshold)
peak_vals = peaks[0][:len(peaks[0])//2]/dur
print('Peaks at:', peak_vals)
Peaks at: [ 9.8 17. ]
By visual inspection and setting an arbitrary threshold of 3x the standard deviation, we are able to retrieve a clearer signal of the dominant frequencies, albeit with the likely addiiton of some stray frequencies. Obtaining the exact signal from a noisy one can be very difficult but with judicious application and an understanding of the underlying systme, filtering by energy levels can be a quick and effective way to modify your time series.
y_ft_denoised = [0 if x < threshold else x for x in y_ft]
plt.subplots(figsize=(15, 2))
y_denoised = scp.fft.ifft(y_ft_denoised)
plt.plot(x1, y_denoised.real);
Filtering by Frequency¶
hf_noise = sine_wave(amp, 70, samp_rate, dur, plot=False)[1]
y_hf_noisy = y+hf_noise
plt.subplots(figsize=(15, 2))
plt.plot(x, y_hf_noisy);
Observing the FT of a signal with high frequency noise, the noise dominates the energy spectrum and masks the underlying signal.
y_ft_hf = scp.fft.fft(y_hf_noisy)
freqs = scp.fft.fftfreq(x.shape[-1])*samp_rate
plt.plot(freqs, y_ft_hf.real**2)
peaks = scp.signal.find_peaks(y_ft_hf.real)
peak_vals = peaks[0][:len(peaks[0])//2]/dur
plt.ylabel('Energy')
plt.xlabel('Frequency')
print('Peaks at:', peak_vals)
Peaks at: [ 5. 17. 70.]
While the loewr frequency peaks of the signal can still be retrieved, the extreme noise will make it untenable for most forecasting purposes. These high frequencies* can be eliminated to retrieve the original signal. Guided by our desire to observe the signals that exhibit lower frequencies, we can force the energies of all frequencies above a desired threshold to 0 and perform the IFT to obtain the
\textbf{*}\textit{We can do the same for low frequencies and those in a “band”.}
freqs = scp.fft.fftfreq(x.shape[-1])*samp_rate
freqs
array([ 0. , 0.2, 0.4, ..., -0.6, -0.4, -0.2])
f_thresh = 20
freqs = scp.fft.fftfreq(x.shape[-1])*samp_rate
y_ft_hf_filtered = y_ft_hf.copy()
y_ft_hf_filtered[(abs(freqs.real) > f_thresh)] = 0
plt.plot(freqs, y_ft_hf_filtered.real**2)
plt.ylabel('Energy')
plt.xlabel('Frequency');
peaks = scp.signal.find_peaks(y_ft_hf_filtered.real)
peak_vals = peaks[0][:len(peaks[0])//2]/dur
print('Peaks at:', peak_vals)
Peaks at: [ 5. 17.]
plt.subplots(figsize=(15, 2))
y_lf = scp.fft.ifft(y_ft_hf_filtered).real
plt.plot(x1, y_lf.real);
Example 3: Filtering via FT in the Jena Climate Dataset¶
Looking at climate information, we can glean insights into the seasonality of climate patterns. Let’s examine the mean daily temperature of the Jena climate dataset and apply FT to examine its seasonality.
df = pd.read_csv('../data/jena_climate_2009_2016.csv')
display(df.head())
df['Date Time'] = pd.to_datetime(
df['Date Time'], dayfirst=True, format="%d.%m.%Y %H:%M:%S")
df['Date'] = df['Date Time'].dt.date
mean_temps = df.groupby('Date')['T (degC)'].mean().values
plt.subplots(figsize=(15, 2))
plt.plot(temp)
| Date Time | p (mbar) | T (degC) | Tpot (K) | Tdew (degC) | rh (%) | VPmax (mbar) | VPact (mbar) | VPdef (mbar) | sh (g/kg) | H2OC (mmol/mol) | rho (g/m**3) | wv (m/s) | max. wv (m/s) | wd (deg) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 01.01.2009 00:10:00 | 996.52 | -8.02 | 265.40 | -8.90 | 93.3 | 3.33 | 3.11 | 0.22 | 1.94 | 3.12 | 1307.75 | 1.03 | 1.75 | 152.3 |
| 1 | 01.01.2009 00:20:00 | 996.57 | -8.41 | 265.01 | -9.28 | 93.4 | 3.23 | 3.02 | 0.21 | 1.89 | 3.03 | 1309.80 | 0.72 | 1.50 | 136.1 |
| 2 | 01.01.2009 00:30:00 | 996.53 | -8.51 | 264.91 | -9.31 | 93.9 | 3.21 | 3.01 | 0.20 | 1.88 | 3.02 | 1310.24 | 0.19 | 0.63 | 171.6 |
| 3 | 01.01.2009 00:40:00 | 996.51 | -8.31 | 265.12 | -9.07 | 94.2 | 3.26 | 3.07 | 0.19 | 1.92 | 3.08 | 1309.19 | 0.34 | 0.50 | 198.0 |
| 4 | 01.01.2009 00:50:00 | 996.51 | -8.27 | 265.15 | -9.04 | 94.1 | 3.27 | 3.08 | 0.19 | 1.92 | 3.09 | 1309.00 | 0.32 | 0.63 | 214.3 |
[<matplotlib.lines.Line2D at 0x7f9976353550>]
There is a very strong trend that can be seen every year. Suppose we want to examine only this trend as we are interested in the general dynamics of the system. To highlight that aspect of the time series, we filter out frequencies corresponding to greater than 1 year by setting their energies to 0.
y_ft = scp.fft.fft(temp)
y_ft_copy = y_ft.copy()
freqs = scp.fft.fftfreq(len(temp), d=1/365)
y_ft_copy[(abs(freqs) >= 1)] = 0
plt.plot(freqs, abs(y_ft_copy))
[<matplotlib.lines.Line2D at 0x7f9967cc3150>]
By removing all frequencies greater than 1 year, we obtain only the lower frequency values. With these values, we can have a better look at the yearly dynamics of daily temperature without interference from inter-year dynamics. Should forecasts on actual values of the temperature need to be made, the value sof the frequencies removed can simply be added back.
y_hf = scp.fft.ifft(y_ft_copy)
plt.subplots(figsize=(15, 2))
# plt.title('Removing Yearly Cycle')
plt.plot(range(len(temp)), y_hf.real)
[<matplotlib.lines.Line2D at 0x7f996800fd10>]
Wavelet Transform¶
A wavelet transform (WT) allows you to measure how “much”of a certain type of wavelet there exists in a given signal. While both FT and WT both transform a time series into the frequency domain, a key difference is that WT gives you information about the time domain as well.
This transformation is achieved by imagining a specified wavelet sliding it across the entire signal through time. This wavelet that we scan is called the “mother wavelet”. In addition to sliding the mother Wavelet across the span of the time series, its size, dependent on a scale factor, is varied as well while scanning. The scaling transformation applied on the mother Wavelet can be thought of as “stretching” it only without changing its frequency.
The wavelet transform of a time series \(y(t)\) is given by:
\(\begin{align} WT(y(t)) = \frac{1}{\sqrt{|\sigma|}}\int_{-\infty}^{\infty}y(t)\psi \left( \frac{t-h}{\sigma} \right)dt \end{align}\)
where \(\sigma\) is the scale, \(h\) is the time lag/translation, and \(\psi\) is the mother wavelet.
From the WT, we obtaing sets of coefficients corresponding to different time lags and scales. The greater the magnitude of the coefficients, the greater overlap there is between the scaled, time-shifted mother wavelet and the time series.
def rescale(arr, scale=2):
n = len(arr)
return np.interp(np.linspace(0, n, scale*n+1), np.arange(n), arr)
fig, ax = plt.subplots(figsize=(15, 2))
wav1 = pywt.ContinuousWavelet('gaus1')
int_psi1, x = pywt.integrate_wavelet(wav1)
for s in range(5):
ax.plot(rescale(int_psi1, scale=s), label='Scale: '+ str(s))
ax.legend()
ax.set_title('Gaussian Mother Wavelet')
Suppose we have a signal of repearing Gaussian waves. Applying the WT on this signal using a mother wavelet corresponding to that of a Gaussian wavelet, we can pinpoint where the time series exhibits a Gaussian-like pattern.
s1 = list(scp.signal.gaussian(250, std=20))
s1 = np.tile(s1, 4)
plt.subplots(figsize=(15, 2))
plt.xlim(left=0, right=1000)
plt.ylabel('Value')
plt.xlabel('Time (t)')
plt.plot(s1)
plt.show()
coeffs, freqs = pywt.cwt(s1, range(1,250), wavelet='gaus1')
plt.subplots(figsize=(18.75, 2))
plt.xlim(left=0, right=1000)
plt.ylabel('Scale (s)')
plt.xlabel('Time (t)')
plt.imshow(coeffs, aspect='auto')
plt.colorbar();
By observing where the magnitudes of the WT are greatest, we can pinpoint the time and scale wherein there is Gaussian-like behavior in our time series. The WT is also useful in sifting out our signal from noise. We apply white noise once more to our Gaussian pulses and observe the WT’s results.
s1 = list(scp.signal.gaussian(250, std=20))
noise = np.random.uniform(-1.5,1.5,4*len(s1))
s1 = np.tile(s1, 4) + noise
plt.subplots(figsize=(15, 2))
plt.xlim(left=0, right=1000)
plt.ylabel('Scale (s)')
plt.xlabel('Time (t)')
plt.plot(s1)
plt.show()
coeffs, freqs = pywt.cwt(s1, range(1,300), wavelet='gaus1')
plt.subplots(figsize=(18.75, 2))
plt.xlim(left=0, right=1000)
plt.ylabel('Scale (s)')
plt.xlabel('Time (t)')
plt.imshow(coeffs, aspect='auto')
plt.colorbar();
Regions of high magnitudes for our WT coefficients are still clearly visible albeit with minior interference from the white noise at smaller scales.
In general, choosing the mother wavelet depends on what kind of behavior you want or expect in your time series. Another popular mother wavelet used to identify sine waves in time series is the “Morlet” wavelet. This wavelet is a sine wave tapered by a Gaussian wave.
fig, ax = plt.subplots(figsize=(15, 2))
wav2 = pywt.ContinuousWavelet('morl')
int_psi2, x = pywt.integrate_wavelet(wav2)
for s in range(5):
ax.plot(rescale(int_psi2, scale=s), label='Scale: '+ str(s))
ax.set_title('Morlet Mother Wavelet')
ax.legend()
Applying the Morlet wavelet on a mixed frequency sinusoidal signal, we can find that it is able to differentiate between the two frequencies as \(s\) is varied.
sine5 = sine_wave(freq=5, duration =5, plot=False)[1]
sine10 = sine_wave(freq=10, plot=False)[1]
sine_5_10 = sine5+sine10
plt.subplots(figsize=(15, 2))
plt.plot(sine_5_10)
plt.show()
plt.subplots(figsize=(18.75, 2))
plt.xlim(left=0, right=1000)
plt.ylabel('Scale (s)')
plt.xlabel('Time (t)')
plt.imshow(coeffs, aspect='auto')
plt.colorbar();
Example: 4 Using Accelerometer and Gyroscopic Data¶
The following code is taken from:
https://towardsdatascience.com/multiple-time-series-classification-by-using-continuous-wavelet-transformation-d29df97c0442
The following data contains time signals of accelerometer and gyroscopic data attached to people performing different activities. Throughout the duration of their activity, measurements were taken from the devices and recorded as time series. Each time series depicts a different activity.
def load_y_data(y_path):
y = np.loadtxt(y_path, dtype=np.int32).reshape(-1, 1)
# change labels range from 1-6 t 0-5, this enables a sparse_categorical_crossentropy loss function
return y - 1
def load_X_data(X_path):
X_signal_paths = [X_path + file for file in os.listdir(X_path)]
X_signals = [np.loadtxt(path, dtype=np.float32) for path in X_signal_paths]
return np.transpose(np.array(X_signals), (1, 2, 0))
PATH = '../data/cwt/'
LABEL_NAMES = ["Walking", "Walking upstairs",
"Walking downstairs", "Sitting", "Standing", "Laying"]
# load X data
X_train = load_X_data(PATH + 'train/Inertial Signals/')
X_test = load_X_data(PATH + 'test/Inertial Signals/')
# load y label
y_train = load_y_data(PATH + 'train/y_train.txt')
y_test = load_y_data(PATH + 'test/y_test.txt')
Quite evidently, we find that walking has a different “look” from that of simply laying down. Humans can easily determine this at a glance but can be difficult for machines to differentiate between the two signals. The WT allows for the creation of images that contain temporal and frequency information providing a compact and meaningful representation of these time series.
fig, ax = plt.subplots(ncols=2, figsize=(15, 5))
pd.DataFrame(X_train[79]).plot(ax=ax[0], title='Walking')
pd.DataFrame(X_train[51]).plot(ax=ax[1], title='Laying');
def split_indices_per_label(y):
indicies_per_label = [[] for x in range(0, 6)]
# loop over the six labels
for i in range(6):
indicies_per_label[i] = np.where(y == i)[0]
return indicies_per_label
def plot_cwt_coeffs_per_label(X, label_indicies, label_names, signal, sample, scales, wavelet):
fig, axs = plt.subplots(nrows=2, ncols=3, sharex=True,
sharey=True, figsize=(12, 5))
for ax, indices, name in zip(axs.flat, label_indicies, label_names):
coeffs, freqs = pywt.cwt(
X[indices[sample], :, signal], scales, wavelet=wavelet)
ax.imshow(coeffs, cmap='coolwarm', aspect='auto')
ax.set_title(name)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.set_ylabel('Scale')
ax.set_xlabel('Time')
plt.tight_layout()
train_labels_indicies = split_indices_per_label(y_train)
# signal indicies: 0 = body acc x, 1 = body acc y, 2 = body acc z, 3 = body gyro x, 4 = body gyro y, 5 = body gyro z, 6 = total acc x, 7 = total acc y, 8 = total acc z
signal = 3 # signal index
sample = 1 # sample index of each label indicies list
scales = np.arange(1, 65) # range of scales
wavelet = 'morl' # mother wavelet
plot_cwt_coeffs_per_label(X_train, train_labels_indicies, LABEL_NAMES, signal,
sample, scales, wavelet)
for sample in range(2, 7):
plot_cwt_coeffs_per_label(X_train, train_labels_indicies, LABEL_NAMES,
signal, sample, scales, wavelet)
Looking at the plots for each activity, we see can see some patterns between the images. By feeding these results into a convolutional neural network, we can create a classifier to classify time series into activities.
Summary¶
To summarize, using these techniques can extract valuable information about time series which are not readily available.
Cross-correlations can give insights into the sychronicity of data. With careful analysis, these can even be used as a step towards a more holistic view of causality in conjunction with Granger Causality and Convergent Cross Mapping.
Fourier Transformation allows us to view the time series in the frequency domain, allowing operations previously untenable in the time domain. Filtering is a common task where FT is useful as it lets us easily manipulate the data to remove noise or highlight aspects of interest within the time series.
Wavelet Transformation lets us decompose time series more finely than the FT since we can define the “mother” wavelet to be our wavefunction of interest. By characterizing time series, we can quite literally, paint a picture of the time series that can be used to pick out specific waveforms in the time series.
In the context of forecasting, all three techniques can be used to inform the modeler how to prepare their data. With cross-correlations, the best time lagged time series can be used to provide better information about the target. The Fourier Transform can be applied to denoise the data and remove certain trends. Wavelet Transforms can be used to classify time series allowing the modeler to include their classification as a feature for forecasting or creating separate models for each class of time series. Again, these techniques serve as complements to predictive methods and can be used as feature engineering techniques to improve time series forecasing.
The following chapter represents the culmination of all the forecasting concepts from previous sections. There is no better way to test your time series capabilities than with a competition. The next chapter discusses the best techniques which were utilized in the recently concluded M5 Competition. In it, the best models under some constraints, are pushed to the limit to perform time series forecasting.
References¶
The contents of this notebook are complied from the following references:
Chapters 1-3 of Priestley, M.B. (1981). Spectral Analysis and Time Series, Vols. 1 and 2, Academic Press, New York.
Multiple Time Series Classification by Using Continuous Wavelet Transformation
Ngui, W. K., Leong, M. S., Hee, L. M., & Abdelrhman, A. M. (2013). Wavelet Analysis: Mother Wavelet Selection Methods. Applied Mechanics and Materials, 393, 953–958. https://doi.org/10.4028/www.scientific.net/amm.393.953


Looks Like Streets Of Rage 4 Couldn't Be In More Capable Hands
Take a dive behind the scenes
by Ryan CraddockIf you've been keeping up with our coverage of the upcoming Streets of Rage 4, you'll probably have realised that we're pretty excited for its release. We'd like to think that's for good reason, too, as you're about to find out.
French developer DotEmu has shared a behind-the-scenes video of the game's development, with members of the team sitting down in front of the camera to talk about their inspirations, learnings, and more. Below, we get to hear from game designer Jordi Asensio, and programmers Cyrille Lagarigue and Beausoleil Samson-Guillemette.
We won't waffle on too much before letting you dive in for yourself, but it's interesting to see how the team is using the much-adored Streets of Rage 2 as a benchmark for the new title. As you'll see for yourself, Asensio uses a single pad to control both SoR4 and SoR2 at the same time, all in an effort to make sure that the games "match". It seems like there's an awful lot of love and passion - and understanding from a fans' point of view - going into the new game.
Give it a watch:
The game will launch on Nintendo Switch in 2020. If you missed it, make sure to check out our thoughts when we went hands-on at PAX a couple of months ago.


You can mail us at<EMAIL_ADDRESS>Contact us at the following addresses below:
Corporate Off.:
509, Atlanta Estate, Western Express Highway,
Opp. Oberoi Mall, Goregaon (East),
Mumbai 400063. INDIA
Cell: +91- +91-9022974786 /<PHONE_NUMBER>
Factory:
Azim Industrial Estate, SR 230/B, Village Pelhar, Behind Vishwakarma Mandir,
NH-8, Dist. Thane 401208.


{% from 'forms/_form.html' import simple_form %}
{% from 'message_box.html' import message_box %}
{% call message_box('warning') %}
{%- trans -%}
Removing judges/reviewers who are already assigned to contributions will
automatically unassign them from these contributions.
{%- endtrans -%}
{% endcall %}
{{ simple_form(form, back=_('Cancel')) }}


--- layout: archive_smaller_font author_profile: true --- {% include base_path %}
The 2nd International Workshop on Refactoring
IWoR 2018
September 4, 2018, Montpellier, France
to be held in conjunction with the
33rd IEEE/ACM Automated Software Engineering Conference (ASE 2018)
Welcome to IWoR 2018!
We are pleased to announce IWoR 2018, the 2nd edition of the international workshop dedicated to software refactoring.
The goal of the 2nd International Workshop on Refactoring (IWoR 2018) is to provide an informal interactive forum for researchers and practitioners to exchange ideas and experiences, streamline and foster research on software refactoring, identify some common ground of their work, share lessons and challenges, thereby articulating a vision for the future of software refactoring.
Successful software products evolve through a process of continuous changes as bugs are fixed, new features added, and quality issues addressed. Refactoring supports the volatile software lifecycle by providing better ways to reduce and manage the growing complexity of software systems while improving developer productivity. Refactoring can be performed at all levels from requirement specification down to source code level, and, in essence, involves improving the internal structure of a software artefact without altering its functionality. In spite of the popularity of refactoring both in practice and as a research topic, many open questions remain, particularly in terms of understanding how refactoring is performed, measuring the impact of refactoring, and improving tool support in all areas of refactoring.
We invite submissions from both academia and industry on any topic that is refactoring related, including, but not limited to:
We solicit four types of submission:
These different categories offer researchers who are at different stages in their research maturity the opportunity to benefit from workshop participation. Page limits include references.
All paper submissions will be reviewed by three program committee members. The authors of accepted submissions will be asked to join the workshop. We will encourage all participants to submit a paper of any of the four categories, but the workshop will be open. All interested parties are welcome to register, even without an accepted paper.
Papers must be submitted electronically through the ASE 2018 submission site. All submissions must come in PDF format and conform, at time of submission, to the ACM Proceedings Template (LaTEX users must use\documentclass[sigconf,review,anonymous]{acmart}).
Accepted papers will be published in the workshop proceedings in the IEEE digital library.
A selection of the best papers will be invited to submit extended versions for tentative publication in a Special Issue of a journal (to be confirmed).
| 8:30 - 9:00 | Workshop Opening & Introduction |
| SESSION 1: Architecture & Refactoring | |
| Full research paper | |
| 9:00 | Migrating towards Microservices: Architecture Smells
|
| Position paper | |
| 9:30 | Support for Architectural Smell Refactoring
Luca Rizzi, Francesca Arcelli Fontana, Riccardo Roveda |
| 10:00 - 10:30 | |
| SESSION 2: Models & Evolution | Full research paper |
| 10:30 | A Study on Developer Perception of Transformation Languages for Refactoring
Christian Newman, Mohamed Wiem Mkaouer, Michael Collard, Jonathan Maletic |
11:00 | A Metamodel for the Specification and Verification of Model Refactoring Actions
Davide Arcelli, Vittorio Cortellessa, Daniele Di Pompeo |
| Industrial presentation | |
| 11:30 | Refactoring as a strategic tool in the evolution of a web-based SaaS product Rory McTague, Paddy Fagan |
| 12:00 - 13:30 | |
| SESSION 3: Empirical Studies, Testing & Individual Refactorings | |
| Full research paper | |
| 13:30 | An Empirical Investigation of How and Why Developers Rename Identifiers
Anthony Peruma, Mohamed Wiem Mkaouer, Michael J. Decker, Christian Newman |
| Position paper | |
| 14:00 | Test Behaviour Detection as a Test Refactoring Safety Brent van Bladel, Serge Demeyer |
| 14:30 | Automatic detection of Move Method refactorings using clustering ensembles Timofey Bryksin, Evgenii Novozhilov, Aleksei Shpilman |
| 15:00 - 15:30 | |
| SESSION 4: Panel Discussions and Closing | |
| 15:30 - 17:00 | Panel Discussions and Closing |
|
Ali Ouni ETS Montreal, University of Quebec, Canada |
|
Marouane Kessentini
University of Michigan, USA |
|
Mel Ó Cinnéide
University College Dublin, Ireland |
Felienne Hermans Delft University of Technology, the Netherlands |
|
Wiem Mkaouer
Rochester Institute of Technology, USA |
Mohammed Hilali ETS Montreal, University of Quebec, Canada |