Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
blocks and each `~astroplan.Constraint` in the .constraints of
each block and in self.global_constraints.
Parameters
----------
time_resolution : `~astropy.units.Quantity`
the time between each scored time
Returns
-------
score_array : `~numpy.ndarray`
array with dimensions (# of blocks, schedule length/ ``time_resolution``
"""
start = self.schedule.start_time
end = self.schedule.end_time
times = time_grid_from_range((start, end), time_resolution)
score_array = np.ones((len(self.blocks), len(times)))
for i, block in enumerate(self.blocks):
# TODO: change the default constraints from None to []
if block.constraints:
for constraint in block.constraints:
applied_score = constraint(self.observer, block.target,
times=times)
score_array[i] *= applied_score
for constraint in self.global_constraints:
score_array *= constraint(self.observer, self.targets, times,
grid_times_targets=True)
return score_array
Lower and upper bounds on time sequence.
time_grid_resolution : `~astropy.units.quantity`
Time-grid spacing
grid_times_targets : bool
if True, grids the constraint result with targets along the first
index and times along the second. Otherwise, we rely on broadcasting
the shapes together using standard numpy rules.
Returns
-------
constraint_result : 1D or 2D array of float or bool
The constraints. If 2D with targets along the first index and times along
the second.
"""
if times is None and time_range is not None:
times = time_grid_from_range(time_range,
time_resolution=time_grid_resolution)
if grid_times_targets:
targets = get_skycoord(targets)
# TODO: these broadcasting operations are relatively slow
# but there is potential for huge speedup if the end user
# disables gridding and re-shapes the coords themselves
# prior to evaluating multiple constraints.
if targets.isscalar:
# ensure we have a (1, 1) shape coord
targets = SkyCoord(np.tile(targets, 1))[:, np.newaxis]
else:
targets = targets[..., np.newaxis]
times, targets = observer._preprocess_inputs(times, targets, grid_times_targets=False)
result = self.compute_constraint(times, observer, targets)
for constraint in constraints]
constraint_arr = np.logical_and.reduce(applied_constraints)
colnames = ['target name', 'ever observable', 'always observable',
'fraction of time observable']
target_names = [target.name for target in targets]
ever_obs = np.any(constraint_arr, axis=1)
always_obs = np.all(constraint_arr, axis=1)
frac_obs = np.sum(constraint_arr, axis=1) / constraint_arr.shape[1]
tab = table.Table(names=colnames, data=[target_names, ever_obs, always_obs,
frac_obs])
if times is None and time_range is not None:
times = time_grid_from_range(time_range,
time_resolution=time_grid_resolution)
if is_24hr_table:
tab['time observable'] = tab['fraction of time observable'] * 24*u.hour
tab.meta['times'] = times.datetime
tab.meta['observer'] = observer
tab.meta['constraints'] = constraints
return tab
if self.constraints is None:
self.constraints = [AltitudeConstraint(min=0 * u.deg)]
else:
self.constraints.append(AltitudeConstraint(min=0 * u.deg))
for i, b in enumerate(blocks):
b._duration_offsets = u.Quantity([0 * u.second, b.duration / 2, b.duration])
_block_priorities[i] = b.priority
_all_times.append(b.duration)
b.observer = self.observer
# Define a master schedule
# Generate grid of time slots, and a mask for previous observations
time_resolution = self.time_resolution
times = time_grid_from_range([self.schedule.start_time, self.schedule.end_time],
time_resolution=time_resolution)
# generate the score arrays for all of the blocks
scorer = Scorer(blocks, self.observer, self.schedule,
global_constraints=self.constraints)
score_array = scorer.create_score_array(time_resolution)
# Sort the list of blocks by priority
sorted_indices = np.argsort(_block_priorities)
unscheduled_blocks = []
# Compute the optimal observation time in priority order
for i in sorted_indices:
b = blocks[i]
# Compute possible observing times by combining object constraints
# with the master open times mask
-------
observable_months : list
List of sets of unique integers representing each month that a target is
observable, one set per target. These integers are 1-based so that
January maps to 1, February maps to 2, etc.
"""
# TODO: This method could be sped up a lot by dropping to the trigonometric
# altitude calculations.
if not hasattr(constraints, '__len__'):
constraints = [constraints]
# Calculate throughout the year of 2014 so as not to require forward
# extrapolation off of the IERS tables
time_range = Time(['2014-01-01', '2014-12-31'])
times = time_grid_from_range(time_range, time_grid_resolution)
# TODO: This method could be sped up a lot by dropping to the trigonometric
# altitude calculations.
applied_constraints = [constraint(observer, targets,
times=times,
grid_times_targets=True)
for constraint in constraints]
constraint_arr = np.logical_and.reduce(applied_constraints)
months_observable = []
for target, observable in zip(targets, constraint_arr):
s = set([t.datetime.month for t in times[observable]])
months_observable.append(s)
return months_observable