--- title: Release indicator package INDperform author: Saskia date: '2019-01-07' slug: release-indicator-package-indperform categories: - indicator tags: - GAM - R package - food web banner: "img/banners/INDperform_logo.png" ---
INDperform is an R package that implements a quantitative framework for selecting and validating the performance of state indicators tailored to meet regional conditions and specific management needs as described in Otto et al. (2018) 1 (see also my post on indicators).
The package builds upon the tidy data principles and offers functions to
These functions can be executed on any number of indicators and pressures. Based on these analyses and a scoring scheme for selected criteria the individual performances can be quantified, visualized, and compared. The combination of tools provided in this package can help making state indicators operational under given management schemes such as the EU Marine Strategy Framework Directive.
Install the development version from Github using devtools or CRAN:
# install.packages("devtools")
devtools::install_github("saskiaotto/INDperform")
# CRAN:
install.packages("INDperform")
If you encounter a clear bug, please file a minimal reproducible example on github. For questions email me any time.
INDperform offers function that can be applied individually to some extent but mostly build upon each other to follow the 7-step process proposed in Otto et al. (2018) (see also the package’s cheat sheet for detailed instructions). For demonstration purposes the package provides a dataset of food web indicators and pressure variables in the Central Baltic Sea (modified from Otto et al., 2018).
This is a suggested workflow demonstrated on the example data included in the package:
library(INDperform)
# Using the demo data
head(ind_ex)
head(press_ex)
head(press_type_ex)
# Scoring template:
crit_scores_tmpl
# Trend modeling -------------
m_trend <- model_trend(ind_tbl = ind_ex[ ,-1],
time = ind_ex$Year)
# Model diagnostics
pd <- plot_diagnostics(model_list = m_trend$model)
pd$all_plots[[1]] # first indicator
# Inspect trends
pt <- plot_trend(m_trend)
pt$TZA # shows trend of TZA indicator
# Indicator response modeling ------------
### Initialize data (combining IND with pressures)
dat_init <- ind_init(ind_tbl = ind_ex[ ,-1],
press_tbl = press_ex[ ,-1], time = ind_ex$Year)
### Model responses
m_gam <- model_gam(init_tbl = dat_init)
# Model diagnostics (e.g. first model)
plot_diagnostics(model_list = m_gam$model[[1]])$all_plots[[1]]
# Any outlier?
m_gam$pres_outlier %>% purrr::compact(.)
# - get number of models with outliers detected
purrr::map_lgl(m_gam$pres_outlier, ~!is.null(.)) %>% sum()
# - which models and what observations?
m_gam %>%
dplyr::select(id, ind, press, pres_outlier) %>%
dplyr::filter(!purrr::map_lgl(m_gam$pres_outlier, .f = is.null)) %>%
tidyr::unnest(pres_outlier)
# Exclude outlier in models
m_gam <- model_gam(init_tbl = dat_init, excl_outlier = m_gam$pres_outlier)
# Any temporal autocorrelation
sum(m_gam$tac)
# - which models
m_gam %>%
dplyr::select(id, ind, press, tac) %>%
dplyr::filter(tac)
# If temporal autocorrelation present
m_gamm <- model_gamm(init_tbl = dat_init,
filter = m_gam$tac)
# Again, any outlier?
purrr::map_lgl(m_gamm$pres_outlier, ~!is.null(.)) %>% sum()
# Select best GAMM from different correlation structures
# (based on AIC)
best_gamm <- select_model(gam_tbl = m_gam,
gamm_tbl = m_gamm)
plot_diagnostics(model_list = best_gamm$model[[1]])$all_plots[[1]]
# Merge GAM and GAMMs
m_merged <- merge_models(m_gam[m_gam$tac == FALSE, ], best_gamm)
# Calculate derivatives
m_calc <- calc_deriv(init_tbl = dat_init,
mod_tbl = m_merged)
# Test for pressure interactions
it <- select_interaction(mod_tbl = m_calc)
# (creates combinations to test for)
m_all <- test_interaction(init_tbl = dat_init, mod_tbl = m_calc,
interactions = it)
# Scoring based on model output ------------
scores <- scoring(trend_tbl = m_trend, mod_tbl = m_all, press_type = press_type_ex)
# Runs a shiny app to modify the score for the subcriterion 10.1:
#scores <- expect_resp(mod_tbl = m_all, scores_tbl = scores)
sum_sc <- summary_sc(scores)
spie <- plot_spiechart(sum_sc)
spie$TZA # shows the spiechart of the indicator TZA
All functions are tailored to indicator time series. Spatial data and spatial autocorrelation testing is currently not included. However, if you have spatial data you could still use all functions except for model_gamm()
as it incorporates only temporal autocorrelation structures (AR and ARMA). Simply do the following and use as time
vector in ind_init()
an integer variable with consecutive numbers (with no gaps!) representing your different stations.
### Use of station numbers instead of time vector
station_id <- 1:nrow(your_indicator_dfr)
dat_init <- ind_init(ind_tbl = your_indicator_dfr,
press_tbl = your_pressure_dfr, time = station_id)
Each IND is modeled as a function of time or a single pressure variable using Generalized Additive Models (GAMs) (based on the mgcv package).
model_trend()
models the long-term trend of each IND and returns a tibble with all GAM outputs, the model object, and predicted time series per IND.ind_init()
combines the time vector and the IND and press data into one tibble with defined training and test observations. All INDs are combined with all pressures.model_gam()
applies GAMs to each IND~pressure combination created in ind_init()
and returns a tibble including the model output and diagnostics.model_gamm()
accounts for temporal autocorrelation in the time series by including correlation structures in the model (using Generalized Additive Mixed Models (GAMMs): AR1, AR2, ARMA1.1, ARMA2.1, ARMA1.2.select_model()
selects for each IND~pressure the best correlation structure computed with model_gamm()
based on the Akaike Information Criterion.merge_models()
merges any 2 model output tibbles.calc_deriv()
calculates for non-linear responses the 1st derivative of the smoothing function and the proportion of pressure range in which the IND shows a response. Output is input tibble with few additional variables, incl. mean and confidence interval of smoothing function and derivatives from bootstrapped GAMs.test_interaction()
tests for each significant GAM(M) whether a selection of pressure variables modifies the IND response to the original pressure using a threshold-GAM formulation. Output is input tibble with few additional variables.To show the model diagnostics or complete model results
plot_diagnostics()
creates a tibble with 6 individual plots (ggplot2 objects) and one combined plot (cowplot object):
$cooks_dist
shows the cooks distance of all observations.$acf_plot
shows the autocorrelation function.$pacf_plot
shows the partial autocorrelation function.$resid_plot
shows residuals vs. fitted values.$qq_plot
shows the quantile-quantile plot for normality.$gcvv_plot
shows the development of the generalized cross-validation value at different thresholds level of the modifying pressure variable in the threshold-GAM.$all_plots
shows all five (six if threshold-GAM) plots together.plot_trend()
creates a list of ggplot2 objects with all IND trends from the input tibble.plot_model()
creates a tibble with 4 individual plots (ggplot2 objects) and one combined plot (cowplot object):
$response_plot
shows the observed and predicted IND response to the single pressure (based on the training data).$predict_plot
shows the test (and train) observations predicted from the model. Included is the normalized root mean square error (NRMSE) for the test data as a measure of model robustness.$deriv_plot
shows the first derivative of non-linear IND~pressure response curves and the proportion of the pressure range where the IND shows no further significant change (i.e., slope approximates zero).$thresh_plot
shows the IND response curve under a low and high regime of an interacting 2nd pressure variable.$all_plots
shows all plots together.Among the 16 common indicator selection criteria, five criteria relate to the indicator’s performances and require time series for their evaluation, i.e.
As these are subject to the quality of the underlying data, a thorough determination of whether the indicator as implemented meets the expected requirements is needed. In this package, the scoring scheme for these criteria as proposed by Otto et al. (2018) serves as basis for the quantification of the IND performance. Sensitivity (criterion 9) and robustness (criterion 10) are specified into more detailed sub-criteria to allow for quantification based on statistical models and rated individually for every potential pressure that might affect the IND directly or indirectly.
However, the scoring scheme can easily be adapted to any kind of state indicator and management scheme by modifying the scores, the weighting of scores or by removing (sub)criteria.
crit_scores_tmpl
This table contains the scores and weights for each (sub-)criterion. It includes also the variables from the model output tibbles on which each(sub)criterion is based on as well as the condition to determine the actual score. crit_scores_tmpl
is set as default in the scoring()
function and, if needed, should be modified prior to using the function.
scoring()
models the long-term trend of each IND and returns a tibble with all GAM outputs, the model object, and predicted time series per IND.expect_resp()
runs a shiny app to modify manually the score for the sub-criterion 10.1 (IND response as expected) based on the response curves (default score 1 for neutral / no expectation).summary_sc()
provides a user-friendly summary of the scoring output tibble.plot_spiechart()
generates a list of ggplot2 objects (one for each IND). A spie chart superimposes a normal pie chart with a modified polar area chart to permit the comparison of two sets of related data.Examining redundancies and selecting robust indicator suites
dist_sc()
Calculates a (Euclidean) distance matrix based on all scores.clust_sc()
applies a hierarchical group-average cluster analysis, returns a hclust
object and prints the Gower distance and Cophonetic correlation coefficient.plot_clust_sc()
creates a dendrogram (ggplot2 object) from the cluster analysis.Two approaches based on trajectories in state space to determine the current state of the system in comparison to an earlier period as reference using the selected IND suite (state space = n-dimensional space of possible locations of IND variables)
Calculation of the Euclidean distance in state space of any dimensionality between each single year (or any other time step used) and a defined reference year.
statespace_ed()
calculates the Euclidean distance over time.plot_statespace_ed()
creates a ggplot2 object of the Euclidean distance trend.Given the identification of a reference domain in state space, more recent observations might lie within or outside this domain. The convex hull is a multivariate measure derived from computational geometry representing the smallest convex set containing all the reference points in Euclidean plane or space. For visualization, only 2 dimensions considered (dimension reduction through e.g. Principal Component Analysis suggested).
statespace_ch()
calculates the convex hull for 2 defined periods (current and reference) in the x-y space (i.e. 2 IND or 2 Principal Components).plot_statespace_ch()
creates a ggplot2 object showing all observed combinations in x-y space as well as the convex hull of both periods. The proportion of the recent time period within the reference space is additionally provided.Otto, S.A., Kadin, M., Casini, M., Torres, M.A. & Blenckner, T. (2018). A quantitative framework for selecting and validating food web indicators. Ecological Indicators, 84, 619-631, doi: 10.1016/j.ecolind.2017.05.045↩


import TodoAppController from 'Template-WebpackFEND/src/todo/app.controller.js'
TodoAppController
Todo App Controller
Constructor Summary
| Public Constructor | ||
| public |
constructor(domSelector: string) Sets up the Todo App |
Method Summary
| Public Methods | ||
| public |
Adds a New Todo Item to the list with the description provided |
|
| public |
handleAddTodo(): void Handler method for adding Todo to list and rerendering |
|
| public |
handleRemoveTodo(index: number): void Handler method for removing a Todo from the list and rerendering |
|
| public |
handleToggleTodo(index: number): void Handler when todo completion toggle is checked |
|
| public |
loadList(): void Method to Load the List from LocalStorage on App setup |
|
| public |
Removes a Todo Item from the list at a given index |
|
| public |
renderList(): void Renders the HTML of the Todo App |
|
| public |
saveList(): void Method to Save the List to LocalStorage during any changes |
Public Constructors
Public Methods
public add(description: string): void source
Adds a New Todo Item to the list with the description provided
Params:
| Name | Type | Attribute | Description |
| description | string | of new todo to add |
Return:
| void |
public handleAddTodo(): void source
Handler method for adding Todo to list and rerendering
Return:
| void |
public handleRemoveTodo(index: number): void source
Handler method for removing a Todo from the list and rerendering
Params:
| Name | Type | Attribute | Description |
| index | number | of the todo to remove from the list |
Return:
| void |
public handleToggleTodo(index: number): void source
Handler when todo completion toggle is checked
Params:
| Name | Type | Attribute | Description |
| index | number | index of todo to toggle in list |
Return:
| void |
public remove(index: number): void source
Removes a Todo Item from the list at a given index
Params:
| Name | Type | Attribute | Description |
| index | number | to remove todo at |
Return:
| void |
public saveList(): void source
Method to Save the List to LocalStorage during any changes
Return:
| void |


Hi guys, my name is Hallessandro, I am a software developer that currently works and live in Brazil, and today in this post let’s talk again about Python, this time how to use *args and **kwargs in our Python functions.
Firstly let’s create a simple function to sum two numbers:
def soma(a,b):
return a + b
.
print(soma(1,3))
Our function is simple but works like as expected, when the numbers 1 and 3 are passed as parameters, the result will be 4. But what happens when three numbers are passed as parameters? This happens:
TypeError: soma() takes exactly 2 arguments (3 given)
We can’t pass three numbers for our function, because they just be defined for receive two numbers. So is it, I need create another function to receive and sum three numbers? And for sum four numbers, will be another function?
The asterisk (*) before the word args, it’s really important, don’t forget it.
*args can be used as a parameter to send a non-keyworded variable-length argument list to functions, so if you suspect that you may need more arguments later on, you need use *args instead pass normal arguments, something like this:
def soma(*args):
result = 0
for num in args:
result += num
return result
print(soma(1)) #Output: 1
print(soma(1,2)) #Output: 3
print(soma(1,2,3)) #Output: 6
print(soma(1,2,3,4)) #Output: 10
*args it’s nothing more than a list, so you can iterate over it and get all the elements values and sum. This way the function can receive 1, 2, 10, 20 or how many arguments do you need, there’s no problem, our function now can deal with this.
**kwargs works like *args, but instead pass a list as argument to a function, a dictionary is used. With **kwargs is possible pass how many arguments you would like.
Let’s see a example of how kwargs work.
def names_of_chars(**kwargs):
print(kwargs)
names_of_chars(name1="Sagat", name2="Luigi", name3="Batman")
The result of the code above is:
{'name2': 'Luigi', 'name3': 'Batman', 'name1': 'Sagat'}
Because the dictionary data type is unordered, we received the keyvalue pairs in a random order, but it is important to note that a dictionary called **kwargs is created and we can work with it just like we can work with other dictionaries.
Let’s create another program to show one time more how kwargs works.
def names_of_games(**kwargs):
for key, value in kwargs.items():
print("The name of the {} is {}".format(key, value))
names_of_games(game1="Plants vs Zombies", game2="Titanfall 2", game3="Halo 5", game4="God of War", game5="Celeste")
#Output
#The name of the game5 is Celeste
#The name of the game4 is God of War
#The name of the game3 is Halo 5
#The name of the game2 is Titanfall 2
#The name of the game1 is Plants vs Zombies
How you can see the kwargs lost the order of elements, but we can pass how many we would like.
We can also use *args and **kwargs to pass arguments into functions. First, let’s look at an example with *args.
def sum_elements(n1, n2, n3):
print("The result is {} ".format(n1+n2+n3))
args = (1, 5, 7)
sum_elements(*args)
#Output
#The result is 13
How you can see in the code above, instead pass three arguments to the function sum_elements, we pass just one using the args syntax. It’s possible combine the args syntax with named parameters like this:
def print_elements(value1, value2, value3, value4):
print("The value is {}.".format(value1))
print("The value is {}.".format(value2))
print("The value is {}.".format(value3))
print("The value is {}.".format(value4))
args = [5, 9]
print_elements(3, 10, *args)
#Output
#The value is 3.
#The value is 10.
#The value is 5.
#The value is 9.
Similarly, kwargs can be used to call a function, let’s see a example of how do this:
def print_kwargs(k1, k2, k3):
print("Kwarg 1: {}".format(k1))
print("Kwarg 2: {}".format(k2))
print("Kwarg 3: {}".format(k3))
kwargs = {"k1":"Sagat", "k2":"Ryu", "k3":"Cammy"}
print_kwargs(**kwargs)
#Output
# Kwarg 1: Sagat
# Kwarg 2: Ryu
# Kwarg 3: Cammy
So how you can see when calling a function, we can use *args and **kwargs to pass arguments.
For now this is all folks, thanks for reading and feel free to contact me.
Written on January 26th, 2019 by Hallessandro D´villa


|
Hi {{.name}}! Thanks for joining Pandora! Click the button below to activate your account. You are receiving this email because you created a new account on Pandora recently. If you are sure this wasn't you, please ignore this email. |
|
|
|
| Refer to Pandora |


[[store name]]
Log in to your account:
[[auth login start]]
Username: [[auth login username]]
Password: [[auth login password]]
[[auth login end]]
Or sign up:
[[auth join start]]
Username: [[auth join username]]
Password: [[auth join password]]
First: [[auth join first]] Last: [[auth join last]]
Address:
[[auth join line1]]
[[auth join line2]]
[[auth join city]], [[auth join state]] [[auth join zip]]
Email: [[auth join email]]
Telephone: [[auth join tele]]
Cellular: [[auth join cell]]
[[auth join end]]


This is what a project looks like in Code Co-op:
You can see both project and non-project files. All project files added during the creation process are initially checked in—their state is In). You can start checking them out, editing them, and then checking them back in.
See also side-by-side comparison of various ways of enlisting in a project.
See also inviting collaborators to a project .


Class com.telran.tests.test.TestCreateTeamFromHeder
Tests
| Test |
Duration |
Result |
| createTeamFromHeaderTestWithDataProviderTest[0](Team: teamName ='A', description='A') |
4.849s |
passed |
| createTeamFromHeaderTestWithDataProviderTest[1](Team: teamName ='a', description='a') |
4.708s |
passed |
| createTeamFromHeaderTestWithDataProviderTest[2](Team: teamName ='1', description='1') |
4.814s |
passed |
| createTeamFromHeaderTestWithDataProviderTest[3](Team: teamName ='%', description='%') |
4.794s |
passed |
| createTeamFromHeaderTestWithDataProviderTest[4](Team: teamName ='9ZtZMsJh4XtDZpvj9u3xcMKfq0UbRCbW18ftEtqpcMKfq0UcjiL2YukSSFwsgURURh60cHxlOsAwGwTWNY0qp', description='9ZtZMsJh4XtDZpvj9u3xcMKfq0UbRCbWcMKfq0UbRCbW18ftEtqpcMKfq0UbRCbW18ftEtqpt1cjiL2YukSSFwsgURURh60cHxlOsAwGwTWNY0qp') |
5.610s |
passed |
| createTeamFromHeaderTestWithDataProviderTest[5](Team: teamName ='**-+!@##45', description='/**-+!@##45') |
4.886s |
passed |
Standard output
13:08:11.685 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:11.728 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:11.729 [Test worker] INFO - Start search element By.xpath: .//li
13:08:11.751 [Test worker] INFO - Element By.xpath: .//li found.
13:08:11.751 [Test worker] INFO - Start search element By.cssSelector: [name=add]
13:08:11.768 [Test worker] INFO - Element By.cssSelector: [name=add] found.
13:08:11.842 [Test worker] INFO - Start search element By.xpath: //*[@data-test-id='header-create-team-button']
13:08:11.858 [Test worker] INFO - Element By.xpath: //*[@data-test-id='header-create-team-button'] found.
13:08:11.920 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:11.939 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:11.990 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:12.001 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:12.023 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:12.035 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:12.069 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:12.084 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:12.142 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:12.162 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:12.186 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:12.197 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:12.227 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-submit-button']
13:08:12.240 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-submit-button'] found.
13:08:13.285 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:13.311 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:14.380 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:14.405 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:15.479 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:15.507 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:15.507 [Test worker] INFO - Start search element By.xpath: .//li
13:08:15.533 [Test worker] INFO - Element By.xpath: .//li found.
Teams before creation: 3
Teams after creation: 4
13:08:16.537 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:16.567 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:16.568 [Test worker] INFO - Start search element By.xpath: .//li
13:08:16.579 [Test worker] INFO - Element By.xpath: .//li found.
13:08:16.580 [Test worker] INFO - Start search element By.cssSelector: [name=add]
13:08:16.593 [Test worker] INFO - Element By.cssSelector: [name=add] found.
13:08:16.646 [Test worker] INFO - Start search element By.xpath: //*[@data-test-id='header-create-team-button']
13:08:16.657 [Test worker] INFO - Element By.xpath: //*[@data-test-id='header-create-team-button'] found.
13:08:16.709 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:16.722 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:16.770 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:16.781 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:16.804 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:16.814 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:16.842 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:16.853 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:16.911 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:16.922 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:16.944 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:16.955 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:16.987 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-submit-button']
13:08:16.997 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-submit-button'] found.
13:08:18.044 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:18.069 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:19.120 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:19.132 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:20.180 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:20.211 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:20.212 [Test worker] INFO - Start search element By.xpath: .//li
13:08:20.243 [Test worker] INFO - Element By.xpath: .//li found.
Teams before creation: 4
Teams after creation: 5
13:08:21.247 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:21.259 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:21.259 [Test worker] INFO - Start search element By.xpath: .//li
13:08:21.271 [Test worker] INFO - Element By.xpath: .//li found.
13:08:21.271 [Test worker] INFO - Start search element By.cssSelector: [name=add]
13:08:21.282 [Test worker] INFO - Element By.cssSelector: [name=add] found.
13:08:21.360 [Test worker] INFO - Start search element By.xpath: //*[@data-test-id='header-create-team-button']
13:08:21.373 [Test worker] INFO - Element By.xpath: //*[@data-test-id='header-create-team-button'] found.
13:08:21.442 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:21.459 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:21.521 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:21.529 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:21.551 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:21.560 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:21.591 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:21.603 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:21.672 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:21.684 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:21.708 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:21.721 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:21.753 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-submit-button']
13:08:21.763 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-submit-button'] found.
13:08:22.808 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:22.852 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:23.908 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:23.934 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:24.995 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:25.022 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:25.022 [Test worker] INFO - Start search element By.xpath: .//li
13:08:25.059 [Test worker] INFO - Element By.xpath: .//li found.
Teams before creation: 5
Teams after creation: 6
13:08:26.060 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:26.085 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:26.086 [Test worker] INFO - Start search element By.xpath: .//li
13:08:26.107 [Test worker] INFO - Element By.xpath: .//li found.
13:08:26.108 [Test worker] INFO - Start search element By.cssSelector: [name=add]
13:08:26.120 [Test worker] INFO - Element By.cssSelector: [name=add] found.
13:08:26.173 [Test worker] INFO - Start search element By.xpath: //*[@data-test-id='header-create-team-button']
13:08:26.195 [Test worker] INFO - Element By.xpath: //*[@data-test-id='header-create-team-button'] found.
13:08:26.261 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:26.279 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:26.339 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:26.348 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:26.370 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:26.380 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:26.415 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:26.439 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:26.490 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:26.500 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:26.526 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:26.539 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:26.570 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-submit-button']
13:08:26.585 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-submit-button'] found.
13:08:27.656 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:27.677 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:28.737 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:28.748 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:29.796 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:29.816 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:29.817 [Test worker] INFO - Start search element By.xpath: .//li
13:08:29.854 [Test worker] INFO - Element By.xpath: .//li found.
Teams before creation: 6
Teams after creation: 7
13:08:30.856 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:30.875 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:30.875 [Test worker] INFO - Start search element By.xpath: .//li
13:08:30.886 [Test worker] INFO - Element By.xpath: .//li found.
13:08:30.886 [Test worker] INFO - Start search element By.cssSelector: [name=add]
13:08:30.902 [Test worker] INFO - Element By.cssSelector: [name=add] found.
13:08:30.959 [Test worker] INFO - Start search element By.xpath: //*[@data-test-id='header-create-team-button']
13:08:30.970 [Test worker] INFO - Element By.xpath: //*[@data-test-id='header-create-team-button'] found.
13:08:31.043 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:31.059 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:31.155 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:31.170 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:31.193 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:31.204 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:31.667 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:31.677 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:31.724 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:31.736 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:31.760 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:31.772 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:32.227 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-submit-button']
13:08:32.235 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-submit-button'] found.
13:08:33.291 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:33.303 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:34.357 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:34.370 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:35.419 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:35.432 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:35.433 [Test worker] INFO - Start search element By.xpath: .//li
13:08:35.464 [Test worker] INFO - Element By.xpath: .//li found.
Teams before creation: 7
Teams after creation: 8
13:08:36.466 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:36.492 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:36.492 [Test worker] INFO - Start search element By.xpath: .//li
13:08:36.518 [Test worker] INFO - Element By.xpath: .//li found.
13:08:36.518 [Test worker] INFO - Start search element By.cssSelector: [name=add]
13:08:36.543 [Test worker] INFO - Element By.cssSelector: [name=add] found.
13:08:36.602 [Test worker] INFO - Start search element By.xpath: //*[@data-test-id='header-create-team-button']
13:08:36.614 [Test worker] INFO - Element By.xpath: //*[@data-test-id='header-create-team-button'] found.
13:08:36.681 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:36.699 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:36.756 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:36.765 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:36.787 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-name-input']
13:08:36.797 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-name-input'] found.
13:08:36.894 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:36.904 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:36.958 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:36.968 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:36.991 [Test worker] INFO - Start search element By.xpath: //*[@name='desc']
13:08:37.003 [Test worker] INFO - Element By.xpath: //*[@name='desc'] found.
13:08:37.077 [Test worker] INFO - Start search element By.cssSelector: [data-test-id='header-create-team-submit-button']
13:08:37.088 [Test worker] INFO - Element By.cssSelector: [data-test-id='header-create-team-submit-button'] found.
13:08:38.135 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:38.148 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:39.210 [Test worker] INFO - Start search element By.cssSelector: a [name=house]
13:08:39.240 [Test worker] INFO - Element By.cssSelector: a [name=house] found.
13:08:40.294 [Test worker] INFO - Start search element By.cssSelector: nav.home-left-sidebar-container .js-react-root
13:08:40.317 [Test worker] INFO - Element By.cssSelector: nav.home-left-sidebar-container .js-react-root found.
13:08:40.318 [Test worker] INFO - Start search element By.xpath: .//li
13:08:40.352 [Test worker] INFO - Element By.xpath: .//li found.
Teams before creation: 8
Teams after creation: 9


India...a young country, a timeless civilization explore it with india's very own story teller, Amish
The most powerful space in a woman's life is the need to be appreciated, loved and cherished for what she is...
Khalil Gibran said that parents are like a bow, and children like arrows. the more the bow bends and stretches, the farther the arrow flies.
The mighty lord of lanka, Raavan, sets out to avenge the insult of his sister, Shurpanakha at the hands of the younger prince of ayodhya, Lakshman.


---
title: About PiWeatherRock
linkTitle: About
menu:
main:
weight: 10
---
{{< blocks/cover title="Do I need an umbrella? What about a coat?" image_anchor="bottom" height="min" >}}
{{< /blocks/cover >}}
{{% blocks/lead %}}
A little about this project
{{% /blocks/lead %}}
{{< blocks/section color="white" >}}
PiWeatherRock started out as a way to know if I needed to grab an umbrella when getting ready to take our dogs
for a walk. You see, we were living in Portland, Oregon where it rains **A LOT** and it wasn't easy to tell whethor
or not it was raining by looking out the windows of our apartment due to the freqent fog or simply being dark. One
day my wife made a comment about wishing we had a weather rock near our door to the hallway and... well... this
project was born. It's evolved quite a bit since then and has turned into something way more useful and
informative than I initially imagined it would but I still think of it as simply a digital weather rock.
I still use PiWeatherRock every single day even though we no longer live in Portland. The primary way I use it is via a
Raspberry Pi Zero W hooked to the TV in my
living room. Every morning when I come down stairs I tell my Amazon Alexa "good morning" and starts a routine that
turns on the lights, then turns on the TV, and finally changes the input so that I can see the day's forecast.
Beyond the Zero hooked to the TV, I also recently built a
Raspberry Pi 4 and put it in a case that
includes a built-in 4-inch display so that I can have a much more compact weather rock for upstairs (I think this one
is going to end up on the wall next to our bathroom sinks).
I mention all this as a way to let you know that I have a vested interest in keeping this project in good working order.
That said, this is just a hobby for me so other things in life may well take precedent to working on it at times.
--- Gene
{{< /blocks/section >}}


Bases: astropy.io.fits.hdu.table._TableBaseHDU
Binary table HDU class.
| Parameters: | header : Header instance
data : array
name : str
uint : bool, optional
|
|---|
Add the CHECKSUM and DATASUM cards to this HDU with the values set to the checksum calculated for the HDU and the data respectively. The addition of the DATASUM card may be overridden.
| Parameters: | when : str, optional
override_datasum : bool, optional
blocking : str, optional
checksum_keyword : str, optional
datasum_keyword : str, optional
|
|---|
Notes
For testing purposes, first call add_datasum with a when argument, then call add_checksum with a when argument and override_datasum set to True. This will provide consistent comments for both cards and enable the generation of a CHECKSUM card with a consistent value.
Add the DATASUM card to this HDU with the value set to the checksum calculated for the data.
| Parameters: | when : str, optional
blocking : str, optional
datasum_keyword : str, optional
|
|---|---|
| Returns: | checksum : int
|
Notes
For testing purposes, provide a when argument to enable the comment value in the card to remain consistent. This will enable the generation of a CHECKSUM card with a consistent value.
Make a copy of the table HDU, both header and data are copied.
Dump the table HDU to a file in ASCII format. The table may be dumped in three separate files, one containing column definitions, one containing header parameters, and one for table data.
| Parameters: | datafile : file path, file object or file-like object, optional
cdfile : file path, file object or file-like object, optional
hfile : file path, file object or file-like object, optional
clobber : bool
|
|---|
Notes
The primary use for the dump method is to allow viewing and editing the table data and parameters in a standard text editor. The load method can be used to create a new table from the three plain text (ASCII) files.
datafile: Each line of the data file represents one row of table data. The data is output one column at a time in column order. If a column contains an array, each element of the column array in the current row is output before moving on to the next column. Each row ends with a new line.
Integer data is output right-justified in a 21-character field followed by a blank. Floating point data is output right justified using ‘g’ format in a 21-character field with 15 digits of precision, followed by a blank. String data that does not contain whitespace is output left-justified in a field whose width matches the width specified in the TFORM header parameter for the column, followed by a blank. When the string data contains whitespace characters, the string is enclosed in quotation marks (""). For the last data element in a row, the trailing blank in the field is replaced by a new line character.
For column data containing variable length arrays (‘P’ format), the array data is preceded by the string 'VLA_Length= ' and the integer length of the array for that row, left-justified in a 21-character field, followed by a blank.
Note
This format does not support variable length arrays using the (‘Q’ format) due to difficult to overcome ambiguities. What this means is that this file format cannot support VLA columns in tables stored in files that are over 2 GB in size.
For column data representing a bit field (‘X’ format), each bit value in the field is output right-justified in a 21-character field as 1 (for true) or 0 (for false).
cdfile: Each line of the column definitions file provides the definitions for one column in the table. The line is broken up into 8, sixteen-character fields. The first field provides the column name (TTYPEn). The second field provides the column format (TFORMn). The third field provides the display format (TDISPn). The fourth field provides the physical units (TUNITn). The fifth field provides the dimensions for a multidimensional array (TDIMn). The sixth field provides the value that signifies an undefined value (TNULLn). The seventh field provides the scale factor (TSCALn). The eighth field provides the offset value (TZEROn). A field value of "" is used to represent the case where no value is provided.
hfile: Each line of the header parameters file provides the definition of a single HDU header card as represented by the card image.
Calculates and returns the number of bytes that this HDU will write to a file.
Returns a dictionary detailing information about the locations of this HDU within any associated file. The values are only valid after a read or write of the associated file with no intervening changes to the HDUList.
| Returns: | dict or None
|
|---|
Given either a ColDefs object, a sequence of Column objects, or another table HDU or table data (a FITS_rec or multi-field numpy.ndarray or numpy.recarray object, return a new table HDU of the class this method was called on using the column definition from the input.
This is an alternative to the now deprecated new_table function, and otherwise accepts the same arguments. See also FITS_rec.from_columns.
| Parameters: | columns : sequence of Column, ColDefs, or other
header : Header
nrows : int
fill : bool |
|---|
Notes
Any additional keyword arguments accepted by the HDU class’s __init__ may also be passed in as keyword arguments.
Creates a new HDU object of the appropriate type from a string containing the HDU’s entire header and, optionally, its data.
Note: When creating a new HDU from a string without a backing file object, the data of that HDU may be read-only. It depends on whether the underlying string was an immutable Python str/bytes object, or some kind of read-write memory buffer such as a memoryview.
| Parameters: | data : str, bytearray, memoryview, ndarray
checksum : bool, optional
ignore_missing_end : bool, optional
kwargs : optional
|
|---|
Create a table from the input ASCII files. The input is from up to three separate files, one containing column definitions, one containing header parameters, and one containing column data.
The column definition and header parameters files are not required. When absent the column definitions and/or header parameters are taken from the header object given in the header argument; otherwise sensible defaults are inferred (though this mode is not recommended).
| Parameters: | datafile : file path, file object or file-like object
cdfile : file path, file object, file-like object, optional
hfile : file path, file object, file-like object, optional
replace : bool
header : Header object
|
|---|
Notes
The primary use for the load method is to allow the input of ASCII data that was edited in a standard text editor of the table data and parameters. The dump method can be used to create the initial ASCII files.
datafile: Each line of the data file represents one row of table data. The data is output one column at a time in column order. If a column contains an array, each element of the column array in the current row is output before moving on to the next column. Each row ends with a new line.
Integer data is output right-justified in a 21-character field followed by a blank. Floating point data is output right justified using ‘g’ format in a 21-character field with 15 digits of precision, followed by a blank. String data that does not contain whitespace is output left-justified in a field whose width matches the width specified in the TFORM header parameter for the column, followed by a blank. When the string data contains whitespace characters, the string is enclosed in quotation marks (""). For the last data element in a row, the trailing blank in the field is replaced by a new line character.
For column data containing variable length arrays (‘P’ format), the array data is preceded by the string 'VLA_Length= ' and the integer length of the array for that row, left-justified in a 21-character field, followed by a blank.
Note
This format does not support variable length arrays using the (‘Q’ format) due to difficult to overcome ambiguities. What this means is that this file format cannot support VLA columns in tables stored in files that are over 2 GB in size.
For column data representing a bit field (‘X’ format), each bit value in the field is output right-justified in a 21-character field as 1 (for true) or 0 (for false).
cdfile: Each line of the column definitions file provides the definitions for one column in the table. The line is broken up into 8, sixteen-character fields. The first field provides the column name (TTYPEn). The second field provides the column format (TFORMn). The third field provides the display format (TDISPn). The fourth field provides the physical units (TUNITn). The fifth field provides the dimensions for a multidimensional array (TDIMn). The sixth field provides the value that signifies an undefined value (TNULLn). The seventh field provides the scale factor (TSCALn). The eighth field provides the offset value (TZEROn). A field value of "" is used to represent the case where no value is provided.
hfile: Each line of the header parameters file provides the definition of a single HDU header card as represented by the card image.
Read the HDU from a file. Normally an HDU should be opened with open() which reads the entire HDU list in a FITS file. But this method is still provided for symmetry with writeto().
| Parameters: | fileobj : file object or file-like object
checksum : bool
ignore_missing_end : bool
|
|---|
Check the existence, location, and value of a required Card.
| Parameters: | keyword : str
pos : int, callable
test : callable fix_value : str, int, float, complex, bool, None
option : str
errlist : list
|
|---|
Notes
If pos=None, the card can be anywhere in the header. If the card does not exist, the new card will have the fix_value as its value when created. Also check the card’s value by using the test argument.
Execute the verification with selected option.
Size (in bytes) of the data portion of the HDU.
Deprecated since version 0.1: The tcreate method is deprecated and may be removed in a future version. Use load() instead.
Deprecated since version 0.1: The tdump function is deprecated and may be removed in a future version. Use dump() instead.
Update header keywords to reflect recent changes of columns.
Deprecated since version 0.3: The update_ext_name function will be deprecated in a future version. Use the .name attribute or Header.set instead.
Update the extension name associated with the HDU.
If the keyword already exists in the Header, it’s value and/or comment will be updated. If it does not exist, a new card will be created and it will be placed before or after the specified location. If no before or after is specified, it will be appended at the end.
| Parameters: | value : str
comment : str, optional
before : str or int, optional
after : str or int, optional
savecomment : bool, optional
|
|---|
Deprecated since version 0.3: The update_ext_version function will be deprecated in a future version. Use the .ver attribute or Header.set instead.
Update the extension version associated with the HDU.
If the keyword already exists in the Header, it’s value and/or comment will be updated. If it does not exist, a new card will be created and it will be placed before or after the specified location. If no before or after is specified, it will be appended at the end.
| Parameters: | value : str
comment : str, optional
before : str or int, optional
after : str or int, optional
savecomment : bool, optional
|
|---|
Verify all values in the instance.
| Parameters: | option : str
|
|---|
Verify that the value in the CHECKSUM keyword matches the value calculated for the current HDU CHECKSUM.
| Returns: | valid : int
|
|---|
Verify that the value in the DATASUM keyword matches the value calculated for the DATASUM of the current HDU data.
| Returns: | valid : int
|
|---|
Works similarly to the normal writeto(), but prepends a default PrimaryHDU are required by extension HDUs (which cannot stand on their own).
Bases: astropy.io.fits.hdu.table._TableBaseHDU
FITS ASCII table extension HDU class.
Add the CHECKSUM and DATASUM cards to this HDU with the values set to the checksum calculated for the HDU and the data respectively. The addition of the DATASUM card may be overridden.
| Parameters: | when : str, optional
override_datasum : bool, optional
blocking : str, optional
checksum_keyword : str, optional
datasum_keyword : str, optional
|
|---|
Notes
For testing purposes, first call add_datasum with a when argument, then call add_checksum with a when argument and override_datasum set to True. This will provide consistent comments for both cards and enable the generation of a CHECKSUM card with a consistent value.
Add the DATASUM card to this HDU with the value set to the checksum calculated for the data.
| Parameters: | when : str, optional
blocking : str, optional
datasum_keyword : str, optional
|
|---|---|
| Returns: | checksum : int
|
Notes
For testing purposes, provide a when argument to enable the comment value in the card to remain consistent. This will enable the generation of a CHECKSUM card with a consistent value.
Make a copy of the table HDU, both header and data are copied.
Calculates and returns the number of bytes that this HDU will write to a file.
Returns a dictionary detailing information about the locations of this HDU within any associated file. The values are only valid after a read or write of the associated file with no intervening changes to the HDUList.
| Returns: | dict or None
|
|---|
Given either a ColDefs object, a sequence of Column objects, or another table HDU or table data (a FITS_rec or multi-field numpy.ndarray or numpy.recarray object, return a new table HDU of the class this method was called on using the column definition from the input.
This is an alternative to the now deprecated new_table function, and otherwise accepts the same arguments. See also FITS_rec.from_columns.
| Parameters: | columns : sequence of Column, ColDefs, or other
header : Header
nrows : int
fill : bool |
|---|
Notes
Any additional keyword arguments accepted by the HDU class’s __init__ may also be passed in as keyword arguments.
Creates a new HDU object of the appropriate type from a string containing the HDU’s entire header and, optionally, its data.
Note: When creating a new HDU from a string without a backing file object, the data of that HDU may be read-only. It depends on whether the underlying string was an immutable Python str/bytes object, or some kind of read-write memory buffer such as a memoryview.
| Parameters: | data : str, bytearray, memoryview, ndarray
checksum : bool, optional
ignore_missing_end : bool, optional
kwargs : optional
|
|---|
Read the HDU from a file. Normally an HDU should be opened with open() which reads the entire HDU list in a FITS file. But this method is still provided for symmetry with writeto().
| Parameters: | fileobj : file object or file-like object
checksum : bool
ignore_missing_end : bool
|
|---|
Check the existence, location, and value of a required Card.
| Parameters: | keyword : str
pos : int, callable
test : callable fix_value : str, int, float, complex, bool, None
option : str
errlist : list
|
|---|
Notes
If pos=None, the card can be anywhere in the header. If the card does not exist, the new card will have the fix_value as its value when created. Also check the card’s value by using the test argument.
Execute the verification with selected option.
Size (in bytes) of the data portion of the HDU.
Update header keywords to reflect recent changes of columns.
Deprecated since version 0.3: The update_ext_name function will be deprecated in a future version. Use the .name attribute or Header.set instead.
Update the extension name associated with the HDU.
If the keyword already exists in the Header, it’s value and/or comment will be updated. If it does not exist, a new card will be created and it will be placed before or after the specified location. If no before or after is specified, it will be appended at the end.
| Parameters: | value : str
comment : str, optional
before : str or int, optional
after : str or int, optional
savecomment : bool, optional
|
|---|
Deprecated since version 0.3: The update_ext_version function will be deprecated in a future version. Use the .ver attribute or Header.set instead.
Update the extension version associated with the HDU.
If the keyword already exists in the Header, it’s value and/or comment will be updated. If it does not exist, a new card will be created and it will be placed before or after the specified location. If no before or after is specified, it will be appended at the end.
| Parameters: | value : str
comment : str, optional
before : str or int, optional
after : str or int, optional
savecomment : bool, optional
|
|---|
Verify all values in the instance.
| Parameters: | option : str
|
|---|
Verify that the value in the CHECKSUM keyword matches the value calculated for the current HDU CHECKSUM.
| Returns: | valid : int
|
|---|
Verify that the value in the DATASUM keyword matches the value calculated for the DATASUM of the current HDU data.
| Returns: | valid : int
|
|---|
Works similarly to the normal writeto(), but prepends a default PrimaryHDU are required by extension HDUs (which cannot stand on their own).
Bases: object
Class which contains the definition of one column, e.g. ttype, tform, etc. and the array containing values for the column.
Construct a Column by specifying attributes. All attributes except format can be optional.
| Parameters: | name : str, optional
format : str, optional
unit : str, optional
null : str, optional
bscale : int-like, optional
bzero : int-like, optional
disp : str, optional
start : int, optional
dim : str, optional
array : iterable, optional
ascii : bool, optional
|
|---|
Return a copy of this Column.
Bases: object
Column definitions class.
It has attributes corresponding to the Column attributes (e.g. ColDefs has the attribute names while Column has name). Each attribute in ColDefs is a list of corresponding attribute values from all Column objects.
| Parameters: | input : sequence of Column, ColDefs, other
**(Deprecated) tbtype** : str, optional
ascii : bool |
|---|
Append one Column to the column definition.
Change an attribute (in the KEYWORD_ATTRIBUTES list) of a Column.
| Parameters: | col_name : str or int
attrib : str
new_value : object
|
|---|
Change a Column‘s name.
| Parameters: | col_name : str
new_name : str
|
|---|
Change a Column‘s unit.
| Parameters: | col_name : str or int
new_unit : str
|
|---|
Delete (the definition of) one Column.
Get attribute(s) information of the column definition.
| Parameters: | attrib : str
output : file, optional |
|---|
Notes
This function doesn’t return anything by default; it just prints to stdout.
Bases: numpy.core.records.recarray
FITS record array class.
FITS_rec is the data part of a table HDU’s data part. This is a layer over the recarray, so we can deal with scaled columns.
It inherits all of the standard methods from numpy.ndarray.
A user-visible accessor for the coldefs.
The Numpy documentation lies; numpy.ndarray.copy is not equivalent to numpy.copy. Differences include that it re-views the copied array as self’s ndarray subclass, as though it were taking a slice; this means __array_finalize__ is called and the copy shares all the array attributes (including ._convert!). So we need to make a deep copy of all those attributes so that the two arrays truly do not share any data.
A view of a Column‘s data as an array.
Given a ColDefs object of unknown origin, initialize a new FITS_rec object.
Note
This was originally part of the new_table function in the table module but was moved into a class method since most of its functionality always had more to do with initializing a FITS_rec object than anything else, and much of it also overlapped with FITS_rec._scale_back.
| Parameters: | columns : sequence of Column or a ColDefs
nrows : int
fill : bool |
|---|
List of column names.
Bases: object
FITS record class.
FITS_record is used to access records of the FITS_rec object. This will allow us to deal with scaled columns. It also handles conversion/scaling of columns in ASCII tables. The FITS_record class expects a FITS_rec object as input.
| Parameters: | input : array
row : int, optional
start : int, optional
end : int, optional
|
|---|
Get the field data of the record.
Set the field data of the record.
Deprecated since version 0.4: The new_table function is deprecated and may be removed in a future version. Use BinTableHDU.from_columns() for new BINARY tables or TableHDU.from_columns() for new ASCII tables instead.
Create a new table from the input column definitions.
Warning: Creating a new table using this method creates an in-memory copy of all the column arrays in the input. This is because if they are separate arrays they must be combined into a single contiguous array.
If the column data is already in a single contiguous array (such as an existing record array) it may be better to create a BinTableHDU instance directly. See the Astropy documentation for more details.
| Parameters: | input : sequence of Column or a ColDefs
header : Header instance
nrows : int
fill : bool tbtype : str or type
|
|---|
Dump a table HDU to a file in ASCII format. The table may be dumped in three separate files, one containing column definitions, one containing header parameters, and one for table data.
| Parameters: | filename : file path, file object or file-like object
datafile : file path, file object or file-like object, optional
cdfile : file path, file object or file-like object, optional
hfile : file path, file object or file-like object, optional
ext : int
clobber : bool
|
|---|
Notes
The primary use for the tabledump function is to allow editing in a standard text editor of the table data and parameters. The tcreate function can be used to reassemble the table from the three ASCII files.
datafile: Each line of the data file represents one row of table data. The data is output one column at a time in column order. If a column contains an array, each element of the column array in the current row is output before moving on to the next column. Each row ends with a new line.
Integer data is output right-justified in a 21-character field followed by a blank. Floating point data is output right justified using ‘g’ format in a 21-character field with 15 digits of precision, followed by a blank. String data that does not contain whitespace is output left-justified in a field whose width matches the width specified in the TFORM header parameter for the column, followed by a blank. When the string data contains whitespace characters, the string is enclosed in quotation marks (""). For the last data element in a row, the trailing blank in the field is replaced by a new line character.
For column data containing variable length arrays (‘P’ format), the array data is preceded by the string 'VLA_Length= ' and the integer length of the array for that row, left-justified in a 21-character field, followed by a blank.
Note
This format does not support variable length arrays using the (‘Q’ format) due to difficult to overcome ambiguities. What this means is that this file format cannot support VLA columns in tables stored in files that are over 2 GB in size.
For column data representing a bit field (‘X’ format), each bit value in the field is output right-justified in a 21-character field as 1 (for true) or 0 (for false).
cdfile: Each line of the column definitions file provides the definitions for one column in the table. The line is broken up into 8, sixteen-character fields. The first field provides the column name (TTYPEn). The second field provides the column format (TFORMn). The third field provides the display format (TDISPn). The fourth field provides the physical units (TUNITn). The fifth field provides the dimensions for a multidimensional array (TDIMn). The sixth field provides the value that signifies an undefined value (TNULLn). The seventh field provides the scale factor (TSCALn). The eighth field provides the offset value (TZEROn). A field value of "" is used to represent the case where no value is provided.
hfile: Each line of the header parameters file provides the definition of a single HDU header card as represented by the card image.
Create a table from the input ASCII files. The input is from up to three separate files, one containing column definitions, one containing header parameters, and one containing column data. The header parameters file is not required. When the header parameters file is absent a minimal header is constructed.
| Parameters: | datafile : file path, file object or file-like object
cdfile : file path, file object or file-like object
hfile : file path, file object or file-like object, optional
|
|---|
Notes
The primary use for the tableload function is to allow the input of ASCII data that was edited in a standard text editor of the table data and parameters. The tabledump function can be used to create the initial ASCII files.
datafile: Each line of the data file represents one row of table data. The data is output one column at a time in column order. If a column contains an array, each element of the column array in the current row is output before moving on to the next column. Each row ends with a new line.
Integer data is output right-justified in a 21-character field followed by a blank. Floating point data is output right justified using ‘g’ format in a 21-character field with 15 digits of precision, followed by a blank. String data that does not contain whitespace is output left-justified in a field whose width matches the width specified in the TFORM header parameter for the column, followed by a blank. When the string data contains whitespace characters, the string is enclosed in quotation marks (""). For the last data element in a row, the trailing blank in the field is replaced by a new line character.
For column data containing variable length arrays (‘P’ format), the array data is preceded by the string 'VLA_Length= ' and the integer length of the array for that row, left-justified in a 21-character field, followed by a blank.
Note
This format does not support variable length arrays using the (‘Q’ format) due to difficult to overcome ambiguities. What this means is that this file format cannot support VLA columns in tables stored in files that are over 2 GB in size.
For column data representing a bit field (‘X’ format), each bit value in the field is output right-justified in a 21-character field as 1 (for true) or 0 (for false).
cdfile: Each line of the column definitions file provides the definitions for one column in the table. The line is broken up into 8, sixteen-character fields. The first field provides the column name (TTYPEn). The second field provides the column format (TFORMn). The third field provides the display format (TDISPn). The fourth field provides the physical units (TUNITn). The fifth field provides the dimensions for a multidimensional array (TDIMn). The sixth field provides the value that signifies an undefined value (TNULLn). The seventh field provides the scale factor (TSCALn). The eighth field provides the offset value (TZEROn). A field value of "" is used to represent the case where no value is provided.
hfile: Each line of the header parameters file provides the definition of a single HDU header card as represented by the card image.


The Salesforce Toolkits for .NET provide an easy way for .NET developers to interact with the Force.com & Chatter REST APIs using native libraries.


2013
Self Made Man Man Made Land
with Abby Block and Kohji Setoh
A kinesthetic duet.
An abstract work that is not wholly abstract. Figurative moments flicker throughout.
Louise Bourgeois is a point of reference.
This piece begins where Eagly left off with Group Dynamics and Visual Sensitivity. Both works demands a highly attuned viewer, but Self Made Man begins with the assumption of this ideal viewer (rather than with a warm-up that creates an ideal state of viewing, as in Group Dynamics). The piece is composed from movement language that Eagly has been investigating for years—contorted and fluid, awkward and elegant, spasmodic and languid. Ball-and-socket joints hone a disjointed, disconnected body.
The composition requires the audience to look closely at similarities and differences between Eagly and Block, who share a pronounced energetic likeness. At times the two are clones, at times two versions of the same person, at times two different people.
The structure of this dance mirrors that of its title. It is almost a palindrome, almost the same forwards and backwards, but does in fact change and develop. It invites audiences to look more closely, for shifts of form that beget shifts of meaning.
WRITING
53rd State Press Dance Pamphlet #1
IDIOM Magazine—Christine Shan Shan Hou
Time Out New York
VIDEO
Excerpt #1
Self Made Man Man Made Land was co-commissioned by Mount Tremper Arts and The Chocolate Factory Theater. Additional commissioning support is provided by the Mertz Gilmore Foundation. The Mount Tremper Arts engagement was supported by the Japan Foundation through the Performing Arts JAPAN program and by the Foundation for Contemporary Arts’ Emergency Grant Program. The Chocolate Factory engagement is made possible (in part) by the Queens Council on the Arts with public funds from the New York City Department of Cultural Affairs in partnership with the City Council. This work was rehearsed at the Mark Morris Dance Center, among other places.
The Chocolate Factory engagement featured lighting design by Elliott Jenetopulos.
This work was performed at the 2013 Wherever Whenever Festival (Tokyo); the 2014 Locomotion Festival (Skopje, Macedonia); and Laboratorio Arte Alameda (Mexico City).
It was also the subject of an experiment in authorship, in which it was remade by Jamie Boyle, as part of a Food for Thought program at Danspace Project, and by the Danish choreographer My Lindblad, as part of the 2013 NOT Festival in Copenhagen, Denmark.
PHOTOGRAPH by Anja Hitzenberger


--- title: Brian’s 10 Rules for how to write cross-platform code layout: post ---
I would tend to agree with almost everything in this article.


HABIT (director: Larry Fessenden; cast: Larry Fessenden (Sam), Meredith Snaider (Anna), Aaron Bell (Nick), Heather Woodbury(Rae), 1995)
HABIT, supposedly a vampire movie, but, perhaps, it is more like a psychological thriller/love story. In the opening scene, we see the director, writer, and star of the movie, Sam (Larry Fessenden), walking down Greenwich Village in his Halloween costume, on his way to a friend's Halloween party. He looks out of it as he stumbles along, and as he looks around in disbelief, he sees the other celebrants in their costumes, and just goes stumbling on, not quite so sure if the scary creatures he is seeing are for real or induced from his inebriated state. We learn at the party that he has a serious drinking problem. Yet he has no trouble hooking up with an uninvited guest, Anna (Meredith), with whom he is sexually attracted to; while, at the same party, his ex-girlfriend Rae (Heather) arrives late, and she appears to be upset that he pays very little attention to her.
We see that Larry is a "hip" NYC type of a person, who acts nonchalant about getting robbed on the subway. His fast-paced urban lifestyle shows that he both parties and works hard, employed as a manager in a Mexican restaurant, who just happens to be at a difficult stage of his life at the present moment, undergoing severe physical and mental changes, and is saddened by the recent death of his father, whom he keeps seeing visions of. On top of that, his live-in girlfriend, Rae, has just split from him because she found it difficult to communicate with him because of his drinking problems and she wasn't sure if he could ever commit himself to loving her.
His relationship with Anna starts off on the fast track, as she is fiercely sexual, she loves to bite into him, drawing some blood from him and sucking on it. They make love at the drop of a hat: on the roof of his building, in Battery Park, and even on his bed. But their relationship is odd, she won't tell him anything about herself, and chooses to surprise him, by showing up to meet him when he doesn't expect it, never staying with him during the day.  He tries to call out for help to his ex-girlfriend and to his best friend Nick (Aaron), but they can't understand him. The one person who he probably should have contacted, whom he doesn't, is his father's intellectual friend, who leaves him a message on his answering machine telling him that he wants to talk to him about the girl (Anna) he brought to the speech he gave, honoring his father.
You feel Sam's agony of living in such a crowded city as N.Y., constantly hearing its pulsating city rhythms, experiencing its dark fears, and you are always aware of the noise and many distractions there are, especially when you need space to think. Sam is cracking up and he is scared, and though he has friends, he can't reach them.  But one thing is certain, something bad is happening to him.
What makes this vampire type of film different than the others, is that it is very personal, more about the psychological state of a guy who doesn't seem to be a psychotic, but is very confused about the new direction his life is taking him. Most of the other films of this kind seem so unreal in regards to any kind of personal underpinnings that are frightening to them, that the fright in them appears to be from watching good filmmaking, not from something that can possibly crop up in their daily lives or invade their inner being.
Fessender has fully thought out the details of how a person can break down in front of us and not have any recourse in putting a stop to it, making the story as plausible and far-reaching as possible. There are a lot of things that happened involving relationships and inner perceptions, that you need time and peace of mind to think about, just as Sam needed, that might never make sense. But that isn't the point... it is usually the things that don't make sense, that bother us the most. The film has a captivating style and playful mood to it, that keeps you involved in the intelligently told story, which is rare for this genre.
REVIEWED ON 10/3/98 GRADE: A
Dennis Schwartz: "Ozus' World Movie Reviews"
http://www.sover.net/~ozus
© ALL RIGHTS RESERVED DENNIS SCHWARTZ
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


Homemade gun seized in St James
The police in St James are reporting the seizure of a homemade shotgun during an operation in Coral Gardens in the parish on Sunday.
The Montego Bay Police report that about 4:00 p.m., a team was in the area when an abandoned building was searched and the firearm was seen among debris.
No one was arrested in relation to this seizure.


O'BROTHER, WHERE ART THOU? Reviewed by Jerry Saravia March 9th, 2001
I sat watching the Coen Bros. latest film, "O'Brother, Where Art Thou?" in stunned silence. I certainly watched with admiration that the Coens would be interested in the Depression era. I liked the art direction and the cinematography by gifted cinematographer Roger Deakins, who also photographed "Fargo." The film has a sense of time and place, and it has all the hallmarks of a wonderfully crafted period piece. The problem is that there is no attitude, no edge, no life. In fact, this remains the most lifeless, laughless comedy I've seen in years, and the Coens are to blame entirely for this misfire.
The film begins promisingly enough with the shot of a chain gang working on a railroad. Three prisoners escape and keep ducking across an open wheat field, unseen by the prison guards. They are Ulysses Everett McGill (thin mustached George Clooney), Pete (John Turturro), and Delmar (Tim Blake Nelson) - three fools with not one brain cell to their name. Nevertheless, Ulysses considers himself the leader of the group as they try unsuccessfully to hop on a freight train.  The trio escape, finding themselves in one comical situation after another. Ulysses's intent is to find some secretly stashed money that they can split among themselves.
And yet I was mortified by how little any of this made me laugh, much less chuckle. I sat watching all these events unfold on screen yet none of it engaged me on any level. Every sequence is flat and joyless, including a KKK rally that is neither ominous nor remotely funny. There is one brief segment involving the possibility that Pete has turned into a horny toad but it never leads anywhere. The sequences hang loosely with no weight or substance.
The actors do not help in the least. Clooney, Turturro and Nelson merely react with artifical expressions that seem less alive than those found in a Norman Rockwell painting. The Coens refuse to invest any humanity in these characters so that every single situation, every actor, every line is reinforced with a robotic mentality that produces no chemistry, no interest and no imagination. Holly Hunter shows up in a throwaway cameo as McGill's previous lover who finds him to less than "bona fide." She shows some strength and vitality and refuses to come off as an automaton or a cartoonish caricature, unlike the rest of the cast.
"O'Brother, Where Art Thou?" reminded me of the frenetic road comedy by the Coens known as "Raising Arizona," which has become something of a cult clas sic and which I less than admire. I suppose their over-the-top brand of humor of the anything-goes school of comedy doesn't click with me at all, as I was also one of the few supporters of "The Hudsucker Proxy." I admire their intentions in creating a zany comedic period piece (and thus basing it on Homer's "The Odyssey") but I found nothing here to connect with me on any level. Perhaps it is time for them to go back to their film noir roots, "Blood Simple" and "Fargo," two of my favorites by the Coens. Here, the Coens seem to be dangerously close to traveling nowhere.
E-mail me with any questions, comments or general complaints at<EMAIL_ADDRESS>or at<EMAIL_ADDRESS>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


Provides a (loose) port of Tween.js for Chicken Scheme. Other Schemes may work, though perhaps with some minor alterations.
(factorial n)
Memoized implementation of the factorial method. Provides O(n) computation, albeit with an O(1) average case. Requires O(n) memory.
You may reset the memory by whiping out the cache: (set! factorial* (make-vector 1 1))
(rationalize count value #!optional (epsilon 0))
Sometimes its useful to truncate the number of decimal places a floating point number is exact to. Sometimes it's also useful to do so after applying an epsilon value to smudge for floating point computation errors. This function can perform both operations.
Note that it is not a function to force a number to a particular number of significant digits.
(tween easing-function direction start stop percent)
Given an easing-function
and a direction
, this produces a value between start
and stop
that is representative of the provided percent
.
direction
may be one of the following symbols:
* in
* out
* inout
percent
must be a value between 0.0 and 1.0.
start
and stop
must be numbers.
easing-function
be of the form direction -> percent -> percent
.
(interpolate selector-function value-vector percent)
Given a selector-function
this produces a value within the range of values defined in value-vector
that is representative of the provided percent
.
value-vector
must be a vector of numbers.
percent
must be a value between 0.0 and 1.0.
selector-function
must be of the form value-vector -> percent -> number
The following easing functions are available:
The following interpolation functions are available:
```scheme (define test-percents '(0.0 0.1 0.2 0.3 0.4 0.5 0.66 0.75 0.95 1.0))
(define (test-ease ease start stop) (let ((in '()) (out '()) (inout '())) (map (lambda (p) (set! in (cons (rationalize 2 (tween ease 'in start stop p)) in)) (set! out (cons (rationalize 2 (tween ease 'out start stop p)) out)) (set! inout (cons (rationalize 2 (tween ease 'inout start stop p)) inout)) ) (reverse test-percents)) `((in . ,in) (out . ,out) (inout . ,inout))))
;; Tests tweens for values between 0 and 10 (map (lambda (e) (display (list e 0 10 (test-ease e 0 10))) (newline)) (list linear-ease quadratic-ease cubic-ease quartic-ease quintic-ease sinusoidal-ease exponential-ease circular-ease elastic-ease back-ease bounce-ease))
;; Tests interpolation for values in the given set (let ((v '(0 1 2 3 4 5 10 15 20 25 30 35 40 45 50))) (map (lambda (s) (display (list s v (test-select s (list->vector v))))) (list linear-select bezier-select catmullrom-select)))
;; Tween test produces:
(#
;; Interpolation test produces:
(#
Copyright 2012 Daniel J. Leslie. All rights reserved.
The contact email address for Daniel J. Leslie is<EMAIL_ADDRESS>Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.

The views and conclusions contained in the software and documentation are those of the
authors and should not be interpreted as representing official policies, either expressed
or implied, of Daniel J. Leslie.


ORPSEF Contacting Us
If you have questions, please contact Jessica Steed.
Oak Ridge Public Schools Education FoundationP.O. Box 117 MS-22
Oak Ridge, TN 37831
P:<PHONE_NUMBER>
E<EMAIL_ADDRESS>You may also follow us on Twitter or Facebook.