AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-15001463

Jared Frazier's questions

Martin Hope
Jared
Asked: 2025-01-21 14:46:46 +0800 CST

Alterar membros de dados de tipo derivado em `SUBROUTINE` é permitido mesmo com INTENT(IN). Como proteger dados?

  • 5

A questão é exatamente o título: Fortran permite alterar membros de dados de tipo derivado SUBROUTINEmesmo com INTENT(IN), como proteger dados? Sou bem novo em Fortran e esse comportamento de permitir a mutação de membros de dados de um tipo derivado apesar do INTENT(IN)atributo no argumento fictício de tipo derivado é bem preocupante para mim. Existe uma maneira de capturar esse tipo de mutação insegura com o compilador? Por exemplo, gfortran -Wallnão parece fazer isso, mas talvez esse seja um problema comum o suficiente em bases de código legadas ou mesmo modernas para onde alguma detecção estática do problema esteja disponível de alguma forma?

Programa de exemplo:

! @file main.f90
!
! @purpose: Show data members of derived types are mutable in SUBROUTINE 
!
! @compile: gfortran -Wall main.f90
PROGRAM test
    IMPLICIT NONE

    INTEGER :: n_states = 1
    INTEGER :: len_state = 5 
    INTEGER :: i, j

    TYPE t_states 
        INTEGER, POINTER, CONTIGUOUS :: state(:) ! (len_state,)
    END TYPE t_states

    TYPE(t_states), ALLOCATABLE :: states(:) ! (n_states,)

    ALLOCATE(states(1:n_states)) 

    ! Populate allocated array of states
    DO i = 1, n_states 
        ALLOCATE(states(i)%state(len_state))
        DO j = 1, len_state 
            states(i)%state(j) = j
            PRINT *, states(i)%state(j)
        END DO
        PRINT *
    END DO
 
    CALL unsafe_mutation(states(1))

    ! Print state array after modification
    DO j = 1, len_state
        PRINT *, states(1)%state(j)
    END DO 

CONTAINS

    ! Arbitrary update of state data member even though INTENT(IN)!!!
    SUBROUTINE unsafe_mutation(p_states)
        TYPE(t_states), INTENT(in) :: p_states
        p_states%state(1) = -1 
    END SUBROUTINE

END PROGRAM test

Saída:

           1
           2
           3
           4
           5

          -1
           2
           3
           4
           5
fortran
  • 1 respostas
  • 36 Views
Martin Hope
Jared Frazier
Asked: 2025-01-17 21:10:17 +0800 CST

Herdando de muitas classes abstratas?

  • 5

Estou tentando aplicar o princípio DRY a classes de plotagem de brinquedo como um exercício intelectual para melhorar meu entendimento de POO (atualmente lendo Python Object Oriented programming ), mas intuitivamente parece que o uso de uma hierarquia de herança potencialmente cada vez mais profunda pode levar a uma base de código mais complicada (especialmente porque li que a composição parece ser favorecida em relação à herança, veja Composition over inheritance wiki ). Parece que uma biblioteca de brinquedo poderia potencialmente acabar com muitas classes abstratas como AbstractMonthlyMultiPanelPlote AbstractSeasonalPlotassim por diante para tipos de plotagem arbitrários acomodarem diferentes dados de entrada.

Existe uma maneira mais pythonic de lidar com o problema abaixo que talvez eu esteja esquecendo? Estou violando algum tipo de princípio de design que eu interpretei mal ou talvez tenha simplesmente perdido completamente?

from abc import abstractmethod, ABC
from numpy import ndarray
from typing import List, Tuple
import matplotlib.pyplot as plt 

class AbstractPlot(ABC)
    @abstractmethod
    def plot(self): 
        raise NotImplementedError

class AbstractMonthlyPlot(AbstractPlot):
    @abstractmethod
    def plot_for_month(ax, data):
        raise NotImplementedError

    @property
    def n_months(self): 
        """number of months in a year"""
        return 12 

    def plot(self, month_to_data: List[Tuple[ndarray]]):
        fig, axs = plt.subplots(self.n_months, 1)
        for month in range(self.n_months):
            self._plot_for_month(ax=axs[month], data=month_to_data[month])

class Contour(AbstractMonthlyPlot):
    def _plot_for_month(self, ax, data):
        ax.contourf(*data)

class Linear(AbstractMonthlyPlot):
    def _plot_for_month(self, ax, data):
        ax.plot(*data)
python
  • 1 respostas
  • 47 Views
Martin Hope
Jared Frazier
Asked: 2024-11-14 21:05:18 +0800 CST

Imprimindo o corpo da função bash e incluindo os comentários no corpo

  • 6

Estou usando shdoc para gerar arquivos markdown para minhas funções bash; no entanto, gostaria de anexar também o corpo da função bash associada , bem como os comentários nesse corpo, ao arquivo markdown gerado por shdoc. Como posso imprimir um corpo de função bash e, ao mesmo tempo, incluir os comentários no corpo da função?

Como um exemplo simples, considere que todos os meus arquivos bash estão contidos em um diretório chamado srce todos esses arquivos terminam em .sh. A função abaixo no arquivosrc/foo.sh

# @description A function that does something
foo() {
  # oh wow, a comment
  echo "something cool"
}

Agora, se eu quiser obter o corpo da função sem comentários, posso fazer isso facilmente, declare -fconforme mostrado abaixo, em um arquivo chamado src/doc.sh:

# assuming you are in the `src` dir and both .sh files are executable
. foo.sh
foo_doc=$(declare -f foo)
echo "$foo_doc"

Mas o problema é foo_docque só tem a função body, já queecho "$foo_doc"

foo () 
{ 
    echo "something cool"
}

e nenhum comentário. Então, se eu fosse anexar essas informações a um markdown gerado por shdoc, não seria uma documentação ideal do código-fonte.

Acho que uma abordagem seria usar sedpara determinar as linhas correspondentes à função de interesse (minhas funções bash são "delimitadas" por {e }, embora, pelos comentários, eu entenda que há outras maneiras de declarar funções bash válidas), então eu poderia usar sedpara obter apenas essas linhas, como feito aqui .

bash
  • 2 respostas
  • 73 Views
Martin Hope
Jared Frazier
Asked: 2023-11-05 20:53:56 +0800 CST

Somas multi-índices D-dimensionais

  • 6

Eu entendo como um somatório em 1, 2 e 3 dimensões poderia ser definido usando 1, 2 e 3 forloops respectivamente, mas como você poderia fazer uma função geral que soma um multi-índice como o definido abaixo?

insira a descrição da imagem aqui

Suponha que uapenas amostras de um número inteiro aleatório por simplicidade, ou seja,

from random import randint
def u(a=0, b=100):
    return randint(a, b)

Por exemplo, digamos o vetor multi-índice js = [0, 0, 0]e o vetor de limite superior Ms = [5, 5, 5], isso implicaria que d = 3(ou seja, multi-índice tridimensional), e a soma poderia ser escrita simplesmente como abaixo

mysum = 0
for j1 in range(Ms[0]):
    for j2 in range(Ms[1]):
        for j3 in range(Ms[2]):
            mysum += u()

mas qual seria uma maneira geral de escrever isso para ddimensões (como mostrado na imagem)?

Editar: eu sei que neste exemplo trivial, alguém poderia simplesmente fazer algo como

from numpy import prod
M = prod(Ms)
mysum = sum([u() for i in range(M)]) 

mas, novamente, estou interessado especificamente em uma maneira geral de fazer loops daninhados for, já que a função upode ser mais complexa e depender dos índices j_1, j_2, ..., j_d.

python
  • 2 respostas
  • 53 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve