Commit a60024f3 authored by Laura, Jason R.'s avatar Laura, Jason R. Committed by Bauck, Kirsten (Contractor) Hailey
Browse files

Stages for 1.2.0 release

parent cb16b5fc
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -10,6 +10,9 @@ tests/artifacts/*
notebooks/*
!notebooks/*.ipynb

#VSCode
/.vscode

#PyCharm
/.idea

+5 −3
Original line number Diff line number Diff line
@@ -14,12 +14,14 @@ stages:
unit-test:
  stage: test
  script:
    - mamba install --file test_requirements.txt
    - pip install mock-alchemy
    - pip install -r test_requirements.txt
    - wget "https://asc-isisdata.s3.us-west-2.amazonaws.com/autocnet_test_data/B08_012650_1780_XN_02S046W.l1.cal.destriped.crop.cub" -P tests/test_subpixel_match/
    - wget "https://asc-isisdata.s3.us-west-2.amazonaws.com/autocnet_test_data/D16_033458_1785_XN_01S046W.l1.cal.destriped.crop.cub" -P tests/test_subpixel_match/
    - wget "https://asc-isisdata.s3.us-west-2.amazonaws.com/autocnet_test_data/J04_046447_1777_XI_02S046W.l1.cal.destriped.crop.cub" -P tests/test_subpixel_match/
    - pytest .
    - pytest autocnet
  stage: integration
  script:
    - pytest tests

pages:
  stage: deploy 
+7 −1
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ heading to indicate that only the bug fixes and security fixes are in the bug fi
release.
-->
## [Unreleased]

## [1.2.0]
### Added
- Ability to choose whether to compute overlaps for a network candidate graph
- Integration tests for end-to-end of an equatorial CTX pair and a mid-latitude CTX trio. These write out ISIS control networks that can be visually inspected in `qnet` in case changes exceed the test tolerances.
@@ -41,10 +43,14 @@ release.
- Multiple cropped ISIS cubes and associated CSM sensor models for testing. These cubes account for the offset issue that the `ale` `isd_generate` script has with generating CSM ISDs from cropped observations.

### Changed
- Affine transformations are now using projective transformations. The affine transformation out of skimage was **not** properly tracking reflection of the input data. The projective transformation does. This necessitated a change to how shear is being checked as the shearing components of the transformation are now encoded into [2][0] and [2][1] in the 3x3 matrix. This also means that the transformations are accounting for scale differences.
- `cluster_submit_single` now uses a global retry in addition to a pre-ping on the pool. This accounts for database disconnects that are especially prevelent when the back, serverless, database is attempting to provision additional capacity. Each session access (e.g. session.query) will retry up to 5 times with a 300s timeout. Aurora should provision additional capacity in less than 300s.
- Smart subpixel matcher now re-uses the clip call on the ROI object instead of re-instantiating an ROI object with each different parameter set. The result is a measurable performance increase.
- Subpixel template now takes two arrays and return computed offsets. The caller is responsible for applying any transformations. For example, if an affine transformed moving template is passed, the caller of subpixel_template must apply the inverse transform.
- CI on the library now uses a mocked sqlalchemy connection. All tests can now run locally without the need for a supplemental postgres container. This changed removed some non-optimal tests that were testing datbase triggers and database instantiation handled by SQLAlchemy.

### Fixed
- Affine transformations are now properly accounting for data reflection.
- Error in subpixel ROI extraction when an affine transformation is provided. The code was using the same translation, regardless of the size of the data pulled into the ROI. This caused the center code to fail with large swawthes of bad data. The fix computes the size of the read data, including buffer, and computes the proper translation.
- Errors when importing sensor model in `overlap.py`
- Dealt with None values trying to be converted to a shapely point in `centroids.py`
- Dealt with Key Error when finding file paths in the network nodes.

RotationMatrices.ipynb

0 → 100644
+649 −0

File added.

Preview size limit exceeded, changes collapsed.

+6 −4
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ import logging
from subprocess import CalledProcessError
from numbers import Number

from autocnet.transformation.spatial import og2oc, og2xyz, xyz2og, xyz2oc
from autocnet.transformation.spatial import og2oc, og2xyz, xyz2og
from autocnet.io import isis

import numpy as np
@@ -23,7 +23,6 @@ except Exception as exception:
    isis = FailedImport(exception)

from knoten.csm import create_csm, generate_ground_point, generate_image_coordinate
from csmapi import csmapi

# set up the logger file
log = logging.getLogger(__name__)
@@ -276,7 +275,6 @@ class ISISSensor(BaseSensor):
            Latitude coordinate(s).

        """
        # ISIS is expecting ocentric latitudes. Convert from ographic before passing.
        lonoc, latoc = og2oc(lon, lat, self.semi_major, self.semi_minor)
        res = self._point_info(lonoc, latoc, "ground", allowoutside=allowoutside)
        if isinstance(lon, (collections.abc.Sequence, np.ndarray)):
@@ -284,6 +282,7 @@ class ISISSensor(BaseSensor):
        else:
            samples, lines = res["Sample"], res["Line"]
        
        log.debug(f'Samples: {samples} Lines: {lines}')
        return samples, lines

    def sampline2xyz(self, sample, line):
@@ -367,6 +366,7 @@ class ISISSensor(BaseSensor):
            are possible.  Please see the campt or mappt documentation.

        """
        logging.debug(f'Sample: {sample}, Line: {line}')
        res = self._point_info(sample, line, "image", allowoutside=allowoutside)
        if isinstance(sample, (collections.abc.Sequence, np.ndarray)):
            lon_list = list()
@@ -380,6 +380,8 @@ class ISISSensor(BaseSensor):
        else:
            lons = self._get_value(res[lontype])
            lats = self._get_value(res[lattype])
        log.debug(f'Latitude Type: {lattype}')
        log.debug(f'Lons: {lons} Lats: {lats}')
        return lons, lats   

    def lonlat2xyz(self, lon, lat):
Loading