sarkit-convert 0.2.0__py3-none-any.whl → 0.3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,7 +19,7 @@ import datetime
19
19
  import pathlib
20
20
 
21
21
  import dateutil.parser
22
- import lxml.builder
22
+ import lxml.etree
23
23
  import numpy as np
24
24
  import numpy.linalg as npl
25
25
  import numpy.polynomial.polynomial as npp
@@ -27,7 +27,6 @@ import sarkit.sicd as sksicd
27
27
  import sarkit.verification
28
28
  import sarkit.wgs84
29
29
  import scipy.constants
30
- from lxml import etree
31
30
 
32
31
  from sarkit_convert import __version__
33
32
  from sarkit_convert import _utils as utils
@@ -59,10 +58,6 @@ def _parse_to_naive(timestamp_str):
59
58
  return dateutil.parser.parse(timestamp_str).replace(tzinfo=None)
60
59
 
61
60
 
62
- def _naive_to_sicd_str(timestamp):
63
- return timestamp.replace(tzinfo=None).isoformat() + "Z"
64
-
65
-
66
61
  def _boolstr_to_bool(text):
67
62
  return text in ("1", "true")
68
63
 
@@ -603,44 +598,45 @@ def cosar_to_sicd(
603
598
  antenna_array_gain[0, 0] = 0.0
604
599
 
605
600
  # Build XML
606
- sicd = lxml.builder.ElementMaker(
607
- namespace=NSMAP["sicd"], nsmap={None: NSMAP["sicd"]}
601
+ sicd_xml_obj = lxml.etree.Element(
602
+ f"{{{NSMAP['sicd']}}}SICD", nsmap={None: NSMAP["sicd"]}
608
603
  )
609
- sicd_xml_obj = sicd.SICD()
610
604
  sicd_ew = sksicd.ElementWrapper(sicd_xml_obj)
611
605
 
612
- sicd_ew["CollectionInfo"] = sicd.CollectionInfo(
613
- sicd.CollectorName(collector_name),
614
- sicd.CoreName(core_name),
615
- sicd.CollectType("MONOSTATIC"),
616
- sicd.RadarMode(sicd.ModeType(radar_mode_type), sicd.ModeID(radar_mode_id)),
617
- sicd.Classification(classification),
618
- )
619
- sicd_ew["ImageCreation"] = sicd.ImageCreation(
620
- sicd.Application(creation_application),
621
- sicd.DateTime(_naive_to_sicd_str(creation_time)),
622
- )
623
- sicd_ew["ImageData"] = sicd.ImageData(
624
- sicd.PixelType(COSAR_PIXEL_TYPE),
625
- sicd.NumRows(str(num_rows)),
626
- sicd.NumCols(str(num_cols)),
627
- sicd.FirstRow(str(first_row)),
628
- sicd.FirstCol(str(first_col)),
629
- sicd.FullImage(sicd.NumRows(str(num_rows)), sicd.NumCols(str(num_cols))),
630
- sicd.SCPPixel(sicd.Row(str(scp_pixel[0])), sicd.Col(str(scp_pixel[1]))),
631
- )
632
-
633
- def make_xyz(arr):
634
- return [sicd.X(str(arr[0])), sicd.Y(str(arr[1])), sicd.Z(str(arr[2]))]
635
-
636
- def make_llh(arr):
637
- return [sicd.Lat(str(arr[0])), sicd.Lon(str(arr[1])), sicd.HAE(str(arr[2]))]
638
-
639
- # Will add ImageCorners later
640
- sicd_ew["GeoData"] = sicd.GeoData(
641
- sicd.EarthModel("WGS_84"),
642
- sicd.SCP(sicd.ECF(*make_xyz(scp_ecf)), sicd.LLH(*make_llh(scp_llh))),
643
- )
606
+ sicd_ew["CollectionInfo"] = {
607
+ "CollectorName": collector_name,
608
+ "CoreName": core_name,
609
+ "CollectType": "MONOSTATIC",
610
+ "RadarMode": {
611
+ "ModeType": radar_mode_type,
612
+ "ModeID": radar_mode_id,
613
+ },
614
+ "Classification": classification,
615
+ }
616
+ sicd_ew["ImageCreation"] = {
617
+ "Application": creation_application,
618
+ "DateTime": creation_time,
619
+ }
620
+ sicd_ew["ImageData"] = {
621
+ "PixelType": COSAR_PIXEL_TYPE,
622
+ "NumRows": num_rows,
623
+ "NumCols": num_cols,
624
+ "FirstRow": first_row,
625
+ "FirstCol": first_col,
626
+ "FullImage": {
627
+ "NumRows": num_rows,
628
+ "NumCols": num_cols,
629
+ },
630
+ "SCPPixel": scp_pixel,
631
+ }
632
+
633
+ sicd_ew["GeoData"] = {
634
+ "EarthModel": "WGS_84",
635
+ "SCP": {
636
+ "ECF": scp_ecf,
637
+ "LLH": scp_llh,
638
+ },
639
+ }
644
640
 
645
641
  dc_sgn = np.sign(-doppler_rate_poly[0, 0])
646
642
  col_deltakcoa_poly = (
@@ -665,44 +661,41 @@ def cosar_to_sicd(
665
661
  col_window_name = proc_param.findtext("./azimuthWindowID")
666
662
  col_window_coeff = float(proc_param.findtext("./azimuthWindowCoefficient"))
667
663
 
668
- sicd_ew["Grid"] = sicd.Grid(
669
- sicd.ImagePlane("SLANT"),
670
- sicd.Type("RGZERO"),
671
- sicd.TimeCOAPoly(),
672
- sicd.Row(
673
- sicd.UVectECF(*make_xyz(u_row)),
674
- sicd.SS(str(spacings[0])),
675
- sicd.ImpRespWid(str(row_wid)),
676
- sicd.Sgn("-1"),
677
- sicd.ImpRespBW(str(row_bw)),
678
- sicd.KCtr(str(center_frequency / (scipy.constants.speed_of_light / 2))),
679
- sicd.DeltaK1(str(-row_bw / 2)),
680
- sicd.DeltaK2(str(row_bw / 2)),
681
- sicd.DeltaKCOAPoly(),
682
- sicd.WgtType(
683
- sicd.WindowName(row_window_name),
684
- sicd.Parameter({"name": "COEFFICIENT"}, str(row_window_coeff)),
685
- ),
686
- ),
687
- sicd.Col(
688
- sicd.UVectECF(*make_xyz(u_col)),
689
- sicd.SS(str(spacings[1])),
690
- sicd.ImpRespWid(str(col_wid)),
691
- sicd.Sgn("-1"),
692
- sicd.ImpRespBW(str(col_bw)),
693
- sicd.KCtr("0"),
694
- sicd.DeltaK1(str(dk1)),
695
- sicd.DeltaK2(str(dk2)),
696
- sicd.DeltaKCOAPoly(),
697
- sicd.WgtType(
698
- sicd.WindowName(col_window_name),
699
- sicd.Parameter({"name": "COEFFICIENT"}, str(col_window_coeff)),
700
- ),
701
- ),
702
- )
703
- sicd_ew["Grid"]["TimeCOAPoly"] = time_coa_poly
704
- sicd_ew["Grid"]["Row"]["DeltaKCOAPoly"] = [[0]]
705
- sicd_ew["Grid"]["Col"]["DeltaKCOAPoly"] = col_deltakcoa_poly
664
+ sicd_ew["Grid"] = {
665
+ "ImagePlane": "SLANT",
666
+ "Type": "RGZERO",
667
+ "TimeCOAPoly": time_coa_poly,
668
+ "Row": {
669
+ "UVectECF": u_row,
670
+ "SS": spacings[0],
671
+ "ImpRespWid": row_wid,
672
+ "Sgn": -1,
673
+ "ImpRespBW": row_bw,
674
+ "KCtr": center_frequency / (scipy.constants.speed_of_light / 2),
675
+ "DeltaK1": -row_bw / 2,
676
+ "DeltaK2": row_bw / 2,
677
+ "DeltaKCOAPoly": [[0.0]],
678
+ "WgtType": {
679
+ "WindowName": row_window_name,
680
+ "Parameter": [("COEFFICIENT", str(row_window_coeff))],
681
+ },
682
+ },
683
+ "Col": {
684
+ "UVectECF": u_col,
685
+ "SS": spacings[1],
686
+ "ImpRespWid": col_wid,
687
+ "Sgn": -1,
688
+ "ImpRespBW": col_bw,
689
+ "KCtr": 0.0,
690
+ "DeltaK1": dk1,
691
+ "DeltaK2": dk2,
692
+ "DeltaKCOAPoly": col_deltakcoa_poly,
693
+ "WgtType": {
694
+ "WindowName": col_window_name,
695
+ "Parameter": [("COEFFICIENT", str(col_window_coeff))],
696
+ },
697
+ },
698
+ }
706
699
  rcs_row_sf = None
707
700
  rcs_col_sf = None
708
701
  if row_window_name == "Hamming":
@@ -720,84 +713,104 @@ def cosar_to_sicd(
720
713
  sicd_ew["Grid"]["Col"]["ImpRespWid"] = col_wid
721
714
  rcs_col_sf = 1 + np.var(wgts) / np.mean(wgts) ** 2
722
715
 
723
- sicd_ew["Timeline"] = sicd.Timeline(
724
- sicd.CollectStart(_naive_to_sicd_str(collection_start_time)),
725
- sicd.CollectDuration(str(collection_duration)),
726
- sicd.IPP(
727
- {"size": "1"},
728
- sicd.Set(
729
- {"index": "1"},
730
- sicd.TStart(str(0)),
731
- sicd.TEnd(str(num_pulses / prf)),
732
- sicd.IPPStart(str(0)),
733
- sicd.IPPEnd(str(num_pulses - 1)),
734
- sicd.IPPPoly(),
735
- ),
736
- ),
737
- )
738
- sicd_ew["Timeline"]["IPP"]["Set"][0]["IPPPoly"] = [0, prf]
716
+ sicd_ew["Timeline"] = {
717
+ "CollectStart": collection_start_time,
718
+ "CollectDuration": collection_duration,
719
+ "IPP": {
720
+ "@size": 1,
721
+ "Set": [
722
+ {
723
+ "@index": 1,
724
+ "TStart": 0,
725
+ "TEnd": num_pulses / prf,
726
+ "IPPStart": 0,
727
+ "IPPEnd": num_pulses - 1,
728
+ "IPPPoly": [0, prf],
729
+ }
730
+ ],
731
+ },
732
+ }
739
733
 
740
734
  sicd_ew["Position"]["ARPPoly"] = apc_poly
741
735
 
742
- rcv_channels = sicd.RcvChannels(
743
- {"size": str(len(tx_rcv_pols))},
744
- )
736
+ chan_parameters = []
745
737
  for ndx, tx_rcv_pol in enumerate(tx_rcv_pols):
746
- rcv_channels.append(
747
- sicd.ChanParameters(
748
- {"index": str(ndx + 1)}, sicd.TxRcvPolarization(tx_rcv_pol)
749
- )
738
+ chan_parameters.append(
739
+ {
740
+ "@index": ndx + 1,
741
+ "TxRcvPolarization": tx_rcv_pol,
742
+ }
750
743
  )
751
744
 
752
- sicd_ew["RadarCollection"] = sicd.RadarCollection(
753
- sicd.TxFrequency(sicd.Min(str(tx_freq_min)), sicd.Max(str(tx_freq_max))),
754
- sicd.Waveform(
755
- {"size": "1"},
756
- sicd.WFParameters(
757
- {"index": "1"},
758
- sicd.TxPulseLength(str(tx_pulse_length)),
759
- sicd.TxRFBandwidth(str(tx_rf_bw)),
760
- sicd.TxFreqStart(str(tx_freq_start)),
761
- sicd.TxFMRate(str(tx_fm_rate)),
762
- sicd.RcvWindowLength(str(rcv_window_length)),
763
- sicd.ADCSampleRate(str(adc_sample_rate)),
764
- ),
765
- ),
766
- sicd.TxPolarization(tx_polarization),
767
- rcv_channels,
768
- )
745
+ sicd_ew["RadarCollection"] = {
746
+ "TxFrequency": {
747
+ "Min": tx_freq_min,
748
+ "Max": tx_freq_max,
749
+ },
750
+ "Waveform": {
751
+ "@size": 1,
752
+ "WFParameters": [
753
+ {
754
+ "@index": 1,
755
+ "TxPulseLength": tx_pulse_length,
756
+ "TxRFBandwidth": tx_rf_bw,
757
+ "TxFreqStart": tx_freq_start,
758
+ "TxFMRate": tx_fm_rate,
759
+ "RcvWindowLength": rcv_window_length,
760
+ "ADCSampleRate": adc_sample_rate,
761
+ }
762
+ ],
763
+ },
764
+ "TxPolarization": tx_polarization,
765
+ "RcvChannels": {
766
+ "@size": len(tx_rcv_pols),
767
+ "ChanParameters": chan_parameters,
768
+ },
769
+ }
769
770
  if len(tx_polarizations) > 1:
770
771
  sicd_ew["RadarCollection"]["TxPolarization"] = "SEQUENCE"
771
- tx_sequence = sicd.TxSequence({"size": str(len(tx_polarizations))})
772
+ tx_steps = []
772
773
  for ndx, tx_pol in enumerate(tx_polarizations):
773
- tx_sequence.append(
774
- sicd.TxStep({"index": str(ndx + 1)}, sicd.TxPolarization(tx_pol))
774
+ tx_steps.append(
775
+ {
776
+ "@index": ndx + 1,
777
+ "TxPolarization": tx_pol,
778
+ }
775
779
  )
776
- rcv_channels.addprevious(tx_sequence)
780
+ sicd_ew["RadarCollection"]["TxSequence"] = {
781
+ "@size": len(tx_polarizations),
782
+ "TxStep": tx_steps,
783
+ }
777
784
 
778
785
  now = (
779
786
  datetime.datetime.now(datetime.timezone.utc)
780
787
  .isoformat(timespec="microseconds")
781
788
  .replace("+00:00", "Z")
782
789
  )
783
- sicd_ew["ImageFormation"] = sicd.ImageFormation(
784
- sicd.RcvChanProc(sicd.NumChanProc("1"), sicd.ChanIndex(str(chan_index))),
785
- sicd.TxRcvPolarizationProc(tx_rcv_polarization),
786
- sicd.TStartProc(str(0)),
787
- sicd.TEndProc(str(collection_duration)),
788
- sicd.TxFrequencyProc(
789
- sicd.MinProc(str(tx_freq_min)), sicd.MaxProc(str(tx_freq_max))
790
- ),
791
- sicd.ImageFormAlgo("RMA"),
792
- sicd.STBeamComp(st_beam_comp),
793
- sicd.ImageBeamComp("SV"),
794
- sicd.AzAutofocus("NO"),
795
- sicd.RgAutofocus("NO"),
796
- sicd.Processing(
797
- sicd.Type(f"sarkit-convert {__version__} @ {now}"),
798
- sicd.Applied("true"),
799
- ),
800
- )
790
+ sicd_ew["ImageFormation"] = {
791
+ "RcvChanProc": {
792
+ "NumChanProc": 1,
793
+ "ChanIndex": [chan_index],
794
+ },
795
+ "TxRcvPolarizationProc": tx_rcv_polarization,
796
+ "TStartProc": 0,
797
+ "TEndProc": collection_duration,
798
+ "TxFrequencyProc": {
799
+ "MinProc": tx_freq_min,
800
+ "MaxProc": tx_freq_max,
801
+ },
802
+ "ImageFormAlgo": "RMA",
803
+ "STBeamComp": st_beam_comp,
804
+ "ImageBeamComp": "SV",
805
+ "AzAutofocus": "NO",
806
+ "RgAutofocus": "NO",
807
+ "Processing": [
808
+ {
809
+ "Type": f"sarkit-convert {__version__} @ {now}",
810
+ "Applied": True,
811
+ },
812
+ ],
813
+ }
801
814
 
802
815
  sicd_ew["Antenna"]["TwoWay"]["XAxisPoly"] = ant_x_dir_poly
803
816
  sicd_ew["Antenna"]["TwoWay"]["YAxisPoly"] = ant_y_dir_poly
@@ -809,20 +822,17 @@ def cosar_to_sicd(
809
822
  dtype=float, shape=(1, 1)
810
823
  )
811
824
 
812
- sicd_ew["RMA"] = sicd.RMA(
813
- sicd.RMAlgoType("OMEGA_K"),
814
- sicd.ImageType("INCA"),
815
- sicd.INCA(
816
- sicd.TimeCAPoly(),
817
- sicd.R_CA_SCP(str(scp_rca)),
818
- sicd.FreqZero(str(center_frequency)),
819
- sicd.DRateSFPoly(),
820
- sicd.DopCentroidPoly(),
821
- ),
822
- )
823
- sicd_ew["RMA"]["INCA"]["TimeCAPoly"] = time_ca_poly
824
- sicd_ew["RMA"]["INCA"]["DRateSFPoly"] = drsf_poly
825
- sicd_ew["RMA"]["INCA"]["DopCentroidPoly"] = doppler_centroid_poly
825
+ sicd_ew["RMA"] = {
826
+ "RMAlgoType": "OMEGA_K",
827
+ "ImageType": "INCA",
828
+ "INCA": {
829
+ "TimeCAPoly": time_ca_poly,
830
+ "R_CA_SCP": scp_rca,
831
+ "FreqZero": center_frequency,
832
+ "DRateSFPoly": drsf_poly,
833
+ "DopCentroidPoly": doppler_centroid_poly,
834
+ },
835
+ }
826
836
 
827
837
  sicd_ew["SCPCOA"] = sksicd.compute_scp_coa(sicd_xml_obj.getroottree())
828
838
 
@@ -849,28 +859,19 @@ def cosar_to_sicd(
849
859
  1e-2,
850
860
  )
851
861
 
852
- radiometric = sicd.Radiometric(
853
- sicd.NoiseLevel(sicd.NoiseLevelType("ABSOLUTE"), sicd.NoisePoly()),
854
- sicd.SigmaZeroSFPoly(),
855
- sicd.BetaZeroSFPoly(),
856
- sicd.GammaZeroSFPoly(),
857
- )
858
- sksicd.Poly2dType().set_elem(
859
- radiometric.find("./{*}NoiseLevel/{*}NoisePoly"), noise_poly
860
- )
861
- sksicd.Poly2dType().set_elem(
862
- radiometric.find("./{*}SigmaZeroSFPoly"), sigmazero_poly
863
- )
864
- sksicd.Poly2dType().set_elem(radiometric.find("./{*}BetaZeroSFPoly"), betazero_poly)
865
- sksicd.Poly2dType().set_elem(
866
- radiometric.find("./{*}GammaZeroSFPoly"), gammazero_poly
867
- )
862
+ sicd_ew["Radiometric"] = {
863
+ "NoiseLevel": {
864
+ "NoiseLevelType": "ABSOLUTE",
865
+ "NoisePoly": noise_poly,
866
+ },
867
+ "SigmaZeroSFPoly": sigmazero_poly,
868
+ "BetaZeroSFPoly": betazero_poly,
869
+ "GammaZeroSFPoly": gammazero_poly,
870
+ }
871
+
868
872
  if rcs_row_sf and rcs_col_sf:
869
873
  rcssf_poly = betazero_poly * (rcs_row_sf * rcs_col_sf / (row_bw * col_bw))
870
- radiometric.find("./{*}SigmaZeroSFPoly").addprevious(sicd.RCSSFPoly())
871
- sksicd.Poly2dType().set_elem(radiometric.find("./{*}RCSSFPoly"), rcssf_poly)
872
-
873
- sicd_xml_obj.find("./{*}Antenna").addprevious(radiometric)
874
+ sicd_ew["Radiometric"]["RCSSFPoly"] = rcssf_poly
874
875
 
875
876
  # Add Geodata Corners
876
877
  sicd_xmltree = sicd_xml_obj.getroottree()
@@ -890,13 +891,12 @@ def cosar_to_sicd(
890
891
  sicd_ew["GeoData"]["ImageCorners"] = icp_llh[:, :2]
891
892
 
892
893
  # Add RNIIRS
893
- xml_helper = sksicd.XmlHelper(sicd_xmltree)
894
- inf_density, pred_rniirs = utils.get_rniirs_estimate(xml_helper)
894
+ inf_density, pred_rniirs = utils.get_rniirs_estimate(sicd_ew)
895
895
  sicd_ew["CollectionInfo"].add(
896
896
  "Parameter", ("INFORMATION_DENSITY", f"{inf_density:.2g}")
897
897
  )
898
898
  sicd_ew["CollectionInfo"].add(
899
- "Parameter", ("PREDICTED_RNIIRS", f"{pred_rniirs:.2g}")
899
+ "Parameter", ("PREDICTED_RNIIRS", f"{pred_rniirs:.1f}")
900
900
  )
901
901
 
902
902
  # Validate XML
@@ -961,7 +961,7 @@ def main(args=None):
961
961
  if not config.input_xml_file.is_file():
962
962
  raise ValueError(f"Input XML file {str(config.input_xml_file)} is not a file")
963
963
 
964
- tsx_xml = etree.parse(config.input_xml_file).getroot()
964
+ tsx_xml = lxml.etree.parse(config.input_xml_file).getroot()
965
965
 
966
966
  images = dict()
967
967
  img_ndx = 1
@@ -1,37 +1,40 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: sarkit-convert
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: Python library for converting SAR data to standard formats.
5
5
  Author-Email: Valkyrie Systems Corporation <info@govsco.com>
6
- License: MIT
6
+ License-Expression: MIT
7
+ License-File: LICENSE
7
8
  Classifier: Development Status :: 2 - Pre-Alpha
8
9
  Classifier: Intended Audience :: Science/Research
9
- Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Topic :: Scientific/Engineering
11
11
  Classifier: Programming Language :: Python
12
12
  Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.11
14
13
  Classifier: Programming Language :: Python :: 3.12
15
14
  Classifier: Programming Language :: Python :: 3.13
16
- Requires-Python: >=3.11
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Project-URL: Repository, https://github.com/ValkyrieSystems/sarkit-convert.git
17
+ Project-URL: Bug Tracker, https://github.com/ValkyrieSystems/sarkit-convert/issues
18
+ Project-URL: Changelog, https://github.com/ValkyrieSystems/sarkit-convert/blob/main/CHANGELOG.md
19
+ Requires-Python: >=3.12
17
20
  Requires-Dist: lxml>=5.1.0
18
- Requires-Dist: numpy>=1.26.3
19
- Requires-Dist: pyproj>=3.7.2
21
+ Requires-Dist: numpy>=2.0.0
22
+ Requires-Dist: pyproj>=3.6.1
20
23
  Requires-Dist: sarkit>=1.3.0
21
- Requires-Dist: scipy>=1.15.1
24
+ Requires-Dist: scipy>=1.13.0
22
25
  Provides-Extra: iceye
23
- Requires-Dist: h5py>=3.12.1; extra == "iceye"
26
+ Requires-Dist: h5py>=3.11.0; extra == "iceye"
24
27
  Requires-Dist: python-dateutil>=2.9.0; extra == "iceye"
25
28
  Provides-Extra: cosmo
26
29
  Requires-Dist: astropy>=6.0.0; extra == "cosmo"
27
- Requires-Dist: h5py>=3.12.1; extra == "cosmo"
30
+ Requires-Dist: h5py>=3.11.0; extra == "cosmo"
28
31
  Requires-Dist: python-dateutil>=2.9.0; extra == "cosmo"
29
- Requires-Dist: shapely>=2.0.2; extra == "cosmo"
32
+ Requires-Dist: shapely>=2.0.6; extra == "cosmo"
30
33
  Provides-Extra: terrasar
31
34
  Requires-Dist: python-dateutil>=2.9.0; extra == "terrasar"
32
35
  Provides-Extra: sentinel
33
36
  Requires-Dist: python-dateutil>=2.9.0; extra == "sentinel"
34
- Requires-Dist: tifffile>=2025.5.10; extra == "sentinel"
37
+ Requires-Dist: tifffile>=2024.7.2; extra == "sentinel"
35
38
  Provides-Extra: all
36
39
  Requires-Dist: sarkit-convert[iceye]; extra == "all"
37
40
  Requires-Dist: sarkit-convert[cosmo]; extra == "all"
@@ -43,6 +46,13 @@ Description-Content-Type: text/markdown
43
46
 
44
47
  <img src="https://raw.githubusercontent.com/ValkyrieSystems/sarkit/main/docs/source/_static/sarkit_logo.png" width=200>
45
48
 
49
+ [![PyPI - Version](https://img.shields.io/pypi/v/sarkit-convert)](https://pypi.org/project/sarkit-convert/)
50
+ ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/sarkit-convert)
51
+ [![PyPI - License](https://img.shields.io/pypi/l/sarkit-convert)](./LICENSE)
52
+ [![SPEC 0 — Minimum Supported Dependencies](https://img.shields.io/badge/SPEC-0-green?labelColor=%23004811&color=%235CA038)](https://scientific-python.org/specs/spec-0000/)
53
+ <br>
54
+ [![Tests](https://github.com/ValkyrieSystems/sarkit-convert/actions/workflows/test.yml/badge.svg)](https://github.com/ValkyrieSystems/sarkit-convert/actions/workflows/test.yml)
55
+
46
56
  </div>
47
57
 
48
58
  **sarkit-convert** is a Python library for converting SAR data to standard formats.
@@ -0,0 +1,14 @@
1
+ sarkit_convert-0.3.1.dist-info/METADATA,sha256=zBfO4aQX3Gznxx8GDk4POVag3pvkfJBkPY4kbKIdRa4,3047
2
+ sarkit_convert-0.3.1.dist-info/WHEEL,sha256=Wb0ASbVj8JvWHpOiIpPi7ucfIgJeCi__PzivviEAQFc,90
3
+ sarkit_convert-0.3.1.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
+ sarkit_convert-0.3.1.dist-info/licenses/LICENSE,sha256=H0HxqjXuxJwqg17L2F5jjbrWm5IV-R_FNLbzu-eJEc0,1086
5
+ sarkit_convert/__init__.py,sha256=l_h1XRjbcNc4Hg66LvcjKzjk4lVlwaFLbNizvQtysgo,295
6
+ sarkit_convert/_utils.py,sha256=mZlMqxXDR0we4hAabGpRHeGvVZLnoB6uvjYO-QiuIi0,9233
7
+ sarkit_convert/_version.py,sha256=2KwowXhmiT6-Bln7VPq9d9sRpAzJq9qLyclhp2KWmjA,21
8
+ sarkit_convert/cosmo.py,sha256=JUirYDfrYm4hUDa0ubyL4bOuvW18-MQKOCAADNpWgWU,34531
9
+ sarkit_convert/create_arp_poly.py,sha256=ApntYmMts8jZ7gSfDMDZ64DehvFUdXxIQf-XuBO41fQ,5987
10
+ sarkit_convert/iceye.py,sha256=F5bIh-knTRHHxGksJLOcdqn14PO9OQUlpCMJ7FqyJqQ,27115
11
+ sarkit_convert/sentinel.py,sha256=Ru1jVG5g4VLfNsy5o8uhoPdBvyi6jk8tH6XcE4recXU,60693
12
+ sarkit_convert/sidd_metadata.py,sha256=lVffYbkvGWZ6hQl_PcQfR8FEMcneCGsp5n6xR5ZvHIk,6927
13
+ sarkit_convert/terrasar.py,sha256=iFvZtspMLiPI59rWCqgoAyzBqTsmR0d-RbcxQkh5Lho,34794
14
+ sarkit_convert-0.3.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.4.6)
2
+ Generator: pdm-backend (2.4.7)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,14 +0,0 @@
1
- sarkit_convert-0.2.0.dist-info/METADATA,sha256=SiqX7I3vnXIuaZMPA7yXtV8PeKo2X1li5k98TozI0jM,2185
2
- sarkit_convert-0.2.0.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
3
- sarkit_convert-0.2.0.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
- sarkit_convert-0.2.0.dist-info/licenses/LICENSE,sha256=H0HxqjXuxJwqg17L2F5jjbrWm5IV-R_FNLbzu-eJEc0,1086
5
- sarkit_convert/__init__.py,sha256=l_h1XRjbcNc4Hg66LvcjKzjk4lVlwaFLbNizvQtysgo,295
6
- sarkit_convert/_utils.py,sha256=bzFGIBE870QAMfEhm5CYAP4PUlY0KM6V3paTng_rr_8,9407
7
- sarkit_convert/_version.py,sha256=clN3TnyYyt5T_wUJLVBmutS2kYLLBET4JFB2QXnRm2Q,21
8
- sarkit_convert/cosmo.py,sha256=ttrN0f_pU2PmH3LL0DojWCxxVDAcCm8j6kWB2w82BIU,36374
9
- sarkit_convert/create_arp_poly.py,sha256=dgbKYYKUarC7W1edbEeozy6O4Gg-u62LsV8v1mrC_hs,5983
10
- sarkit_convert/iceye.py,sha256=LmOqEo2_BW7noo2I9QJbPMLn51c1tAaItUBomA62gy0,31108
11
- sarkit_convert/sentinel.py,sha256=s7rrssfrJhLsV90HzKAzoxeYNXNKTru0qNvRNkEfoU8,63124
12
- sarkit_convert/sidd_metadata.py,sha256=lVffYbkvGWZ6hQl_PcQfR8FEMcneCGsp5n6xR5ZvHIk,6927
13
- sarkit_convert/terrasar.py,sha256=Rl7BfBt2ZTQ9sVlMWY-rgLp0RBoWwBT1PWymSCW8Xvk,36351
14
- sarkit_convert-0.2.0.dist-info/RECORD,,